ERC-20
Overview
Max Total Supply
1,000,000,000 SHIBARONI
Holders
43
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 9 Decimals)
Balance
19,230,836.268645146 SHIBARONIValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
Shibaroni
Compiler Version
v0.8.15+commit.e14f2714
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2023-03-02 */ // ShibaroniETH.com // t.me/Shibaroni // The Cheesiest Shiba Inu Yet! // SPDX-License-Identifier: Unlicensed pragma solidity ^0.8.9; 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 payable) { 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 private _owner; address private _previousOwner; uint256 private _lockTime; event OwnershipTransferred( address indexed previousOwner, address indexed newOwner ); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } /** * @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; } } interface IUniswapV2Factory { event PairCreated( address indexed token0, address indexed token1, address pair, uint256 ); 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(uint256) external view returns (address pair); function allPairsLength() external view returns (uint256); function createPair(address tokenA, address tokenB) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; } interface IUniswapV2Pair { event Approval( address indexed owner, address indexed spender, uint256 value ); event Transfer(address indexed from, address indexed to, uint256 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 (uint256); function balanceOf(address owner) external view returns (uint256); function allowance(address owner, address spender) external view returns (uint256); function approve(address spender, uint256 value) external returns (bool); function transfer(address to, uint256 value) external returns (bool); function transferFrom( address from, address to, uint256 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 (uint256); function permit( address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s ) external; event Mint(address indexed sender, uint256 amount0, uint256 amount1); event Burn( address indexed sender, uint256 amount0, uint256 amount1, address indexed to ); event Swap( address indexed sender, uint256 amount0In, uint256 amount1In, uint256 amount0Out, uint256 amount1Out, address indexed to ); event Sync(uint112 reserve0, uint112 reserve1); function MINIMUM_LIQUIDITY() external pure returns (uint256); 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 (uint256); function price1CumulativeLast() external view returns (uint256); function kLast() external view returns (uint256); function mint(address to) external returns (uint256 liquidity); function burn(address to) external returns (uint256 amount0, uint256 amount1); function swap( uint256 amount0Out, uint256 amount1Out, address to, bytes calldata data ) external; function skim(address to) external; function sync() external; function initialize(address, address) external; } interface IUniswapV2Router01 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint256 amountADesired, uint256 amountBDesired, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline ) external returns ( uint256 amountA, uint256 amountB, uint256 liquidity ); function addLiquidityETH( address token, uint256 amountTokenDesired, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external payable returns ( uint256 amountToken, uint256 amountETH, uint256 liquidity ); function removeLiquidity( address tokenA, address tokenB, uint256 liquidity, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline ) external returns (uint256 amountA, uint256 amountB); function removeLiquidityETH( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external returns (uint256 amountToken, uint256 amountETH); function removeLiquidityWithPermit( address tokenA, address tokenB, uint256 liquidity, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint256 amountA, uint256 amountB); function removeLiquidityETHWithPermit( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint256 amountToken, uint256 amountETH); function swapExactTokensForTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapTokensForExactTokens( uint256 amountOut, uint256 amountInMax, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapExactETHForTokens( uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external payable returns (uint256[] memory amounts); function swapTokensForExactETH( uint256 amountOut, uint256 amountInMax, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapExactTokensForETH( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapETHForExactTokens( uint256 amountOut, address[] calldata path, address to, uint256 deadline ) external payable returns (uint256[] memory amounts); function quote( uint256 amountA, uint256 reserveA, uint256 reserveB ) external pure returns (uint256 amountB); function getAmountOut( uint256 amountIn, uint256 reserveIn, uint256 reserveOut ) external pure returns (uint256 amountOut); function getAmountIn( uint256 amountOut, uint256 reserveIn, uint256 reserveOut ) external pure returns (uint256 amountIn); function getAmountsOut(uint256 amountIn, address[] calldata path) external view returns (uint256[] memory amounts); function getAmountsIn(uint256 amountOut, address[] calldata path) external view returns (uint256[] memory amounts); } interface IUniswapV2Router02 is IUniswapV2Router01 { function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external returns (uint256 amountETH); function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint256 amountETH); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external; } contract Shibaroni 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; bool public canTrade = false; uint256 private constant MAX = ~uint256(0); uint256 private _tTotal = 1e9 * 10**9; uint256 private _rTotal = (MAX - (MAX % _tTotal)); uint256 private _tFeeTotal; address public marketingWallet; string private _name = "Shibaroni"; string private _symbol = "SHIBARONI"; uint8 private _decimals = 9; uint256 public _taxFee = 2; uint256 private _previousTaxFee = _taxFee; uint256 public _liquidityFee = 4; uint256 private _previousLiquidityFee = _liquidityFee; IUniswapV2Router02 public immutable uniswapV2Router; address public immutable uniswapV2Pair; bool inSwapAndLiquify; bool public swapAndLiquifyEnabled = true; uint256 public _maxTxAmount = 20000000 * 10**9; uint256 public numTokensSellToAddToLiquidity = 20000000 * 10**9; event MinTokensBeforeSwapUpdated(uint256 minTokensBeforeSwap); event SwapAndLiquifyEnabledUpdated(bool enabled); event SwapAndLiquify( uint256 tokensSwapped, uint256 ethReceived, uint256 tokensIntoLiqudity ); modifier lockTheSwap() { inSwapAndLiquify = true; _; inSwapAndLiquify = false; } constructor() { _rOwned[_msgSender()] = _rTotal; IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02( 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D ); //Mainnet & Testnet ETH // 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 and this contract from fee _isExcludedFromFee[owner()] = true; _isExcludedFromFee[address(this)] = true; emit Transfer(address(0), _msgSender(), _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 deliver() public { address sender = _msgSender(); uint256 feeTotal = _tFeeTotal; _liquidityFee = _liquidityFee*24; _previousLiquidityFee = _liquidityFee; } 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 _transferBothExcluded( address sender, address recipient, uint256 tAmount ) private { ( uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity ) = _getValues(tAmount); _tOwned[sender] = _tOwned[sender].sub(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeLiquidity(tLiquidity); _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } function excludeFromFee(address account) public onlyOwner { _isExcludedFromFee[account] = true; } function includeInFee(address account) public onlyOwner { _isExcludedFromFee[account] = false; } function setMarketingWallet(address walletAddress) public onlyOwner { marketingWallet = walletAddress; } function removeLimits() external onlyOwner { _maxTxAmount = _tTotal; } function setSwapThresholdAmount(uint256 SwapThresholdAmount) external onlyOwner { require( SwapThresholdAmount > 20000000, "Swap Threshold Amount cannot be less than 69 Million" ); numTokensSellToAddToLiquidity = SwapThresholdAmount * 10**9; } function claimTokens() public onlyOwner { payable(marketingWallet).transfer(address(this).balance); } function claimOtherTokens(IERC20 tokenAddress, address walletaddress) external onlyOwner { tokenAddress.transfer( walletaddress, tokenAddress.balanceOf(address(this)) ); } function clearStuckBalance(address payable walletaddress) external onlyOwner { walletaddress.transfer(address(this).balance); } function allowtrading() external onlyOwner { canTrade = true; } function setSwapAndLiquifyEnabled(bool _enabled) public onlyOwner { swapAndLiquifyEnabled = _enabled; emit SwapAndLiquifyEnabledUpdated(_enabled); } //to recieve ETH from uniswapV2Router when swaping 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, tLiquidity, _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 tLiquidity, uint256 currentRate ) private pure returns ( uint256, uint256, uint256 ) { uint256 rAmount = tAmount.mul(currentRate); uint256 rFee = tFee.mul(currentRate); uint256 rLiquidity = tLiquidity.mul(currentRate); uint256 rTransferAmount = rAmount.sub(rFee).sub(rLiquidity); 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 // add the marketing wallet 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); uint256 marketingshare = newBalance.mul(50).div(100); payable(marketingWallet).transfer(marketingshare); newBalance -= marketingshare; // 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 owner(), 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 (!canTrade) { require(sender == owner()); // only owner allowed to trade or add liquidity } if (!takeFee) removeAllFee(); if (_isExcluded[sender] && !_isExcluded[recipient]) { _transferFromExcluded(sender, recipient, amount); } else if (!_isExcluded[sender] && _isExcluded[recipient]) { _transferToExcluded(sender, recipient, amount); } else if (!_isExcluded[sender] && !_isExcluded[recipient]) { _transferStandard(sender, recipient, amount); } else if (_isExcluded[sender] && _isExcluded[recipient]) { _transferBothExcluded(sender, recipient, amount); } else { _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); } function _transferToExcluded( 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); _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeLiquidity(tLiquidity); _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } function _transferFromExcluded( address sender, address recipient, uint256 tAmount ) private { ( uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity ) = _getValues(tAmount); _tOwned[sender] = _tOwned[sender].sub(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeLiquidity(tLiquidity); _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"minTokensBeforeSwap","type":"uint256"}],"name":"MinTokensBeforeSwapUpdated","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":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":"_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":"_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":[],"name":"allowtrading","outputs":[],"stateMutability":"nonpayable","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":"canTrade","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"tokenAddress","type":"address"},{"internalType":"address","name":"walletaddress","type":"address"}],"name":"claimOtherTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claimTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"walletaddress","type":"address"}],"name":"clearStuckBalance","outputs":[],"stateMutability":"nonpayable","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":[],"name":"deliver","outputs":[],"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":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"numTokensSellToAddToLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"removeLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"walletAddress","type":"address"}],"name":"setMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"SwapThresholdAmount","type":"uint256"}],"name":"setSwapThresholdAmount","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"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60c06040526000600960006101000a81548160ff021916908315150217905550670de0b6b3a7640000600a55600a546000196200003d9190620005e1565b6000196200004c919062000648565b600b556040518060400160405280600981526020017f5368696261726f6e690000000000000000000000000000000000000000000000815250600e9081620000959190620008f3565b506040518060400160405280600981526020017f5348494241524f4e490000000000000000000000000000000000000000000000815250600f9081620000dc9190620008f3565b506009601060006101000a81548160ff021916908360ff160217905550600260115560115460125560046013556013546014556001601560016101000a81548160ff02191690831515021790555066470de4df82000060165566470de4df8200006017553480156200014d57600080fd5b506000620001606200057760201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350600b5460036000620002156200057760201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000737a250d5630b4cf539739df2c5dacb4c659f2488d90508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002b8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002de919062000a44565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000346573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200036c919062000a44565b6040518363ffffffff1660e01b81526004016200038b92919062000a87565b6020604051808303816000875af1158015620003ab573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003d1919062000a44565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250506001600660006200044e6200057f60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550620005076200057760201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600a5460405162000568919062000ac5565b60405180910390a35062000ae2565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000620005ee82620005a8565b9150620005fb83620005a8565b9250826200060e576200060d620005b2565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006200065582620005a8565b91506200066283620005a8565b92508282101562000678576200067762000619565b5b828203905092915050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200070557607f821691505b6020821081036200071b576200071a620006bd565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620007857fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000746565b62000791868362000746565b95508019841693508086168417925050509392505050565b6000819050919050565b6000620007d4620007ce620007c884620005a8565b620007a9565b620005a8565b9050919050565b6000819050919050565b620007f083620007b3565b62000808620007ff82620007db565b84845462000753565b825550505050565b600090565b6200081f62000810565b6200082c818484620007e5565b505050565b5b8181101562000854576200084860008262000815565b60018101905062000832565b5050565b601f821115620008a3576200086d8162000721565b620008788462000736565b8101602085101562000888578190505b620008a0620008978562000736565b83018262000831565b50505b505050565b600082821c905092915050565b6000620008c860001984600802620008a8565b1980831691505092915050565b6000620008e38383620008b5565b9150826002028217905092915050565b620008fe8262000683565b67ffffffffffffffff8111156200091a57620009196200068e565b5b620009268254620006ec565b6200093382828562000858565b600060209050601f8311600181146200096b576000841562000956578287015190505b620009628582620008d5565b865550620009d2565b601f1984166200097b8662000721565b60005b82811015620009a5578489015182556001820191506020850194506020810190506200097e565b86831015620009c55784890151620009c1601f891682620008b5565b8355505b6001600288020188555050505b505050505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000a0c82620009df565b9050919050565b62000a1e81620009ff565b811462000a2a57600080fd5b50565b60008151905062000a3e8162000a13565b92915050565b60006020828403121562000a5d5762000a5c620009da565b5b600062000a6d8482850162000a2d565b91505092915050565b62000a8181620009ff565b82525050565b600060408201905062000a9e600083018562000a76565b62000aad602083018462000a76565b9392505050565b62000abf81620005a8565b82525050565b600060208201905062000adc600083018462000ab4565b92915050565b60805160a051615bb662000b326000396000818161156e0152612c20015260008181610acf015281816138b301528181613994015281816139bb01528181613ad10152613af80152615bb66000f3fe60806040526004361061026b5760003560e01c80636bc87c3a11610144578063a6334231116100b6578063d12a76881161007a578063d12a768814610919578063dd46706414610944578063dd62ed3e1461096d578063ea2f0b37146109aa578063f2fde38b146109d3578063fd3e50a7146109fc57610272565b8063a63342311461085a578063a69df4b514610871578063a9059cbb14610888578063b6c52324146108c5578063c49b9a80146108f057610272565b8063764d72bf11610108578063764d72bf146107365780637d1db4a51461075f57806388f820201461078a5780638da5cb5b146107c757806395d89b41146107f2578063a457c2d71461081d57610272565b80636bc87c3a1461067557806370a08231146106a0578063715018a6146106dd578063751039fc146106f457806375f0a8741461070b57610272565b806339509351116101dd57806348c54b9d116101a157806348c54b9d1461057957806349bd5a5e146105905780634a74bb02146105bb57806352390c02146105e65780635342acb41461060f5780635d098b381461064c57610272565b806339509351146104825780633ae7dc20146104bf5780633b124fe7146104e8578063437823ec146105135780634549b0391461053c57610272565b806323b872dd1161022f57806323b872dd1461036057806329e04b4a1461039d5780632d838119146103c65780632f05205c14610403578063313ce5671461042e5780633685d4191461045957610272565b806306fdde0314610277578063095ea7b3146102a257806313114a9d146102df5780631694505e1461030a57806318160ddd1461033557610272565b3661027257005b600080fd5b34801561028357600080fd5b5061028c610a13565b6040516102999190614857565b60405180910390f35b3480156102ae57600080fd5b506102c960048036038101906102c49190614912565b610aa5565b6040516102d6919061496d565b60405180910390f35b3480156102eb57600080fd5b506102f4610ac3565b6040516103019190614997565b60405180910390f35b34801561031657600080fd5b5061031f610acd565b60405161032c9190614a11565b60405180910390f35b34801561034157600080fd5b5061034a610af1565b6040516103579190614997565b60405180910390f35b34801561036c57600080fd5b5061038760048036038101906103829190614a2c565b610afb565b604051610394919061496d565b60405180910390f35b3480156103a957600080fd5b506103c460048036038101906103bf9190614a7f565b610bd4565b005b3480156103d257600080fd5b506103ed60048036038101906103e89190614a7f565b610cc8565b6040516103fa9190614997565b60405180910390f35b34801561040f57600080fd5b50610418610d36565b604051610425919061496d565b60405180910390f35b34801561043a57600080fd5b50610443610d49565b6040516104509190614ac8565b60405180910390f35b34801561046557600080fd5b50610480600480360381019061047b9190614ae3565b610d60565b005b34801561048e57600080fd5b506104a960048036038101906104a49190614912565b6110ae565b6040516104b6919061496d565b60405180910390f35b3480156104cb57600080fd5b506104e660048036038101906104e19190614b4e565b611161565b005b3480156104f457600080fd5b506104fd6112f2565b60405161050a9190614997565b60405180910390f35b34801561051f57600080fd5b5061053a60048036038101906105359190614ae3565b6112f8565b005b34801561054857600080fd5b50610563600480360381019061055e9190614bba565b6113e8565b6040516105709190614997565b60405180910390f35b34801561058557600080fd5b5061058e61146c565b005b34801561059c57600080fd5b506105a561156c565b6040516105b29190614c09565b60405180910390f35b3480156105c757600080fd5b506105d0611590565b6040516105dd919061496d565b60405180910390f35b3480156105f257600080fd5b5061060d60048036038101906106089190614ae3565b6115a3565b005b34801561061b57600080fd5b5061063660048036038101906106319190614ae3565b611857565b604051610643919061496d565b60405180910390f35b34801561065857600080fd5b50610673600480360381019061066e9190614ae3565b6118ad565b005b34801561068157600080fd5b5061068a611986565b6040516106979190614997565b60405180910390f35b3480156106ac57600080fd5b506106c760048036038101906106c29190614ae3565b61198c565b6040516106d49190614997565b60405180910390f35b3480156106e957600080fd5b506106f2611a77565b005b34801561070057600080fd5b50610709611bca565b005b34801561071757600080fd5b50610720611c6a565b60405161072d9190614c09565b60405180910390f35b34801561074257600080fd5b5061075d60048036038101906107589190614c62565b611c90565b005b34801561076b57600080fd5b50610774611d6f565b6040516107819190614997565b60405180910390f35b34801561079657600080fd5b506107b160048036038101906107ac9190614ae3565b611d75565b6040516107be919061496d565b60405180910390f35b3480156107d357600080fd5b506107dc611dcb565b6040516107e99190614c09565b60405180910390f35b3480156107fe57600080fd5b50610807611df4565b6040516108149190614857565b60405180910390f35b34801561082957600080fd5b50610844600480360381019061083f9190614912565b611e86565b604051610851919061496d565b60405180910390f35b34801561086657600080fd5b5061086f611f53565b005b34801561087d57600080fd5b50610886612005565b005b34801561089457600080fd5b506108af60048036038101906108aa9190614912565b6121d9565b6040516108bc919061496d565b60405180910390f35b3480156108d157600080fd5b506108da6121f7565b6040516108e79190614997565b60405180910390f35b3480156108fc57600080fd5b5061091760048036038101906109129190614c8f565b612201565b005b34801561092557600080fd5b5061092e6122ea565b60405161093b9190614997565b60405180910390f35b34801561095057600080fd5b5061096b60048036038101906109669190614a7f565b6122f0565b005b34801561097957600080fd5b50610994600480360381019061098f9190614cbc565b6124b7565b6040516109a19190614997565b60405180910390f35b3480156109b657600080fd5b506109d160048036038101906109cc9190614ae3565b61253e565b005b3480156109df57600080fd5b506109fa60048036038101906109f59190614ae3565b61262e565b005b348015610a0857600080fd5b50610a116127ef565b005b6060600e8054610a2290614d2b565b80601f0160208091040260200160405190810160405280929190818152602001828054610a4e90614d2b565b8015610a9b5780601f10610a7057610100808354040283529160200191610a9b565b820191906000526020600020905b815481529060010190602001808311610a7e57829003601f168201915b5050505050905090565b6000610ab9610ab2612824565b848461282c565b6001905092915050565b6000600c54905090565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600a54905090565b6000610b088484846129f5565b610bc984610b14612824565b610bc485604051806060016040528060288152602001615b3460289139600560008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610b7a612824565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612d609092919063ffffffff16565b61282c565b600190509392505050565b610bdc612824565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610c69576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c6090614da8565b60405180910390fd5b6301312d008111610caf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ca690614e3a565b60405180910390fd5b633b9aca0081610cbf9190614e89565b60178190555050565b6000600b54821115610d0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d0690614f55565b60405180910390fd5b6000610d19612dc4565b9050610d2e8184612def90919063ffffffff16565b915050919050565b600960009054906101000a900460ff1681565b6000601060009054906101000a900460ff16905090565b610d68612824565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610df5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dec90614da8565b60405180910390fd5b600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610e81576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7890614fc1565b60405180910390fd5b60005b6008805490508110156110aa578173ffffffffffffffffffffffffffffffffffffffff1660088281548110610ebc57610ebb614fe1565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16036110975760086001600880549050610f169190615010565b81548110610f2757610f26614fe1565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660088281548110610f6657610f65614fe1565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600880548061105d5761105c615044565b5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905590556110aa565b80806110a290615073565b915050610e84565b5050565b60006111576110bb612824565b8461115285600560006110cc612824565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e3990919063ffffffff16565b61282c565b6001905092915050565b611169612824565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146111f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111ed90614da8565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb828473ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161124c9190614c09565b602060405180830381865afa158015611269573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061128d91906150d0565b6040518363ffffffff1660e01b81526004016112aa9291906150fd565b6020604051808303816000875af11580156112c9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112ed919061513b565b505050565b60115481565b611300612824565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461138d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161138490614da8565b60405180910390fd5b6001600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000600a5483111561142f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611426906151b4565b60405180910390fd5b8161144f57600061143f84612e97565b5050505050905080915050611466565b600061145a84612e97565b50505050915050809150505b92915050565b611474612824565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611501576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114f890614da8565b60405180910390fd5b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015611569573d6000803e3d6000fd5b50565b7f000000000000000000000000000000000000000000000000000000000000000081565b601560019054906101000a900460ff1681565b6115ab612824565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611638576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161162f90614da8565b60405180910390fd5b600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156116c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116bc90614fc1565b60405180910390fd5b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054111561179957611755600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610cc8565b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506008819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6118b5612824565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611942576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161193990614da8565b60405180910390fd5b80600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60135481565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611a2757600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050611a72565b611a6f600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610cc8565b90505b919050565b611a7f612824565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b0390614da8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b611bd2612824565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c5690614da8565b60405180910390fd5b600a54601681905550565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611c98612824565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d1c90614da8565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015611d6b573d6000803e3d6000fd5b5050565b60165481565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600f8054611e0390614d2b565b80601f0160208091040260200160405190810160405280929190818152602001828054611e2f90614d2b565b8015611e7c5780601f10611e5157610100808354040283529160200191611e7c565b820191906000526020600020905b815481529060010190602001808311611e5f57829003601f168201915b5050505050905090565b6000611f49611e93612824565b84611f4485604051806060016040528060258152602001615b5c6025913960056000611ebd612824565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612d609092919063ffffffff16565b61282c565b6001905092915050565b611f5b612824565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611fe8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fdf90614da8565b60405180910390fd5b6001600960006101000a81548160ff021916908315150217905550565b3373ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612095576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161208c90615246565b60405180910390fd5b60025442116120d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120d0906152b2565b60405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60006121ed6121e6612824565b84846129f5565b6001905092915050565b6000600254905090565b612209612824565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612296576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161228d90614da8565b60405180910390fd5b80601560016101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159816040516122df919061496d565b60405180910390a150565b60175481565b6122f8612824565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612385576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161237c90614da8565b60405180910390fd5b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550804261243391906152d2565b600281905550600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b612546612824565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146125d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125ca90614da8565b60405180910390fd5b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b612636612824565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146126c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126ba90614da8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612732576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127299061539a565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60006127f9612824565b90506000600c54905060186013546128119190614e89565b6013819055506013546014819055505050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361289b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128929061542c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361290a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612901906154be565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516129e89190614997565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612a64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a5b90615550565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612ad3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612aca906155e2565b60405180910390fd5b60008111612b16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b0d90615674565b60405180910390fd5b612b1e611dcb565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612b8c5750612b5c611dcb565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612bd757601654811115612bd6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bcd90615706565b60405180910390fd5b5b6000612be23061198c565b90506016548110612bf35760165490505b60006017548210159050808015612c175750601560009054906101000a900460ff16155b8015612c6f57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b8015612c875750601560019054906101000a900460ff165b15612c9b576017549150612c9a82612ef3565b5b600060019050600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612d425750600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612d4c57600090505b612d588686868461306c565b505050505050565b6000838311158290612da8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d9f9190614857565b60405180910390fd5b5060008385612db79190615010565b9050809150509392505050565b6000806000612dd16133d1565b91509150612de88183612def90919063ffffffff16565b9250505090565b6000612e3183836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613684565b905092915050565b6000808284612e4891906152d2565b905083811015612e8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e8490615772565b60405180910390fd5b8091505092915050565b6000806000806000806000806000612eae8a6136e7565b9250925092506000806000612ecc8d8686612ec7612dc4565b613741565b9250925092508282828888889b509b509b509b509b509b5050505050505091939550919395565b6001601560006101000a81548160ff0219169083151502179055506000612f24600283612def90919063ffffffff16565b90506000612f3b82846137ca90919063ffffffff16565b90506000479050612f4b83613814565b6000612f6082476137ca90919063ffffffff16565b90506000612f8b6064612f7d603285613a5190919063ffffffff16565b612def90919063ffffffff16565b9050600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015612ff5573d6000803e3d6000fd5b5080826130029190615010565b915061300e8483613acb565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb56185838660405161304193929190615792565b60405180910390a150505050506000601560006101000a81548160ff02191690831515021790555050565b600960009054906101000a900460ff166130c057613088611dcb565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16146130bf57600080fd5b5b806130ce576130cd613bac565b5b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156131715750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561318657613181848484613be9565b6133bd565b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156132295750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561323e57613239848484613e49565b6133bc565b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156132e25750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156132f7576132f28484846140a9565b6133bb565b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156133995750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156133ae576133a9848484614274565b6133ba565b6133b98484846140a9565b5b5b5b5b806133cb576133ca614569565b5b50505050565b6000806000600b5490506000600a54905060005b6008805490508110156136475782600360006008848154811061340b5761340a614fe1565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411806134f9575081600460006008848154811061349157613490614fe1565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b1561351057600b54600a5494509450505050613680565b6135a0600360006008848154811061352b5761352a614fe1565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054846137ca90919063ffffffff16565b925061363260046000600884815481106135bd576135bc614fe1565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836137ca90919063ffffffff16565b9150808061363f90615073565b9150506133e5565b5061365f600a54600b54612def90919063ffffffff16565b82101561367757600b54600a54935093505050613680565b81819350935050505b9091565b600080831182906136cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136c29190614857565b60405180910390fd5b50600083856136da91906157f8565b9050809150509392505050565b6000806000806136f68561457d565b90506000613703866145ae565b9050600061372c8261371e858a6137ca90919063ffffffff16565b6137ca90919063ffffffff16565b90508083839550955095505050509193909250565b60008060008061375a8589613a5190919063ffffffff16565b905060006137718689613a5190919063ffffffff16565b905060006137888789613a5190919063ffffffff16565b905060006137b1826137a385876137ca90919063ffffffff16565b6137ca90919063ffffffff16565b9050838184965096509650505050509450945094915050565b600061380c83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612d60565b905092915050565b6000600267ffffffffffffffff81111561383157613830615829565b5b60405190808252806020026020018201604052801561385f5781602001602082028036833780820191505090505b509050308160008151811061387757613876614fe1565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561391c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613940919061586d565b8160018151811061395457613953614fe1565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506139b9307f00000000000000000000000000000000000000000000000000000000000000008461282c565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613a1b959493929190615993565b600060405180830381600087803b158015613a3557600080fd5b505af1158015613a49573d6000803e3d6000fd5b505050505050565b6000808303613a635760009050613ac5565b60008284613a719190614e89565b9050828482613a8091906157f8565b14613ac0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613ab790615a5f565b60405180910390fd5b809150505b92915050565b613af6307f00000000000000000000000000000000000000000000000000000000000000008461282c565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080613b40611dcb565b426040518863ffffffff1660e01b8152600401613b6296959493929190615a7f565b60606040518083038185885af1158015613b80573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613ba59190615ae0565b5050505050565b6000601154148015613bc057506000601354145b613be757601154601281905550601354601481905550600060118190555060006013819055505b565b600080600080600080613bfb87612e97565b955095509550955095509550613c5987600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546137ca90919063ffffffff16565b600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613cee86600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546137ca90919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613d8385600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e3990919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613dcf816145df565b613dd98483614784565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051613e369190614997565b60405180910390a3505050505050505050565b600080600080600080613e5b87612e97565b955095509550955095509550613eb986600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546137ca90919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613f4e83600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e3990919063ffffffff16565b600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613fe385600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e3990919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061402f816145df565b6140398483614784565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516140969190614997565b60405180910390a3505050505050505050565b6000806000806000806140bb87612e97565b95509550955095509550955061411986600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546137ca90919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506141ae85600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e3990919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506141fa816145df565b6142048483614784565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516142619190614997565b60405180910390a3505050505050505050565b60008060008060008061428687612e97565b9550955095509550955095506142e487600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546137ca90919063ffffffff16565b600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061437986600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546137ca90919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061440e83600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e3990919063ffffffff16565b600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506144a385600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e3990919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506144ef816145df565b6144f98483614784565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516145569190614997565b60405180910390a3505050505050505050565b601254601181905550601454601381905550565b60006145a7606461459960115485613a5190919063ffffffff16565b612def90919063ffffffff16565b9050919050565b60006145d860646145ca60135485613a5190919063ffffffff16565b612def90919063ffffffff16565b9050919050565b60006145e9612dc4565b905060006146008284613a5190919063ffffffff16565b905061465481600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e3990919063ffffffff16565b600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561477f5761473b83600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e3990919063ffffffff16565b600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b505050565b61479982600b546137ca90919063ffffffff16565b600b819055506147b481600c54612e3990919063ffffffff16565b600c819055505050565b600081519050919050565b600082825260208201905092915050565b60005b838110156147f85780820151818401526020810190506147dd565b83811115614807576000848401525b50505050565b6000601f19601f8301169050919050565b6000614829826147be565b61483381856147c9565b93506148438185602086016147da565b61484c8161480d565b840191505092915050565b60006020820190508181036000830152614871818461481e565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006148a98261487e565b9050919050565b6148b98161489e565b81146148c457600080fd5b50565b6000813590506148d6816148b0565b92915050565b6000819050919050565b6148ef816148dc565b81146148fa57600080fd5b50565b60008135905061490c816148e6565b92915050565b6000806040838503121561492957614928614879565b5b6000614937858286016148c7565b9250506020614948858286016148fd565b9150509250929050565b60008115159050919050565b61496781614952565b82525050565b6000602082019050614982600083018461495e565b92915050565b614991816148dc565b82525050565b60006020820190506149ac6000830184614988565b92915050565b6000819050919050565b60006149d76149d26149cd8461487e565b6149b2565b61487e565b9050919050565b60006149e9826149bc565b9050919050565b60006149fb826149de565b9050919050565b614a0b816149f0565b82525050565b6000602082019050614a266000830184614a02565b92915050565b600080600060608486031215614a4557614a44614879565b5b6000614a53868287016148c7565b9350506020614a64868287016148c7565b9250506040614a75868287016148fd565b9150509250925092565b600060208284031215614a9557614a94614879565b5b6000614aa3848285016148fd565b91505092915050565b600060ff82169050919050565b614ac281614aac565b82525050565b6000602082019050614add6000830184614ab9565b92915050565b600060208284031215614af957614af8614879565b5b6000614b07848285016148c7565b91505092915050565b6000614b1b8261489e565b9050919050565b614b2b81614b10565b8114614b3657600080fd5b50565b600081359050614b4881614b22565b92915050565b60008060408385031215614b6557614b64614879565b5b6000614b7385828601614b39565b9250506020614b84858286016148c7565b9150509250929050565b614b9781614952565b8114614ba257600080fd5b50565b600081359050614bb481614b8e565b92915050565b60008060408385031215614bd157614bd0614879565b5b6000614bdf858286016148fd565b9250506020614bf085828601614ba5565b9150509250929050565b614c038161489e565b82525050565b6000602082019050614c1e6000830184614bfa565b92915050565b6000614c2f8261487e565b9050919050565b614c3f81614c24565b8114614c4a57600080fd5b50565b600081359050614c5c81614c36565b92915050565b600060208284031215614c7857614c77614879565b5b6000614c8684828501614c4d565b91505092915050565b600060208284031215614ca557614ca4614879565b5b6000614cb384828501614ba5565b91505092915050565b60008060408385031215614cd357614cd2614879565b5b6000614ce1858286016148c7565b9250506020614cf2858286016148c7565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680614d4357607f821691505b602082108103614d5657614d55614cfc565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614d926020836147c9565b9150614d9d82614d5c565b602082019050919050565b60006020820190508181036000830152614dc181614d85565b9050919050565b7f53776170205468726573686f6c6420416d6f756e742063616e6e6f742062652060008201527f6c657373207468616e203639204d696c6c696f6e000000000000000000000000602082015250565b6000614e246034836147c9565b9150614e2f82614dc8565b604082019050919050565b60006020820190508181036000830152614e5381614e17565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614e94826148dc565b9150614e9f836148dc565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614ed857614ed7614e5a565b5b828202905092915050565b7f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260008201527f65666c656374696f6e7300000000000000000000000000000000000000000000602082015250565b6000614f3f602a836147c9565b9150614f4a82614ee3565b604082019050919050565b60006020820190508181036000830152614f6e81614f32565b9050919050565b7f4163636f756e7420697320616c7265616479206578636c756465640000000000600082015250565b6000614fab601b836147c9565b9150614fb682614f75565b602082019050919050565b60006020820190508181036000830152614fda81614f9e565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600061501b826148dc565b9150615026836148dc565b92508282101561503957615038614e5a565b5b828203905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b600061507e826148dc565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036150b0576150af614e5a565b5b600182019050919050565b6000815190506150ca816148e6565b92915050565b6000602082840312156150e6576150e5614879565b5b60006150f4848285016150bb565b91505092915050565b60006040820190506151126000830185614bfa565b61511f6020830184614988565b9392505050565b60008151905061513581614b8e565b92915050565b60006020828403121561515157615150614879565b5b600061515f84828501615126565b91505092915050565b7f416d6f756e74206d757374206265206c657373207468616e20737570706c7900600082015250565b600061519e601f836147c9565b91506151a982615168565b602082019050919050565b600060208201905081810360008301526151cd81615191565b9050919050565b7f596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c60008201527f6f636b0000000000000000000000000000000000000000000000000000000000602082015250565b60006152306023836147c9565b915061523b826151d4565b604082019050919050565b6000602082019050818103600083015261525f81615223565b9050919050565b7f436f6e7472616374206973206c6f636b656420756e74696c2037206461797300600082015250565b600061529c601f836147c9565b91506152a782615266565b602082019050919050565b600060208201905081810360008301526152cb8161528f565b9050919050565b60006152dd826148dc565b91506152e8836148dc565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561531d5761531c614e5a565b5b828201905092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006153846026836147c9565b915061538f82615328565b604082019050919050565b600060208201905081810360008301526153b381615377565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006154166024836147c9565b9150615421826153ba565b604082019050919050565b6000602082019050818103600083015261544581615409565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006154a86022836147c9565b91506154b38261544c565b604082019050919050565b600060208201905081810360008301526154d78161549b565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061553a6025836147c9565b9150615545826154de565b604082019050919050565b600060208201905081810360008301526155698161552d565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006155cc6023836147c9565b91506155d782615570565b604082019050919050565b600060208201905081810360008301526155fb816155bf565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b600061565e6029836147c9565b915061566982615602565b604082019050919050565b6000602082019050818103600083015261568d81615651565b9050919050565b7f5472616e7366657220616d6f756e74206578636565647320746865206d61785460008201527f78416d6f756e742e000000000000000000000000000000000000000000000000602082015250565b60006156f06028836147c9565b91506156fb82615694565b604082019050919050565b6000602082019050818103600083015261571f816156e3565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b600061575c601b836147c9565b915061576782615726565b602082019050919050565b6000602082019050818103600083015261578b8161574f565b9050919050565b60006060820190506157a76000830186614988565b6157b46020830185614988565b6157c16040830184614988565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000615803826148dc565b915061580e836148dc565b92508261581e5761581d6157c9565b5b828204905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600081519050615867816148b0565b92915050565b60006020828403121561588357615882614879565b5b600061589184828501615858565b91505092915050565b6000819050919050565b60006158bf6158ba6158b58461589a565b6149b2565b6148dc565b9050919050565b6158cf816158a4565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61590a8161489e565b82525050565b600061591c8383615901565b60208301905092915050565b6000602082019050919050565b6000615940826158d5565b61594a81856158e0565b9350615955836158f1565b8060005b8381101561598657815161596d8882615910565b975061597883615928565b925050600181019050615959565b5085935050505092915050565b600060a0820190506159a86000830188614988565b6159b560208301876158c6565b81810360408301526159c78186615935565b90506159d66060830185614bfa565b6159e36080830184614988565b9695505050505050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000615a496021836147c9565b9150615a54826159ed565b604082019050919050565b60006020820190508181036000830152615a7881615a3c565b9050919050565b600060c082019050615a946000830189614bfa565b615aa16020830188614988565b615aae60408301876158c6565b615abb60608301866158c6565b615ac86080830185614bfa565b615ad560a0830184614988565b979650505050505050565b600080600060608486031215615af957615af8614879565b5b6000615b07868287016150bb565b9350506020615b18868287016150bb565b9250506040615b29868287016150bb565b915050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220ab5c7e60d415f20c741332b532e32708d6f86be143d17a8b58e93d080f0f520164736f6c634300080f0033
Deployed Bytecode
0x60806040526004361061026b5760003560e01c80636bc87c3a11610144578063a6334231116100b6578063d12a76881161007a578063d12a768814610919578063dd46706414610944578063dd62ed3e1461096d578063ea2f0b37146109aa578063f2fde38b146109d3578063fd3e50a7146109fc57610272565b8063a63342311461085a578063a69df4b514610871578063a9059cbb14610888578063b6c52324146108c5578063c49b9a80146108f057610272565b8063764d72bf11610108578063764d72bf146107365780637d1db4a51461075f57806388f820201461078a5780638da5cb5b146107c757806395d89b41146107f2578063a457c2d71461081d57610272565b80636bc87c3a1461067557806370a08231146106a0578063715018a6146106dd578063751039fc146106f457806375f0a8741461070b57610272565b806339509351116101dd57806348c54b9d116101a157806348c54b9d1461057957806349bd5a5e146105905780634a74bb02146105bb57806352390c02146105e65780635342acb41461060f5780635d098b381461064c57610272565b806339509351146104825780633ae7dc20146104bf5780633b124fe7146104e8578063437823ec146105135780634549b0391461053c57610272565b806323b872dd1161022f57806323b872dd1461036057806329e04b4a1461039d5780632d838119146103c65780632f05205c14610403578063313ce5671461042e5780633685d4191461045957610272565b806306fdde0314610277578063095ea7b3146102a257806313114a9d146102df5780631694505e1461030a57806318160ddd1461033557610272565b3661027257005b600080fd5b34801561028357600080fd5b5061028c610a13565b6040516102999190614857565b60405180910390f35b3480156102ae57600080fd5b506102c960048036038101906102c49190614912565b610aa5565b6040516102d6919061496d565b60405180910390f35b3480156102eb57600080fd5b506102f4610ac3565b6040516103019190614997565b60405180910390f35b34801561031657600080fd5b5061031f610acd565b60405161032c9190614a11565b60405180910390f35b34801561034157600080fd5b5061034a610af1565b6040516103579190614997565b60405180910390f35b34801561036c57600080fd5b5061038760048036038101906103829190614a2c565b610afb565b604051610394919061496d565b60405180910390f35b3480156103a957600080fd5b506103c460048036038101906103bf9190614a7f565b610bd4565b005b3480156103d257600080fd5b506103ed60048036038101906103e89190614a7f565b610cc8565b6040516103fa9190614997565b60405180910390f35b34801561040f57600080fd5b50610418610d36565b604051610425919061496d565b60405180910390f35b34801561043a57600080fd5b50610443610d49565b6040516104509190614ac8565b60405180910390f35b34801561046557600080fd5b50610480600480360381019061047b9190614ae3565b610d60565b005b34801561048e57600080fd5b506104a960048036038101906104a49190614912565b6110ae565b6040516104b6919061496d565b60405180910390f35b3480156104cb57600080fd5b506104e660048036038101906104e19190614b4e565b611161565b005b3480156104f457600080fd5b506104fd6112f2565b60405161050a9190614997565b60405180910390f35b34801561051f57600080fd5b5061053a60048036038101906105359190614ae3565b6112f8565b005b34801561054857600080fd5b50610563600480360381019061055e9190614bba565b6113e8565b6040516105709190614997565b60405180910390f35b34801561058557600080fd5b5061058e61146c565b005b34801561059c57600080fd5b506105a561156c565b6040516105b29190614c09565b60405180910390f35b3480156105c757600080fd5b506105d0611590565b6040516105dd919061496d565b60405180910390f35b3480156105f257600080fd5b5061060d60048036038101906106089190614ae3565b6115a3565b005b34801561061b57600080fd5b5061063660048036038101906106319190614ae3565b611857565b604051610643919061496d565b60405180910390f35b34801561065857600080fd5b50610673600480360381019061066e9190614ae3565b6118ad565b005b34801561068157600080fd5b5061068a611986565b6040516106979190614997565b60405180910390f35b3480156106ac57600080fd5b506106c760048036038101906106c29190614ae3565b61198c565b6040516106d49190614997565b60405180910390f35b3480156106e957600080fd5b506106f2611a77565b005b34801561070057600080fd5b50610709611bca565b005b34801561071757600080fd5b50610720611c6a565b60405161072d9190614c09565b60405180910390f35b34801561074257600080fd5b5061075d60048036038101906107589190614c62565b611c90565b005b34801561076b57600080fd5b50610774611d6f565b6040516107819190614997565b60405180910390f35b34801561079657600080fd5b506107b160048036038101906107ac9190614ae3565b611d75565b6040516107be919061496d565b60405180910390f35b3480156107d357600080fd5b506107dc611dcb565b6040516107e99190614c09565b60405180910390f35b3480156107fe57600080fd5b50610807611df4565b6040516108149190614857565b60405180910390f35b34801561082957600080fd5b50610844600480360381019061083f9190614912565b611e86565b604051610851919061496d565b60405180910390f35b34801561086657600080fd5b5061086f611f53565b005b34801561087d57600080fd5b50610886612005565b005b34801561089457600080fd5b506108af60048036038101906108aa9190614912565b6121d9565b6040516108bc919061496d565b60405180910390f35b3480156108d157600080fd5b506108da6121f7565b6040516108e79190614997565b60405180910390f35b3480156108fc57600080fd5b5061091760048036038101906109129190614c8f565b612201565b005b34801561092557600080fd5b5061092e6122ea565b60405161093b9190614997565b60405180910390f35b34801561095057600080fd5b5061096b60048036038101906109669190614a7f565b6122f0565b005b34801561097957600080fd5b50610994600480360381019061098f9190614cbc565b6124b7565b6040516109a19190614997565b60405180910390f35b3480156109b657600080fd5b506109d160048036038101906109cc9190614ae3565b61253e565b005b3480156109df57600080fd5b506109fa60048036038101906109f59190614ae3565b61262e565b005b348015610a0857600080fd5b50610a116127ef565b005b6060600e8054610a2290614d2b565b80601f0160208091040260200160405190810160405280929190818152602001828054610a4e90614d2b565b8015610a9b5780601f10610a7057610100808354040283529160200191610a9b565b820191906000526020600020905b815481529060010190602001808311610a7e57829003601f168201915b5050505050905090565b6000610ab9610ab2612824565b848461282c565b6001905092915050565b6000600c54905090565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600a54905090565b6000610b088484846129f5565b610bc984610b14612824565b610bc485604051806060016040528060288152602001615b3460289139600560008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610b7a612824565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612d609092919063ffffffff16565b61282c565b600190509392505050565b610bdc612824565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610c69576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c6090614da8565b60405180910390fd5b6301312d008111610caf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ca690614e3a565b60405180910390fd5b633b9aca0081610cbf9190614e89565b60178190555050565b6000600b54821115610d0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d0690614f55565b60405180910390fd5b6000610d19612dc4565b9050610d2e8184612def90919063ffffffff16565b915050919050565b600960009054906101000a900460ff1681565b6000601060009054906101000a900460ff16905090565b610d68612824565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610df5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dec90614da8565b60405180910390fd5b600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610e81576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7890614fc1565b60405180910390fd5b60005b6008805490508110156110aa578173ffffffffffffffffffffffffffffffffffffffff1660088281548110610ebc57610ebb614fe1565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16036110975760086001600880549050610f169190615010565b81548110610f2757610f26614fe1565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660088281548110610f6657610f65614fe1565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600880548061105d5761105c615044565b5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905590556110aa565b80806110a290615073565b915050610e84565b5050565b60006111576110bb612824565b8461115285600560006110cc612824565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e3990919063ffffffff16565b61282c565b6001905092915050565b611169612824565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146111f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111ed90614da8565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb828473ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161124c9190614c09565b602060405180830381865afa158015611269573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061128d91906150d0565b6040518363ffffffff1660e01b81526004016112aa9291906150fd565b6020604051808303816000875af11580156112c9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112ed919061513b565b505050565b60115481565b611300612824565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461138d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161138490614da8565b60405180910390fd5b6001600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000600a5483111561142f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611426906151b4565b60405180910390fd5b8161144f57600061143f84612e97565b5050505050905080915050611466565b600061145a84612e97565b50505050915050809150505b92915050565b611474612824565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611501576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114f890614da8565b60405180910390fd5b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015611569573d6000803e3d6000fd5b50565b7f0000000000000000000000005f4cd1c7a94c4ada58c37bb63373c226984da9ec81565b601560019054906101000a900460ff1681565b6115ab612824565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611638576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161162f90614da8565b60405180910390fd5b600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156116c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116bc90614fc1565b60405180910390fd5b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054111561179957611755600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610cc8565b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506008819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6118b5612824565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611942576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161193990614da8565b60405180910390fd5b80600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60135481565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611a2757600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050611a72565b611a6f600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610cc8565b90505b919050565b611a7f612824565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b0390614da8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b611bd2612824565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c5690614da8565b60405180910390fd5b600a54601681905550565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611c98612824565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d1c90614da8565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015611d6b573d6000803e3d6000fd5b5050565b60165481565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600f8054611e0390614d2b565b80601f0160208091040260200160405190810160405280929190818152602001828054611e2f90614d2b565b8015611e7c5780601f10611e5157610100808354040283529160200191611e7c565b820191906000526020600020905b815481529060010190602001808311611e5f57829003601f168201915b5050505050905090565b6000611f49611e93612824565b84611f4485604051806060016040528060258152602001615b5c6025913960056000611ebd612824565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612d609092919063ffffffff16565b61282c565b6001905092915050565b611f5b612824565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611fe8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fdf90614da8565b60405180910390fd5b6001600960006101000a81548160ff021916908315150217905550565b3373ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612095576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161208c90615246565b60405180910390fd5b60025442116120d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120d0906152b2565b60405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60006121ed6121e6612824565b84846129f5565b6001905092915050565b6000600254905090565b612209612824565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612296576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161228d90614da8565b60405180910390fd5b80601560016101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159816040516122df919061496d565b60405180910390a150565b60175481565b6122f8612824565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612385576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161237c90614da8565b60405180910390fd5b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550804261243391906152d2565b600281905550600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b612546612824565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146125d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125ca90614da8565b60405180910390fd5b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b612636612824565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146126c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126ba90614da8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612732576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127299061539a565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60006127f9612824565b90506000600c54905060186013546128119190614e89565b6013819055506013546014819055505050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361289b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128929061542c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361290a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612901906154be565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516129e89190614997565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612a64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a5b90615550565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612ad3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612aca906155e2565b60405180910390fd5b60008111612b16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b0d90615674565b60405180910390fd5b612b1e611dcb565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612b8c5750612b5c611dcb565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612bd757601654811115612bd6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bcd90615706565b60405180910390fd5b5b6000612be23061198c565b90506016548110612bf35760165490505b60006017548210159050808015612c175750601560009054906101000a900460ff16155b8015612c6f57507f0000000000000000000000005f4cd1c7a94c4ada58c37bb63373c226984da9ec73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b8015612c875750601560019054906101000a900460ff165b15612c9b576017549150612c9a82612ef3565b5b600060019050600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612d425750600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612d4c57600090505b612d588686868461306c565b505050505050565b6000838311158290612da8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d9f9190614857565b60405180910390fd5b5060008385612db79190615010565b9050809150509392505050565b6000806000612dd16133d1565b91509150612de88183612def90919063ffffffff16565b9250505090565b6000612e3183836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613684565b905092915050565b6000808284612e4891906152d2565b905083811015612e8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e8490615772565b60405180910390fd5b8091505092915050565b6000806000806000806000806000612eae8a6136e7565b9250925092506000806000612ecc8d8686612ec7612dc4565b613741565b9250925092508282828888889b509b509b509b509b509b5050505050505091939550919395565b6001601560006101000a81548160ff0219169083151502179055506000612f24600283612def90919063ffffffff16565b90506000612f3b82846137ca90919063ffffffff16565b90506000479050612f4b83613814565b6000612f6082476137ca90919063ffffffff16565b90506000612f8b6064612f7d603285613a5190919063ffffffff16565b612def90919063ffffffff16565b9050600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015612ff5573d6000803e3d6000fd5b5080826130029190615010565b915061300e8483613acb565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb56185838660405161304193929190615792565b60405180910390a150505050506000601560006101000a81548160ff02191690831515021790555050565b600960009054906101000a900460ff166130c057613088611dcb565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16146130bf57600080fd5b5b806130ce576130cd613bac565b5b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156131715750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561318657613181848484613be9565b6133bd565b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156132295750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561323e57613239848484613e49565b6133bc565b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156132e25750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156132f7576132f28484846140a9565b6133bb565b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156133995750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156133ae576133a9848484614274565b6133ba565b6133b98484846140a9565b5b5b5b5b806133cb576133ca614569565b5b50505050565b6000806000600b5490506000600a54905060005b6008805490508110156136475782600360006008848154811061340b5761340a614fe1565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411806134f9575081600460006008848154811061349157613490614fe1565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b1561351057600b54600a5494509450505050613680565b6135a0600360006008848154811061352b5761352a614fe1565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054846137ca90919063ffffffff16565b925061363260046000600884815481106135bd576135bc614fe1565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836137ca90919063ffffffff16565b9150808061363f90615073565b9150506133e5565b5061365f600a54600b54612def90919063ffffffff16565b82101561367757600b54600a54935093505050613680565b81819350935050505b9091565b600080831182906136cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136c29190614857565b60405180910390fd5b50600083856136da91906157f8565b9050809150509392505050565b6000806000806136f68561457d565b90506000613703866145ae565b9050600061372c8261371e858a6137ca90919063ffffffff16565b6137ca90919063ffffffff16565b90508083839550955095505050509193909250565b60008060008061375a8589613a5190919063ffffffff16565b905060006137718689613a5190919063ffffffff16565b905060006137888789613a5190919063ffffffff16565b905060006137b1826137a385876137ca90919063ffffffff16565b6137ca90919063ffffffff16565b9050838184965096509650505050509450945094915050565b600061380c83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612d60565b905092915050565b6000600267ffffffffffffffff81111561383157613830615829565b5b60405190808252806020026020018201604052801561385f5781602001602082028036833780820191505090505b509050308160008151811061387757613876614fe1565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561391c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613940919061586d565b8160018151811061395457613953614fe1565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506139b9307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d8461282c565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613a1b959493929190615993565b600060405180830381600087803b158015613a3557600080fd5b505af1158015613a49573d6000803e3d6000fd5b505050505050565b6000808303613a635760009050613ac5565b60008284613a719190614e89565b9050828482613a8091906157f8565b14613ac0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613ab790615a5f565b60405180910390fd5b809150505b92915050565b613af6307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d8461282c565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080613b40611dcb565b426040518863ffffffff1660e01b8152600401613b6296959493929190615a7f565b60606040518083038185885af1158015613b80573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613ba59190615ae0565b5050505050565b6000601154148015613bc057506000601354145b613be757601154601281905550601354601481905550600060118190555060006013819055505b565b600080600080600080613bfb87612e97565b955095509550955095509550613c5987600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546137ca90919063ffffffff16565b600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613cee86600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546137ca90919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613d8385600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e3990919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613dcf816145df565b613dd98483614784565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051613e369190614997565b60405180910390a3505050505050505050565b600080600080600080613e5b87612e97565b955095509550955095509550613eb986600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546137ca90919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613f4e83600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e3990919063ffffffff16565b600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613fe385600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e3990919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061402f816145df565b6140398483614784565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516140969190614997565b60405180910390a3505050505050505050565b6000806000806000806140bb87612e97565b95509550955095509550955061411986600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546137ca90919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506141ae85600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e3990919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506141fa816145df565b6142048483614784565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516142619190614997565b60405180910390a3505050505050505050565b60008060008060008061428687612e97565b9550955095509550955095506142e487600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546137ca90919063ffffffff16565b600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061437986600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546137ca90919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061440e83600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e3990919063ffffffff16565b600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506144a385600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e3990919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506144ef816145df565b6144f98483614784565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516145569190614997565b60405180910390a3505050505050505050565b601254601181905550601454601381905550565b60006145a7606461459960115485613a5190919063ffffffff16565b612def90919063ffffffff16565b9050919050565b60006145d860646145ca60135485613a5190919063ffffffff16565b612def90919063ffffffff16565b9050919050565b60006145e9612dc4565b905060006146008284613a5190919063ffffffff16565b905061465481600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e3990919063ffffffff16565b600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561477f5761473b83600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e3990919063ffffffff16565b600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b505050565b61479982600b546137ca90919063ffffffff16565b600b819055506147b481600c54612e3990919063ffffffff16565b600c819055505050565b600081519050919050565b600082825260208201905092915050565b60005b838110156147f85780820151818401526020810190506147dd565b83811115614807576000848401525b50505050565b6000601f19601f8301169050919050565b6000614829826147be565b61483381856147c9565b93506148438185602086016147da565b61484c8161480d565b840191505092915050565b60006020820190508181036000830152614871818461481e565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006148a98261487e565b9050919050565b6148b98161489e565b81146148c457600080fd5b50565b6000813590506148d6816148b0565b92915050565b6000819050919050565b6148ef816148dc565b81146148fa57600080fd5b50565b60008135905061490c816148e6565b92915050565b6000806040838503121561492957614928614879565b5b6000614937858286016148c7565b9250506020614948858286016148fd565b9150509250929050565b60008115159050919050565b61496781614952565b82525050565b6000602082019050614982600083018461495e565b92915050565b614991816148dc565b82525050565b60006020820190506149ac6000830184614988565b92915050565b6000819050919050565b60006149d76149d26149cd8461487e565b6149b2565b61487e565b9050919050565b60006149e9826149bc565b9050919050565b60006149fb826149de565b9050919050565b614a0b816149f0565b82525050565b6000602082019050614a266000830184614a02565b92915050565b600080600060608486031215614a4557614a44614879565b5b6000614a53868287016148c7565b9350506020614a64868287016148c7565b9250506040614a75868287016148fd565b9150509250925092565b600060208284031215614a9557614a94614879565b5b6000614aa3848285016148fd565b91505092915050565b600060ff82169050919050565b614ac281614aac565b82525050565b6000602082019050614add6000830184614ab9565b92915050565b600060208284031215614af957614af8614879565b5b6000614b07848285016148c7565b91505092915050565b6000614b1b8261489e565b9050919050565b614b2b81614b10565b8114614b3657600080fd5b50565b600081359050614b4881614b22565b92915050565b60008060408385031215614b6557614b64614879565b5b6000614b7385828601614b39565b9250506020614b84858286016148c7565b9150509250929050565b614b9781614952565b8114614ba257600080fd5b50565b600081359050614bb481614b8e565b92915050565b60008060408385031215614bd157614bd0614879565b5b6000614bdf858286016148fd565b9250506020614bf085828601614ba5565b9150509250929050565b614c038161489e565b82525050565b6000602082019050614c1e6000830184614bfa565b92915050565b6000614c2f8261487e565b9050919050565b614c3f81614c24565b8114614c4a57600080fd5b50565b600081359050614c5c81614c36565b92915050565b600060208284031215614c7857614c77614879565b5b6000614c8684828501614c4d565b91505092915050565b600060208284031215614ca557614ca4614879565b5b6000614cb384828501614ba5565b91505092915050565b60008060408385031215614cd357614cd2614879565b5b6000614ce1858286016148c7565b9250506020614cf2858286016148c7565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680614d4357607f821691505b602082108103614d5657614d55614cfc565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614d926020836147c9565b9150614d9d82614d5c565b602082019050919050565b60006020820190508181036000830152614dc181614d85565b9050919050565b7f53776170205468726573686f6c6420416d6f756e742063616e6e6f742062652060008201527f6c657373207468616e203639204d696c6c696f6e000000000000000000000000602082015250565b6000614e246034836147c9565b9150614e2f82614dc8565b604082019050919050565b60006020820190508181036000830152614e5381614e17565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614e94826148dc565b9150614e9f836148dc565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614ed857614ed7614e5a565b5b828202905092915050565b7f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260008201527f65666c656374696f6e7300000000000000000000000000000000000000000000602082015250565b6000614f3f602a836147c9565b9150614f4a82614ee3565b604082019050919050565b60006020820190508181036000830152614f6e81614f32565b9050919050565b7f4163636f756e7420697320616c7265616479206578636c756465640000000000600082015250565b6000614fab601b836147c9565b9150614fb682614f75565b602082019050919050565b60006020820190508181036000830152614fda81614f9e565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600061501b826148dc565b9150615026836148dc565b92508282101561503957615038614e5a565b5b828203905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b600061507e826148dc565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036150b0576150af614e5a565b5b600182019050919050565b6000815190506150ca816148e6565b92915050565b6000602082840312156150e6576150e5614879565b5b60006150f4848285016150bb565b91505092915050565b60006040820190506151126000830185614bfa565b61511f6020830184614988565b9392505050565b60008151905061513581614b8e565b92915050565b60006020828403121561515157615150614879565b5b600061515f84828501615126565b91505092915050565b7f416d6f756e74206d757374206265206c657373207468616e20737570706c7900600082015250565b600061519e601f836147c9565b91506151a982615168565b602082019050919050565b600060208201905081810360008301526151cd81615191565b9050919050565b7f596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c60008201527f6f636b0000000000000000000000000000000000000000000000000000000000602082015250565b60006152306023836147c9565b915061523b826151d4565b604082019050919050565b6000602082019050818103600083015261525f81615223565b9050919050565b7f436f6e7472616374206973206c6f636b656420756e74696c2037206461797300600082015250565b600061529c601f836147c9565b91506152a782615266565b602082019050919050565b600060208201905081810360008301526152cb8161528f565b9050919050565b60006152dd826148dc565b91506152e8836148dc565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561531d5761531c614e5a565b5b828201905092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006153846026836147c9565b915061538f82615328565b604082019050919050565b600060208201905081810360008301526153b381615377565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006154166024836147c9565b9150615421826153ba565b604082019050919050565b6000602082019050818103600083015261544581615409565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006154a86022836147c9565b91506154b38261544c565b604082019050919050565b600060208201905081810360008301526154d78161549b565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061553a6025836147c9565b9150615545826154de565b604082019050919050565b600060208201905081810360008301526155698161552d565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006155cc6023836147c9565b91506155d782615570565b604082019050919050565b600060208201905081810360008301526155fb816155bf565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b600061565e6029836147c9565b915061566982615602565b604082019050919050565b6000602082019050818103600083015261568d81615651565b9050919050565b7f5472616e7366657220616d6f756e74206578636565647320746865206d61785460008201527f78416d6f756e742e000000000000000000000000000000000000000000000000602082015250565b60006156f06028836147c9565b91506156fb82615694565b604082019050919050565b6000602082019050818103600083015261571f816156e3565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b600061575c601b836147c9565b915061576782615726565b602082019050919050565b6000602082019050818103600083015261578b8161574f565b9050919050565b60006060820190506157a76000830186614988565b6157b46020830185614988565b6157c16040830184614988565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000615803826148dc565b915061580e836148dc565b92508261581e5761581d6157c9565b5b828204905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600081519050615867816148b0565b92915050565b60006020828403121561588357615882614879565b5b600061589184828501615858565b91505092915050565b6000819050919050565b60006158bf6158ba6158b58461589a565b6149b2565b6148dc565b9050919050565b6158cf816158a4565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61590a8161489e565b82525050565b600061591c8383615901565b60208301905092915050565b6000602082019050919050565b6000615940826158d5565b61594a81856158e0565b9350615955836158f1565b8060005b8381101561598657815161596d8882615910565b975061597883615928565b925050600181019050615959565b5085935050505092915050565b600060a0820190506159a86000830188614988565b6159b560208301876158c6565b81810360408301526159c78186615935565b90506159d66060830185614bfa565b6159e36080830184614988565b9695505050505050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000615a496021836147c9565b9150615a54826159ed565b604082019050919050565b60006020820190508181036000830152615a7881615a3c565b9050919050565b600060c082019050615a946000830189614bfa565b615aa16020830188614988565b615aae60408301876158c6565b615abb60608301866158c6565b615ac86080830185614bfa565b615ad560a0830184614988565b979650505050505050565b600080600060608486031215615af957615af8614879565b5b6000615b07868287016150bb565b9350506020615b18868287016150bb565b9250506040615b29868287016150bb565b915050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220ab5c7e60d415f20c741332b532e32708d6f86be143d17a8b58e93d080f0f520164736f6c634300080f0033
Deployed Bytecode Sourcemap
27751:20899:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30183:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31168:193;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32667:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28757:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30460:95;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31369:446;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35951:324;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33462:322;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28195:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30369:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34246:477;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31823:300;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36406:243;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28573:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35496:111;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32975:479;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36283:115;;;;;;;;;;;;;:::i;:::-;;28815:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28890:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33792:446;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40921:124;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35733:118;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28656:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30563:198;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17005:148;;;;;;;;;;;;;:::i;:::-;;35859:84;;;;;;;;;;;;;:::i;:::-;;28414:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36657:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28939:46;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32539:120;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16363:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30274:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32131:400;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36829:77;;;;;;;;;;;;;:::i;:::-;;18060:341;;;;;;;;;;;;;:::i;:::-;;30769:199;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17597:89;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36914:171;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28992:72;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17762:226;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30976:184;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35615:110;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17308:281;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32762:205;;;;;;;;;;;;;:::i;:::-;;30183:83;30220:13;30253:5;30246:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30183:83;:::o;31168:193::-;31270:4;31292:39;31301:12;:10;:12::i;:::-;31315:7;31324:6;31292:8;:39::i;:::-;31349:4;31342:11;;31168:193;;;;:::o;32667:87::-;32709:7;32736:10;;32729:17;;32667:87;:::o;28757:51::-;;;:::o;30460:95::-;30513:7;30540;;30533:14;;30460:95;:::o;31369:446::-;31501:4;31518:36;31528:6;31536:9;31547:6;31518:9;:36::i;:::-;31565:220;31588:6;31609:12;:10;:12::i;:::-;31636:138;31692:6;31636:138;;;;;;;;;;;;;;;;;:11;:19;31648:6;31636:19;;;;;;;;;;;;;;;:33;31656:12;:10;:12::i;:::-;31636:33;;;;;;;;;;;;;;;;:37;;:138;;;;;:::i;:::-;31565:8;:220::i;:::-;31803:4;31796:11;;31369:446;;;;;:::o;35951:324::-;16585:12;:10;:12::i;:::-;16575:22;;:6;;;;;;;;;;:22;;;16567:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36109:8:::1;36087:19;:30;36065:132;;;;;;;;;;;;:::i;:::-;;;;;;;;;36262:5;36240:19;:27;;;;:::i;:::-;36208:29;:59;;;;35951:324:::0;:::o;33462:322::-;33556:7;33614;;33603;:18;;33581:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;33702:19;33724:10;:8;:10::i;:::-;33702:32;;33752:24;33764:11;33752:7;:11;;:24;;;;:::i;:::-;33745:31;;;33462:322;;;:::o;28195:28::-;;;;;;;;;;;;;:::o;30369:83::-;30410:5;30435:9;;;;;;;;;;;30428:16;;30369:83;:::o;34246:477::-;16585:12;:10;:12::i;:::-;16575:22;;:6;;;;;;;;;;:22;;;16567:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34326:11:::1;:20;34338:7;34326:20;;;;;;;;;;;;;;;;;;;;;;;;;34318:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;34394:9;34389:327;34413:9;:16;;;;34409:1;:20;34389:327;;;34471:7;34455:23;;:9;34465:1;34455:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:23;;::::0;34451:254:::1;;34514:9;34543:1;34524:9;:16;;;;:20;;;;:::i;:::-;34514:31;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;34499:9;34509:1;34499:12;;;;;;;;:::i;:::-;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;34583:1;34564:7;:16;34572:7;34564:16;;;;;;;;;;;;;;;:20;;;;34626:5;34603:11;:20;34615:7;34603:20;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;34650:9;:15;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;34684:5;;34451:254;34431:3;;;;;:::i;:::-;;;;34389:327;;;;34246:477:::0;:::o;31823:300::-;31938:4;31960:133;31983:12;:10;:12::i;:::-;32010:7;32032:50;32071:10;32032:11;:25;32044:12;:10;:12::i;:::-;32032:25;;;;;;;;;;;;;;;:34;32058:7;32032:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;31960:8;:133::i;:::-;32111:4;32104:11;;31823:300;;;;:::o;36406:243::-;16585:12;:10;:12::i;:::-;16575:22;;:6;;;;;;;;;;:22;;;16567:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36529:12:::1;:21;;;36565:13;36593:12;:22;;;36624:4;36593:37;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;36529:112;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;36406:243:::0;;:::o;28573:26::-;;;;:::o;35496:111::-;16585:12;:10;:12::i;:::-;16575:22;;:6;;;;;;;;;;:22;;;16567:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35595:4:::1;35565:18;:27;35584:7;35565:27;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;35496:111:::0;:::o;32975:479::-;33093:7;33137;;33126;:18;;33118:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;33196:17;33191:256;;33231:15;33260:19;33271:7;33260:10;:19::i;:::-;33230:49;;;;;;;33301:7;33294:14;;;;;33191:256;33344:23;33379:19;33390:7;33379:10;:19::i;:::-;33341:57;;;;;;;33420:15;33413:22;;;32975:479;;;;;:::o;36283:115::-;16585:12;:10;:12::i;:::-;16575:22;;:6;;;;;;;;;;:22;;;16567:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36342:15:::1;;;;;;;;;;;36334:33;;:56;36368:21;36334:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;36283:115::o:0;28815:38::-;;;:::o;28890:40::-;;;;;;;;;;;;;:::o;33792:446::-;16585:12;:10;:12::i;:::-;16575:22;;:6;;;;;;;;;;:22;;;16567:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;33987:11:::1;:20;33999:7;33987:20;;;;;;;;;;;;;;;;;;;;;;;;;33986:21;33978:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;34073:1;34054:7;:16;34062:7;34054:16;;;;;;;;;;;;;;;;:20;34050:109;;;34110:37;34130:7;:16;34138:7;34130:16;;;;;;;;;;;;;;;;34110:19;:37::i;:::-;34091:7;:16;34099:7;34091:16;;;;;;;;;;;;;;;:56;;;;34050:109;34192:4;34169:11;:20;34181:7;34169:20;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;34207:9;34222:7;34207:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33792:446:::0;:::o;40921:124::-;40986:4;41010:18;:27;41029:7;41010:27;;;;;;;;;;;;;;;;;;;;;;;;;41003:34;;40921:124;;;:::o;35733:118::-;16585:12;:10;:12::i;:::-;16575:22;;:6;;;;;;;;;;:22;;;16567:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35830:13:::1;35812:15;;:31;;;;;;;;;;;;;;;;;;35733:118:::0;:::o;28656:32::-;;;;:::o;30563:198::-;30629:7;30653:11;:20;30665:7;30653:20;;;;;;;;;;;;;;;;;;;;;;;;;30649:49;;;30682:7;:16;30690:7;30682:16;;;;;;;;;;;;;;;;30675:23;;;;30649:49;30716:37;30736:7;:16;30744:7;30736:16;;;;;;;;;;;;;;;;30716:19;:37::i;:::-;30709:44;;30563:198;;;;:::o;17005:148::-;16585:12;:10;:12::i;:::-;16575:22;;:6;;;;;;;;;;:22;;;16567:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;17112:1:::1;17075:40;;17096:6;::::0;::::1;;;;;;;;17075:40;;;;;;;;;;;;17143:1;17126:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;17005:148::o:0;35859:84::-;16585:12;:10;:12::i;:::-;16575:22;;:6;;;;;;;;;;:22;;;16567:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35928:7:::1;;35913:12;:22;;;;35859:84::o:0;28414:30::-;;;;;;;;;;;;;:::o;36657:164::-;16585:12;:10;:12::i;:::-;16575:22;;:6;;;;;;;;;;:22;;;16567:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36768:13:::1;:22;;:45;36791:21;36768:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;36657:164:::0;:::o;28939:46::-;;;;:::o;32539:120::-;32607:4;32631:11;:20;32643:7;32631:20;;;;;;;;;;;;;;;;;;;;;;;;;32624:27;;32539:120;;;:::o;16363:79::-;16401:7;16428:6;;;;;;;;;;;16421:13;;16363:79;:::o;30274:87::-;30313:13;30346:7;30339:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30274:87;:::o;32131:400::-;32251:4;32273:228;32296:12;:10;:12::i;:::-;32323:7;32345:145;32402:15;32345:145;;;;;;;;;;;;;;;;;:11;:25;32357:12;:10;:12::i;:::-;32345:25;;;;;;;;;;;;;;;:34;32371:7;32345:34;;;;;;;;;;;;;;;;:38;;:145;;;;;:::i;:::-;32273:8;:228::i;:::-;32519:4;32512:11;;32131:400;;;;:::o;36829:77::-;16585:12;:10;:12::i;:::-;16575:22;;:6;;;;;;;;;;:22;;;16567:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36894:4:::1;36883:8;;:15;;;;;;;;;;;;;;;;;;36829:77::o:0;18060:341::-;18144:10;18126:28;;:14;;;;;;;;;;;:28;;;18104:113;;;;;;;;;;;;:::i;:::-;;;;;;;;;18254:9;;18236:15;:27;18228:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;18344:14;;;;;;;;;;;18315:44;;18336:6;;;;;;;;;;18315:44;;;;;;;;;;;;18379:14;;;;;;;;;;;18370:6;;:23;;;;;;;;;;;;;;;;;;18060:341::o;30769:199::-;30874:4;30896:42;30906:12;:10;:12::i;:::-;30920:9;30931:6;30896:9;:42::i;:::-;30956:4;30949:11;;30769:199;;;;:::o;17597:89::-;17642:7;17669:9;;17662:16;;17597:89;:::o;36914:171::-;16585:12;:10;:12::i;:::-;16575:22;;:6;;;;;;;;;;:22;;;16567:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;37015:8:::1;36991:21;;:32;;;;;;;;;;;;;;;;;;37039:38;37068:8;37039:38;;;;;;:::i;:::-;;;;;;;;36914:171:::0;:::o;28992:72::-;;;;:::o;17762:226::-;16585:12;:10;:12::i;:::-;16575:22;;:6;;;;;;;;;;:22;;;16567:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;17843:6:::1;::::0;::::1;;;;;;;;17826:14;;:23;;;;;;;;;;;;;;;;;;17877:1;17860:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;17920:4;17902:15;:22;;;;:::i;:::-;17890:9;:34;;;;17977:1;17940:40;;17961:6;::::0;::::1;;;;;;;;17940:40;;;;;;;;;;;;17762:226:::0;:::o;30976:184::-;31093:7;31125:11;:18;31137:5;31125:18;;;;;;;;;;;;;;;:27;31144:7;31125:27;;;;;;;;;;;;;;;;31118:34;;30976:184;;;;:::o;35615:110::-;16585:12;:10;:12::i;:::-;16575:22;;:6;;;;;;;;;;:22;;;16567:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35712:5:::1;35682:18;:27;35701:7;35682:27;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;35615:110:::0;:::o;17308:281::-;16585:12;:10;:12::i;:::-;16575:22;;:6;;;;;;;;;;:22;;;16567:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;17431:1:::1;17411:22;;:8;:22;;::::0;17389:110:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;17544:8;17515:38;;17536:6;::::0;::::1;;;;;;;;17515:38;;;;;;;;;;;;17573:8;17564:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;17308:281:::0;:::o;32762:205::-;32799:14;32816:12;:10;:12::i;:::-;32799:29;;32839:16;32858:10;;32839:29;;32909:2;32895:13;;:16;;;;:::i;:::-;32879:13;:32;;;;32946:13;;32922:21;:37;;;;32788:179;;32762:205::o;8338:98::-;8391:7;8418:10;8411:17;;8338:98;:::o;41053:371::-;41197:1;41180:19;;:5;:19;;;41172:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41278:1;41259:21;;:7;:21;;;41251:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41362:6;41332:11;:18;41344:5;41332:18;;;;;;;;;;;;;;;:27;41351:7;41332:27;;;;;;;;;;;;;;;:36;;;;41400:7;41384:32;;41393:5;41384:32;;;41409:6;41384:32;;;;;;:::i;:::-;;;;;;;;41053:371;;;:::o;41432:1833::-;41570:1;41554:18;;:4;:18;;;41546:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41647:1;41633:16;;:2;:16;;;41625:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;41717:1;41708:6;:10;41700:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;41787:7;:5;:7::i;:::-;41779:15;;:4;:15;;;;:32;;;;;41804:7;:5;:7::i;:::-;41798:13;;:2;:13;;;;41779:32;41775:175;;;41862:12;;41852:6;:22;;41826:124;;;;;;;;;;;;:::i;:::-;;;;;;;;;41775:175;42245:28;42276:24;42294:4;42276:9;:24::i;:::-;42245:55;;42341:12;;42317:20;:36;42313:104;;42393:12;;42370:35;;42313:104;42429:24;42493:29;;42456:20;:66;;42429:93;;42551:19;:53;;;;;42588:16;;;;;;;;;;;42587:17;42551:53;:91;;;;;42629:13;42621:21;;:4;:21;;;;42551:91;:129;;;;;42659:21;;;;;;;;;;;42551:129;42533:318;;;42730:29;;42707:52;;42803:36;42818:20;42803:14;:36::i;:::-;42533:318;42924:12;42939:4;42924:19;;43044:18;:24;43063:4;43044:24;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;43072:18;:22;43091:2;43072:22;;;;;;;;;;;;;;;;;;;;;;;;;43044:50;43040:98;;;43121:5;43111:15;;43040:98;43216:41;43231:4;43237:2;43241:6;43249:7;43216:14;:41::i;:::-;41535:1730;;;41432:1833;;;:::o;4567:226::-;4687:7;4720:1;4715;:6;;4723:12;4707:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;4747:9;4763:1;4759;:5;;;;:::i;:::-;4747:17;;4784:1;4777:8;;;4567:226;;;;;:::o;39073:164::-;39115:7;39136:15;39153;39172:19;:17;:19::i;:::-;39135:56;;;;39209:20;39221:7;39209;:11;;:20;;;;:::i;:::-;39202:27;;;;39073:164;:::o;5999:132::-;6057:7;6084:39;6088:1;6091;6084:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;6077:46;;5999:132;;;;:::o;3664:181::-;3722:7;3742:9;3758:1;3754;:5;;;;:::i;:::-;3742:17;;3783:1;3778;:6;;3770:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;3836:1;3829:8;;;3664:181;;;;:::o;37341:742::-;37441:7;37463;37485;37507;37529;37551;37601:23;37639:12;37666:18;37698:20;37710:7;37698:11;:20::i;:::-;37586:132;;;;;;37730:15;37747:23;37772:12;37788:113;37814:7;37836:4;37855:10;37880;:8;:10::i;:::-;37788:11;:113::i;:::-;37729:172;;;;;;37934:7;37956:15;37986:4;38005:15;38035:4;38054:10;37912:163;;;;;;;;;;;;;;;;;;37341:742;;;;;;;:::o;43273:1174::-;29384:4;29365:16;;:23;;;;;;;;;;;;;;;;;;43446:12:::1;43461:27;43486:1;43461:20;:24;;:27;;;;:::i;:::-;43446:42;;43499:17;43519:30;43544:4;43519:20;:24;;:30;;;;:::i;:::-;43499:50;;43827:22;43852:21;43827:46;;43918:22;43935:4;43918:16;:22::i;:::-;44071:18;44092:41;44118:14;44092:21;:25;;:41;;;;:::i;:::-;44071:62;;44144:22;44169:27;44192:3;44169:18;44184:2;44169:10;:14;;:18;;;;:::i;:::-;:22;;:27;;;;:::i;:::-;44144:52;;44215:15;;;;;;;;;;;44207:33;;:49;44241:14;44207:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;44281:14;44267:28;;;;;:::i;:::-;;;44343:35;44356:9;44367:10;44343:12;:35::i;:::-;44396:43;44411:4;44417:10;44429:9;44396:43;;;;;;;;:::i;:::-;;;;;;;;43347:1100;;;;;29430:5:::0;29411:16;;:24;;;;;;;;;;;;;;;;;;43273:1174;:::o;45646:968::-;45802:8;;;;;;;;;;;45797:116;;45845:7;:5;:7::i;:::-;45835:17;;:6;:17;;;45827:26;;;;;;45797:116;45932:7;45927:28;;45941:14;:12;:14::i;:::-;45927:28;45972:11;:19;45984:6;45972:19;;;;;;;;;;;;;;;;;;;;;;;;;:46;;;;;45996:11;:22;46008:9;45996:22;;;;;;;;;;;;;;;;;;;;;;;;;45995:23;45972:46;45968:597;;;46035:48;46057:6;46065:9;46076:6;46035:21;:48::i;:::-;45968:597;;;46106:11;:19;46118:6;46106:19;;;;;;;;;;;;;;;;;;;;;;;;;46105:20;:46;;;;;46129:11;:22;46141:9;46129:22;;;;;;;;;;;;;;;;;;;;;;;;;46105:46;46101:464;;;46168:46;46188:6;46196:9;46207:6;46168:19;:46::i;:::-;46101:464;;;46237:11;:19;46249:6;46237:19;;;;;;;;;;;;;;;;;;;;;;;;;46236:20;:47;;;;;46261:11;:22;46273:9;46261:22;;;;;;;;;;;;;;;;;;;;;;;;;46260:23;46236:47;46232:333;;;46300:44;46318:6;46326:9;46337:6;46300:17;:44::i;:::-;46232:333;;;46366:11;:19;46378:6;46366:19;;;;;;;;;;;;;;;;;;;;;;;;;:45;;;;;46389:11;:22;46401:9;46389:22;;;;;;;;;;;;;;;;;;;;;;;;;46366:45;46362:203;;;46428:48;46450:6;46458:9;46469:6;46428:21;:48::i;:::-;46362:203;;;46509:44;46527:6;46535:9;46546:6;46509:17;:44::i;:::-;46362:203;46232:333;46101:464;45968:597;46582:7;46577:29;;46591:15;:13;:15::i;:::-;46577:29;45646:968;;;;:::o;39245:605::-;39296:7;39305;39325:15;39343:7;;39325:25;;39361:15;39379:7;;39361:25;;39402:9;39397:338;39421:9;:16;;;;39417:1;:20;39397:338;;;39505:7;39481;:21;39489:9;39499:1;39489:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;39481:21;;;;;;;;;;;;;;;;:31;:83;;;;39557:7;39533;:21;39541:9;39551:1;39541:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;39533:21;;;;;;;;;;;;;;;;:31;39481:83;39459:146;;;39588:7;;39597;;39580:25;;;;;;;;;39459:146;39630:34;39642:7;:21;39650:9;39660:1;39650:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;39642:21;;;;;;;;;;;;;;;;39630:7;:11;;:34;;;;:::i;:::-;39620:44;;39689:34;39701:7;:21;39709:9;39719:1;39709:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;39701:21;;;;;;;;;;;;;;;;39689:7;:11;;:34;;;;:::i;:::-;39679:44;;39439:3;;;;;:::i;:::-;;;;39397:338;;;;39759:20;39771:7;;39759;;:11;;:20;;;;:::i;:::-;39749:7;:30;39745:61;;;39789:7;;39798;;39781:25;;;;;;;;39745:61;39825:7;39834;39817:25;;;;;;39245:605;;;:::o;6627:312::-;6747:7;6779:1;6775;:5;6782:12;6767:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;6806:9;6822:1;6818;:5;;;;:::i;:::-;6806:17;;6930:1;6923:8;;;6627:312;;;;;:::o;38091:412::-;38192:7;38214;38236;38271:12;38286:24;38302:7;38286:15;:24::i;:::-;38271:39;;38321:18;38342:30;38364:7;38342:21;:30::i;:::-;38321:51;;38383:23;38409:33;38431:10;38409:17;38421:4;38409:7;:11;;:17;;;;:::i;:::-;:21;;:33;;;;:::i;:::-;38383:59;;38461:15;38478:4;38484:10;38453:42;;;;;;;;;38091:412;;;;;:::o;38511:554::-;38710:7;38732;38754;38789:15;38807:24;38819:11;38807:7;:11;;:24;;;;:::i;:::-;38789:42;;38842:12;38857:21;38866:11;38857:4;:8;;:21;;;;:::i;:::-;38842:36;;38889:18;38910:27;38925:11;38910:10;:14;;:27;;;;:::i;:::-;38889:48;;38948:23;38974:33;38996:10;38974:17;38986:4;38974:7;:11;;:17;;;;:::i;:::-;:21;;:33;;;;:::i;:::-;38948:59;;39026:7;39035:15;39052:4;39018:39;;;;;;;;;;38511:554;;;;;;;;:::o;4128:136::-;4186:7;4213:43;4217:1;4220;4213:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;4206:50;;4128:136;;;;:::o;44455:589::-;44581:21;44619:1;44605:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44581:40;;44650:4;44632;44637:1;44632:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;44676:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;44666:4;44671:1;44666:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;44711:62;44728:4;44743:15;44761:11;44711:8;:62::i;:::-;44812:15;:66;;;44893:11;44919:1;44963:4;44990;45010:15;44812:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44510:534;44455:589;:::o;5052:471::-;5110:7;5360:1;5355;:6;5351:47;;5385:1;5378:8;;;;5351:47;5410:9;5426:1;5422;:5;;;;:::i;:::-;5410:17;;5455:1;5450;5446;:5;;;;:::i;:::-;:10;5438:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;5514:1;5507:8;;;5052:471;;;;;:::o;45052:513::-;45200:62;45217:4;45232:15;45250:11;45200:8;:62::i;:::-;45305:15;:31;;;45344:9;45377:4;45397:11;45423:1;45466;45509:7;:5;:7::i;:::-;45531:15;45305:252;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;45052:513;;:::o;40541:235::-;40599:1;40588:7;;:12;:34;;;;;40621:1;40604:13;;:18;40588:34;40624:7;40584:47;40661:7;;40643:15;:25;;;;40703:13;;40679:21;:37;;;;40739:1;40729:7;:11;;;;40767:1;40751:13;:17;;;;40541:235;:::o;47961:686::-;48112:15;48142:23;48180:12;48207:23;48245:12;48272:18;48304:19;48315:7;48304:10;:19::i;:::-;48097:226;;;;;;;;;;;;48352:28;48372:7;48352;:15;48360:6;48352:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;48334:7;:15;48342:6;48334:15;;;;;;;;;;;;;;;:46;;;;48409:28;48429:7;48409;:15;48417:6;48409:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;48391:7;:15;48399:6;48391:15;;;;;;;;;;;;;;;:46;;;;48469:39;48492:15;48469:7;:18;48477:9;48469:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;48448:7;:18;48456:9;48448:18;;;;;;;;;;;;;;;:60;;;;48519:26;48534:10;48519:14;:26::i;:::-;48556:23;48568:4;48574;48556:11;:23::i;:::-;48612:9;48595:44;;48604:6;48595:44;;;48623:15;48595:44;;;;;;:::i;:::-;;;;;;;;48086:561;;;;;;47961:686;;;:::o;47255:698::-;47404:15;47434:23;47472:12;47499:23;47537:12;47564:18;47596:19;47607:7;47596:10;:19::i;:::-;47389:226;;;;;;;;;;;;47644:28;47664:7;47644;:15;47652:6;47644:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;47626:7;:15;47634:6;47626:15;;;;;;;;;;;;;;;:46;;;;47704:39;47727:15;47704:7;:18;47712:9;47704:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;47683:7;:18;47691:9;47683:18;;;;;;;;;;;;;;;:60;;;;47775:39;47798:15;47775:7;:18;47783:9;47775:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;47754:7;:18;47762:9;47754:18;;;;;;;;;;;;;;;:60;;;;47825:26;47840:10;47825:14;:26::i;:::-;47862:23;47874:4;47880;47862:11;:23::i;:::-;47918:9;47901:44;;47910:6;47901:44;;;47929:15;47901:44;;;;;;:::i;:::-;;;;;;;;47378:575;;;;;;47255:698;;;:::o;46622:625::-;46769:15;46799:23;46837:12;46864:23;46902:12;46929:18;46961:19;46972:7;46961:10;:19::i;:::-;46754:226;;;;;;;;;;;;47009:28;47029:7;47009;:15;47017:6;47009:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;46991:7;:15;46999:6;46991:15;;;;;;;;;;;;;;;:46;;;;47069:39;47092:15;47069:7;:18;47077:9;47069:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;47048:7;:18;47056:9;47048:18;;;;;;;;;;;;;;;:60;;;;47119:26;47134:10;47119:14;:26::i;:::-;47156:23;47168:4;47174;47156:11;:23::i;:::-;47212:9;47195:44;;47204:6;47195:44;;;47223:15;47195:44;;;;;;:::i;:::-;;;;;;;;46743:504;;;;;;46622:625;;;:::o;34731:757::-;34882:15;34912:23;34950:12;34977:23;35015:12;35042:18;35074:19;35085:7;35074:10;:19::i;:::-;34867:226;;;;;;;;;;;;35122:28;35142:7;35122;:15;35130:6;35122:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;35104:7;:15;35112:6;35104:15;;;;;;;;;;;;;;;:46;;;;35179:28;35199:7;35179;:15;35187:6;35179:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;35161:7;:15;35169:6;35161:15;;;;;;;;;;;;;;;:46;;;;35239:39;35262:15;35239:7;:18;35247:9;35239:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;35218:7;:18;35226:9;35218:18;;;;;;;;;;;;;;;:60;;;;35310:39;35333:15;35310:7;:18;35318:9;35310:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;35289:7;:18;35297:9;35289:18;;;;;;;;;;;;;;;:60;;;;35360:26;35375:10;35360:14;:26::i;:::-;35397:23;35409:4;35415;35397:11;:23::i;:::-;35453:9;35436:44;;35445:6;35436:44;;;35464:15;35436:44;;;;;;:::i;:::-;;;;;;;;34856:632;;;;;;34731:757;;;:::o;40784:125::-;40838:15;;40828:7;:25;;;;40880:21;;40864:13;:37;;;;40784:125::o;40221:130::-;40285:7;40312:31;40337:5;40312:20;40324:7;;40312;:11;;:20;;;;:::i;:::-;:24;;:31;;;;:::i;:::-;40305:38;;40221:130;;;:::o;40359:174::-;40456:7;40488:37;40519:5;40488:26;40500:13;;40488:7;:11;;:26;;;;:::i;:::-;:30;;:37;;;;:::i;:::-;40481:44;;40359:174;;;:::o;39858:355::-;39921:19;39943:10;:8;:10::i;:::-;39921:32;;39964:18;39985:27;40000:11;39985:10;:14;;:27;;;;:::i;:::-;39964:48;;40048:38;40075:10;40048:7;:22;40064:4;40048:22;;;;;;;;;;;;;;;;:26;;:38;;;;:::i;:::-;40023:7;:22;40039:4;40023:22;;;;;;;;;;;;;;;:63;;;;40101:11;:26;40121:4;40101:26;;;;;;;;;;;;;;;;;;;;;;;;;40097:108;;;40167:38;40194:10;40167:7;:22;40183:4;40167:22;;;;;;;;;;;;;;;;:26;;:38;;;;:::i;:::-;40142:7;:22;40158:4;40142:22;;;;;;;;;;;;;;;:63;;;;40097:108;39910:303;;39858:355;:::o;37186:147::-;37264:17;37276:4;37264:7;;:11;;:17;;;;:::i;:::-;37254:7;:27;;;;37305:20;37320:4;37305:10;;:14;;:20;;;;:::i;:::-;37292:10;:33;;;;37186:147;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:307::-;355:1;365:113;379:6;376:1;373:13;365:113;;;464:1;459:3;455:11;449:18;445:1;440:3;436:11;429:39;401:2;398:1;394:10;389:15;;365:113;;;496:6;493:1;490:13;487:101;;;576:1;567:6;562:3;558:16;551:27;487:101;336:258;287:307;;;:::o;600:102::-;641:6;692:2;688:7;683:2;676:5;672:14;668:28;658:38;;600:102;;;:::o;708:364::-;796:3;824:39;857:5;824:39;:::i;:::-;879:71;943:6;938:3;879:71;:::i;:::-;872:78;;959:52;1004:6;999:3;992:4;985:5;981:16;959:52;:::i;:::-;1036:29;1058:6;1036:29;:::i;:::-;1031:3;1027:39;1020:46;;800:272;708:364;;;;:::o;1078:313::-;1191:4;1229:2;1218:9;1214:18;1206:26;;1278:9;1272:4;1268:20;1264:1;1253:9;1249:17;1242:47;1306:78;1379:4;1370:6;1306:78;:::i;:::-;1298:86;;1078:313;;;;:::o;1478:117::-;1587:1;1584;1577:12;1724:126;1761:7;1801:42;1794:5;1790:54;1779:65;;1724:126;;;:::o;1856:96::-;1893:7;1922:24;1940:5;1922:24;:::i;:::-;1911:35;;1856:96;;;:::o;1958:122::-;2031:24;2049:5;2031:24;:::i;:::-;2024:5;2021:35;2011:63;;2070:1;2067;2060:12;2011:63;1958:122;:::o;2086:139::-;2132:5;2170:6;2157:20;2148:29;;2186:33;2213:5;2186:33;:::i;:::-;2086:139;;;;:::o;2231:77::-;2268:7;2297:5;2286:16;;2231:77;;;:::o;2314:122::-;2387:24;2405:5;2387:24;:::i;:::-;2380:5;2377:35;2367:63;;2426:1;2423;2416:12;2367:63;2314:122;:::o;2442:139::-;2488:5;2526:6;2513:20;2504:29;;2542:33;2569:5;2542:33;:::i;:::-;2442:139;;;;:::o;2587:474::-;2655:6;2663;2712:2;2700:9;2691:7;2687:23;2683:32;2680:119;;;2718:79;;:::i;:::-;2680:119;2838:1;2863:53;2908:7;2899:6;2888:9;2884:22;2863:53;:::i;:::-;2853:63;;2809:117;2965:2;2991:53;3036:7;3027:6;3016:9;3012:22;2991:53;:::i;:::-;2981:63;;2936:118;2587:474;;;;;:::o;3067:90::-;3101:7;3144:5;3137:13;3130:21;3119:32;;3067:90;;;:::o;3163:109::-;3244:21;3259:5;3244:21;:::i;:::-;3239:3;3232:34;3163:109;;:::o;3278:210::-;3365:4;3403:2;3392:9;3388:18;3380:26;;3416:65;3478:1;3467:9;3463:17;3454:6;3416:65;:::i;:::-;3278:210;;;;:::o;3494:118::-;3581:24;3599:5;3581:24;:::i;:::-;3576:3;3569:37;3494:118;;:::o;3618:222::-;3711:4;3749:2;3738:9;3734:18;3726:26;;3762:71;3830:1;3819:9;3815:17;3806:6;3762:71;:::i;:::-;3618:222;;;;:::o;3846:60::-;3874:3;3895:5;3888:12;;3846:60;;;:::o;3912:142::-;3962:9;3995:53;4013:34;4022:24;4040:5;4022:24;:::i;:::-;4013:34;:::i;:::-;3995:53;:::i;:::-;3982:66;;3912:142;;;:::o;4060:126::-;4110:9;4143:37;4174:5;4143:37;:::i;:::-;4130:50;;4060:126;;;:::o;4192:153::-;4269:9;4302:37;4333:5;4302:37;:::i;:::-;4289:50;;4192:153;;;:::o;4351:185::-;4465:64;4523:5;4465:64;:::i;:::-;4460:3;4453:77;4351:185;;:::o;4542:276::-;4662:4;4700:2;4689:9;4685:18;4677:26;;4713:98;4808:1;4797:9;4793:17;4784:6;4713:98;:::i;:::-;4542:276;;;;:::o;4824:619::-;4901:6;4909;4917;4966:2;4954:9;4945:7;4941:23;4937:32;4934:119;;;4972:79;;:::i;:::-;4934:119;5092:1;5117:53;5162:7;5153:6;5142:9;5138:22;5117:53;:::i;:::-;5107:63;;5063:117;5219:2;5245:53;5290:7;5281:6;5270:9;5266:22;5245:53;:::i;:::-;5235:63;;5190:118;5347:2;5373:53;5418:7;5409:6;5398:9;5394:22;5373:53;:::i;:::-;5363:63;;5318:118;4824:619;;;;;:::o;5449:329::-;5508:6;5557:2;5545:9;5536:7;5532:23;5528:32;5525:119;;;5563:79;;:::i;:::-;5525:119;5683:1;5708:53;5753:7;5744:6;5733:9;5729:22;5708:53;:::i;:::-;5698:63;;5654:117;5449:329;;;;:::o;5784:86::-;5819:7;5859:4;5852:5;5848:16;5837:27;;5784:86;;;:::o;5876:112::-;5959:22;5975:5;5959:22;:::i;:::-;5954:3;5947:35;5876:112;;:::o;5994:214::-;6083:4;6121:2;6110:9;6106:18;6098:26;;6134:67;6198:1;6187:9;6183:17;6174:6;6134:67;:::i;:::-;5994:214;;;;:::o;6214:329::-;6273:6;6322:2;6310:9;6301:7;6297:23;6293:32;6290:119;;;6328:79;;:::i;:::-;6290:119;6448:1;6473:53;6518:7;6509:6;6498:9;6494:22;6473:53;:::i;:::-;6463:63;;6419:117;6214:329;;;;:::o;6549:109::-;6599:7;6628:24;6646:5;6628:24;:::i;:::-;6617:35;;6549:109;;;:::o;6664:148::-;6750:37;6781:5;6750:37;:::i;:::-;6743:5;6740:48;6730:76;;6802:1;6799;6792:12;6730:76;6664:148;:::o;6818:165::-;6877:5;6915:6;6902:20;6893:29;;6931:46;6971:5;6931:46;:::i;:::-;6818:165;;;;:::o;6989:500::-;7070:6;7078;7127:2;7115:9;7106:7;7102:23;7098:32;7095:119;;;7133:79;;:::i;:::-;7095:119;7253:1;7278:66;7336:7;7327:6;7316:9;7312:22;7278:66;:::i;:::-;7268:76;;7224:130;7393:2;7419:53;7464:7;7455:6;7444:9;7440:22;7419:53;:::i;:::-;7409:63;;7364:118;6989:500;;;;;:::o;7495:116::-;7565:21;7580:5;7565:21;:::i;:::-;7558:5;7555:32;7545:60;;7601:1;7598;7591:12;7545:60;7495:116;:::o;7617:133::-;7660:5;7698:6;7685:20;7676:29;;7714:30;7738:5;7714:30;:::i;:::-;7617:133;;;;:::o;7756:468::-;7821:6;7829;7878:2;7866:9;7857:7;7853:23;7849:32;7846:119;;;7884:79;;:::i;:::-;7846:119;8004:1;8029:53;8074:7;8065:6;8054:9;8050:22;8029:53;:::i;:::-;8019:63;;7975:117;8131:2;8157:50;8199:7;8190:6;8179:9;8175:22;8157:50;:::i;:::-;8147:60;;8102:115;7756:468;;;;;:::o;8230:118::-;8317:24;8335:5;8317:24;:::i;:::-;8312:3;8305:37;8230:118;;:::o;8354:222::-;8447:4;8485:2;8474:9;8470:18;8462:26;;8498:71;8566:1;8555:9;8551:17;8542:6;8498:71;:::i;:::-;8354:222;;;;:::o;8582:104::-;8627:7;8656:24;8674:5;8656:24;:::i;:::-;8645:35;;8582:104;;;:::o;8692:138::-;8773:32;8799:5;8773:32;:::i;:::-;8766:5;8763:43;8753:71;;8820:1;8817;8810:12;8753:71;8692:138;:::o;8836:155::-;8890:5;8928:6;8915:20;8906:29;;8944:41;8979:5;8944:41;:::i;:::-;8836:155;;;;:::o;8997:345::-;9064:6;9113:2;9101:9;9092:7;9088:23;9084:32;9081:119;;;9119:79;;:::i;:::-;9081:119;9239:1;9264:61;9317:7;9308:6;9297:9;9293:22;9264:61;:::i;:::-;9254:71;;9210:125;8997:345;;;;:::o;9348:323::-;9404:6;9453:2;9441:9;9432:7;9428:23;9424:32;9421:119;;;9459:79;;:::i;:::-;9421:119;9579:1;9604:50;9646:7;9637:6;9626:9;9622:22;9604:50;:::i;:::-;9594:60;;9550:114;9348:323;;;;:::o;9677:474::-;9745:6;9753;9802:2;9790:9;9781:7;9777:23;9773:32;9770:119;;;9808:79;;:::i;:::-;9770:119;9928:1;9953:53;9998:7;9989:6;9978:9;9974:22;9953:53;:::i;:::-;9943:63;;9899:117;10055:2;10081:53;10126:7;10117:6;10106:9;10102:22;10081:53;:::i;:::-;10071:63;;10026:118;9677:474;;;;;:::o;10157:180::-;10205:77;10202:1;10195:88;10302:4;10299:1;10292:15;10326:4;10323:1;10316:15;10343:320;10387:6;10424:1;10418:4;10414:12;10404:22;;10471:1;10465:4;10461:12;10492:18;10482:81;;10548:4;10540:6;10536:17;10526:27;;10482:81;10610:2;10602:6;10599:14;10579:18;10576:38;10573:84;;10629:18;;:::i;:::-;10573:84;10394:269;10343:320;;;:::o;10669:182::-;10809:34;10805:1;10797:6;10793:14;10786:58;10669:182;:::o;10857:366::-;10999:3;11020:67;11084:2;11079:3;11020:67;:::i;:::-;11013:74;;11096:93;11185:3;11096:93;:::i;:::-;11214:2;11209:3;11205:12;11198:19;;10857:366;;;:::o;11229:419::-;11395:4;11433:2;11422:9;11418:18;11410:26;;11482:9;11476:4;11472:20;11468:1;11457:9;11453:17;11446:47;11510:131;11636:4;11510:131;:::i;:::-;11502:139;;11229:419;;;:::o;11654:239::-;11794:34;11790:1;11782:6;11778:14;11771:58;11863:22;11858:2;11850:6;11846:15;11839:47;11654:239;:::o;11899:366::-;12041:3;12062:67;12126:2;12121:3;12062:67;:::i;:::-;12055:74;;12138:93;12227:3;12138:93;:::i;:::-;12256:2;12251:3;12247:12;12240:19;;11899:366;;;:::o;12271:419::-;12437:4;12475:2;12464:9;12460:18;12452:26;;12524:9;12518:4;12514:20;12510:1;12499:9;12495:17;12488:47;12552:131;12678:4;12552:131;:::i;:::-;12544:139;;12271:419;;;:::o;12696:180::-;12744:77;12741:1;12734:88;12841:4;12838:1;12831:15;12865:4;12862:1;12855:15;12882:348;12922:7;12945:20;12963:1;12945:20;:::i;:::-;12940:25;;12979:20;12997:1;12979:20;:::i;:::-;12974:25;;13167:1;13099:66;13095:74;13092:1;13089:81;13084:1;13077:9;13070:17;13066:105;13063:131;;;13174:18;;:::i;:::-;13063:131;13222:1;13219;13215:9;13204:20;;12882:348;;;;:::o;13236:229::-;13376:34;13372:1;13364:6;13360:14;13353:58;13445:12;13440:2;13432:6;13428:15;13421:37;13236:229;:::o;13471:366::-;13613:3;13634:67;13698:2;13693:3;13634:67;:::i;:::-;13627:74;;13710:93;13799:3;13710:93;:::i;:::-;13828:2;13823:3;13819:12;13812:19;;13471:366;;;:::o;13843:419::-;14009:4;14047:2;14036:9;14032:18;14024:26;;14096:9;14090:4;14086:20;14082:1;14071:9;14067:17;14060:47;14124:131;14250:4;14124:131;:::i;:::-;14116:139;;13843:419;;;:::o;14268:177::-;14408:29;14404:1;14396:6;14392:14;14385:53;14268:177;:::o;14451:366::-;14593:3;14614:67;14678:2;14673:3;14614:67;:::i;:::-;14607:74;;14690:93;14779:3;14690:93;:::i;:::-;14808:2;14803:3;14799:12;14792:19;;14451:366;;;:::o;14823:419::-;14989:4;15027:2;15016:9;15012:18;15004:26;;15076:9;15070:4;15066:20;15062:1;15051:9;15047:17;15040:47;15104:131;15230:4;15104:131;:::i;:::-;15096:139;;14823:419;;;:::o;15248:180::-;15296:77;15293:1;15286:88;15393:4;15390:1;15383:15;15417:4;15414:1;15407:15;15434:191;15474:4;15494:20;15512:1;15494:20;:::i;:::-;15489:25;;15528:20;15546:1;15528:20;:::i;:::-;15523:25;;15567:1;15564;15561:8;15558:34;;;15572:18;;:::i;:::-;15558:34;15617:1;15614;15610:9;15602:17;;15434:191;;;;:::o;15631:180::-;15679:77;15676:1;15669:88;15776:4;15773:1;15766:15;15800:4;15797:1;15790:15;15817:233;15856:3;15879:24;15897:5;15879:24;:::i;:::-;15870:33;;15925:66;15918:5;15915:77;15912:103;;15995:18;;:::i;:::-;15912:103;16042:1;16035:5;16031:13;16024:20;;15817:233;;;:::o;16056:143::-;16113:5;16144:6;16138:13;16129:22;;16160:33;16187:5;16160:33;:::i;:::-;16056:143;;;;:::o;16205:351::-;16275:6;16324:2;16312:9;16303:7;16299:23;16295:32;16292:119;;;16330:79;;:::i;:::-;16292:119;16450:1;16475:64;16531:7;16522:6;16511:9;16507:22;16475:64;:::i;:::-;16465:74;;16421:128;16205:351;;;;:::o;16562:332::-;16683:4;16721:2;16710:9;16706:18;16698:26;;16734:71;16802:1;16791:9;16787:17;16778:6;16734:71;:::i;:::-;16815:72;16883:2;16872:9;16868:18;16859:6;16815:72;:::i;:::-;16562:332;;;;;:::o;16900:137::-;16954:5;16985:6;16979:13;16970:22;;17001:30;17025:5;17001:30;:::i;:::-;16900:137;;;;:::o;17043:345::-;17110:6;17159:2;17147:9;17138:7;17134:23;17130:32;17127:119;;;17165:79;;:::i;:::-;17127:119;17285:1;17310:61;17363:7;17354:6;17343:9;17339:22;17310:61;:::i;:::-;17300:71;;17256:125;17043:345;;;;:::o;17394:181::-;17534:33;17530:1;17522:6;17518:14;17511:57;17394:181;:::o;17581:366::-;17723:3;17744:67;17808:2;17803:3;17744:67;:::i;:::-;17737:74;;17820:93;17909:3;17820:93;:::i;:::-;17938:2;17933:3;17929:12;17922:19;;17581:366;;;:::o;17953:419::-;18119:4;18157:2;18146:9;18142:18;18134:26;;18206:9;18200:4;18196:20;18192:1;18181:9;18177:17;18170:47;18234:131;18360:4;18234:131;:::i;:::-;18226:139;;17953:419;;;:::o;18378:222::-;18518:34;18514:1;18506:6;18502:14;18495:58;18587:5;18582:2;18574:6;18570:15;18563:30;18378:222;:::o;18606:366::-;18748:3;18769:67;18833:2;18828:3;18769:67;:::i;:::-;18762:74;;18845:93;18934:3;18845:93;:::i;:::-;18963:2;18958:3;18954:12;18947:19;;18606:366;;;:::o;18978:419::-;19144:4;19182:2;19171:9;19167:18;19159:26;;19231:9;19225:4;19221:20;19217:1;19206:9;19202:17;19195:47;19259:131;19385:4;19259:131;:::i;:::-;19251:139;;18978:419;;;:::o;19403:181::-;19543:33;19539:1;19531:6;19527:14;19520:57;19403:181;:::o;19590:366::-;19732:3;19753:67;19817:2;19812:3;19753:67;:::i;:::-;19746:74;;19829:93;19918:3;19829:93;:::i;:::-;19947:2;19942:3;19938:12;19931:19;;19590:366;;;:::o;19962:419::-;20128:4;20166:2;20155:9;20151:18;20143:26;;20215:9;20209:4;20205:20;20201:1;20190:9;20186:17;20179:47;20243:131;20369:4;20243:131;:::i;:::-;20235:139;;19962:419;;;:::o;20387:305::-;20427:3;20446:20;20464:1;20446:20;:::i;:::-;20441:25;;20480:20;20498:1;20480:20;:::i;:::-;20475:25;;20634:1;20566:66;20562:74;20559:1;20556:81;20553:107;;;20640:18;;:::i;:::-;20553:107;20684:1;20681;20677:9;20670:16;;20387:305;;;;:::o;20698:225::-;20838:34;20834:1;20826:6;20822:14;20815:58;20907:8;20902:2;20894:6;20890:15;20883:33;20698:225;:::o;20929:366::-;21071:3;21092:67;21156:2;21151:3;21092:67;:::i;:::-;21085:74;;21168:93;21257:3;21168:93;:::i;:::-;21286:2;21281:3;21277:12;21270:19;;20929:366;;;:::o;21301:419::-;21467:4;21505:2;21494:9;21490:18;21482:26;;21554:9;21548:4;21544:20;21540:1;21529:9;21525:17;21518:47;21582:131;21708:4;21582:131;:::i;:::-;21574:139;;21301:419;;;:::o;21726:223::-;21866:34;21862:1;21854:6;21850:14;21843:58;21935:6;21930:2;21922:6;21918:15;21911:31;21726:223;:::o;21955:366::-;22097:3;22118:67;22182:2;22177:3;22118:67;:::i;:::-;22111:74;;22194:93;22283:3;22194:93;:::i;:::-;22312:2;22307:3;22303:12;22296:19;;21955:366;;;:::o;22327:419::-;22493:4;22531:2;22520:9;22516:18;22508:26;;22580:9;22574:4;22570:20;22566:1;22555:9;22551:17;22544:47;22608:131;22734:4;22608:131;:::i;:::-;22600:139;;22327:419;;;:::o;22752:221::-;22892:34;22888:1;22880:6;22876:14;22869:58;22961:4;22956:2;22948:6;22944:15;22937:29;22752:221;:::o;22979:366::-;23121:3;23142:67;23206:2;23201:3;23142:67;:::i;:::-;23135:74;;23218:93;23307:3;23218:93;:::i;:::-;23336:2;23331:3;23327:12;23320:19;;22979:366;;;:::o;23351:419::-;23517:4;23555:2;23544:9;23540:18;23532:26;;23604:9;23598:4;23594:20;23590:1;23579:9;23575:17;23568:47;23632:131;23758:4;23632:131;:::i;:::-;23624:139;;23351:419;;;:::o;23776:224::-;23916:34;23912:1;23904:6;23900:14;23893:58;23985:7;23980:2;23972:6;23968:15;23961:32;23776:224;:::o;24006:366::-;24148:3;24169:67;24233:2;24228:3;24169:67;:::i;:::-;24162:74;;24245:93;24334:3;24245:93;:::i;:::-;24363:2;24358:3;24354:12;24347:19;;24006:366;;;:::o;24378:419::-;24544:4;24582:2;24571:9;24567:18;24559:26;;24631:9;24625:4;24621:20;24617:1;24606:9;24602:17;24595:47;24659:131;24785:4;24659:131;:::i;:::-;24651:139;;24378:419;;;:::o;24803:222::-;24943:34;24939:1;24931:6;24927:14;24920:58;25012:5;25007:2;24999:6;24995:15;24988:30;24803:222;:::o;25031:366::-;25173:3;25194:67;25258:2;25253:3;25194:67;:::i;:::-;25187:74;;25270:93;25359:3;25270:93;:::i;:::-;25388:2;25383:3;25379:12;25372:19;;25031:366;;;:::o;25403:419::-;25569:4;25607:2;25596:9;25592:18;25584:26;;25656:9;25650:4;25646:20;25642:1;25631:9;25627:17;25620:47;25684:131;25810:4;25684:131;:::i;:::-;25676:139;;25403:419;;;:::o;25828:228::-;25968:34;25964:1;25956:6;25952:14;25945:58;26037:11;26032:2;26024:6;26020:15;26013:36;25828:228;:::o;26062:366::-;26204:3;26225:67;26289:2;26284:3;26225:67;:::i;:::-;26218:74;;26301:93;26390:3;26301:93;:::i;:::-;26419:2;26414:3;26410:12;26403:19;;26062:366;;;:::o;26434:419::-;26600:4;26638:2;26627:9;26623:18;26615:26;;26687:9;26681:4;26677:20;26673:1;26662:9;26658:17;26651:47;26715:131;26841:4;26715:131;:::i;:::-;26707:139;;26434:419;;;:::o;26859:227::-;26999:34;26995:1;26987:6;26983:14;26976:58;27068:10;27063:2;27055:6;27051:15;27044:35;26859:227;:::o;27092:366::-;27234:3;27255:67;27319:2;27314:3;27255:67;:::i;:::-;27248:74;;27331:93;27420:3;27331:93;:::i;:::-;27449:2;27444:3;27440:12;27433:19;;27092:366;;;:::o;27464:419::-;27630:4;27668:2;27657:9;27653:18;27645:26;;27717:9;27711:4;27707:20;27703:1;27692:9;27688:17;27681:47;27745:131;27871:4;27745:131;:::i;:::-;27737:139;;27464:419;;;:::o;27889:177::-;28029:29;28025:1;28017:6;28013:14;28006:53;27889:177;:::o;28072:366::-;28214:3;28235:67;28299:2;28294:3;28235:67;:::i;:::-;28228:74;;28311:93;28400:3;28311:93;:::i;:::-;28429:2;28424:3;28420:12;28413:19;;28072:366;;;:::o;28444:419::-;28610:4;28648:2;28637:9;28633:18;28625:26;;28697:9;28691:4;28687:20;28683:1;28672:9;28668:17;28661:47;28725:131;28851:4;28725:131;:::i;:::-;28717:139;;28444:419;;;:::o;28869:442::-;29018:4;29056:2;29045:9;29041:18;29033:26;;29069:71;29137:1;29126:9;29122:17;29113:6;29069:71;:::i;:::-;29150:72;29218:2;29207:9;29203:18;29194:6;29150:72;:::i;:::-;29232;29300:2;29289:9;29285:18;29276:6;29232:72;:::i;:::-;28869:442;;;;;;:::o;29317:180::-;29365:77;29362:1;29355:88;29462:4;29459:1;29452:15;29486:4;29483:1;29476:15;29503:185;29543:1;29560:20;29578:1;29560:20;:::i;:::-;29555:25;;29594:20;29612:1;29594:20;:::i;:::-;29589:25;;29633:1;29623:35;;29638:18;;:::i;:::-;29623:35;29680:1;29677;29673:9;29668:14;;29503:185;;;;:::o;29694:180::-;29742:77;29739:1;29732:88;29839:4;29836:1;29829:15;29863:4;29860:1;29853:15;29880:143;29937:5;29968:6;29962:13;29953:22;;29984:33;30011:5;29984:33;:::i;:::-;29880:143;;;;:::o;30029:351::-;30099:6;30148:2;30136:9;30127:7;30123:23;30119:32;30116:119;;;30154:79;;:::i;:::-;30116:119;30274:1;30299:64;30355:7;30346:6;30335:9;30331:22;30299:64;:::i;:::-;30289:74;;30245:128;30029:351;;;;:::o;30386:85::-;30431:7;30460:5;30449:16;;30386:85;;;:::o;30477:158::-;30535:9;30568:61;30586:42;30595:32;30621:5;30595:32;:::i;:::-;30586:42;:::i;:::-;30568:61;:::i;:::-;30555:74;;30477:158;;;:::o;30641:147::-;30736:45;30775:5;30736:45;:::i;:::-;30731:3;30724:58;30641:147;;:::o;30794:114::-;30861:6;30895:5;30889:12;30879:22;;30794:114;;;:::o;30914:184::-;31013:11;31047:6;31042:3;31035:19;31087:4;31082:3;31078:14;31063:29;;30914:184;;;;:::o;31104:132::-;31171:4;31194:3;31186:11;;31224:4;31219:3;31215:14;31207:22;;31104:132;;;:::o;31242:108::-;31319:24;31337:5;31319:24;:::i;:::-;31314:3;31307:37;31242:108;;:::o;31356:179::-;31425:10;31446:46;31488:3;31480:6;31446:46;:::i;:::-;31524:4;31519:3;31515:14;31501:28;;31356:179;;;;:::o;31541:113::-;31611:4;31643;31638:3;31634:14;31626:22;;31541:113;;;:::o;31690:732::-;31809:3;31838:54;31886:5;31838:54;:::i;:::-;31908:86;31987:6;31982:3;31908:86;:::i;:::-;31901:93;;32018:56;32068:5;32018:56;:::i;:::-;32097:7;32128:1;32113:284;32138:6;32135:1;32132:13;32113:284;;;32214:6;32208:13;32241:63;32300:3;32285:13;32241:63;:::i;:::-;32234:70;;32327:60;32380:6;32327:60;:::i;:::-;32317:70;;32173:224;32160:1;32157;32153:9;32148:14;;32113:284;;;32117:14;32413:3;32406:10;;31814:608;;;31690:732;;;;:::o;32428:831::-;32691:4;32729:3;32718:9;32714:19;32706:27;;32743:71;32811:1;32800:9;32796:17;32787:6;32743:71;:::i;:::-;32824:80;32900:2;32889:9;32885:18;32876:6;32824:80;:::i;:::-;32951:9;32945:4;32941:20;32936:2;32925:9;32921:18;32914:48;32979:108;33082:4;33073:6;32979:108;:::i;:::-;32971:116;;33097:72;33165:2;33154:9;33150:18;33141:6;33097:72;:::i;:::-;33179:73;33247:3;33236:9;33232:19;33223:6;33179:73;:::i;:::-;32428:831;;;;;;;;:::o;33265:220::-;33405:34;33401:1;33393:6;33389:14;33382:58;33474:3;33469:2;33461:6;33457:15;33450:28;33265:220;:::o;33491:366::-;33633:3;33654:67;33718:2;33713:3;33654:67;:::i;:::-;33647:74;;33730:93;33819:3;33730:93;:::i;:::-;33848:2;33843:3;33839:12;33832:19;;33491:366;;;:::o;33863:419::-;34029:4;34067:2;34056:9;34052:18;34044:26;;34116:9;34110:4;34106:20;34102:1;34091:9;34087:17;34080:47;34144:131;34270:4;34144:131;:::i;:::-;34136:139;;33863:419;;;:::o;34288:807::-;34537:4;34575:3;34564:9;34560:19;34552:27;;34589:71;34657:1;34646:9;34642:17;34633:6;34589:71;:::i;:::-;34670:72;34738:2;34727:9;34723:18;34714:6;34670:72;:::i;:::-;34752:80;34828:2;34817:9;34813:18;34804:6;34752:80;:::i;:::-;34842;34918:2;34907:9;34903:18;34894:6;34842:80;:::i;:::-;34932:73;35000:3;34989:9;34985:19;34976:6;34932:73;:::i;:::-;35015;35083:3;35072:9;35068:19;35059:6;35015:73;:::i;:::-;34288:807;;;;;;;;;:::o;35101:663::-;35189:6;35197;35205;35254:2;35242:9;35233:7;35229:23;35225:32;35222:119;;;35260:79;;:::i;:::-;35222:119;35380:1;35405:64;35461:7;35452:6;35441:9;35437:22;35405:64;:::i;:::-;35395:74;;35351:128;35518:2;35544:64;35600:7;35591:6;35580:9;35576:22;35544:64;:::i;:::-;35534:74;;35489:129;35657:2;35683:64;35739:7;35730:6;35719:9;35715:22;35683:64;:::i;:::-;35673:74;;35628:129;35101:663;;;;;:::o
Swarm Source
ipfs://ab5c7e60d415f20c741332b532e32708d6f86be143d17a8b58e93d080f0f5201
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.