ERC-20
Overview
Max Total Supply
10,000,000,000,000 FRED
Holders
170
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Balance
0.845692312037228687 FREDValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
FRED
Compiler Version
v0.8.13+commit.abaa5c0e
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2023-10-16 */ // YABBA DABBA DOOOO WE GO TO THA MOOOOOON! // https://fred-token.com/ // https://twitter.com/FredTokenERC // https://t.me/FredPortal // SPDX-License-Identifier: MIT pragma solidity ^0.8.13; abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } interface IUniswapV2Pair { event Approval(address indexed owner, address indexed spender, uint value); event Transfer(address indexed from, address indexed to, uint value); function name() external pure returns (string memory); function symbol() external pure returns (string memory); function decimals() external pure returns (uint8); function totalSupply() external view returns (uint); function balanceOf(address owner) external view returns (uint); function allowance(address owner, address spender) external view returns (uint); function approve(address spender, uint value) external returns (bool); function transfer(address to, uint value) external returns (bool); function transferFrom(address from, address to, uint value) external returns (bool); function DOMAIN_SEPARATOR() external view returns (bytes32); function PERMIT_TYPEHASH() external pure returns (bytes32); function nonces(address owner) external view returns (uint); function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external; event Mint(address indexed sender, uint amount0, uint amount1); event Swap( address indexed sender, uint amount0In, uint amount1In, uint amount0Out, uint amount1Out, address indexed to ); event Sync(uint112 reserve0, uint112 reserve1); function MINIMUM_LIQUIDITY() external pure returns (uint); function factory() external view returns (address); function token0() external view returns (address); function token1() external view returns (address); function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast); function price0CumulativeLast() external view returns (uint); function price1CumulativeLast() external view returns (uint); function kLast() external view returns (uint); function mint(address to) external returns (uint liquidity); function burn(address to) external returns (uint amount0, uint amount1); function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external; function skim(address to) external; function sync() external; function initialize(address, address) external; } interface IUniswapV2Factory { event PairCreated(address indexed token0, address indexed token1, address pair, uint); function feeTo() external view returns (address); function feeToSetter() external view returns (address); function getPair(address tokenA, address tokenB) external view returns (address pair); function allPairs(uint) external view returns (address pair); function allPairsLength() external view returns (uint); function createPair(address tokenA, address tokenB) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; } interface IERC20 { /** * @dev Returns the amount of tokens in existence.... */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`... */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * * 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); } interface IERC20Metadata is IERC20 { /** * @dev Returns the name of the token. */ function name() external view returns (string memory); /** * @dev Returns the symbol of the token. */ function symbol() external view returns (string memory); /** * @dev Returns the decimals places of the token. */ function decimals() external view returns (uint8); } contract ERC20 is Context, IERC20, IERC20Metadata { using SafeMath for uint256; mapping(address => uint256) private _balances; mapping(address => mapping(address => uint256)) private _allowances; uint256 private _totalSupply; string private _name; string private _symbol; /** * @dev Sets the values for {name} and {symbol}. * * The default value of {decimals} is 18. To select a different value for * {decimals} you should overload it. * * All two of these values are immutable: they can only be set once during * construction. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev Returns the name of the token. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev Returns the symbol of the token, usually a shorter version of the * name. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev Returns the number of decimals used to get its user representation. * For example, if `decimals` equals `2`, a balance of `505` tokens should * be displayed to a user as `5,05` (`505 / 10 ** 2`). * * Tokens usually opt for a value of 18, imitating the relationship between * Ether and Wei. This is the value {ERC20} uses, unless this function is * overridden; * * NOTE: This information is only used for _display_ purposes: it in * no way affects any of the arithmetic of the contract, including * {IERC20-balanceOf} and {IERC20-transfer}. */ function decimals() public view virtual override returns (uint8) { return 18; } /** * @dev See {IERC20-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _totalSupply; } /** * @dev See {IERC20-balanceOf}. */ function balanceOf(address account) public view virtual override returns (uint256) { return _balances[account]; } /** * @dev See {IERC20-transfer}. * * Requirements: * * - `recipient` cannot be the zero address. * - the caller must have a balance of at least `amount`. */ function transfer(address recipient, uint256 amount) public virtual override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } /** * @dev See {IERC20-allowance}. */ function allowance(address owner, address spender) public view virtual override returns (uint256) { return _allowances[owner][spender]; } /** * @dev See {IERC20-approve}. * * Requirements: * * - `spender` cannot be the zero address. */ function approve(address spender, uint256 amount) public virtual override returns (bool) { _approve(_msgSender(), spender, amount); return true; } /** * @dev See {IERC20-transferFrom}. * * Emits an {Approval} event indicating the updated allowance. This is not * required by the EIP. See the note at the beginning of {ERC20}. * * Requirements: * * - `sender` and `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. * - the caller must have allowance for ``sender``'s tokens of at least * `amount`. */ function transferFrom( address sender, address recipient, uint256 amount ) public virtual override returns (bool) { _transfer(sender, recipient, amount); _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance")); return true; } /** * @dev Atomically increases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. */ function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue)); return true; } /** * @dev Atomically decreases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. * - `spender` must have allowance for the caller of at least * `subtractedValue`. */ 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; } /** * @dev Moves tokens `amount` from `sender` to `recipient`. * * This is internal function is equivalent to {transfer}, and can be used to * e.g. implement automatic token fees, slashing mechanisms, etc. * * Emits a {Transfer} event. * * Requirements: * * - `sender` cannot be the zero address. * - `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. */ function _transfer( address sender, address recipient, uint256 amount ) internal virtual { require(sender != address(0), "ERC20: transfer from the zero address"); require(recipient != address(0), "ERC20: transfer to the zero address"); _beforeTokenTransfer(sender, recipient, amount); _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance"); _balances[recipient] = _balances[recipient].add(amount); emit Transfer(sender, recipient, amount); } /** @dev Creates `amount` tokens and assigns them to `account`, increasing * the total supply. * * Emits a {Transfer} event with `from` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. */ function _mint(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: mint to the zero address"); _beforeTokenTransfer(address(0), account, amount); _totalSupply = _totalSupply.add(amount); _balances[account] = _balances[account].add(amount); emit Transfer(address(0), account, amount); } /** * @dev Destroys `amount` tokens from `account`, reducing the * total supply. * * Emits a {Transfer} event with `to` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. * - `account` must have at least `amount` tokens. */ function _burn(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: burn from the zero address"); _beforeTokenTransfer(account, address(0), amount); _balances[account] = _balances[account].sub(amount, "ERC20: burn amount exceeds balance"); _totalSupply = _totalSupply.sub(amount); emit Transfer(account, address(0), amount); } /** * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens. * * This internal function is equivalent to `approve`, and can be used to * e.g. set automatic allowances for certain subsystems, etc. * * Emits an {Approval} event. * * Requirements: * * - `owner` cannot be the zero address. * - `spender` cannot be the zero address. */ function _approve( address owner, address spender, uint256 amount ) internal virtual { 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); } /** * @dev Hook that is called before any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * will be to transferred to `to`. * - when `from` is zero, `amount` tokens will be minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 amount ) internal virtual {} } 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; } } contract Ownable is Context { address private _owner; 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; } } library SafeMathInt { int256 private constant MIN_INT256 = int256(1) << 255; int256 private constant MAX_INT256 = ~(int256(1) << 255); /** * @dev Multiplies two int256 variables and fails on overflow. */ function mul(int256 a, int256 b) internal pure returns (int256) { int256 c = a * b; // Detect overflow when multiplying MIN_INT256 with -1 require(c != MIN_INT256 || (a & MIN_INT256) != (b & MIN_INT256)); require((b == 0) || (c / b == a)); return c; } /** * @dev Division of two int256 variables and fails on overflow. */ function div(int256 a, int256 b) internal pure returns (int256) { // Prevent overflow when dividing MIN_INT256 by -1 require(b != -1 || a != MIN_INT256); // Solidity already throws when dividing by 0. return a / b; } /** * @dev Subtracts two int256 variables and fails on overflow. */ function sub(int256 a, int256 b) internal pure returns (int256) { int256 c = a - b; require((b >= 0 && c <= a) || (b < 0 && c > a)); return c; } /** * @dev Adds two int256 variables and fails on overflow. */ function add(int256 a, int256 b) internal pure returns (int256) { int256 c = a + b; require((b >= 0 && c >= a) || (b < 0 && c < a)); return c; } /** * @dev Converts to absolute value, and fails on overflow. */ function abs(int256 a) internal pure returns (int256) { require(a != MIN_INT256); return a < 0 ? -a : a; } function toUint256Safe(int256 a) internal pure returns (uint256) { require(a >= 0); return uint256(a); } } library SafeMathUint { function toInt256Safe(uint256 a) internal pure returns (int256) { int256 b = int256(a); require(b >= 0); return b; } } interface IUniswapV2Router01 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint amountADesired, uint amountBDesired, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB, uint liquidity); function addLiquidityETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external payable returns (uint amountToken, uint amountETH, uint liquidity); function removeLiquidity( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB); function removeLiquidityETH( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountToken, uint amountETH); function removeLiquidityWithPermit( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountA, uint amountB); function removeLiquidityETHWithPermit( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountToken, uint amountETH); function swapExactTokensForTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapTokensForExactTokens( uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB); function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut); function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn); function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts); function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts); } interface IUniswapV2Router02 is IUniswapV2Router01 { function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountETH); function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountETH); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint amountOutMin, address[] calldata path, address to, uint deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; } contract FRED is ERC20, Ownable { using SafeMath for uint256; IUniswapV2Router02 public immutable uniswapV2Router; address public immutable uniswapV2Pair; bool private swapping; address private devOpsWallet; uint256 public maxTransactionAmount; uint256 public swapTokensAtAmount; uint256 public maxWallet; bool public limitsInEffect = true; bool public tradingActive = false; bool public swapEnabled = false; bool public enableEarlySellTax = true; // Anti-bot and anti-whale mappings and variables mapping(address => uint256) private _holderLastTransferTimestamp; // to hold last Transfers temporarily during launch // Seller Map mapping (address => uint256) private _holderFirstBuyTimestamp; // Blacklist Map mapping (address => bool) private _blacklist; bool public transferDelayEnabled = true; uint256 public buyTotalFees; uint256 public buyDevOpsFee; uint256 public buyLiquidityFee; uint256 public sellTotalFees; uint256 public sellDevOpsFee; uint256 public sellLiquidityFee; uint256 public earlySellLiquidityFee; uint256 public earlySellDevOpsFee; uint256 public tokensForDevOps; uint256 public tokensForLiquidity; uint256 public tokensForDev; // block number of opened trading uint256 launchedAt; /******************/ // exclude from fees and max transaction amount mapping (address => bool) private _isExcludedFromFees; mapping (address => bool) public _isExcludedMaxTransactionAmount; // store addresses that a automatic market maker pairs. Any transfer *to* these addresses // could be subject to a maximum transfer amount mapping (address => bool) public automatedMarketMakerPairs; event UpdateUniswapV2Router(address indexed newAddress, address indexed oldAddress); event ExcludeFromFees(address indexed account, bool isExcluded); event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value); event devOpsWalletUpdated(address indexed newWallet, address indexed oldWallet); event SwapAndLiquify( uint256 tokensSwapped, uint256 ethReceived, uint256 tokensIntoLiquidity ); event AutoNukeLP(); event ManualNukeLP(); constructor() ERC20("Fred Token", "FRED") { IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); excludeFromMaxTransaction(address(_uniswapV2Router), true); uniswapV2Router = _uniswapV2Router; uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH()); excludeFromMaxTransaction(address(uniswapV2Pair), true); _setAutomatedMarketMakerPair(address(uniswapV2Pair), true); uint256 _buyDevOpsFee = 15; uint256 _buyLiquidityFee = 0; uint256 _sellDevOpsFee = 15; uint256 _sellLiquidityFee = 0; uint256 _earlySellLiquidityFee = 15; uint256 _earlySellDevOpsFee = 0; uint256 totalSupply = 1 * 1e13 * 1e18; maxTransactionAmount = totalSupply * 30 / 1000; // 3% maxTransactionAmountTxn maxWallet = totalSupply * 30 / 1000; // 3% maxWallet swapTokensAtAmount = totalSupply * 10 / 10000; // 0.1% swap wallet buyDevOpsFee = _buyDevOpsFee; buyLiquidityFee = _buyLiquidityFee; buyTotalFees = buyDevOpsFee + buyLiquidityFee; sellDevOpsFee = _sellDevOpsFee; sellLiquidityFee = _sellLiquidityFee; sellTotalFees = sellDevOpsFee + sellLiquidityFee; earlySellLiquidityFee = _earlySellLiquidityFee; earlySellDevOpsFee = _earlySellDevOpsFee; devOpsWallet = address(0xB31218e2F421acA6Fec6d9b226bE9992e96BB76a); // set as devOps wallet // exclude from paying fees or having max transaction amount excludeFromFees(owner(), true); excludeFromFees(address(this), true); excludeFromFees(address(0xdead), true); excludeFromFees(address(0xB31218e2F421acA6Fec6d9b226bE9992e96BB76a), true); excludeFromMaxTransaction(owner(), true); excludeFromMaxTransaction(address(this), true); excludeFromMaxTransaction(address(0xdead), true); excludeFromMaxTransaction(address(0xB31218e2F421acA6Fec6d9b226bE9992e96BB76a), true); /* _mint is an internal function in ERC20.sol that is only called here, and CANNOT be called ever again */ _mint(msg.sender, totalSupply); } receive() external payable { } // once enabled, can never be turned off function enableTrading() external onlyOwner { tradingActive = true; swapEnabled = true; launchedAt = block.number; } // remove limits after token is stable function removeLimits() external onlyOwner returns (bool){ limitsInEffect = false; return true; } // disable Transfer delay - cannot be reenabled function disableTransferDelay() external onlyOwner returns (bool){ transferDelayEnabled = false; return true; } function setEarlySellTax(bool onoff) external onlyOwner { enableEarlySellTax = onoff; } // change the minimum amount of tokens to sell from fees function updateSwapTokensAtAmount(uint256 newAmount) external onlyOwner returns (bool){ require(newAmount >= totalSupply() * 1 / 100000, "Swap amount cannot be lower than 0.001% total supply."); require(newAmount <= totalSupply() * 5 / 1000, "Swap amount cannot be higher than 0.5% total supply."); swapTokensAtAmount = newAmount; return true; } function updateMaxTxnAmount(uint256 newNum) external onlyOwner { require(newNum >= (totalSupply() * 1 / 1000)/1e18, "Cannot set maxTransactionAmount lower than 0.1%"); maxTransactionAmount = newNum * (10**18); } function updateMaxWalletAmount(uint256 newNum) external onlyOwner { require(newNum >= (totalSupply() * 5 / 1000)/1e18, "Cannot set maxWallet lower than 0.5%"); maxWallet = newNum * (10**18); } function excludeFromMaxTransaction(address updAds, bool isEx) public onlyOwner { _isExcludedMaxTransactionAmount[updAds] = isEx; } // only use to disable contract sales if absolutely necessary (emergency use only) function updateSwapEnabled(bool enabled) external onlyOwner(){ swapEnabled = enabled; } function updateBuyFees(uint256 _devOpsFee, uint256 _liquidityFee) external onlyOwner { buyDevOpsFee = _devOpsFee; buyLiquidityFee = _liquidityFee; buyTotalFees = buyDevOpsFee + buyLiquidityFee; require(buyTotalFees <= 20, "Must keep fees at 20% or less"); } function updateSellFees(uint256 _devOpsFee, uint256 _liquidityFee, uint256 _earlySellLiquidityFee, uint256 _earlySellDevOpsFee) external onlyOwner { sellDevOpsFee = _devOpsFee; sellLiquidityFee = _liquidityFee; earlySellLiquidityFee = _earlySellLiquidityFee; earlySellDevOpsFee = _earlySellDevOpsFee; sellTotalFees = sellDevOpsFee + sellLiquidityFee; require(sellTotalFees <= 20, "Must keep fees at 20% or less"); } function excludeFromFees(address account, bool excluded) public onlyOwner { _isExcludedFromFees[account] = excluded; emit ExcludeFromFees(account, excluded); } function blacklistAccount (address account, bool isBlacklisted) public onlyOwner { require(block.number < launchedAt + 40, "Waited too long to blacklist"); _blacklist[account] = isBlacklisted; } function setAutomatedMarketMakerPair(address pair, bool value) public onlyOwner { require(pair != uniswapV2Pair, "The pair cannot be removed from automatedMarketMakerPairs"); _setAutomatedMarketMakerPair(pair, value); } function _setAutomatedMarketMakerPair(address pair, bool value) private { automatedMarketMakerPairs[pair] = value; emit SetAutomatedMarketMakerPair(pair, value); } function updateDevOpsWallet(address newDevOpsWallet) external onlyOwner { emit devOpsWalletUpdated(newDevOpsWallet, devOpsWallet); devOpsWallet = newDevOpsWallet; } function isExcludedFromFees(address account) public view returns(bool) { return _isExcludedFromFees[account]; } event BoughtEarly(address indexed sniper); function _transfer( address from, address to, uint256 amount ) internal override { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); require(!_blacklist[to] && !_blacklist[from], "You have been blacklisted from transfering tokens"); if(amount == 0) { super._transfer(from, to, 0); return; } if(limitsInEffect){ if ( from != owner() && to != owner() && to != address(0) && to != address(0xdead) && !swapping ){ if(!tradingActive){ require(_isExcludedFromFees[from] || _isExcludedFromFees[to], "Trading is not active."); } // at launch if the transfer delay is enabled, ensure the block timestamps for purchasers is set -- during launch. if (transferDelayEnabled){ if (to != owner() && to != address(uniswapV2Router) && to != address(uniswapV2Pair)){ require(_holderLastTransferTimestamp[tx.origin] < block.number, "_transfer:: Transfer Delay enabled. Only one purchase per block allowed."); _holderLastTransferTimestamp[tx.origin] = block.number; } } //when buy if (automatedMarketMakerPairs[from] && !_isExcludedMaxTransactionAmount[to]) { require(amount <= maxTransactionAmount, "Buy transfer amount exceeds the maxTransactionAmount."); require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded"); } //when sell else if (automatedMarketMakerPairs[to] && !_isExcludedMaxTransactionAmount[from]) { require(amount <= maxTransactionAmount, "Sell transfer amount exceeds the maxTransactionAmount."); } else if(!_isExcludedMaxTransactionAmount[to]){ require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded"); } } } // early sell logic bool isBuy = from == uniswapV2Pair; if (!isBuy && enableEarlySellTax) { if (_holderFirstBuyTimestamp[from] != 0 && (_holderFirstBuyTimestamp[from] + (24 hours) >= block.timestamp)) { sellLiquidityFee = earlySellLiquidityFee; sellDevOpsFee = earlySellDevOpsFee; sellTotalFees = sellDevOpsFee + sellLiquidityFee; } } else { if (_holderFirstBuyTimestamp[to] == 0) { _holderFirstBuyTimestamp[to] = block.timestamp; } } uint256 contractTokenBalance = balanceOf(address(this)); bool canSwap = contractTokenBalance >= swapTokensAtAmount; if( canSwap && swapEnabled && !swapping && !automatedMarketMakerPairs[from] && !_isExcludedFromFees[from] && !_isExcludedFromFees[to] ) { swapping = true; swapBack(); swapping = false; } bool takeFee = !swapping; // if any account belongs to _isExcludedFromFee account then remove the fee if(_isExcludedFromFees[from] || _isExcludedFromFees[to]) { takeFee = false; } uint256 fees = 0; // only take fees on buys/sells, do not take on wallet transfers if(takeFee){ // on sell if (automatedMarketMakerPairs[to] && sellTotalFees > 0){ fees = amount.mul(sellTotalFees).div(100); tokensForLiquidity += fees * sellLiquidityFee / sellTotalFees; tokensForDevOps += fees * sellDevOpsFee / sellTotalFees; } // on buy else if(automatedMarketMakerPairs[from] && buyTotalFees > 0) { fees = amount.mul(buyTotalFees).div(100); tokensForLiquidity += fees * buyLiquidityFee / buyTotalFees; tokensForDevOps += fees * buyDevOpsFee / buyTotalFees; } if(fees > 0){ super._transfer(from, address(this), fees); } amount -= fees; } super._transfer(from, to, amount); } function swapTokensForEth(uint256 tokenAmount) private { // generate the uniswap pair path of token -> weth address[] memory path = new address[](2); path[0] = address(this); path[1] = uniswapV2Router.WETH(); _approve(address(this), address(uniswapV2Router), tokenAmount); // make the swap uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, // accept any amount of ETH path, address(this), block.timestamp ); } function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private { // approve token transfer to cover all possible scenarios _approve(address(this), address(uniswapV2Router), tokenAmount); // add the liquidity uniswapV2Router.addLiquidityETH{value: ethAmount}( address(this), tokenAmount, 0, // slippage is unavoidable 0, // slippage is unavoidable address(this), block.timestamp ); } function swapBack() private { uint256 contractBalance = balanceOf(address(this)); uint256 totalTokensToSwap = tokensForLiquidity + tokensForDevOps + tokensForDev; bool success; if(contractBalance == 0 || totalTokensToSwap == 0) {return;} if(contractBalance > swapTokensAtAmount * 20){ contractBalance = swapTokensAtAmount * 20; } // Halve the amount of liquidity tokens uint256 liquidityTokens = contractBalance * tokensForLiquidity / totalTokensToSwap / 2; uint256 amountToSwapForETH = contractBalance.sub(liquidityTokens); uint256 initialETHBalance = address(this).balance; swapTokensForEth(amountToSwapForETH); uint256 ethBalance = address(this).balance.sub(initialETHBalance); uint256 ethForDevOps = ethBalance.mul(tokensForDevOps).div(totalTokensToSwap); uint256 ethForDev = ethBalance.mul(tokensForDev).div(totalTokensToSwap); uint256 ethForLiquidity = ethBalance - ethForDevOps - ethForDev; tokensForLiquidity = 0; tokensForDevOps = 0; tokensForDev = 0; if(liquidityTokens > 0 && ethForLiquidity > 0){ addLiquidity(liquidityTokens, ethForLiquidity); emit SwapAndLiquify(amountToSwapForETH, ethForLiquidity, tokensForLiquidity); } (success,) = address(devOpsWallet).call{value: address(this).balance}(""); } } // YABBAAA DABBBAAAAA DOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
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":[],"name":"AutoNukeLP","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sniper","type":"address"}],"name":"BoughtEarly","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[],"name":"ManualNukeLP","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","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":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","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"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"devOpsWalletUpdated","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"isBlacklisted","type":"bool"}],"name":"blacklistAccount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"buyDevOpsFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableTransferDelay","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"earlySellDevOpsFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"earlySellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableEarlySellTax","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","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":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellDevOpsFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"onoff","type":"bool"}],"name":"setEarlySellTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForDev","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForDevOps","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":[{"internalType":"uint256","name":"_devOpsFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newDevOpsWallet","type":"address"}],"name":"updateDevOpsWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_devOpsFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_earlySellLiquidityFee","type":"uint256"},{"internalType":"uint256","name":"_earlySellDevOpsFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60c06040526001600a60006101000a81548160ff0219169083151502179055506000600a60016101000a81548160ff0219169083151502179055506000600a60026101000a81548160ff0219169083151502179055506001600a60036101000a81548160ff0219169083151502179055506001600e60006101000a81548160ff0219169083151502179055503480156200009857600080fd5b506040518060400160405280600a81526020017f4672656420546f6b656e000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f465245440000000000000000000000000000000000000000000000000000000081525081600390805190602001906200011d92919062000b83565b5080600490805190602001906200013692919062000b83565b50505060006200014b6200065060201b60201c565b905080600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506000737a250d5630b4cf539739df2c5dacb4c659f2488d9050620002168160016200065860201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000296573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002bc919062000c9d565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000324573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200034a919062000c9d565b6040518363ffffffff1660e01b81526004016200036992919062000ce0565b6020604051808303816000875af115801562000389573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003af919062000c9d565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1681525050620003f760a05160016200065860201b60201c565b6200040c60a05160016200075560201b60201c565b6000600f9050600080600f9050600080600f90506000806c7e37be2022c0914b268000000090506103e8601e8262000445919062000d46565b62000451919062000dd6565b6007819055506103e8601e8262000469919062000d46565b62000475919062000dd6565b600981905550612710600a826200048d919062000d46565b62000499919062000dd6565b6008819055508660108190555085601181905550601154601054620004bf919062000e0e565b600f819055508460138190555083601481905550601454601354620004e5919062000e0e565b601281905550826015819055508160168190555073b31218e2f421aca6fec6d9b226be9992e96bb76a600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200057062000562620007f660201b60201c565b60016200082060201b60201c565b620005833060016200082060201b60201c565b6200059861dead60016200082060201b60201c565b620005bf73b31218e2f421aca6fec6d9b226be9992e96bb76a60016200082060201b60201c565b620005e1620005d3620007f660201b60201c565b60016200065860201b60201c565b620005f43060016200065860201b60201c565b6200060961dead60016200065860201b60201c565b6200063073b31218e2f421aca6fec6d9b226be9992e96bb76a60016200065860201b60201c565b6200064233826200096d60201b60201c565b50505050505050506200109e565b600033905090565b620006686200065060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614620006fa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006f19062000ecc565b60405180910390fd5b80601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b80601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b620008306200065060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614620008c2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008b99062000ecc565b60405180910390fd5b80601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405162000961919062000f0b565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620009df576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009d69062000f78565b60405180910390fd5b620009f36000838362000b1b60201b60201c565b62000a0f8160025462000b2060201b6200259b1790919060201c565b60028190555062000a6d816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205462000b2060201b6200259b1790919060201c565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000b0f919062000fab565b60405180910390a35050565b505050565b600080828462000b31919062000e0e565b90508381101562000b79576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000b709062001018565b60405180910390fd5b8091505092915050565b82805462000b919062001069565b90600052602060002090601f01602090048101928262000bb5576000855562000c01565b82601f1062000bd057805160ff191683800117855562000c01565b8280016001018555821562000c01579182015b8281111562000c0057825182559160200191906001019062000be3565b5b50905062000c10919062000c14565b5090565b5b8082111562000c2f57600081600090555060010162000c15565b5090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000c658262000c38565b9050919050565b62000c778162000c58565b811462000c8357600080fd5b50565b60008151905062000c978162000c6c565b92915050565b60006020828403121562000cb65762000cb562000c33565b5b600062000cc68482850162000c86565b91505092915050565b62000cda8162000c58565b82525050565b600060408201905062000cf7600083018562000ccf565b62000d06602083018462000ccf565b9392505050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000d538262000d0d565b915062000d608362000d0d565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000d9c5762000d9b62000d17565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000de38262000d0d565b915062000df08362000d0d565b92508262000e035762000e0262000da7565b5b828204905092915050565b600062000e1b8262000d0d565b915062000e288362000d0d565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000e605762000e5f62000d17565b5b828201905092915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062000eb460208362000e6b565b915062000ec18262000e7c565b602082019050919050565b6000602082019050818103600083015262000ee78162000ea5565b9050919050565b60008115159050919050565b62000f058162000eee565b82525050565b600060208201905062000f22600083018462000efa565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000f60601f8362000e6b565b915062000f6d8262000f28565b602082019050919050565b6000602082019050818103600083015262000f938162000f51565b9050919050565b62000fa58162000d0d565b82525050565b600060208201905062000fc2600083018462000f9a565b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b600062001000601b8362000e6b565b91506200100d8262000fc8565b602082019050919050565b60006020820190508181036000830152620010338162000ff1565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200108257607f821691505b6020821081036200109857620010976200103a565b5b50919050565b60805160a05161571962001103600039600081816111a40152818161198501528181612c62015261306b015260008181610d6901528181612c0a01528181613e5101528181613f3201528181613f5901528181613ff5015261401c01526157196000f3fe60806040526004361061031e5760003560e01c8063924de9b7116101ab578063c0246668116100f7578063e2f4560511610095578063f11a24d31161006f578063f11a24d314610bed578063f2fde38b14610c18578063f637434214610c41578063f8b45b0514610c6c57610325565b8063e2f4560514610b6e578063e7ad9fcd14610b99578063e884f26014610bc257610325565b8063c8c8ebe4116100d1578063c8c8ebe414610a9e578063d257b34f14610ac9578063d85ba06314610b06578063dd62ed3e14610b3157610325565b8063c024666814610a21578063c18bc19514610a4a578063c876d0b914610a7357610325565b8063a4d15b6411610164578063b2b2c0bb1161013e578063b2b2c0bb14610965578063b62496f514610990578063bbc0c742146109cd578063bde73318146109f857610325565b8063a4d15b64146108d2578063a5cf68ef146108fd578063a9059cbb1461092857610325565b8063924de9b7146107c457806395d89b41146107ed5780639a7a23d6146108185780639fccce3214610841578063a26577781461086c578063a457c2d71461089557610325565b80634a62bb651161026a57806370a08231116102235780637571336a116101fd5780637571336a1461072e578063762d868a146107575780638a8c523c146107825780638da5cb5b1461079957610325565b806370a08231146106af578063715018a6146106ec578063751039fc1461070357610325565b80634a62bb651461059d5780634fbee193146105c8578063541a43cf1461060557806366ca9b83146106305780636a486a8e146106595780636ddd17131461068457610325565b80631b5cc613116102d75780632d5a5d34116102b15780632d5a5d34146104e1578063313ce5671461050a578063395093511461053557806349bd5a5e1461057257610325565b80631b5cc61314610450578063203e727e1461047b57806323b872dd146104a457610325565b806306fdde031461032a578063095ea7b31461035557806310d5de53146103925780631694505e146103cf57806318160ddd146103fa5780631a8145bb1461042557610325565b3661032557005b600080fd5b34801561033657600080fd5b5061033f610c97565b60405161034c91906141c5565b60405180910390f35b34801561036157600080fd5b5061037c60048036038101906103779190614280565b610d29565b60405161038991906142db565b60405180910390f35b34801561039e57600080fd5b506103b960048036038101906103b491906142f6565b610d47565b6040516103c691906142db565b60405180910390f35b3480156103db57600080fd5b506103e4610d67565b6040516103f19190614382565b60405180910390f35b34801561040657600080fd5b5061040f610d8b565b60405161041c91906143ac565b60405180910390f35b34801561043157600080fd5b5061043a610d95565b60405161044791906143ac565b60405180910390f35b34801561045c57600080fd5b50610465610d9b565b60405161047291906143ac565b60405180910390f35b34801561048757600080fd5b506104a2600480360381019061049d91906143c7565b610da1565b005b3480156104b057600080fd5b506104cb60048036038101906104c691906143f4565b610ecb565b6040516104d891906142db565b60405180910390f35b3480156104ed57600080fd5b5061050860048036038101906105039190614473565b610fa4565b005b34801561051657600080fd5b5061051f6110e6565b60405161052c91906144cf565b60405180910390f35b34801561054157600080fd5b5061055c60048036038101906105579190614280565b6110ef565b60405161056991906142db565b60405180910390f35b34801561057e57600080fd5b506105876111a2565b60405161059491906144f9565b60405180910390f35b3480156105a957600080fd5b506105b26111c6565b6040516105bf91906142db565b60405180910390f35b3480156105d457600080fd5b506105ef60048036038101906105ea91906142f6565b6111d9565b6040516105fc91906142db565b60405180910390f35b34801561061157600080fd5b5061061a61122f565b60405161062791906143ac565b60405180910390f35b34801561063c57600080fd5b5061065760048036038101906106529190614514565b611235565b005b34801561066557600080fd5b5061066e61133a565b60405161067b91906143ac565b60405180910390f35b34801561069057600080fd5b50610699611340565b6040516106a691906142db565b60405180910390f35b3480156106bb57600080fd5b506106d660048036038101906106d191906142f6565b611353565b6040516106e391906143ac565b60405180910390f35b3480156106f857600080fd5b5061070161139b565b005b34801561070f57600080fd5b506107186114f3565b60405161072591906142db565b60405180910390f35b34801561073a57600080fd5b5061075560048036038101906107509190614473565b6115ae565b005b34801561076357600080fd5b5061076c6116a0565b60405161077991906143ac565b60405180910390f35b34801561078e57600080fd5b506107976116a6565b005b3480156107a557600080fd5b506107ae61177c565b6040516107bb91906144f9565b60405180910390f35b3480156107d057600080fd5b506107eb60048036038101906107e69190614554565b6117a6565b005b3480156107f957600080fd5b5061080261185a565b60405161080f91906141c5565b60405180910390f35b34801561082457600080fd5b5061083f600480360381019061083a9190614473565b6118ec565b005b34801561084d57600080fd5b50610856611a1f565b60405161086391906143ac565b60405180910390f35b34801561087857600080fd5b50610893600480360381019061088e9190614554565b611a25565b005b3480156108a157600080fd5b506108bc60048036038101906108b79190614280565b611ad9565b6040516108c991906142db565b60405180910390f35b3480156108de57600080fd5b506108e7611ba6565b6040516108f491906142db565b60405180910390f35b34801561090957600080fd5b50610912611bb9565b60405161091f91906143ac565b60405180910390f35b34801561093457600080fd5b5061094f600480360381019061094a9190614280565b611bbf565b60405161095c91906142db565b60405180910390f35b34801561097157600080fd5b5061097a611bdd565b60405161098791906143ac565b60405180910390f35b34801561099c57600080fd5b506109b760048036038101906109b291906142f6565b611be3565b6040516109c491906142db565b60405180910390f35b3480156109d957600080fd5b506109e2611c03565b6040516109ef91906142db565b60405180910390f35b348015610a0457600080fd5b50610a1f6004803603810190610a1a91906142f6565b611c16565b005b348015610a2d57600080fd5b50610a486004803603810190610a439190614473565b611d6d565b005b348015610a5657600080fd5b50610a716004803603810190610a6c91906143c7565b611ead565b005b348015610a7f57600080fd5b50610a88611fd7565b604051610a9591906142db565b60405180910390f35b348015610aaa57600080fd5b50610ab3611fea565b604051610ac091906143ac565b60405180910390f35b348015610ad557600080fd5b50610af06004803603810190610aeb91906143c7565b611ff0565b604051610afd91906142db565b60405180910390f35b348015610b1257600080fd5b50610b1b612160565b604051610b2891906143ac565b60405180910390f35b348015610b3d57600080fd5b50610b586004803603810190610b539190614581565b612166565b604051610b6591906143ac565b60405180910390f35b348015610b7a57600080fd5b50610b836121ed565b604051610b9091906143ac565b60405180910390f35b348015610ba557600080fd5b50610bc06004803603810190610bbb91906145c1565b6121f3565b005b348015610bce57600080fd5b50610bd7612308565b604051610be491906142db565b60405180910390f35b348015610bf957600080fd5b50610c026123c3565b604051610c0f91906143ac565b60405180910390f35b348015610c2457600080fd5b50610c3f6004803603810190610c3a91906142f6565b6123c9565b005b348015610c4d57600080fd5b50610c5661258f565b604051610c6391906143ac565b60405180910390f35b348015610c7857600080fd5b50610c81612595565b604051610c8e91906143ac565b60405180910390f35b606060038054610ca690614657565b80601f0160208091040260200160405190810160405280929190818152602001828054610cd290614657565b8015610d1f5780601f10610cf457610100808354040283529160200191610d1f565b820191906000526020600020905b815481529060010190602001808311610d0257829003601f168201915b5050505050905090565b6000610d3d610d366125f9565b8484612601565b6001905092915050565b601c6020528060005260406000206000915054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b60185481565b60165481565b610da96125f9565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2f906146d4565b60405180910390fd5b670de0b6b3a76400006103e86001610e4e610d8b565b610e589190614723565b610e6291906147ac565b610e6c91906147ac565b811015610eae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ea59061484f565b60405180910390fd5b670de0b6b3a764000081610ec29190614723565b60078190555050565b6000610ed88484846127ca565b610f9984610ee46125f9565b610f948560405180606001604052806028815260200161569760289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610f4a6125f9565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546136ae9092919063ffffffff16565b612601565b600190509392505050565b610fac6125f9565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461103b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611032906146d4565b60405180910390fd5b6028601a5461104a919061486f565b431061108b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161108290614911565b60405180910390fd5b80600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60006012905090565b60006111986110fc6125f9565b84611193856001600061110d6125f9565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461259b90919063ffffffff16565b612601565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600a60009054906101000a900460ff1681565b6000601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60155481565b61123d6125f9565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146112cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112c3906146d4565b60405180910390fd5b81601081905550806011819055506011546010546112ea919061486f565b600f819055506014600f541115611336576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132d9061497d565b60405180910390fd5b5050565b60125481565b600a60029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6113a36125f9565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611432576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611429906146d4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60006114fd6125f9565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461158c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611583906146d4565b60405180910390fd5b6000600a60006101000a81548160ff0219169083151502179055506001905090565b6115b66125f9565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611645576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161163c906146d4565b60405180910390fd5b80601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60135481565b6116ae6125f9565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461173d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611734906146d4565b60405180910390fd5b6001600a60016101000a81548160ff0219169083151502179055506001600a60026101000a81548160ff02191690831515021790555043601a81905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6117ae6125f9565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461183d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611834906146d4565b60405180910390fd5b80600a60026101000a81548160ff02191690831515021790555050565b60606004805461186990614657565b80601f016020809104026020016040519081016040528092919081815260200182805461189590614657565b80156118e25780601f106118b7576101008083540402835291602001916118e2565b820191906000526020600020905b8154815290600101906020018083116118c557829003601f168201915b5050505050905090565b6118f46125f9565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611983576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197a906146d4565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611a11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0890614a0f565b60405180910390fd5b611a1b8282613712565b5050565b60195481565b611a2d6125f9565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611abc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ab3906146d4565b60405180910390fd5b80600a60036101000a81548160ff02191690831515021790555050565b6000611b9c611ae66125f9565b84611b97856040518060600160405280602581526020016156bf6025913960016000611b106125f9565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546136ae9092919063ffffffff16565b612601565b6001905092915050565b600a60039054906101000a900460ff1681565b60105481565b6000611bd3611bcc6125f9565b84846127ca565b6001905092915050565b60175481565b601d6020528060005260406000206000915054906101000a900460ff1681565b600a60019054906101000a900460ff1681565b611c1e6125f9565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611cad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ca4906146d4565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fbdcddef9ef45c223fdd883851191fd9fa95aa9b793f97f720258493ceed93d7560405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611d756125f9565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e04576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dfb906146d4565b60405180910390fd5b80601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611ea191906142db565b60405180910390a25050565b611eb56125f9565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3b906146d4565b60405180910390fd5b670de0b6b3a76400006103e86005611f5a610d8b565b611f649190614723565b611f6e91906147ac565b611f7891906147ac565b811015611fba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fb190614aa1565b60405180910390fd5b670de0b6b3a764000081611fce9190614723565b60098190555050565b600e60009054906101000a900460ff1681565b60075481565b6000611ffa6125f9565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612089576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612080906146d4565b60405180910390fd5b620186a06001612097610d8b565b6120a19190614723565b6120ab91906147ac565b8210156120ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120e490614b33565b60405180910390fd5b6103e860056120fa610d8b565b6121049190614723565b61210e91906147ac565b821115612150576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161214790614bc5565b60405180910390fd5b8160088190555060019050919050565b600f5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60085481565b6121fb6125f9565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461228a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612281906146d4565b60405180910390fd5b836013819055508260148190555081601581905550806016819055506014546013546122b6919061486f565b60128190555060146012541115612302576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122f99061497d565b60405180910390fd5b50505050565b60006123126125f9565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146123a1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612398906146d4565b60405180910390fd5b6000600e60006101000a81548160ff0219169083151502179055506001905090565b60115481565b6123d16125f9565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612460576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612457906146d4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036124cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124c690614c57565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60145481565b60095481565b60008082846125aa919061486f565b9050838110156125ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125e690614cc3565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612670576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161266790614d55565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036126df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126d690614de7565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516127bd91906143ac565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612839576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161283090614e79565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036128a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161289f90614f0b565b60405180910390fd5b600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615801561294c5750600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b61298b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161298290614f9d565b60405180910390fd5b600081036129a45761299f838360006137b3565b6136a9565b600a60009054906101000a900460ff1615613067576129c161177c565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612a2f57506129ff61177c565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612a685750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612aa2575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612abb5750600560149054906101000a900460ff16155b1561306657600a60019054906101000a900460ff16612bb557601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612b755750601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612bb4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bab90615009565b60405180910390fd5b5b600e60009054906101000a900460ff1615612d7d57612bd261177c565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015612c5957507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612cb157507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612d7c5743600b60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410612d37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d2e906150c1565b60405180910390fd5b43600b60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612e205750601c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612ec757600754811115612e6a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e6190615153565b60405180910390fd5b600954612e7683611353565b82612e81919061486f565b1115612ec2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612eb9906151bf565b60405180910390fd5b613065565b601d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612f6a5750601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612fb957600754811115612fb4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fab90615251565b60405180910390fd5b613064565b601c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166130635760095461301683611353565b82613021919061486f565b1115613062576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613059906151bf565b60405180910390fd5b5b5b5b5b5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16149050801580156130d45750600a60039054906101000a900460ff165b156131a9576000600c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541415801561317657504262015180600c60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613173919061486f565b10155b156131a45760155460148190555060165460138190555060145460135461319d919061486f565b6012819055505b613236565b6000600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054036132355742600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b600061324130611353565b9050600060085482101590508080156132665750600a60029054906101000a900460ff165b801561327f5750600560149054906101000a900460ff16155b80156132d55750601d60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561332b5750601b60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156133815750601b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156133c5576001600560146101000a81548160ff0219169083151502179055506133a9613a46565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050601b60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061347b5750601b60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561348557600090505b6000811561369857601d60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156134e857506000601254115b1561358257613515606461350760125489613c9f90919063ffffffff16565b613d1990919063ffffffff16565b9050601254601454826135289190614723565b61353291906147ac565b60186000828254613543919061486f565b925050819055506012546013548261355b9190614723565b61356591906147ac565b60176000828254613576919061486f565b92505081905550613674565b601d60008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156135dd57506000600f54115b156136735761360a60646135fc600f5489613c9f90919063ffffffff16565b613d1990919063ffffffff16565b9050600f546011548261361d9190614723565b61362791906147ac565b60186000828254613638919061486f565b92505081905550600f54601054826136509190614723565b61365a91906147ac565b6017600082825461366b919061486f565b925050819055505b5b6000811115613689576136888830836137b3565b5b80866136959190615271565b95505b6136a38888886137b3565b50505050505b505050565b60008383111582906136f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136ed91906141c5565b60405180910390fd5b50600083856137059190615271565b9050809150509392505050565b80601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613822576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161381990614e79565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613891576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161388890614f0b565b60405180910390fd5b61389c838383613d63565b61390781604051806060016040528060268152602001615671602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546136ae9092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061399a816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461259b90919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051613a3991906143ac565b60405180910390a3505050565b6000613a5130611353565b90506000601954601754601854613a68919061486f565b613a72919061486f565b9050600080831480613a845750600082145b15613a9157505050613c9d565b6014600854613aa09190614723565b831115613ab9576014600854613ab69190614723565b92505b600060028360185486613acc9190614723565b613ad691906147ac565b613ae091906147ac565b90506000613af78286613d6890919063ffffffff16565b90506000479050613b0782613db2565b6000613b1c8247613d6890919063ffffffff16565b90506000613b4787613b3960175485613c9f90919063ffffffff16565b613d1990919063ffffffff16565b90506000613b7288613b6460195486613c9f90919063ffffffff16565b613d1990919063ffffffff16565b90506000818385613b839190615271565b613b8d9190615271565b9050600060188190555060006017819055506000601981905550600087118015613bb75750600081115b15613c0457613bc68782613fef565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618682601854604051613bfb939291906152a5565b60405180910390a15b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051613c4a9061530d565b60006040518083038185875af1925050503d8060008114613c87576040519150601f19603f3d011682016040523d82523d6000602084013e613c8c565b606091505b505080985050505050505050505050505b565b6000808303613cb15760009050613d13565b60008284613cbf9190614723565b9050828482613cce91906147ac565b14613d0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613d0590615394565b60405180910390fd5b809150505b92915050565b6000613d5b83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506140c9565b905092915050565b505050565b6000613daa83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506136ae565b905092915050565b6000600267ffffffffffffffff811115613dcf57613dce6153b4565b5b604051908082528060200260200182016040528015613dfd5781602001602082028036833780820191505090505b5090503081600081518110613e1557613e146153e3565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613eba573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ede9190615427565b81600181518110613ef257613ef16153e3565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613f57307f000000000000000000000000000000000000000000000000000000000000000084612601565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613fb995949392919061554d565b600060405180830381600087803b158015613fd357600080fd5b505af1158015613fe7573d6000803e3d6000fd5b505050505050565b61401a307f000000000000000000000000000000000000000000000000000000000000000084612601565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008030426040518863ffffffff1660e01b815260040161407f969594939291906155a7565b60606040518083038185885af115801561409d573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906140c2919061561d565b5050505050565b60008083118290614110576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161410791906141c5565b60405180910390fd5b506000838561411f91906147ac565b9050809150509392505050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561416657808201518184015260208101905061414b565b83811115614175576000848401525b50505050565b6000601f19601f8301169050919050565b60006141978261412c565b6141a18185614137565b93506141b1818560208601614148565b6141ba8161417b565b840191505092915050565b600060208201905081810360008301526141df818461418c565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000614217826141ec565b9050919050565b6142278161420c565b811461423257600080fd5b50565b6000813590506142448161421e565b92915050565b6000819050919050565b61425d8161424a565b811461426857600080fd5b50565b60008135905061427a81614254565b92915050565b60008060408385031215614297576142966141e7565b5b60006142a585828601614235565b92505060206142b68582860161426b565b9150509250929050565b60008115159050919050565b6142d5816142c0565b82525050565b60006020820190506142f060008301846142cc565b92915050565b60006020828403121561430c5761430b6141e7565b5b600061431a84828501614235565b91505092915050565b6000819050919050565b600061434861434361433e846141ec565b614323565b6141ec565b9050919050565b600061435a8261432d565b9050919050565b600061436c8261434f565b9050919050565b61437c81614361565b82525050565b60006020820190506143976000830184614373565b92915050565b6143a68161424a565b82525050565b60006020820190506143c1600083018461439d565b92915050565b6000602082840312156143dd576143dc6141e7565b5b60006143eb8482850161426b565b91505092915050565b60008060006060848603121561440d5761440c6141e7565b5b600061441b86828701614235565b935050602061442c86828701614235565b925050604061443d8682870161426b565b9150509250925092565b614450816142c0565b811461445b57600080fd5b50565b60008135905061446d81614447565b92915050565b6000806040838503121561448a576144896141e7565b5b600061449885828601614235565b92505060206144a98582860161445e565b9150509250929050565b600060ff82169050919050565b6144c9816144b3565b82525050565b60006020820190506144e460008301846144c0565b92915050565b6144f38161420c565b82525050565b600060208201905061450e60008301846144ea565b92915050565b6000806040838503121561452b5761452a6141e7565b5b60006145398582860161426b565b925050602061454a8582860161426b565b9150509250929050565b60006020828403121561456a576145696141e7565b5b60006145788482850161445e565b91505092915050565b60008060408385031215614598576145976141e7565b5b60006145a685828601614235565b92505060206145b785828601614235565b9150509250929050565b600080600080608085870312156145db576145da6141e7565b5b60006145e98782880161426b565b94505060206145fa8782880161426b565b935050604061460b8782880161426b565b925050606061461c8782880161426b565b91505092959194509250565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061466f57607f821691505b60208210810361468257614681614628565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006146be602083614137565b91506146c982614688565b602082019050919050565b600060208201905081810360008301526146ed816146b1565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061472e8261424a565b91506147398361424a565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614772576147716146f4565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006147b78261424a565b91506147c28361424a565b9250826147d2576147d161477d565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b6000614839602f83614137565b9150614844826147dd565b604082019050919050565b600060208201905081810360008301526148688161482c565b9050919050565b600061487a8261424a565b91506148858361424a565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156148ba576148b96146f4565b5b828201905092915050565b7f57616974656420746f6f206c6f6e6720746f20626c61636b6c69737400000000600082015250565b60006148fb601c83614137565b9150614906826148c5565b602082019050919050565b6000602082019050818103600083015261492a816148ee565b9050919050565b7f4d757374206b656570206665657320617420323025206f72206c657373000000600082015250565b6000614967601d83614137565b915061497282614931565b602082019050919050565b600060208201905081810360008301526149968161495a565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b60006149f9603983614137565b9150614a048261499d565b604082019050919050565b60006020820190508181036000830152614a28816149ec565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b6000614a8b602483614137565b9150614a9682614a2f565b604082019050919050565b60006020820190508181036000830152614aba81614a7e565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b6000614b1d603583614137565b9150614b2882614ac1565b604082019050919050565b60006020820190508181036000830152614b4c81614b10565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b6000614baf603483614137565b9150614bba82614b53565b604082019050919050565b60006020820190508181036000830152614bde81614ba2565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614c41602683614137565b9150614c4c82614be5565b604082019050919050565b60006020820190508181036000830152614c7081614c34565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000614cad601b83614137565b9150614cb882614c77565b602082019050919050565b60006020820190508181036000830152614cdc81614ca0565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614d3f602483614137565b9150614d4a82614ce3565b604082019050919050565b60006020820190508181036000830152614d6e81614d32565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614dd1602283614137565b9150614ddc82614d75565b604082019050919050565b60006020820190508181036000830152614e0081614dc4565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614e63602583614137565b9150614e6e82614e07565b604082019050919050565b60006020820190508181036000830152614e9281614e56565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614ef5602383614137565b9150614f0082614e99565b604082019050919050565b60006020820190508181036000830152614f2481614ee8565b9050919050565b7f596f752068617665206265656e20626c61636b6c69737465642066726f6d207460008201527f72616e73666572696e6720746f6b656e73000000000000000000000000000000602082015250565b6000614f87603183614137565b9150614f9282614f2b565b604082019050919050565b60006020820190508181036000830152614fb681614f7a565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000614ff3601683614137565b9150614ffe82614fbd565b602082019050919050565b6000602082019050818103600083015261502281614fe6565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b60006150ab604983614137565b91506150b682615029565b606082019050919050565b600060208201905081810360008301526150da8161509e565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b600061513d603583614137565b9150615148826150e1565b604082019050919050565b6000602082019050818103600083015261516c81615130565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b60006151a9601383614137565b91506151b482615173565b602082019050919050565b600060208201905081810360008301526151d88161519c565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b600061523b603683614137565b9150615246826151df565b604082019050919050565b6000602082019050818103600083015261526a8161522e565b9050919050565b600061527c8261424a565b91506152878361424a565b92508282101561529a576152996146f4565b5b828203905092915050565b60006060820190506152ba600083018661439d565b6152c7602083018561439d565b6152d4604083018461439d565b949350505050565b600081905092915050565b50565b60006152f76000836152dc565b9150615302826152e7565b600082019050919050565b6000615318826152ea565b9150819050919050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b600061537e602183614137565b915061538982615322565b604082019050919050565b600060208201905081810360008301526153ad81615371565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000815190506154218161421e565b92915050565b60006020828403121561543d5761543c6141e7565b5b600061544b84828501615412565b91505092915050565b6000819050919050565b600061547961547461546f84615454565b614323565b61424a565b9050919050565b6154898161545e565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6154c48161420c565b82525050565b60006154d683836154bb565b60208301905092915050565b6000602082019050919050565b60006154fa8261548f565b615504818561549a565b935061550f836154ab565b8060005b8381101561554057815161552788826154ca565b9750615532836154e2565b925050600181019050615513565b5085935050505092915050565b600060a082019050615562600083018861439d565b61556f6020830187615480565b818103604083015261558181866154ef565b905061559060608301856144ea565b61559d608083018461439d565b9695505050505050565b600060c0820190506155bc60008301896144ea565b6155c9602083018861439d565b6155d66040830187615480565b6155e36060830186615480565b6155f060808301856144ea565b6155fd60a083018461439d565b979650505050505050565b60008151905061561781614254565b92915050565b600080600060608486031215615636576156356141e7565b5b600061564486828701615608565b935050602061565586828701615608565b925050604061566686828701615608565b915050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122050a7cb6fe9260bc6b7250cd54b77e7265b0695c84bc5da31cd1eec9a9f95fcac64736f6c634300080d0033
Deployed Bytecode
0x60806040526004361061031e5760003560e01c8063924de9b7116101ab578063c0246668116100f7578063e2f4560511610095578063f11a24d31161006f578063f11a24d314610bed578063f2fde38b14610c18578063f637434214610c41578063f8b45b0514610c6c57610325565b8063e2f4560514610b6e578063e7ad9fcd14610b99578063e884f26014610bc257610325565b8063c8c8ebe4116100d1578063c8c8ebe414610a9e578063d257b34f14610ac9578063d85ba06314610b06578063dd62ed3e14610b3157610325565b8063c024666814610a21578063c18bc19514610a4a578063c876d0b914610a7357610325565b8063a4d15b6411610164578063b2b2c0bb1161013e578063b2b2c0bb14610965578063b62496f514610990578063bbc0c742146109cd578063bde73318146109f857610325565b8063a4d15b64146108d2578063a5cf68ef146108fd578063a9059cbb1461092857610325565b8063924de9b7146107c457806395d89b41146107ed5780639a7a23d6146108185780639fccce3214610841578063a26577781461086c578063a457c2d71461089557610325565b80634a62bb651161026a57806370a08231116102235780637571336a116101fd5780637571336a1461072e578063762d868a146107575780638a8c523c146107825780638da5cb5b1461079957610325565b806370a08231146106af578063715018a6146106ec578063751039fc1461070357610325565b80634a62bb651461059d5780634fbee193146105c8578063541a43cf1461060557806366ca9b83146106305780636a486a8e146106595780636ddd17131461068457610325565b80631b5cc613116102d75780632d5a5d34116102b15780632d5a5d34146104e1578063313ce5671461050a578063395093511461053557806349bd5a5e1461057257610325565b80631b5cc61314610450578063203e727e1461047b57806323b872dd146104a457610325565b806306fdde031461032a578063095ea7b31461035557806310d5de53146103925780631694505e146103cf57806318160ddd146103fa5780631a8145bb1461042557610325565b3661032557005b600080fd5b34801561033657600080fd5b5061033f610c97565b60405161034c91906141c5565b60405180910390f35b34801561036157600080fd5b5061037c60048036038101906103779190614280565b610d29565b60405161038991906142db565b60405180910390f35b34801561039e57600080fd5b506103b960048036038101906103b491906142f6565b610d47565b6040516103c691906142db565b60405180910390f35b3480156103db57600080fd5b506103e4610d67565b6040516103f19190614382565b60405180910390f35b34801561040657600080fd5b5061040f610d8b565b60405161041c91906143ac565b60405180910390f35b34801561043157600080fd5b5061043a610d95565b60405161044791906143ac565b60405180910390f35b34801561045c57600080fd5b50610465610d9b565b60405161047291906143ac565b60405180910390f35b34801561048757600080fd5b506104a2600480360381019061049d91906143c7565b610da1565b005b3480156104b057600080fd5b506104cb60048036038101906104c691906143f4565b610ecb565b6040516104d891906142db565b60405180910390f35b3480156104ed57600080fd5b5061050860048036038101906105039190614473565b610fa4565b005b34801561051657600080fd5b5061051f6110e6565b60405161052c91906144cf565b60405180910390f35b34801561054157600080fd5b5061055c60048036038101906105579190614280565b6110ef565b60405161056991906142db565b60405180910390f35b34801561057e57600080fd5b506105876111a2565b60405161059491906144f9565b60405180910390f35b3480156105a957600080fd5b506105b26111c6565b6040516105bf91906142db565b60405180910390f35b3480156105d457600080fd5b506105ef60048036038101906105ea91906142f6565b6111d9565b6040516105fc91906142db565b60405180910390f35b34801561061157600080fd5b5061061a61122f565b60405161062791906143ac565b60405180910390f35b34801561063c57600080fd5b5061065760048036038101906106529190614514565b611235565b005b34801561066557600080fd5b5061066e61133a565b60405161067b91906143ac565b60405180910390f35b34801561069057600080fd5b50610699611340565b6040516106a691906142db565b60405180910390f35b3480156106bb57600080fd5b506106d660048036038101906106d191906142f6565b611353565b6040516106e391906143ac565b60405180910390f35b3480156106f857600080fd5b5061070161139b565b005b34801561070f57600080fd5b506107186114f3565b60405161072591906142db565b60405180910390f35b34801561073a57600080fd5b5061075560048036038101906107509190614473565b6115ae565b005b34801561076357600080fd5b5061076c6116a0565b60405161077991906143ac565b60405180910390f35b34801561078e57600080fd5b506107976116a6565b005b3480156107a557600080fd5b506107ae61177c565b6040516107bb91906144f9565b60405180910390f35b3480156107d057600080fd5b506107eb60048036038101906107e69190614554565b6117a6565b005b3480156107f957600080fd5b5061080261185a565b60405161080f91906141c5565b60405180910390f35b34801561082457600080fd5b5061083f600480360381019061083a9190614473565b6118ec565b005b34801561084d57600080fd5b50610856611a1f565b60405161086391906143ac565b60405180910390f35b34801561087857600080fd5b50610893600480360381019061088e9190614554565b611a25565b005b3480156108a157600080fd5b506108bc60048036038101906108b79190614280565b611ad9565b6040516108c991906142db565b60405180910390f35b3480156108de57600080fd5b506108e7611ba6565b6040516108f491906142db565b60405180910390f35b34801561090957600080fd5b50610912611bb9565b60405161091f91906143ac565b60405180910390f35b34801561093457600080fd5b5061094f600480360381019061094a9190614280565b611bbf565b60405161095c91906142db565b60405180910390f35b34801561097157600080fd5b5061097a611bdd565b60405161098791906143ac565b60405180910390f35b34801561099c57600080fd5b506109b760048036038101906109b291906142f6565b611be3565b6040516109c491906142db565b60405180910390f35b3480156109d957600080fd5b506109e2611c03565b6040516109ef91906142db565b60405180910390f35b348015610a0457600080fd5b50610a1f6004803603810190610a1a91906142f6565b611c16565b005b348015610a2d57600080fd5b50610a486004803603810190610a439190614473565b611d6d565b005b348015610a5657600080fd5b50610a716004803603810190610a6c91906143c7565b611ead565b005b348015610a7f57600080fd5b50610a88611fd7565b604051610a9591906142db565b60405180910390f35b348015610aaa57600080fd5b50610ab3611fea565b604051610ac091906143ac565b60405180910390f35b348015610ad557600080fd5b50610af06004803603810190610aeb91906143c7565b611ff0565b604051610afd91906142db565b60405180910390f35b348015610b1257600080fd5b50610b1b612160565b604051610b2891906143ac565b60405180910390f35b348015610b3d57600080fd5b50610b586004803603810190610b539190614581565b612166565b604051610b6591906143ac565b60405180910390f35b348015610b7a57600080fd5b50610b836121ed565b604051610b9091906143ac565b60405180910390f35b348015610ba557600080fd5b50610bc06004803603810190610bbb91906145c1565b6121f3565b005b348015610bce57600080fd5b50610bd7612308565b604051610be491906142db565b60405180910390f35b348015610bf957600080fd5b50610c026123c3565b604051610c0f91906143ac565b60405180910390f35b348015610c2457600080fd5b50610c3f6004803603810190610c3a91906142f6565b6123c9565b005b348015610c4d57600080fd5b50610c5661258f565b604051610c6391906143ac565b60405180910390f35b348015610c7857600080fd5b50610c81612595565b604051610c8e91906143ac565b60405180910390f35b606060038054610ca690614657565b80601f0160208091040260200160405190810160405280929190818152602001828054610cd290614657565b8015610d1f5780601f10610cf457610100808354040283529160200191610d1f565b820191906000526020600020905b815481529060010190602001808311610d0257829003601f168201915b5050505050905090565b6000610d3d610d366125f9565b8484612601565b6001905092915050565b601c6020528060005260406000206000915054906101000a900460ff1681565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b60185481565b60165481565b610da96125f9565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2f906146d4565b60405180910390fd5b670de0b6b3a76400006103e86001610e4e610d8b565b610e589190614723565b610e6291906147ac565b610e6c91906147ac565b811015610eae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ea59061484f565b60405180910390fd5b670de0b6b3a764000081610ec29190614723565b60078190555050565b6000610ed88484846127ca565b610f9984610ee46125f9565b610f948560405180606001604052806028815260200161569760289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610f4a6125f9565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546136ae9092919063ffffffff16565b612601565b600190509392505050565b610fac6125f9565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461103b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611032906146d4565b60405180910390fd5b6028601a5461104a919061486f565b431061108b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161108290614911565b60405180910390fd5b80600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60006012905090565b60006111986110fc6125f9565b84611193856001600061110d6125f9565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461259b90919063ffffffff16565b612601565b6001905092915050565b7f00000000000000000000000094a6c202ecd1f80d652eda2fb5704718f32bb88781565b600a60009054906101000a900460ff1681565b6000601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60155481565b61123d6125f9565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146112cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112c3906146d4565b60405180910390fd5b81601081905550806011819055506011546010546112ea919061486f565b600f819055506014600f541115611336576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132d9061497d565b60405180910390fd5b5050565b60125481565b600a60029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6113a36125f9565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611432576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611429906146d4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60006114fd6125f9565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461158c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611583906146d4565b60405180910390fd5b6000600a60006101000a81548160ff0219169083151502179055506001905090565b6115b66125f9565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611645576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161163c906146d4565b60405180910390fd5b80601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60135481565b6116ae6125f9565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461173d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611734906146d4565b60405180910390fd5b6001600a60016101000a81548160ff0219169083151502179055506001600a60026101000a81548160ff02191690831515021790555043601a81905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6117ae6125f9565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461183d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611834906146d4565b60405180910390fd5b80600a60026101000a81548160ff02191690831515021790555050565b60606004805461186990614657565b80601f016020809104026020016040519081016040528092919081815260200182805461189590614657565b80156118e25780601f106118b7576101008083540402835291602001916118e2565b820191906000526020600020905b8154815290600101906020018083116118c557829003601f168201915b5050505050905090565b6118f46125f9565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611983576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197a906146d4565b60405180910390fd5b7f00000000000000000000000094a6c202ecd1f80d652eda2fb5704718f32bb88773ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611a11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0890614a0f565b60405180910390fd5b611a1b8282613712565b5050565b60195481565b611a2d6125f9565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611abc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ab3906146d4565b60405180910390fd5b80600a60036101000a81548160ff02191690831515021790555050565b6000611b9c611ae66125f9565b84611b97856040518060600160405280602581526020016156bf6025913960016000611b106125f9565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546136ae9092919063ffffffff16565b612601565b6001905092915050565b600a60039054906101000a900460ff1681565b60105481565b6000611bd3611bcc6125f9565b84846127ca565b6001905092915050565b60175481565b601d6020528060005260406000206000915054906101000a900460ff1681565b600a60019054906101000a900460ff1681565b611c1e6125f9565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611cad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ca4906146d4565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fbdcddef9ef45c223fdd883851191fd9fa95aa9b793f97f720258493ceed93d7560405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611d756125f9565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e04576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dfb906146d4565b60405180910390fd5b80601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611ea191906142db565b60405180910390a25050565b611eb56125f9565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3b906146d4565b60405180910390fd5b670de0b6b3a76400006103e86005611f5a610d8b565b611f649190614723565b611f6e91906147ac565b611f7891906147ac565b811015611fba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fb190614aa1565b60405180910390fd5b670de0b6b3a764000081611fce9190614723565b60098190555050565b600e60009054906101000a900460ff1681565b60075481565b6000611ffa6125f9565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612089576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612080906146d4565b60405180910390fd5b620186a06001612097610d8b565b6120a19190614723565b6120ab91906147ac565b8210156120ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120e490614b33565b60405180910390fd5b6103e860056120fa610d8b565b6121049190614723565b61210e91906147ac565b821115612150576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161214790614bc5565b60405180910390fd5b8160088190555060019050919050565b600f5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60085481565b6121fb6125f9565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461228a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612281906146d4565b60405180910390fd5b836013819055508260148190555081601581905550806016819055506014546013546122b6919061486f565b60128190555060146012541115612302576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122f99061497d565b60405180910390fd5b50505050565b60006123126125f9565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146123a1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612398906146d4565b60405180910390fd5b6000600e60006101000a81548160ff0219169083151502179055506001905090565b60115481565b6123d16125f9565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612460576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612457906146d4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036124cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124c690614c57565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60145481565b60095481565b60008082846125aa919061486f565b9050838110156125ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125e690614cc3565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612670576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161266790614d55565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036126df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126d690614de7565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516127bd91906143ac565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612839576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161283090614e79565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036128a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161289f90614f0b565b60405180910390fd5b600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615801561294c5750600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b61298b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161298290614f9d565b60405180910390fd5b600081036129a45761299f838360006137b3565b6136a9565b600a60009054906101000a900460ff1615613067576129c161177c565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612a2f57506129ff61177c565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612a685750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612aa2575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612abb5750600560149054906101000a900460ff16155b1561306657600a60019054906101000a900460ff16612bb557601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612b755750601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612bb4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bab90615009565b60405180910390fd5b5b600e60009054906101000a900460ff1615612d7d57612bd261177c565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015612c5957507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612cb157507f00000000000000000000000094a6c202ecd1f80d652eda2fb5704718f32bb88773ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612d7c5743600b60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410612d37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d2e906150c1565b60405180910390fd5b43600b60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612e205750601c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612ec757600754811115612e6a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e6190615153565b60405180910390fd5b600954612e7683611353565b82612e81919061486f565b1115612ec2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612eb9906151bf565b60405180910390fd5b613065565b601d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612f6a5750601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612fb957600754811115612fb4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fab90615251565b60405180910390fd5b613064565b601c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166130635760095461301683611353565b82613021919061486f565b1115613062576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613059906151bf565b60405180910390fd5b5b5b5b5b5b60007f00000000000000000000000094a6c202ecd1f80d652eda2fb5704718f32bb88773ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16149050801580156130d45750600a60039054906101000a900460ff165b156131a9576000600c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541415801561317657504262015180600c60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613173919061486f565b10155b156131a45760155460148190555060165460138190555060145460135461319d919061486f565b6012819055505b613236565b6000600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054036132355742600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b600061324130611353565b9050600060085482101590508080156132665750600a60029054906101000a900460ff165b801561327f5750600560149054906101000a900460ff16155b80156132d55750601d60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561332b5750601b60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156133815750601b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156133c5576001600560146101000a81548160ff0219169083151502179055506133a9613a46565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050601b60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061347b5750601b60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561348557600090505b6000811561369857601d60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156134e857506000601254115b1561358257613515606461350760125489613c9f90919063ffffffff16565b613d1990919063ffffffff16565b9050601254601454826135289190614723565b61353291906147ac565b60186000828254613543919061486f565b925050819055506012546013548261355b9190614723565b61356591906147ac565b60176000828254613576919061486f565b92505081905550613674565b601d60008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156135dd57506000600f54115b156136735761360a60646135fc600f5489613c9f90919063ffffffff16565b613d1990919063ffffffff16565b9050600f546011548261361d9190614723565b61362791906147ac565b60186000828254613638919061486f565b92505081905550600f54601054826136509190614723565b61365a91906147ac565b6017600082825461366b919061486f565b925050819055505b5b6000811115613689576136888830836137b3565b5b80866136959190615271565b95505b6136a38888886137b3565b50505050505b505050565b60008383111582906136f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136ed91906141c5565b60405180910390fd5b50600083856137059190615271565b9050809150509392505050565b80601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613822576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161381990614e79565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613891576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161388890614f0b565b60405180910390fd5b61389c838383613d63565b61390781604051806060016040528060268152602001615671602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546136ae9092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061399a816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461259b90919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051613a3991906143ac565b60405180910390a3505050565b6000613a5130611353565b90506000601954601754601854613a68919061486f565b613a72919061486f565b9050600080831480613a845750600082145b15613a9157505050613c9d565b6014600854613aa09190614723565b831115613ab9576014600854613ab69190614723565b92505b600060028360185486613acc9190614723565b613ad691906147ac565b613ae091906147ac565b90506000613af78286613d6890919063ffffffff16565b90506000479050613b0782613db2565b6000613b1c8247613d6890919063ffffffff16565b90506000613b4787613b3960175485613c9f90919063ffffffff16565b613d1990919063ffffffff16565b90506000613b7288613b6460195486613c9f90919063ffffffff16565b613d1990919063ffffffff16565b90506000818385613b839190615271565b613b8d9190615271565b9050600060188190555060006017819055506000601981905550600087118015613bb75750600081115b15613c0457613bc68782613fef565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618682601854604051613bfb939291906152a5565b60405180910390a15b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051613c4a9061530d565b60006040518083038185875af1925050503d8060008114613c87576040519150601f19603f3d011682016040523d82523d6000602084013e613c8c565b606091505b505080985050505050505050505050505b565b6000808303613cb15760009050613d13565b60008284613cbf9190614723565b9050828482613cce91906147ac565b14613d0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613d0590615394565b60405180910390fd5b809150505b92915050565b6000613d5b83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506140c9565b905092915050565b505050565b6000613daa83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506136ae565b905092915050565b6000600267ffffffffffffffff811115613dcf57613dce6153b4565b5b604051908082528060200260200182016040528015613dfd5781602001602082028036833780820191505090505b5090503081600081518110613e1557613e146153e3565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613eba573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ede9190615427565b81600181518110613ef257613ef16153e3565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613f57307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84612601565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613fb995949392919061554d565b600060405180830381600087803b158015613fd357600080fd5b505af1158015613fe7573d6000803e3d6000fd5b505050505050565b61401a307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84612601565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008030426040518863ffffffff1660e01b815260040161407f969594939291906155a7565b60606040518083038185885af115801561409d573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906140c2919061561d565b5050505050565b60008083118290614110576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161410791906141c5565b60405180910390fd5b506000838561411f91906147ac565b9050809150509392505050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561416657808201518184015260208101905061414b565b83811115614175576000848401525b50505050565b6000601f19601f8301169050919050565b60006141978261412c565b6141a18185614137565b93506141b1818560208601614148565b6141ba8161417b565b840191505092915050565b600060208201905081810360008301526141df818461418c565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000614217826141ec565b9050919050565b6142278161420c565b811461423257600080fd5b50565b6000813590506142448161421e565b92915050565b6000819050919050565b61425d8161424a565b811461426857600080fd5b50565b60008135905061427a81614254565b92915050565b60008060408385031215614297576142966141e7565b5b60006142a585828601614235565b92505060206142b68582860161426b565b9150509250929050565b60008115159050919050565b6142d5816142c0565b82525050565b60006020820190506142f060008301846142cc565b92915050565b60006020828403121561430c5761430b6141e7565b5b600061431a84828501614235565b91505092915050565b6000819050919050565b600061434861434361433e846141ec565b614323565b6141ec565b9050919050565b600061435a8261432d565b9050919050565b600061436c8261434f565b9050919050565b61437c81614361565b82525050565b60006020820190506143976000830184614373565b92915050565b6143a68161424a565b82525050565b60006020820190506143c1600083018461439d565b92915050565b6000602082840312156143dd576143dc6141e7565b5b60006143eb8482850161426b565b91505092915050565b60008060006060848603121561440d5761440c6141e7565b5b600061441b86828701614235565b935050602061442c86828701614235565b925050604061443d8682870161426b565b9150509250925092565b614450816142c0565b811461445b57600080fd5b50565b60008135905061446d81614447565b92915050565b6000806040838503121561448a576144896141e7565b5b600061449885828601614235565b92505060206144a98582860161445e565b9150509250929050565b600060ff82169050919050565b6144c9816144b3565b82525050565b60006020820190506144e460008301846144c0565b92915050565b6144f38161420c565b82525050565b600060208201905061450e60008301846144ea565b92915050565b6000806040838503121561452b5761452a6141e7565b5b60006145398582860161426b565b925050602061454a8582860161426b565b9150509250929050565b60006020828403121561456a576145696141e7565b5b60006145788482850161445e565b91505092915050565b60008060408385031215614598576145976141e7565b5b60006145a685828601614235565b92505060206145b785828601614235565b9150509250929050565b600080600080608085870312156145db576145da6141e7565b5b60006145e98782880161426b565b94505060206145fa8782880161426b565b935050604061460b8782880161426b565b925050606061461c8782880161426b565b91505092959194509250565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061466f57607f821691505b60208210810361468257614681614628565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006146be602083614137565b91506146c982614688565b602082019050919050565b600060208201905081810360008301526146ed816146b1565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061472e8261424a565b91506147398361424a565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614772576147716146f4565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006147b78261424a565b91506147c28361424a565b9250826147d2576147d161477d565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b6000614839602f83614137565b9150614844826147dd565b604082019050919050565b600060208201905081810360008301526148688161482c565b9050919050565b600061487a8261424a565b91506148858361424a565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156148ba576148b96146f4565b5b828201905092915050565b7f57616974656420746f6f206c6f6e6720746f20626c61636b6c69737400000000600082015250565b60006148fb601c83614137565b9150614906826148c5565b602082019050919050565b6000602082019050818103600083015261492a816148ee565b9050919050565b7f4d757374206b656570206665657320617420323025206f72206c657373000000600082015250565b6000614967601d83614137565b915061497282614931565b602082019050919050565b600060208201905081810360008301526149968161495a565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b60006149f9603983614137565b9150614a048261499d565b604082019050919050565b60006020820190508181036000830152614a28816149ec565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b6000614a8b602483614137565b9150614a9682614a2f565b604082019050919050565b60006020820190508181036000830152614aba81614a7e565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b6000614b1d603583614137565b9150614b2882614ac1565b604082019050919050565b60006020820190508181036000830152614b4c81614b10565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b6000614baf603483614137565b9150614bba82614b53565b604082019050919050565b60006020820190508181036000830152614bde81614ba2565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614c41602683614137565b9150614c4c82614be5565b604082019050919050565b60006020820190508181036000830152614c7081614c34565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000614cad601b83614137565b9150614cb882614c77565b602082019050919050565b60006020820190508181036000830152614cdc81614ca0565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614d3f602483614137565b9150614d4a82614ce3565b604082019050919050565b60006020820190508181036000830152614d6e81614d32565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614dd1602283614137565b9150614ddc82614d75565b604082019050919050565b60006020820190508181036000830152614e0081614dc4565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614e63602583614137565b9150614e6e82614e07565b604082019050919050565b60006020820190508181036000830152614e9281614e56565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614ef5602383614137565b9150614f0082614e99565b604082019050919050565b60006020820190508181036000830152614f2481614ee8565b9050919050565b7f596f752068617665206265656e20626c61636b6c69737465642066726f6d207460008201527f72616e73666572696e6720746f6b656e73000000000000000000000000000000602082015250565b6000614f87603183614137565b9150614f9282614f2b565b604082019050919050565b60006020820190508181036000830152614fb681614f7a565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000614ff3601683614137565b9150614ffe82614fbd565b602082019050919050565b6000602082019050818103600083015261502281614fe6565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b60006150ab604983614137565b91506150b682615029565b606082019050919050565b600060208201905081810360008301526150da8161509e565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b600061513d603583614137565b9150615148826150e1565b604082019050919050565b6000602082019050818103600083015261516c81615130565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b60006151a9601383614137565b91506151b482615173565b602082019050919050565b600060208201905081810360008301526151d88161519c565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b600061523b603683614137565b9150615246826151df565b604082019050919050565b6000602082019050818103600083015261526a8161522e565b9050919050565b600061527c8261424a565b91506152878361424a565b92508282101561529a576152996146f4565b5b828203905092915050565b60006060820190506152ba600083018661439d565b6152c7602083018561439d565b6152d4604083018461439d565b949350505050565b600081905092915050565b50565b60006152f76000836152dc565b9150615302826152e7565b600082019050919050565b6000615318826152ea565b9150819050919050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b600061537e602183614137565b915061538982615322565b604082019050919050565b600060208201905081810360008301526153ad81615371565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000815190506154218161421e565b92915050565b60006020828403121561543d5761543c6141e7565b5b600061544b84828501615412565b91505092915050565b6000819050919050565b600061547961547461546f84615454565b614323565b61424a565b9050919050565b6154898161545e565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6154c48161420c565b82525050565b60006154d683836154bb565b60208301905092915050565b6000602082019050919050565b60006154fa8261548f565b615504818561549a565b935061550f836154ab565b8060005b8381101561554057815161552788826154ca565b9750615532836154e2565b925050600181019050615513565b5085935050505092915050565b600060a082019050615562600083018861439d565b61556f6020830187615480565b818103604083015261558181866154ef565b905061559060608301856144ea565b61559d608083018461439d565b9695505050505050565b600060c0820190506155bc60008301896144ea565b6155c9602083018861439d565b6155d66040830187615480565b6155e36060830186615480565b6155f060808301856144ea565b6155fd60a083018461439d565b979650505050505050565b60008151905061561781614254565b92915050565b600080600060608486031215615636576156356141e7565b5b600061564486828701615608565b935050602061565586828701615608565b925050604061566686828701615608565b915050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122050a7cb6fe9260bc6b7250cd54b77e7265b0695c84bc5da31cd1eec9a9f95fcac64736f6c634300080d0033
Deployed Bytecode Sourcemap
28937:16026:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7035:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9209:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30490:64;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29012:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8158:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30204:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30124;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34851:234;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9861:355;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36650:217;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7999:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10626:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29070:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29303:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37530:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30081:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35669:298;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29970:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29383:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8330:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21537:148;;;;;;;;;;;;;:::i;:::-;;33957:120;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35318:144;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30005:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33756:148;;;;;;;;;;;;;:::i;:::-;;20893:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35559:101;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7255:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36876:245;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30244:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34282:102;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11348:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29421:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29896:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8671:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30167:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30713:58;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29343:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37328:187;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36459:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35094:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29813:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29187:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34456:386;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29862:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8910:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29229:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35976:474;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34139:134;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29930:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21841:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30040:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29269:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7035:100;7089:13;7122:5;7115:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7035:100;:::o;9209:169::-;9292:4;9309:39;9318:12;:10;:12::i;:::-;9332:7;9341:6;9309:8;:39::i;:::-;9366:4;9359:11;;9209:169;;;;:::o;30490:64::-;;;;;;;;;;;;;;;;;;;;;;:::o;29012:51::-;;;:::o;8158:108::-;8219:7;8246:12;;8239:19;;8158:108;:::o;30204:33::-;;;;:::o;30124:::-;;;;:::o;34851:234::-;21116:12;:10;:12::i;:::-;21106:22;;:6;;;;;;;;;;;:22;;;21098:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34970:4:::1;34964;34960:1;34944:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;34943:31;;;;:::i;:::-;34933:6;:41;;34925:101;;;;;;;;;;;;:::i;:::-;;;;;;;;;35070:6;35060;:17;;;;:::i;:::-;35037:20;:40;;;;34851:234:::0;:::o;9861:355::-;10001:4;10018:36;10028:6;10036:9;10047:6;10018:9;:36::i;:::-;10065:121;10074:6;10082:12;:10;:12::i;:::-;10096:89;10134:6;10096:89;;;;;;;;;;;;;;;;;:11;:19;10108:6;10096:19;;;;;;;;;;;;;;;:33;10116:12;:10;:12::i;:::-;10096:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;10065:8;:121::i;:::-;10204:4;10197:11;;9861:355;;;;;:::o;36650:217::-;21116:12;:10;:12::i;:::-;21106:22;;:6;;;;;;;;;;;:22;;;21098:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36778:2:::1;36765:10;;:15;;;;:::i;:::-;36750:12;:30;36742:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;36846:13;36824:10;:19;36835:7;36824:19;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;36650:217:::0;;:::o;7999:93::-;8057:5;8082:2;8075:9;;7999:93;:::o;10626:218::-;10714:4;10731:83;10740:12;:10;:12::i;:::-;10754:7;10763:50;10802:10;10763:11;:25;10775:12;:10;:12::i;:::-;10763:25;;;;;;;;;;;;;;;:34;10789:7;10763:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;10731:8;:83::i;:::-;10832:4;10825:11;;10626:218;;;;:::o;29070:38::-;;;:::o;29303:33::-;;;;;;;;;;;;;:::o;37530:125::-;37595:4;37619:19;:28;37639:7;37619:28;;;;;;;;;;;;;;;;;;;;;;;;;37612:35;;37530:125;;;:::o;30081:36::-;;;;:::o;35669:298::-;21116:12;:10;:12::i;:::-;21106:22;;:6;;;;;;;;;;;:22;;;21098:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35780:10:::1;35765:12;:25;;;;35819:13;35801:15;:31;;;;35873:15;;35858:12;;:30;;;;:::i;:::-;35843:12;:45;;;;35923:2;35907:12;;:18;;35899:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;35669:298:::0;;:::o;29970:28::-;;;;:::o;29383:31::-;;;;;;;;;;;;;:::o;8330:127::-;8404:7;8431:9;:18;8441:7;8431:18;;;;;;;;;;;;;;;;8424:25;;8330:127;;;:::o;21537:148::-;21116:12;:10;:12::i;:::-;21106:22;;:6;;;;;;;;;;;:22;;;21098:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21644:1:::1;21607:40;;21628:6;;;;;;;;;;;21607:40;;;;;;;;;;;;21675:1;21658:6;;:19;;;;;;;;;;;;;;;;;;21537:148::o:0;33957:120::-;34009:4;21116:12;:10;:12::i;:::-;21106:22;;:6;;;;;;;;;;;:22;;;21098:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34042:5:::1;34025:14;;:22;;;;;;;;;;;;;;;;;;34065:4;34058:11;;33957:120:::0;:::o;35318:144::-;21116:12;:10;:12::i;:::-;21106:22;;:6;;;;;;;;;;;:22;;;21098:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35450:4:::1;35408:31;:39;35440:6;35408:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;35318:144:::0;;:::o;30005:28::-;;;;:::o;33756:148::-;21116:12;:10;:12::i;:::-;21106:22;;:6;;;;;;;;;;;:22;;;21098:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;33827:4:::1;33811:13;;:20;;;;;;;;;;;;;;;;;;33856:4;33842:11;;:18;;;;;;;;;;;;;;;;;;33884:12;33871:10;:25;;;;33756:148::o:0;20893:79::-;20931:7;20958:6;;;;;;;;;;;20951:13;;20893:79;:::o;35559:101::-;21116:12;:10;:12::i;:::-;21106:22;;:6;;;;;;;;;;;:22;;;21098:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35645:7:::1;35631:11;;:21;;;;;;;;;;;;;;;;;;35559:101:::0;:::o;7255:104::-;7311:13;7344:7;7337:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7255:104;:::o;36876:245::-;21116:12;:10;:12::i;:::-;21106:22;;:6;;;;;;;;;;;:22;;;21098:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36983:13:::1;36975:21;;:4;:21;;::::0;36967:91:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;37072:41;37101:4;37107:5;37072:28;:41::i;:::-;36876:245:::0;;:::o;30244:27::-;;;;:::o;34282:102::-;21116:12;:10;:12::i;:::-;21106:22;;:6;;;;;;;;;;;:22;;;21098:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34371:5:::1;34350:18;;:26;;;;;;;;;;;;;;;;;;34282:102:::0;:::o;11348:269::-;11441:4;11458:129;11467:12;:10;:12::i;:::-;11481:7;11490:96;11529:15;11490:96;;;;;;;;;;;;;;;;;:11;:25;11502:12;:10;:12::i;:::-;11490:25;;;;;;;;;;;;;;;:34;11516:7;11490:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;11458:8;:129::i;:::-;11605:4;11598:11;;11348:269;;;;:::o;29421:37::-;;;;;;;;;;;;;:::o;29896:27::-;;;;:::o;8671:175::-;8757:4;8774:42;8784:12;:10;:12::i;:::-;8798:9;8809:6;8774:9;:42::i;:::-;8834:4;8827:11;;8671:175;;;;:::o;30167:30::-;;;;:::o;30713:58::-;;;;;;;;;;;;;;;;;;;;;;:::o;29343:33::-;;;;;;;;;;;;;:::o;37328:187::-;21116:12;:10;:12::i;:::-;21106:22;;:6;;;;;;;;;;;:22;;;21098:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;37453:12:::1;;;;;;;;;;;37416:50;;37436:15;37416:50;;;;;;;;;;;;37492:15;37477:12;;:30;;;;;;;;;;;;;;;;;;37328:187:::0;:::o;36459:182::-;21116:12;:10;:12::i;:::-;21106:22;;:6;;;;;;;;;;;:22;;;21098:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36575:8:::1;36544:19;:28;36564:7;36544:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;36615:7;36599:34;;;36624:8;36599:34;;;;;;:::i;:::-;;;;;;;;36459:182:::0;;:::o;35094:215::-;21116:12;:10;:12::i;:::-;21106:22;;:6;;;;;;;;;;;:22;;;21098:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35216:4:::1;35210;35206:1;35190:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;35189:31;;;;:::i;:::-;35179:6;:41;;35171:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;35294:6;35284;:17;;;;:::i;:::-;35272:9;:29;;;;35094:215:::0;:::o;29813:39::-;;;;;;;;;;;;;:::o;29187:35::-;;;;:::o;34456:386::-;34537:4;21116:12;:10;:12::i;:::-;21106:22;;:6;;;;;;;;;;;:22;;;21098:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34594:6:::1;34590:1;34574:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:26;;;;:::i;:::-;34561:9;:39;;34553:105;;;;;;;;;;;;:::i;:::-;;;;;;;;;34710:4;34706:1;34690:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;34677:9;:37;;34669:102;;;;;;;;;;;;:::i;:::-;;;;;;;;;34803:9;34782:18;:30;;;;34830:4;34823:11;;34456:386:::0;;;:::o;29862:27::-;;;;:::o;8910:151::-;8999:7;9026:11;:18;9038:5;9026:18;;;;;;;;;;;;;;;:27;9045:7;9026:27;;;;;;;;;;;;;;;;9019:34;;8910:151;;;;:::o;29229:33::-;;;;:::o;35976:474::-;21116:12;:10;:12::i;:::-;21106:22;;:6;;;;;;;;;;;:22;;;21098:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36150:10:::1;36134:13;:26;;;;36190:13;36171:16;:32;;;;36238:22;36214:21;:46;;;;36292:19;36271:18;:40;;;;36354:16;;36338:13;;:32;;;;:::i;:::-;36322:13;:48;;;;36406:2;36389:13;;:19;;36381:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;35976:474:::0;;;;:::o;34139:134::-;34199:4;21116:12;:10;:12::i;:::-;21106:22;;:6;;;;;;;;;;;:22;;;21098:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34238:5:::1;34215:20;;:28;;;;;;;;;;;;;;;;;;34261:4;34254:11;;34139:134:::0;:::o;29930:30::-;;;;:::o;21841:244::-;21116:12;:10;:12::i;:::-;21106:22;;:6;;;;;;;;;;;:22;;;21098:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21950:1:::1;21930:22;;:8;:22;;::::0;21922:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;22040:8;22011:38;;22032:6;;;;;;;;;;;22011:38;;;;;;;;;;;;22069:8;22060:6;;:17;;;;;;;;;;;;;;;;;;21841:244:::0;:::o;30040:31::-;;;;:::o;29269:24::-;;;;:::o;15925:182::-;15983:7;16003:9;16019:1;16015;:5;;;;:::i;:::-;16003:17;;16044:1;16039;:6;;16031:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;16098:1;16091:8;;;15925:182;;;;:::o;239:98::-;292:7;319:10;312:17;;239:98;:::o;14544:381::-;14697:1;14680:19;;:5;:19;;;14672:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14778:1;14759:21;;:7;:21;;;14751:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14863:6;14833:11;:18;14845:5;14833:18;;;;;;;;;;;;;;;:27;14852:7;14833:27;;;;;;;;;;;;;;;:36;;;;14901:7;14885:32;;14894:5;14885:32;;;14910:6;14885:32;;;;;;:::i;:::-;;;;;;;;14544:381;;;:::o;37715:4621::-;37863:1;37847:18;;:4;:18;;;37839:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37940:1;37926:16;;:2;:16;;;37918:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;38002:10;:14;38013:2;38002:14;;;;;;;;;;;;;;;;;;;;;;;;;38001:15;:36;;;;;38021:10;:16;38032:4;38021:16;;;;;;;;;;;;;;;;;;;;;;;;;38020:17;38001:36;37993:98;;;;;;;;;;;;:::i;:::-;;;;;;;;;38116:1;38106:6;:11;38103:92;;38134:28;38150:4;38156:2;38160:1;38134:15;:28::i;:::-;38177:7;;38103:92;38211:14;;;;;;;;;;;38208:1811;;;38271:7;:5;:7::i;:::-;38263:15;;:4;:15;;;;:49;;;;;38305:7;:5;:7::i;:::-;38299:13;;:2;:13;;;;38263:49;:86;;;;;38347:1;38333:16;;:2;:16;;;;38263:86;:128;;;;;38384:6;38370:21;;:2;:21;;;;38263:128;:158;;;;;38413:8;;;;;;;;;;;38412:9;38263:158;38241:1767;;;38459:13;;;;;;;;;;;38455:148;;38504:19;:25;38524:4;38504:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;38533:19;:23;38553:2;38533:23;;;;;;;;;;;;;;;;;;;;;;;;;38504:52;38496:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;38455:148;38762:20;;;;;;;;;;;38758:423;;;38816:7;:5;:7::i;:::-;38810:13;;:2;:13;;;;:47;;;;;38841:15;38827:30;;:2;:30;;;;38810:47;:79;;;;;38875:13;38861:28;;:2;:28;;;;38810:79;38806:356;;;38967:12;38925:28;:39;38954:9;38925:39;;;;;;;;;;;;;;;;:54;38917:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;39126:12;39084:28;:39;39113:9;39084:39;;;;;;;;;;;;;;;:54;;;;38806:356;38758:423;39234:25;:31;39260:4;39234:31;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;39270:31;:35;39302:2;39270:35;;;;;;;;;;;;;;;;;;;;;;;;;39269:36;39234:71;39230:763;;;39352:20;;39342:6;:30;;39334:96;;;;;;;;;;;;:::i;:::-;;;;;;;;;39491:9;;39474:13;39484:2;39474:9;:13::i;:::-;39465:6;:22;;;;:::i;:::-;:35;;39457:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;39230:763;;;39603:25;:29;39629:2;39603:29;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;39637:31;:37;39669:4;39637:37;;;;;;;;;;;;;;;;;;;;;;;;;39636:38;39603:71;39599:394;;;39721:20;;39711:6;:30;;39703:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;39599:394;;;39847:31;:35;39879:2;39847:35;;;;;;;;;;;;;;;;;;;;;;;;;39843:150;;39940:9;;39923:13;39933:2;39923:9;:13::i;:::-;39914:6;:22;;;;:::i;:::-;:35;;39906:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;39843:150;39599:394;39230:763;38241:1767;38208:1811;40061:10;40082:13;40074:21;;:4;:21;;;40061:34;;40111:5;40110:6;:28;;;;;40120:18;;;;;;;;;;;40110:28;40106:535;;;40193:1;40159:24;:30;40184:4;40159:30;;;;;;;;;;;;;;;;:35;;:120;;;;;40263:15;40250:8;40216:24;:30;40241:4;40216:30;;;;;;;;;;;;;;;;:43;;;;:::i;:::-;:62;;40159:120;40155:322;;;40320:21;;40301:16;:40;;;;40376:18;;40360:13;:34;;;;40445:16;;40429:13;;:32;;;;:::i;:::-;40413:13;:48;;;;40155:322;40106:535;;;40546:1;40514:24;:28;40539:2;40514:28;;;;;;;;;;;;;;;;:33;40510:120;;40599:15;40568:24;:28;40593:2;40568:28;;;;;;;;;;;;;;;:46;;;;40510:120;40106:535;40654:28;40685:24;40703:4;40685:9;:24::i;:::-;40654:55;;40723:12;40762:18;;40738:20;:42;;40723:57;;40812:7;:35;;;;;40836:11;;;;;;;;;;;40812:35;:61;;;;;40865:8;;;;;;;;;;;40864:9;40812:61;:110;;;;;40891:25;:31;40917:4;40891:31;;;;;;;;;;;;;;;;;;;;;;;;;40890:32;40812:110;:153;;;;;40940:19;:25;40960:4;40940:25;;;;;;;;;;;;;;;;;;;;;;;;;40939:26;40812:153;:194;;;;;40983:19;:23;41003:2;40983:23;;;;;;;;;;;;;;;;;;;;;;;;;40982:24;40812:194;40794:328;;;41044:4;41033:8;;:15;;;;;;;;;;;;;;;;;;41066:10;:8;:10::i;:::-;41105:5;41094:8;;:16;;;;;;;;;;;;;;;;;;40794:328;41135:12;41151:8;;;;;;;;;;;41150:9;41135:24;;41261:19;:25;41281:4;41261:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;41290:19;:23;41310:2;41290:23;;;;;;;;;;;;;;;;;;;;;;;;;41261:52;41258:99;;;41340:5;41330:15;;41258:99;41370:12;41474:7;41471:811;;;41525:25;:29;41551:2;41525:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;41574:1;41558:13;;:17;41525:50;41521:608;;;41602:34;41632:3;41602:25;41613:13;;41602:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;41595:41;;41703:13;;41684:16;;41677:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;41655:18;;:61;;;;;;;:::i;:::-;;;;;;;;41777:13;;41761;;41754:4;:20;;;;:::i;:::-;:36;;;;:::i;:::-;41735:15;;:55;;;;;;;:::i;:::-;;;;;;;;41521:608;;;41851:25;:31;41877:4;41851:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;41901:1;41886:12;;:16;41851:51;41848:281;;;41930:33;41959:3;41930:24;41941:12;;41930:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;41923:40;;42029:12;;42011:15;;42004:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;41982:18;;:59;;;;;;;:::i;:::-;;;;;;;;42101:12;;42086;;42079:4;:19;;;;:::i;:::-;:34;;;;:::i;:::-;42060:15;;:53;;;;;;;:::i;:::-;;;;;;;;41848:281;41521:608;42156:1;42149:4;:8;42146:93;;;42181:42;42197:4;42211;42218;42181:15;:42::i;:::-;42146:93;42266:4;42256:14;;;;;:::i;:::-;;;41471:811;42295:33;42311:4;42317:2;42321:6;42295:15;:33::i;:::-;37828:4508;;;;;37715:4621;;;;:::o;16831:193::-;16917:7;16950:1;16945;:6;;16953:12;16937:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;16977:9;16993:1;16989;:5;;;;:::i;:::-;16977:17;;17015:1;17008:8;;;16831:193;;;;;:::o;37130:189::-;37247:5;37213:25;:31;37239:4;37213:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;37305:5;37271:40;;37299:4;37271:40;;;;;;;;;;;;37130:189;;:::o;12108:575::-;12266:1;12248:20;;:6;:20;;;12240:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;12350:1;12329:23;;:9;:23;;;12321:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;12406:47;12427:6;12435:9;12446:6;12406:20;:47::i;:::-;12487:71;12509:6;12487:71;;;;;;;;;;;;;;;;;:9;:17;12497:6;12487:17;;;;;;;;;;;;;;;;:21;;:71;;;;;:::i;:::-;12467:9;:17;12477:6;12467:17;;;;;;;;;;;;;;;:91;;;;12592:32;12617:6;12592:9;:20;12602:9;12592:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;12569:9;:20;12579:9;12569:20;;;;;;;;;;;;;;;:55;;;;12657:9;12640:35;;12649:6;12640:35;;;12668:6;12640:35;;;;;;:::i;:::-;;;;;;;;12108:575;;;:::o;43480:1478::-;43519:23;43545:24;43563:4;43545:9;:24::i;:::-;43519:50;;43580:25;43647:12;;43629:15;;43608:18;;:36;;;;:::i;:::-;:51;;;;:::i;:::-;43580:79;;43670:12;43718:1;43699:15;:20;:46;;;;43744:1;43723:17;:22;43699:46;43696:60;;;43748:7;;;;;43696:60;43811:2;43790:18;;:23;;;;:::i;:::-;43772:15;:41;43769:111;;;43866:2;43845:18;;:23;;;;:::i;:::-;43827:41;;43769:111;43942:23;44027:1;44007:17;43986:18;;43968:15;:36;;;;:::i;:::-;:56;;;;:::i;:::-;:60;;;;:::i;:::-;43942:86;;44039:26;44068:36;44088:15;44068;:19;;:36;;;;:::i;:::-;44039:65;;44118:25;44146:21;44118:49;;44181:36;44198:18;44181:16;:36::i;:::-;44232:18;44253:44;44279:17;44253:21;:25;;:44;;;;:::i;:::-;44232:65;;44311:20;44334:54;44370:17;44334:31;44349:15;;44334:10;:14;;:31;;;;:::i;:::-;:35;;:54;;;;:::i;:::-;44311:77;;44399:17;44419:51;44452:17;44419:28;44434:12;;44419:10;:14;;:28;;;;:::i;:::-;:32;;:51;;;;:::i;:::-;44399:71;;44481:23;44535:9;44520:12;44507:10;:25;;;;:::i;:::-;:37;;;;:::i;:::-;44481:63;;44582:1;44561:18;:22;;;;44612:1;44594:15;:19;;;;44639:1;44624:12;:16;;;;44675:1;44657:15;:19;:42;;;;;44698:1;44680:15;:19;44657:42;44654:210;;;44715:46;44728:15;44745;44715:12;:46::i;:::-;44781:71;44796:18;44816:15;44833:18;;44781:71;;;;;;;;:::i;:::-;;;;;;;;44654:210;44898:12;;;;;;;;;;;44890:26;;44924:21;44890:60;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44877:73;;;;;43508:1450;;;;;;;;;;43480:1478;:::o;17284:473::-;17342:7;17592:1;17587;:6;17583:47;;17617:1;17610:8;;;;17583:47;17643:9;17659:1;17655;:5;;;;:::i;:::-;17643:17;;17688:1;17683;17679;:5;;;;:::i;:::-;:10;17671:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;17748:1;17741:8;;;17284:473;;;;;:::o;18234:132::-;18292:7;18319:39;18323:1;18326;18319:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;18312:46;;18234:132;;;;:::o;15529:125::-;;;;:::o;16391:136::-;16449:7;16476:43;16480:1;16483;16476:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;16469:50;;16391:136;;;;:::o;42345:597::-;42474:21;42512:1;42498:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42474:40;;42543:4;42525;42530:1;42525:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;42569:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;42559:4;42564:1;42559:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;42605:62;42622:4;42637:15;42655:11;42605:8;:62::i;:::-;42707:15;:66;;;42788:11;42814:1;42858:4;42885;42905:15;42707:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42400:542;42345:597;:::o;42951:520::-;43099:62;43116:4;43131:15;43149:11;43099:8;:62::i;:::-;43205:15;:31;;;43244:9;43277:4;43297:11;43323:1;43366;43417:4;43437:15;43205:258;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;42951:520;;:::o;18863:279::-;18949:7;18981:1;18977;:5;18984:12;18969:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;19008:9;19024:1;19020;:5;;;;:::i;:::-;19008:17;;19133:1;19126:8;;;18863:279;;;;;:::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:329::-;3553:6;3602:2;3590:9;3581:7;3577:23;3573:32;3570:119;;;3608:79;;:::i;:::-;3570:119;3728:1;3753:53;3798:7;3789:6;3778:9;3774:22;3753:53;:::i;:::-;3743:63;;3699:117;3494:329;;;;:::o;3829:60::-;3857:3;3878:5;3871:12;;3829:60;;;:::o;3895:142::-;3945:9;3978:53;3996:34;4005:24;4023:5;4005:24;:::i;:::-;3996:34;:::i;:::-;3978:53;:::i;:::-;3965:66;;3895:142;;;:::o;4043:126::-;4093:9;4126:37;4157:5;4126:37;:::i;:::-;4113:50;;4043:126;;;:::o;4175:153::-;4252:9;4285:37;4316:5;4285:37;:::i;:::-;4272:50;;4175:153;;;:::o;4334:185::-;4448:64;4506:5;4448:64;:::i;:::-;4443:3;4436:77;4334:185;;:::o;4525:276::-;4645:4;4683:2;4672:9;4668:18;4660:26;;4696:98;4791:1;4780:9;4776:17;4767:6;4696:98;:::i;:::-;4525:276;;;;:::o;4807:118::-;4894:24;4912:5;4894:24;:::i;:::-;4889:3;4882:37;4807:118;;:::o;4931:222::-;5024:4;5062:2;5051:9;5047:18;5039:26;;5075:71;5143:1;5132:9;5128:17;5119:6;5075:71;:::i;:::-;4931:222;;;;:::o;5159:329::-;5218:6;5267:2;5255:9;5246:7;5242:23;5238:32;5235:119;;;5273:79;;:::i;:::-;5235:119;5393:1;5418:53;5463:7;5454:6;5443:9;5439:22;5418:53;:::i;:::-;5408:63;;5364:117;5159:329;;;;:::o;5494:619::-;5571:6;5579;5587;5636:2;5624:9;5615:7;5611:23;5607:32;5604:119;;;5642:79;;:::i;:::-;5604:119;5762:1;5787:53;5832:7;5823:6;5812:9;5808:22;5787:53;:::i;:::-;5777:63;;5733:117;5889:2;5915:53;5960:7;5951:6;5940:9;5936:22;5915:53;:::i;:::-;5905:63;;5860:118;6017:2;6043:53;6088:7;6079:6;6068:9;6064:22;6043:53;:::i;:::-;6033:63;;5988:118;5494:619;;;;;:::o;6119:116::-;6189:21;6204:5;6189:21;:::i;:::-;6182:5;6179:32;6169:60;;6225:1;6222;6215:12;6169:60;6119:116;:::o;6241:133::-;6284:5;6322:6;6309:20;6300:29;;6338:30;6362:5;6338:30;:::i;:::-;6241:133;;;;:::o;6380:468::-;6445:6;6453;6502:2;6490:9;6481:7;6477:23;6473:32;6470:119;;;6508:79;;:::i;:::-;6470:119;6628:1;6653:53;6698:7;6689:6;6678:9;6674:22;6653:53;:::i;:::-;6643:63;;6599:117;6755:2;6781:50;6823:7;6814:6;6803:9;6799:22;6781:50;:::i;:::-;6771:60;;6726:115;6380:468;;;;;:::o;6854:86::-;6889:7;6929:4;6922:5;6918:16;6907:27;;6854:86;;;:::o;6946:112::-;7029:22;7045:5;7029:22;:::i;:::-;7024:3;7017:35;6946:112;;:::o;7064:214::-;7153:4;7191:2;7180:9;7176:18;7168:26;;7204:67;7268:1;7257:9;7253:17;7244:6;7204:67;:::i;:::-;7064:214;;;;:::o;7284:118::-;7371:24;7389:5;7371:24;:::i;:::-;7366:3;7359:37;7284:118;;:::o;7408:222::-;7501:4;7539:2;7528:9;7524:18;7516:26;;7552:71;7620:1;7609:9;7605:17;7596:6;7552:71;:::i;:::-;7408:222;;;;:::o;7636:474::-;7704:6;7712;7761:2;7749:9;7740:7;7736:23;7732:32;7729:119;;;7767:79;;:::i;:::-;7729:119;7887:1;7912:53;7957:7;7948:6;7937:9;7933:22;7912:53;:::i;:::-;7902:63;;7858:117;8014:2;8040:53;8085:7;8076:6;8065:9;8061:22;8040:53;:::i;:::-;8030:63;;7985:118;7636:474;;;;;:::o;8116:323::-;8172:6;8221:2;8209:9;8200:7;8196:23;8192:32;8189:119;;;8227:79;;:::i;:::-;8189:119;8347:1;8372:50;8414:7;8405:6;8394:9;8390:22;8372:50;:::i;:::-;8362:60;;8318:114;8116:323;;;;:::o;8445:474::-;8513:6;8521;8570:2;8558:9;8549:7;8545:23;8541:32;8538:119;;;8576:79;;:::i;:::-;8538:119;8696:1;8721:53;8766:7;8757:6;8746:9;8742:22;8721:53;:::i;:::-;8711:63;;8667:117;8823:2;8849:53;8894:7;8885:6;8874:9;8870:22;8849:53;:::i;:::-;8839:63;;8794:118;8445:474;;;;;:::o;8925:765::-;9011:6;9019;9027;9035;9084:3;9072:9;9063:7;9059:23;9055:33;9052:120;;;9091:79;;:::i;:::-;9052:120;9211:1;9236:53;9281:7;9272:6;9261:9;9257:22;9236:53;:::i;:::-;9226:63;;9182:117;9338:2;9364:53;9409:7;9400:6;9389:9;9385:22;9364:53;:::i;:::-;9354:63;;9309:118;9466:2;9492:53;9537:7;9528:6;9517:9;9513:22;9492:53;:::i;:::-;9482:63;;9437:118;9594:2;9620:53;9665:7;9656:6;9645:9;9641:22;9620:53;:::i;:::-;9610:63;;9565:118;8925:765;;;;;;;:::o;9696:180::-;9744:77;9741:1;9734:88;9841:4;9838:1;9831:15;9865:4;9862:1;9855:15;9882:320;9926:6;9963:1;9957:4;9953:12;9943:22;;10010:1;10004:4;10000:12;10031:18;10021:81;;10087:4;10079:6;10075:17;10065:27;;10021:81;10149:2;10141:6;10138:14;10118:18;10115:38;10112:84;;10168:18;;:::i;:::-;10112:84;9933:269;9882:320;;;:::o;10208:182::-;10348:34;10344:1;10336:6;10332:14;10325:58;10208:182;:::o;10396:366::-;10538:3;10559:67;10623:2;10618:3;10559:67;:::i;:::-;10552:74;;10635:93;10724:3;10635:93;:::i;:::-;10753:2;10748:3;10744:12;10737:19;;10396:366;;;:::o;10768:419::-;10934:4;10972:2;10961:9;10957:18;10949:26;;11021:9;11015:4;11011:20;11007:1;10996:9;10992:17;10985:47;11049:131;11175:4;11049:131;:::i;:::-;11041:139;;10768:419;;;:::o;11193:180::-;11241:77;11238:1;11231:88;11338:4;11335:1;11328:15;11362:4;11359:1;11352:15;11379:348;11419:7;11442:20;11460:1;11442:20;:::i;:::-;11437:25;;11476:20;11494:1;11476:20;:::i;:::-;11471:25;;11664:1;11596:66;11592:74;11589:1;11586:81;11581:1;11574:9;11567:17;11563:105;11560:131;;;11671:18;;:::i;:::-;11560:131;11719:1;11716;11712:9;11701:20;;11379:348;;;;:::o;11733:180::-;11781:77;11778:1;11771:88;11878:4;11875:1;11868:15;11902:4;11899:1;11892:15;11919:185;11959:1;11976:20;11994:1;11976:20;:::i;:::-;11971:25;;12010:20;12028:1;12010:20;:::i;:::-;12005:25;;12049:1;12039:35;;12054:18;;:::i;:::-;12039:35;12096:1;12093;12089:9;12084:14;;11919:185;;;;:::o;12110:234::-;12250:34;12246:1;12238:6;12234:14;12227:58;12319:17;12314:2;12306:6;12302:15;12295:42;12110:234;:::o;12350:366::-;12492:3;12513:67;12577:2;12572:3;12513:67;:::i;:::-;12506:74;;12589:93;12678:3;12589:93;:::i;:::-;12707:2;12702:3;12698:12;12691:19;;12350:366;;;:::o;12722:419::-;12888:4;12926:2;12915:9;12911:18;12903:26;;12975:9;12969:4;12965:20;12961:1;12950:9;12946:17;12939:47;13003:131;13129:4;13003:131;:::i;:::-;12995:139;;12722:419;;;:::o;13147:305::-;13187:3;13206:20;13224:1;13206:20;:::i;:::-;13201:25;;13240:20;13258:1;13240:20;:::i;:::-;13235:25;;13394:1;13326:66;13322:74;13319:1;13316:81;13313:107;;;13400:18;;:::i;:::-;13313:107;13444:1;13441;13437:9;13430:16;;13147:305;;;;:::o;13458:178::-;13598:30;13594:1;13586:6;13582:14;13575:54;13458:178;:::o;13642:366::-;13784:3;13805:67;13869:2;13864:3;13805:67;:::i;:::-;13798:74;;13881:93;13970:3;13881:93;:::i;:::-;13999:2;13994:3;13990:12;13983:19;;13642:366;;;:::o;14014:419::-;14180:4;14218:2;14207:9;14203:18;14195:26;;14267:9;14261:4;14257:20;14253:1;14242:9;14238:17;14231:47;14295:131;14421:4;14295:131;:::i;:::-;14287:139;;14014:419;;;:::o;14439:179::-;14579:31;14575:1;14567:6;14563:14;14556:55;14439:179;:::o;14624:366::-;14766:3;14787:67;14851:2;14846:3;14787:67;:::i;:::-;14780:74;;14863:93;14952:3;14863:93;:::i;:::-;14981:2;14976:3;14972:12;14965:19;;14624:366;;;:::o;14996:419::-;15162:4;15200:2;15189:9;15185:18;15177:26;;15249:9;15243:4;15239:20;15235:1;15224:9;15220:17;15213:47;15277:131;15403:4;15277:131;:::i;:::-;15269:139;;14996:419;;;:::o;15421:244::-;15561:34;15557:1;15549:6;15545:14;15538:58;15630:27;15625:2;15617:6;15613:15;15606:52;15421:244;:::o;15671:366::-;15813:3;15834:67;15898:2;15893:3;15834:67;:::i;:::-;15827:74;;15910:93;15999:3;15910:93;:::i;:::-;16028:2;16023:3;16019:12;16012:19;;15671:366;;;:::o;16043:419::-;16209:4;16247:2;16236:9;16232:18;16224:26;;16296:9;16290:4;16286:20;16282:1;16271:9;16267:17;16260:47;16324:131;16450:4;16324:131;:::i;:::-;16316:139;;16043:419;;;:::o;16468:223::-;16608:34;16604:1;16596:6;16592:14;16585:58;16677:6;16672:2;16664:6;16660:15;16653:31;16468:223;:::o;16697:366::-;16839:3;16860:67;16924:2;16919:3;16860:67;:::i;:::-;16853:74;;16936:93;17025:3;16936:93;:::i;:::-;17054:2;17049:3;17045:12;17038:19;;16697:366;;;:::o;17069:419::-;17235:4;17273:2;17262:9;17258:18;17250:26;;17322:9;17316:4;17312:20;17308:1;17297:9;17293:17;17286:47;17350:131;17476:4;17350:131;:::i;:::-;17342:139;;17069:419;;;:::o;17494:240::-;17634:34;17630:1;17622:6;17618:14;17611:58;17703:23;17698:2;17690:6;17686:15;17679:48;17494:240;:::o;17740:366::-;17882:3;17903:67;17967:2;17962:3;17903:67;:::i;:::-;17896:74;;17979:93;18068:3;17979:93;:::i;:::-;18097:2;18092:3;18088:12;18081:19;;17740:366;;;:::o;18112:419::-;18278:4;18316:2;18305:9;18301:18;18293:26;;18365:9;18359:4;18355:20;18351:1;18340:9;18336:17;18329:47;18393:131;18519:4;18393:131;:::i;:::-;18385:139;;18112:419;;;:::o;18537:239::-;18677:34;18673:1;18665:6;18661:14;18654:58;18746:22;18741:2;18733:6;18729:15;18722:47;18537:239;:::o;18782:366::-;18924:3;18945:67;19009:2;19004:3;18945:67;:::i;:::-;18938:74;;19021:93;19110:3;19021:93;:::i;:::-;19139:2;19134:3;19130:12;19123:19;;18782:366;;;:::o;19154:419::-;19320:4;19358:2;19347:9;19343:18;19335:26;;19407:9;19401:4;19397:20;19393:1;19382:9;19378:17;19371:47;19435:131;19561:4;19435:131;:::i;:::-;19427:139;;19154:419;;;:::o;19579:225::-;19719:34;19715:1;19707:6;19703:14;19696:58;19788:8;19783:2;19775:6;19771:15;19764:33;19579:225;:::o;19810:366::-;19952:3;19973:67;20037:2;20032:3;19973:67;:::i;:::-;19966:74;;20049:93;20138:3;20049:93;:::i;:::-;20167:2;20162:3;20158:12;20151:19;;19810:366;;;:::o;20182:419::-;20348:4;20386:2;20375:9;20371:18;20363:26;;20435:9;20429:4;20425:20;20421:1;20410:9;20406:17;20399:47;20463:131;20589:4;20463:131;:::i;:::-;20455:139;;20182:419;;;:::o;20607:177::-;20747:29;20743:1;20735:6;20731:14;20724:53;20607:177;:::o;20790:366::-;20932:3;20953:67;21017:2;21012:3;20953:67;:::i;:::-;20946:74;;21029:93;21118:3;21029:93;:::i;:::-;21147:2;21142:3;21138:12;21131:19;;20790:366;;;:::o;21162:419::-;21328:4;21366:2;21355:9;21351:18;21343:26;;21415:9;21409:4;21405:20;21401:1;21390:9;21386:17;21379:47;21443:131;21569:4;21443:131;:::i;:::-;21435:139;;21162:419;;;:::o;21587:223::-;21727:34;21723:1;21715:6;21711:14;21704:58;21796:6;21791:2;21783:6;21779:15;21772:31;21587:223;:::o;21816:366::-;21958:3;21979:67;22043:2;22038:3;21979:67;:::i;:::-;21972:74;;22055:93;22144:3;22055:93;:::i;:::-;22173:2;22168:3;22164:12;22157:19;;21816:366;;;:::o;22188:419::-;22354:4;22392:2;22381:9;22377:18;22369:26;;22441:9;22435:4;22431:20;22427:1;22416:9;22412:17;22405:47;22469:131;22595:4;22469:131;:::i;:::-;22461:139;;22188:419;;;:::o;22613:221::-;22753:34;22749:1;22741:6;22737:14;22730:58;22822:4;22817:2;22809:6;22805:15;22798:29;22613:221;:::o;22840:366::-;22982:3;23003:67;23067:2;23062:3;23003:67;:::i;:::-;22996:74;;23079:93;23168:3;23079:93;:::i;:::-;23197:2;23192:3;23188:12;23181:19;;22840:366;;;:::o;23212:419::-;23378:4;23416:2;23405:9;23401:18;23393:26;;23465:9;23459:4;23455:20;23451:1;23440:9;23436:17;23429:47;23493:131;23619:4;23493:131;:::i;:::-;23485:139;;23212:419;;;:::o;23637:224::-;23777:34;23773:1;23765:6;23761:14;23754:58;23846:7;23841:2;23833:6;23829:15;23822:32;23637:224;:::o;23867:366::-;24009:3;24030:67;24094:2;24089:3;24030:67;:::i;:::-;24023:74;;24106:93;24195:3;24106:93;:::i;:::-;24224:2;24219:3;24215:12;24208:19;;23867:366;;;:::o;24239:419::-;24405:4;24443:2;24432:9;24428:18;24420:26;;24492:9;24486:4;24482:20;24478:1;24467:9;24463:17;24456:47;24520:131;24646:4;24520:131;:::i;:::-;24512:139;;24239:419;;;:::o;24664:222::-;24804:34;24800:1;24792:6;24788:14;24781:58;24873:5;24868:2;24860:6;24856:15;24849:30;24664:222;:::o;24892:366::-;25034:3;25055:67;25119:2;25114:3;25055:67;:::i;:::-;25048:74;;25131:93;25220:3;25131:93;:::i;:::-;25249:2;25244:3;25240:12;25233:19;;24892:366;;;:::o;25264:419::-;25430:4;25468:2;25457:9;25453:18;25445:26;;25517:9;25511:4;25507:20;25503:1;25492:9;25488:17;25481:47;25545:131;25671:4;25545:131;:::i;:::-;25537:139;;25264:419;;;:::o;25689:236::-;25829:34;25825:1;25817:6;25813:14;25806:58;25898:19;25893:2;25885:6;25881:15;25874:44;25689:236;:::o;25931:366::-;26073:3;26094:67;26158:2;26153:3;26094:67;:::i;:::-;26087:74;;26170:93;26259:3;26170:93;:::i;:::-;26288:2;26283:3;26279:12;26272:19;;25931:366;;;:::o;26303:419::-;26469:4;26507:2;26496:9;26492:18;26484:26;;26556:9;26550:4;26546:20;26542:1;26531:9;26527:17;26520:47;26584:131;26710:4;26584:131;:::i;:::-;26576:139;;26303:419;;;:::o;26728:172::-;26868:24;26864:1;26856:6;26852:14;26845:48;26728:172;:::o;26906:366::-;27048:3;27069:67;27133:2;27128:3;27069:67;:::i;:::-;27062:74;;27145:93;27234:3;27145:93;:::i;:::-;27263:2;27258:3;27254:12;27247:19;;26906:366;;;:::o;27278:419::-;27444:4;27482:2;27471:9;27467:18;27459:26;;27531:9;27525:4;27521:20;27517:1;27506:9;27502:17;27495:47;27559:131;27685:4;27559:131;:::i;:::-;27551:139;;27278:419;;;:::o;27703:297::-;27843:34;27839:1;27831:6;27827:14;27820:58;27912:34;27907:2;27899:6;27895:15;27888:59;27981:11;27976:2;27968:6;27964:15;27957:36;27703:297;:::o;28006:366::-;28148:3;28169:67;28233:2;28228:3;28169:67;:::i;:::-;28162:74;;28245:93;28334:3;28245:93;:::i;:::-;28363:2;28358:3;28354:12;28347:19;;28006:366;;;:::o;28378:419::-;28544:4;28582:2;28571:9;28567:18;28559:26;;28631:9;28625:4;28621:20;28617:1;28606:9;28602:17;28595:47;28659:131;28785:4;28659:131;:::i;:::-;28651:139;;28378:419;;;:::o;28803:240::-;28943:34;28939:1;28931:6;28927:14;28920:58;29012:23;29007:2;28999:6;28995:15;28988:48;28803:240;:::o;29049:366::-;29191:3;29212:67;29276:2;29271:3;29212:67;:::i;:::-;29205:74;;29288:93;29377:3;29288:93;:::i;:::-;29406:2;29401:3;29397:12;29390:19;;29049:366;;;:::o;29421:419::-;29587:4;29625:2;29614:9;29610:18;29602:26;;29674:9;29668:4;29664:20;29660:1;29649:9;29645:17;29638:47;29702:131;29828:4;29702:131;:::i;:::-;29694:139;;29421:419;;;:::o;29846:169::-;29986:21;29982:1;29974:6;29970:14;29963:45;29846:169;:::o;30021:366::-;30163:3;30184:67;30248:2;30243:3;30184:67;:::i;:::-;30177:74;;30260:93;30349:3;30260:93;:::i;:::-;30378:2;30373:3;30369:12;30362:19;;30021:366;;;:::o;30393:419::-;30559:4;30597:2;30586:9;30582:18;30574:26;;30646:9;30640:4;30636:20;30632:1;30621:9;30617:17;30610:47;30674:131;30800:4;30674:131;:::i;:::-;30666:139;;30393:419;;;:::o;30818:241::-;30958:34;30954:1;30946:6;30942:14;30935:58;31027:24;31022:2;31014:6;31010:15;31003:49;30818:241;:::o;31065:366::-;31207:3;31228:67;31292:2;31287:3;31228:67;:::i;:::-;31221:74;;31304:93;31393:3;31304:93;:::i;:::-;31422:2;31417:3;31413:12;31406:19;;31065:366;;;:::o;31437:419::-;31603:4;31641:2;31630:9;31626:18;31618:26;;31690:9;31684:4;31680:20;31676:1;31665:9;31661:17;31654:47;31718:131;31844:4;31718:131;:::i;:::-;31710:139;;31437:419;;;:::o;31862:191::-;31902:4;31922:20;31940:1;31922:20;:::i;:::-;31917:25;;31956:20;31974:1;31956:20;:::i;:::-;31951:25;;31995:1;31992;31989:8;31986:34;;;32000:18;;:::i;:::-;31986:34;32045:1;32042;32038:9;32030:17;;31862:191;;;;:::o;32059:442::-;32208:4;32246:2;32235:9;32231:18;32223:26;;32259:71;32327:1;32316:9;32312:17;32303:6;32259:71;:::i;:::-;32340:72;32408:2;32397:9;32393:18;32384:6;32340:72;:::i;:::-;32422;32490:2;32479:9;32475:18;32466:6;32422:72;:::i;:::-;32059:442;;;;;;:::o;32507:147::-;32608:11;32645:3;32630:18;;32507:147;;;;:::o;32660:114::-;;:::o;32780:398::-;32939:3;32960:83;33041:1;33036:3;32960:83;:::i;:::-;32953:90;;33052:93;33141:3;33052:93;:::i;:::-;33170:1;33165:3;33161:11;33154:18;;32780:398;;;:::o;33184:379::-;33368:3;33390:147;33533:3;33390:147;:::i;:::-;33383:154;;33554:3;33547:10;;33184:379;;;:::o;33569:220::-;33709:34;33705:1;33697:6;33693:14;33686:58;33778:3;33773:2;33765:6;33761:15;33754:28;33569:220;:::o;33795:366::-;33937:3;33958:67;34022:2;34017:3;33958:67;:::i;:::-;33951:74;;34034:93;34123:3;34034:93;:::i;:::-;34152:2;34147:3;34143:12;34136:19;;33795:366;;;:::o;34167:419::-;34333:4;34371:2;34360:9;34356:18;34348:26;;34420:9;34414:4;34410:20;34406:1;34395:9;34391:17;34384:47;34448:131;34574:4;34448:131;:::i;:::-;34440:139;;34167:419;;;:::o;34592:180::-;34640:77;34637:1;34630:88;34737:4;34734:1;34727:15;34761:4;34758:1;34751:15;34778:180;34826:77;34823:1;34816:88;34923:4;34920:1;34913:15;34947:4;34944:1;34937:15;34964:143;35021:5;35052:6;35046:13;35037:22;;35068:33;35095:5;35068:33;:::i;:::-;34964:143;;;;:::o;35113:351::-;35183:6;35232:2;35220:9;35211:7;35207:23;35203:32;35200:119;;;35238:79;;:::i;:::-;35200:119;35358:1;35383:64;35439:7;35430:6;35419:9;35415:22;35383:64;:::i;:::-;35373:74;;35329:128;35113:351;;;;:::o;35470:85::-;35515:7;35544:5;35533:16;;35470:85;;;:::o;35561:158::-;35619:9;35652:61;35670:42;35679:32;35705:5;35679:32;:::i;:::-;35670:42;:::i;:::-;35652:61;:::i;:::-;35639:74;;35561:158;;;:::o;35725:147::-;35820:45;35859:5;35820:45;:::i;:::-;35815:3;35808:58;35725:147;;:::o;35878:114::-;35945:6;35979:5;35973:12;35963:22;;35878:114;;;:::o;35998:184::-;36097:11;36131:6;36126:3;36119:19;36171:4;36166:3;36162:14;36147:29;;35998:184;;;;:::o;36188:132::-;36255:4;36278:3;36270:11;;36308:4;36303:3;36299:14;36291:22;;36188:132;;;:::o;36326:108::-;36403:24;36421:5;36403:24;:::i;:::-;36398:3;36391:37;36326:108;;:::o;36440:179::-;36509:10;36530:46;36572:3;36564:6;36530:46;:::i;:::-;36608:4;36603:3;36599:14;36585:28;;36440:179;;;;:::o;36625:113::-;36695:4;36727;36722:3;36718:14;36710:22;;36625:113;;;:::o;36774:732::-;36893:3;36922:54;36970:5;36922:54;:::i;:::-;36992:86;37071:6;37066:3;36992:86;:::i;:::-;36985:93;;37102:56;37152:5;37102:56;:::i;:::-;37181:7;37212:1;37197:284;37222:6;37219:1;37216:13;37197:284;;;37298:6;37292:13;37325:63;37384:3;37369:13;37325:63;:::i;:::-;37318:70;;37411:60;37464:6;37411:60;:::i;:::-;37401:70;;37257:224;37244:1;37241;37237:9;37232:14;;37197:284;;;37201:14;37497:3;37490:10;;36898:608;;;36774:732;;;;:::o;37512:831::-;37775:4;37813:3;37802:9;37798:19;37790:27;;37827:71;37895:1;37884:9;37880:17;37871:6;37827:71;:::i;:::-;37908:80;37984:2;37973:9;37969:18;37960:6;37908:80;:::i;:::-;38035:9;38029:4;38025:20;38020:2;38009:9;38005:18;37998:48;38063:108;38166:4;38157:6;38063:108;:::i;:::-;38055:116;;38181:72;38249:2;38238:9;38234:18;38225:6;38181:72;:::i;:::-;38263:73;38331:3;38320:9;38316:19;38307:6;38263:73;:::i;:::-;37512:831;;;;;;;;:::o;38349:807::-;38598:4;38636:3;38625:9;38621:19;38613:27;;38650:71;38718:1;38707:9;38703:17;38694:6;38650:71;:::i;:::-;38731:72;38799:2;38788:9;38784:18;38775:6;38731:72;:::i;:::-;38813:80;38889:2;38878:9;38874:18;38865:6;38813:80;:::i;:::-;38903;38979:2;38968:9;38964:18;38955:6;38903:80;:::i;:::-;38993:73;39061:3;39050:9;39046:19;39037:6;38993:73;:::i;:::-;39076;39144:3;39133:9;39129:19;39120:6;39076:73;:::i;:::-;38349:807;;;;;;;;;:::o;39162:143::-;39219:5;39250:6;39244:13;39235:22;;39266:33;39293:5;39266:33;:::i;:::-;39162:143;;;;:::o;39311:663::-;39399:6;39407;39415;39464:2;39452:9;39443:7;39439:23;39435:32;39432:119;;;39470:79;;:::i;:::-;39432:119;39590:1;39615:64;39671:7;39662:6;39651:9;39647:22;39615:64;:::i;:::-;39605:74;;39561:128;39728:2;39754:64;39810:7;39801:6;39790:9;39786:22;39754:64;:::i;:::-;39744:74;;39699:129;39867:2;39893:64;39949:7;39940:6;39929:9;39925:22;39893:64;:::i;:::-;39883:74;;39838:129;39311:663;;;;;:::o
Swarm Source
ipfs://50a7cb6fe9260bc6b7250cd54b77e7265b0695c84bc5da31cd1eec9a9f95fcac
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.