ERC-20
Overview
Max Total Supply
420,689,899,999,998 NSPX
Holders
75
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Balance
0.000002004923259737 NSPXValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
NasdaqSPX
Compiler Version
v0.8.9+commit.e5eed63a
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2023-10-02 */ /** Welcome to nastaqSPX ! Telegram : https://t.me/nasdaqSPX Website : https://www.nasdaqspx.info/ mm *@@@ m@***@m@*@@@***@@m *@@@* *@@* @@ m@@ *@ @@ *@@m @@@m m@ *@@@@@@@@m m@*@@m m@@*@@@ m@**@@@ m@*@@m m@@*@@@ *@@@m @@ m@@ *@@m@* @@ @@ @@ @@ @@ ** m@@ @@ @@ @@ m@* @@ *@@@@@m @@@@@@@ @@@ @! @@ m@@@!@ *@@@@@m @!@ @! m@@@!@ @! @@ *@@ @@ m@**@@m @! !@ @! !@ @@ *!@ @! @! !@ @!! @@ @@ @@ @! @ *@@m !! !! !!!!:! *! @! !!! !! !!!!:! @! !! ! *@! @! !! !!! !! !! !! :! !! !! *:! !: !! :! !!! !! !! !! !! !! *!!! : ::: :!: ::!: : !: : :!: : : : ! : :!: : !: :!: :!: :!: : :! :!:!: : : : : :: :: :: ::: */ //SPDX-License-Identifier: MIT pragma solidity 0.8.9; 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 Burn(address indexed sender, uint amount0, uint amount1, address indexed to); event Swap( address indexed sender, uint amount0In, uint amount1In, uint amount0Out, uint amount1Out, address indexed to ); event Sync(uint112 reserve0, uint112 reserve1); function MINIMUM_LIQUIDITY() external pure returns (uint); function factory() external view returns (address); function token0() external view returns (address); function token1() external view returns (address); function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast); function price0CumulativeLast() external view returns (uint); function price1CumulativeLast() external view returns (uint); function kLast() external view returns (uint); function mint(address to) external returns (uint liquidity); function burn(address to) external returns (uint amount0, uint amount1); function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external; function skim(address to) external; function sync() external; function initialize(address, address) external; } 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); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address sender, address recipient, uint256 amount ) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); } 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 createInitialSupply(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 NasdaqSPX is ERC20, Ownable { using SafeMath for uint256; IUniswapV2Router02 public uniswapV2Router; address public immutable uniswapV2Pair; bool private swapping; address public marketingWallet; uint256 public maxTransactionAmount; uint256 public swapTokensAtAmount; uint256 public maxWallet; uint256 public liquidityActiveBlock = 0; // 0 means liquidity is not active yet uint256 public tradingActiveBlock = 0; // 0 means trading is not active bool public limitsInEffect = true; bool public tradingActive = false; bool public swapEnabled = false; // Anti-bot and anti-whale mappings and variables mapping(address => uint256) private _holderLastTransferTimestamp; // to hold last Transfers temporarily during launch bool public transferDelayEnabled = true; uint256 public totalSellFees; uint256 public marketingSellFee; uint256 public liquiditySellFee; uint256 public totalBuyFees; uint256 public marketingBuyFee; uint256 public liquidityBuyFee; uint256 public tokensForMarketing; uint256 public tokensForLiquidity; /******************/ // exlcude from fees and max transaction amount mapping (address => bool) private _isExcludedFromFees; mapping (address => bool) public _isExcludedMaxTransactionAmount; //blacklist bool public blacklistStatus; mapping (address => bool) public isBlacklisted; // 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 ExcludeMultipleAccountsFromFees(address[] accounts, bool isExcluded); event ExcludedMaxTransactionAmount(address indexed account, bool isExcluded); event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value); event marketingWalletUpdated(address indexed newWallet, address indexed oldWallet); event taxMultiplierActive(uint256 duration); event SwapAndLiquify( uint256 tokensSwapped, uint256 ethReceived, uint256 tokensIntoLiqudity ); constructor() ERC20("NasdaqSPX","NSPX") { address newOwner = address(0x6D1D50D8fc68F9eB02Cc57B8010D999be850C123); uint256 totalSupply = 420689899999998 * 10**18; maxTransactionAmount = totalSupply * 3 / 100; swapTokensAtAmount = totalSupply / 1000; maxWallet = totalSupply * 7 / 100; marketingSellFee = 0; liquiditySellFee = 0; totalSellFees = marketingSellFee + liquiditySellFee; marketingBuyFee = 0; liquidityBuyFee = 0; totalBuyFees = marketingBuyFee + liquidityBuyFee; marketingWallet = address(0x6D1D50D8fc68F9eB02Cc57B8010D999be850C123); // set as mw IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); // Create a uniswap pair for this new token address _uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()) .createPair(address(this), _uniswapV2Router.WETH()); uniswapV2Router = _uniswapV2Router; uniswapV2Pair = _uniswapV2Pair; _setAutomatedMarketMakerPair(_uniswapV2Pair, true); // exclude from paying fees or having max transaction amount excludeFromFees(newOwner, true); excludeFromFees(address(this), true); excludeFromFees(address(0xdead), true); excludeFromMaxTransaction(newOwner, true); excludeFromMaxTransaction(address(this), true); excludeFromMaxTransaction(address(_uniswapV2Router), true); excludeFromMaxTransaction(address(0xdead), true); /* createInitialSupply is a function that is only called here, and CANNOT be called ever again */ createInitialSupply(newOwner, totalSupply); transferOwnership(newOwner); } receive() external payable { } // disable Transfer delay - cannot be reenabled function disableTransferDelay() external onlyOwner returns (bool){ transferDelayEnabled = false; return true; } // set if blacklist function is enabled or disabled function setBlacklistStatus(bool newValue) external onlyOwner() { require(blacklistStatus != newValue, "Blacklist mode is already enabled"); blacklistStatus = newValue; } // set wallet as Blacklisted function setBlacklisted(address account, bool newValue) external onlyOwner() { require(newValue != isBlacklisted[account], "Wallet is blacklisted already"); isBlacklisted[account] = newValue; } // set multiple wallets as blacklisted function massSetBlacklisted(address[] memory accounts, bool newValue) external onlyOwner() { for(uint256 i; i < accounts.length; i++) { require(newValue != isBlacklisted[accounts[i]], "Some of the values are already set as Blacklisted"); isBlacklisted[accounts[i]] = newValue; } } // once enabled, can never be turned off function enableTrading() external onlyOwner { tradingActive = true; swapEnabled = true; tradingActiveBlock = block.number; } // only use to disable contract sales if absolutely necessary (emergency use only) function updateSwapEnabled(bool enabled) external onlyOwner(){ swapEnabled = enabled; } function updateMaxAmount(uint256 newNum) external onlyOwner { require(newNum > (totalSupply() * 1 / 200)/1e18, "Cannot set maxTransactionAmount lower than 0,5%"); maxTransactionAmount = newNum * (10**18); } function updateMaxWalletAmount(uint256 newNum) external onlyOwner { require(newNum > (totalSupply() * 1 / 100)/1e18, "Cannot set maxWallet lower than 1%"); maxWallet = newNum * (10**18); } function updateBuyFees(uint256 _marketingFee, uint256 _liquidityFee) external onlyOwner { marketingBuyFee = _marketingFee; liquidityBuyFee = _liquidityFee; totalBuyFees = marketingBuyFee + liquidityBuyFee; require(totalBuyFees <= 99, "Must keep fees at 99% or less"); } function updateSellFees(uint256 _marketingFee, uint256 _liquidityFee) external onlyOwner { marketingSellFee = _marketingFee; liquiditySellFee = _liquidityFee; totalSellFees = marketingSellFee + liquiditySellFee; require(totalSellFees <= 99, "Must keep fees at 99% or less"); } function excludeFromMaxTransaction(address updAds, bool isEx) public onlyOwner { _isExcludedMaxTransactionAmount[updAds] = isEx; emit ExcludedMaxTransactionAmount(updAds, isEx); } function excludeFromFees(address account, bool excluded) public onlyOwner { _isExcludedFromFees[account] = excluded; emit ExcludeFromFees(account, excluded); } function setAutomatedMarketMakerPair(address pair, bool value) public onlyOwner { require(pair != uniswapV2Pair, "The UniSwap pair cannot be removed from automatedMarketMakerPairs"); _setAutomatedMarketMakerPair(pair, value); } function _setAutomatedMarketMakerPair(address pair, bool value) private { automatedMarketMakerPairs[pair] = value; excludeFromMaxTransaction(pair, value); emit SetAutomatedMarketMakerPair(pair, value); } function isExcludedFromFees(address account) public view returns(bool) { return _isExcludedFromFees[account]; } // remove limits after token is stable function removeLimits() external onlyOwner returns (bool){ limitsInEffect = false; transferDelayEnabled = false; return true; } 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(!blacklistStatus || (!isBlacklisted[from] && !isBlacklisted[to]), "Blacklisted!"); if(amount == 0) { super._transfer(from, to, 0); return; } if(!tradingActive){ require(_isExcludedFromFees[from] || _isExcludedFromFees[to], "Trading is not active yet."); } if(limitsInEffect){ if ( from != owner() && to != owner() && to != address(0) && to != address(0xdead) && !swapping ){ // 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, "Unable to exceed Max Wallet"); } //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, "Unable to exceed Max Wallet"); } } } 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; // no taxes on transfers (non buys/sells) if(takeFee){ // on sell if (automatedMarketMakerPairs[to] && totalSellFees > 0){ fees = amount.mul(totalSellFees).div(100); tokensForLiquidity += fees * liquiditySellFee / totalSellFees; tokensForMarketing += fees * marketingSellFee / totalSellFees; } // on buy else if(automatedMarketMakerPairs[from] && totalBuyFees > 0) { fees = amount.mul(totalBuyFees).div(100); tokensForLiquidity += fees * liquidityBuyFee / totalBuyFees; tokensForMarketing += fees * marketingBuyFee / totalBuyFees; } 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(0x6D1D50D8fc68F9eB02Cc57B8010D999be850C123), block.timestamp ); } function swapBack() private { uint256 contractBalance = balanceOf(address(this)); bool success; uint256 totalTokensToSwap = tokensForLiquidity + tokensForMarketing; if(contractBalance == 0 || totalTokensToSwap == 0) {return;} // 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 ethForMarketing = ethBalance.mul(tokensForMarketing).div(totalTokensToSwap); uint256 ethForLiquidity = ethBalance - ethForMarketing; tokensForLiquidity = 0; tokensForMarketing = 0; if(liquidityTokens > 0 && ethForLiquidity > 0){ addLiquidity(liquidityTokens, ethForLiquidity); emit SwapAndLiquify(amountToSwapForETH, ethForLiquidity, tokensForLiquidity); } // send eth for wallets (success,) = address(marketingWallet).call{value: ethForMarketing}(""); } // useful for taxs or to reclaim any ETH on the contract in a way that helps holders. function marketingTokens(uint256 ethAmountInWei) external onlyOwner { // generate the uniswap pair path of weth -> eth address[] memory path = new address[](2); path[0] = uniswapV2Router.WETH(); path[1] = address(this); // make the swap uniswapV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: ethAmountInWei}( 0, // accept any amount of Ethereum path, address(0xdead), block.timestamp ); } function withdrawStuckEth() external onlyOwner { (bool success,) = address(msg.sender).call{value: address(this).balance}(""); require(success, "failed to withdraw"); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address[]","name":"accounts","type":"address[]"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeMultipleAccountsFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludedMaxTransactionAmount","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":"tokensIntoLiqudity","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":"marketingWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"duration","type":"uint256"}],"name":"taxMultiplierActive","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":[],"name":"blacklistStatus","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"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":"","type":"address"}],"name":"isBlacklisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":"liquidityActiveBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityBuyFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquiditySellFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingBuyFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingSellFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"ethAmountInWei","type":"uint256"}],"name":"marketingTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"bool","name":"newValue","type":"bool"}],"name":"massSetBlacklisted","outputs":[],"stateMutability":"nonpayable","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":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"newValue","type":"bool"}],"name":"setBlacklistStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"newValue","type":"bool"}],"name":"setBlacklisted","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":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalBuyFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSellFees","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":[],"name":"tradingActiveBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"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":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawStuckEth","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60a06040526000600b556000600c556001600d60006101000a81548160ff0219169083151502179055506000600d60016101000a81548160ff0219169083151502179055506000600d60026101000a81548160ff0219169083151502179055506001600f60006101000a81548160ff0219169083151502179055503480156200008757600080fd5b506040518060400160405280600981526020017f4e617364617153505800000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f4e5350580000000000000000000000000000000000000000000000000000000081525081600390805190602001906200010c92919062000d37565b5080600490805190602001906200012592919062000d37565b50505060006200013a620005f660201b60201c565b905080600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506000736d1d50d8fc68f9eb02cc57b8010d999be850c123905060006d14bdda612d475f467e401d3800009050606460038262000216919062000e20565b62000222919062000eb0565b6008819055506103e88162000238919062000eb0565b60098190555060646007826200024f919062000e20565b6200025b919062000eb0565b600a819055506000601181905550600060128190555060125460115462000283919062000ee8565b60108190555060006014819055506000601581905550601554601454620002ab919062000ee8565b601381905550736d1d50d8fc68f9eb02cc57b8010d999be850c123600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000737a250d5630b4cf539739df2c5dacb4c659f2488d905060008173ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200036857600080fd5b505afa1580156200037d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003a3919062000faf565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308473ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200040657600080fd5b505afa1580156200041b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000441919062000faf565b6040518363ffffffff1660e01b81526004016200046092919062000ff2565b602060405180830381600087803b1580156200047b57600080fd5b505af115801562000490573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004b6919062000faf565b905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff168152505062000540816001620005fe60201b60201c565b62000553846001620006b160201b60201c565b62000566306001620006b160201b60201c565b6200057b61dead6001620006b160201b60201c565b6200058e846001620007fe60201b60201c565b620005a1306001620007fe60201b60201c565b620005b4826001620007fe60201b60201c565b620005c961dead6001620007fe60201b60201c565b620005db84846200094b60201b60201c565b620005ec8462000afa60201b60201c565b50505050620012eb565b600033905090565b80601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550620006678282620007fe60201b60201c565b8015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b620006c1620005f660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161462000753576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200074a9062001080565b60405180910390fd5b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051620007f29190620010bf565b60405180910390a25050565b6200080e620005f660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614620008a0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008979062001080565b60405180910390fd5b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f575f9d01836c9206322151b9e9ec3f2b77b87e71176933b9b44d2d732f768d95826040516200093f9190620010bf565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415620009be576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009b5906200112c565b60405180910390fd5b620009d26000838362000ccf60201b60201c565b620009ee8160025462000cd460201b62002a581790919060201c565b60028190555062000a4c816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205462000cd460201b62002a581790919060201c565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000aee91906200115f565b60405180910390a35050565b62000b0a620005f660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161462000b9c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000b939062001080565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141562000c0f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000c0690620011f2565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b505050565b600080828462000ce5919062000ee8565b90508381101562000d2d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000d249062001264565b60405180910390fd5b8091505092915050565b82805462000d4590620012b5565b90600052602060002090601f01602090048101928262000d69576000855562000db5565b82601f1062000d8457805160ff191683800117855562000db5565b8280016001018555821562000db5579182015b8281111562000db457825182559160200191906001019062000d97565b5b50905062000dc4919062000dc8565b5090565b5b8082111562000de357600081600090555060010162000dc9565b5090565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000e2d8262000de7565b915062000e3a8362000de7565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000e765762000e7562000df1565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000ebd8262000de7565b915062000eca8362000de7565b92508262000edd5762000edc62000e81565b5b828204905092915050565b600062000ef58262000de7565b915062000f028362000de7565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000f3a5762000f3962000df1565b5b828201905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000f778262000f4a565b9050919050565b62000f898162000f6a565b811462000f9557600080fd5b50565b60008151905062000fa98162000f7e565b92915050565b60006020828403121562000fc85762000fc762000f45565b5b600062000fd88482850162000f98565b91505092915050565b62000fec8162000f6a565b82525050565b600060408201905062001009600083018562000fe1565b62001018602083018462000fe1565b9392505050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000620010686020836200101f565b9150620010758262001030565b602082019050919050565b600060208201905081810360008301526200109b8162001059565b9050919050565b60008115159050919050565b620010b981620010a2565b82525050565b6000602082019050620010d66000830184620010ae565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062001114601f836200101f565b91506200112182620010dc565b602082019050919050565b60006020820190508181036000830152620011478162001105565b9050919050565b620011598162000de7565b82525050565b60006020820190506200117660008301846200114e565b92915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000620011da6026836200101f565b9150620011e7826200117c565b604082019050919050565b600060208201905081810360008301526200120d81620011cb565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b60006200124c601b836200101f565b9150620012598262001214565b602082019050919050565b600060208201905081810360008301526200127f816200123d565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620012ce57607f821691505b60208210811415620012e557620012e462001286565b5b50919050565b608051615c1962001315600039600081816115b001528181611f6d015261313e0152615c196000f3fe6080604052600436106103545760003560e01c80637fa787ba116101c6578063c876d0b9116100f7578063e2f4560511610095578063ee40166e1161006f578063ee40166e14610c51578063f2fde38b14610c7c578063f8b45b0514610ca5578063fe575a8714610cd05761035b565b8063e2f4560514610bd0578063e7f444b314610bfb578063e884f26014610c265761035b565b8063ccb61358116100d1578063ccb6135814610b14578063d01dd6d214610b3f578063d0a3981414610b68578063dd62ed3e14610b935761035b565b8063c876d0b914610a95578063c8c8ebe414610ac0578063ca7b260714610aeb5761035b565b8063a457c2d711610164578063b9e937001161013e578063b9e93700146109ed578063bbc0c74214610a18578063c024666814610a43578063c18bc19514610a6c5761035b565b8063a457c2d714610936578063a9059cbb14610973578063b62496f5146109b05761035b565b80638da5cb5b116101a05780638da5cb5b1461088e578063924de9b7146108b957806395d89b41146108e25780639a7a23d61461090d5761035b565b80637fa787ba1461083557806380c1f2291461084c5780638a8c523c146108775761035b565b8063313ce567116102a0578063680789521161023e578063715018a611610218578063715018a61461079f578063751039fc146107b65780637571336a146107e157806375f0a8741461080a5761035b565b8063680789521461070c5780636ddd17131461073757806370a08231146107625761035b565b806349bd5a5e1161027a57806349bd5a5e146106505780634a62bb651461067b5780634fbee193146106a657806366ca9b83146106e35761035b565b8063313ce567146105bf57806339509351146105ea5780633f3539ef146106275761035b565b806310d5de531161030d5780631a8145bb116102e75780631a8145bb146105035780631e433c0d1461052e5780631f3fed8f1461055757806323b872dd146105825761035b565b806310d5de53146104705780631694505e146104ad57806318160ddd146104d85761035b565b806302dbd8f81461036057806306fdde0314610389578063095ea7b3146103b4578063099d0d30146103f15780630f4432e31461041c578063106b5da1146104475761035b565b3661035b57005b600080fd5b34801561036c57600080fd5b5061038760048036038101906103829190614457565b610d0d565b005b34801561039557600080fd5b5061039e610e12565b6040516103ab9190614530565b60405180910390f35b3480156103c057600080fd5b506103db60048036038101906103d691906145b0565b610ea4565b6040516103e8919061460b565b60405180910390f35b3480156103fd57600080fd5b50610406610ec2565b6040516104139190614635565b60405180910390f35b34801561042857600080fd5b50610431610ec8565b60405161043e9190614635565b60405180910390f35b34801561045357600080fd5b5061046e60048036038101906104699190614650565b610ece565b005b34801561047c57600080fd5b506104976004803603810190610492919061467d565b610ff6565b6040516104a4919061460b565b60405180910390f35b3480156104b957600080fd5b506104c2611016565b6040516104cf9190614709565b60405180910390f35b3480156104e457600080fd5b506104ed61103c565b6040516104fa9190614635565b60405180910390f35b34801561050f57600080fd5b50610518611046565b6040516105259190614635565b60405180910390f35b34801561053a57600080fd5b5061055560048036038101906105509190614750565b61104c565b005b34801561056357600080fd5b5061056c611156565b6040516105799190614635565b60405180910390f35b34801561058e57600080fd5b506105a960048036038101906105a4919061477d565b61115c565b6040516105b6919061460b565b60405180910390f35b3480156105cb57600080fd5b506105d4611235565b6040516105e191906147ec565b60405180910390f35b3480156105f657600080fd5b50610611600480360381019061060c91906145b0565b61123e565b60405161061e919061460b565b60405180910390f35b34801561063357600080fd5b5061064e60048036038101906106499190614650565b6112f1565b005b34801561065c57600080fd5b506106656115ae565b6040516106729190614816565b60405180910390f35b34801561068757600080fd5b506106906115d2565b60405161069d919061460b565b60405180910390f35b3480156106b257600080fd5b506106cd60048036038101906106c8919061467d565b6115e5565b6040516106da919061460b565b60405180910390f35b3480156106ef57600080fd5b5061070a60048036038101906107059190614457565b61163b565b005b34801561071857600080fd5b50610721611740565b60405161072e9190614635565b60405180910390f35b34801561074357600080fd5b5061074c611746565b604051610759919061460b565b60405180910390f35b34801561076e57600080fd5b506107896004803603810190610784919061467d565b611759565b6040516107969190614635565b60405180910390f35b3480156107ab57600080fd5b506107b46117a1565b005b3480156107c257600080fd5b506107cb6118f9565b6040516107d8919061460b565b60405180910390f35b3480156107ed57600080fd5b5061080860048036038101906108039190614831565b6119cf565b005b34801561081657600080fd5b5061081f611b0f565b60405161082c9190614816565b60405180910390f35b34801561084157600080fd5b5061084a611b35565b005b34801561085857600080fd5b50610861611c7b565b60405161086e919061460b565b60405180910390f35b34801561088357600080fd5b5061088c611c8e565b005b34801561089a57600080fd5b506108a3611d64565b6040516108b09190614816565b60405180910390f35b3480156108c557600080fd5b506108e060048036038101906108db9190614750565b611d8e565b005b3480156108ee57600080fd5b506108f7611e42565b6040516109049190614530565b60405180910390f35b34801561091957600080fd5b50610934600480360381019061092f9190614831565b611ed4565b005b34801561094257600080fd5b5061095d600480360381019061095891906145b0565b612008565b60405161096a919061460b565b60405180910390f35b34801561097f57600080fd5b5061099a600480360381019061099591906145b0565b6120d5565b6040516109a7919061460b565b60405180910390f35b3480156109bc57600080fd5b506109d760048036038101906109d2919061467d565b6120f3565b6040516109e4919061460b565b60405180910390f35b3480156109f957600080fd5b50610a02612113565b604051610a0f9190614635565b60405180910390f35b348015610a2457600080fd5b50610a2d612119565b604051610a3a919061460b565b60405180910390f35b348015610a4f57600080fd5b50610a6a6004803603810190610a659190614831565b61212c565b005b348015610a7857600080fd5b50610a936004803603810190610a8e9190614650565b61226c565b005b348015610aa157600080fd5b50610aaa612394565b604051610ab7919061460b565b60405180910390f35b348015610acc57600080fd5b50610ad56123a7565b604051610ae29190614635565b60405180910390f35b348015610af757600080fd5b50610b126004803603810190610b0d91906149b9565b6123ad565b005b348015610b2057600080fd5b50610b29612586565b604051610b369190614635565b60405180910390f35b348015610b4b57600080fd5b50610b666004803603810190610b619190614831565b61258c565b005b348015610b7457600080fd5b50610b7d612711565b604051610b8a9190614635565b60405180910390f35b348015610b9f57600080fd5b50610bba6004803603810190610bb59190614a15565b612717565b604051610bc79190614635565b60405180910390f35b348015610bdc57600080fd5b50610be561279e565b604051610bf29190614635565b60405180910390f35b348015610c0757600080fd5b50610c106127a4565b604051610c1d9190614635565b60405180910390f35b348015610c3257600080fd5b50610c3b6127aa565b604051610c48919061460b565b60405180910390f35b348015610c5d57600080fd5b50610c66612865565b604051610c739190614635565b60405180910390f35b348015610c8857600080fd5b50610ca36004803603810190610c9e919061467d565b61286b565b005b348015610cb157600080fd5b50610cba612a32565b604051610cc79190614635565b60405180910390f35b348015610cdc57600080fd5b50610cf76004803603810190610cf2919061467d565b612a38565b604051610d04919061460b565b60405180910390f35b610d15612ab6565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610da4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9b90614aa1565b60405180910390fd5b8160118190555080601281905550601254601154610dc29190614af0565b60108190555060636010541115610e0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0590614b92565b60405180910390fd5b5050565b606060038054610e2190614be1565b80601f0160208091040260200160405190810160405280929190818152602001828054610e4d90614be1565b8015610e9a5780601f10610e6f57610100808354040283529160200191610e9a565b820191906000526020600020905b815481529060010190602001808311610e7d57829003601f168201915b5050505050905090565b6000610eb8610eb1612ab6565b8484612abe565b6001905092915050565b60125481565b600b5481565b610ed6612ab6565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f65576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f5c90614aa1565b60405180910390fd5b670de0b6b3a764000060c86001610f7a61103c565b610f849190614c13565b610f8e9190614c9c565b610f989190614c9c565b8111610fd9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fd090614d3f565b60405180910390fd5b670de0b6b3a764000081610fed9190614c13565b60088190555050565b60196020528060005260406000206000915054906101000a900460ff1681565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600254905090565b60175481565b611054612ab6565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110da90614aa1565b60405180910390fd5b801515601a60009054906101000a900460ff1615151415611139576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113090614dd1565b60405180910390fd5b80601a60006101000a81548160ff02191690831515021790555050565b60165481565b6000611169848484612c89565b61122a84611175612ab6565b61122585604051806060016040528060288152602001615b9760289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006111db612ab6565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546139ba9092919063ffffffff16565b612abe565b600190509392505050565b60006012905090565b60006112e761124b612ab6565b846112e2856001600061125c612ab6565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612a5890919063ffffffff16565b612abe565b6001905092915050565b6112f9612ab6565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611388576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137f90614aa1565b60405180910390fd5b6000600267ffffffffffffffff8111156113a5576113a4614876565b5b6040519080825280602002602001820160405280156113d35781602001602082028036833780820191505090505b509050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561143e57600080fd5b505afa158015611452573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114769190614e06565b8160008151811061148a57611489614e33565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505030816001815181106114d9576114d8614e33565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b6f9de958360008461dead426040518663ffffffff1660e01b81526004016115789493929190614f5b565b6000604051808303818588803b15801561159157600080fd5b505af11580156115a5573d6000803e3d6000fd5b50505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600d60009054906101000a900460ff1681565b6000601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b611643612ab6565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146116d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116c990614aa1565b60405180910390fd5b81601481905550806015819055506015546014546116f09190614af0565b6013819055506063601354111561173c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161173390614b92565b60405180910390fd5b5050565b60145481565b600d60029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6117a9612ab6565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611838576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161182f90614aa1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000611903612ab6565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611992576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161198990614aa1565b60405180910390fd5b6000600d60006101000a81548160ff0219169083151502179055506000600f60006101000a81548160ff0219169083151502179055506001905090565b6119d7612ab6565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a66576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a5d90614aa1565b60405180910390fd5b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f575f9d01836c9206322151b9e9ec3f2b77b87e71176933b9b44d2d732f768d9582604051611b03919061460b565b60405180910390a25050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611b3d612ab6565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611bcc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bc390614aa1565b60405180910390fd5b60003373ffffffffffffffffffffffffffffffffffffffff1647604051611bf290614fd8565b60006040518083038185875af1925050503d8060008114611c2f576040519150601f19603f3d011682016040523d82523d6000602084013e611c34565b606091505b5050905080611c78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c6f90615039565b60405180910390fd5b50565b601a60009054906101000a900460ff1681565b611c96612ab6565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d1c90614aa1565b60405180910390fd5b6001600d60016101000a81548160ff0219169083151502179055506001600d60026101000a81548160ff02191690831515021790555043600c81905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611d96612ab6565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1c90614aa1565b60405180910390fd5b80600d60026101000a81548160ff02191690831515021790555050565b606060048054611e5190614be1565b80601f0160208091040260200160405190810160405280929190818152602001828054611e7d90614be1565b8015611eca5780601f10611e9f57610100808354040283529160200191611eca565b820191906000526020600020905b815481529060010190602001808311611ead57829003601f168201915b5050505050905090565b611edc612ab6565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f6b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f6290614aa1565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611ffa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ff1906150f1565b60405180910390fd5b6120048282613a1e565b5050565b60006120cb612015612ab6565b846120c685604051806060016040528060258152602001615bbf602591396001600061203f612ab6565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546139ba9092919063ffffffff16565b612abe565b6001905092915050565b60006120e96120e2612ab6565b8484612c89565b6001905092915050565b601c6020528060005260406000206000915054906101000a900460ff1681565b60135481565b600d60019054906101000a900460ff1681565b612134612ab6565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146121c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121ba90614aa1565b60405180910390fd5b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051612260919061460b565b60405180910390a25050565b612274612ab6565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612303576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122fa90614aa1565b60405180910390fd5b670de0b6b3a76400006064600161231861103c565b6123229190614c13565b61232c9190614c9c565b6123369190614c9c565b8111612377576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161236e90615183565b60405180910390fd5b670de0b6b3a76400008161238b9190614c13565b600a8190555050565b600f60009054906101000a900460ff1681565b60085481565b6123b5612ab6565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612444576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161243b90614aa1565b60405180910390fd5b60005b825181101561258157601b600084838151811061246757612466614e33565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151582151514156124fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124f490615215565b60405180910390fd5b81601b600085848151811061251557612514614e33565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550808061257990615235565b915050612447565b505050565b60155481565b612594612ab6565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612623576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161261a90614aa1565b60405180910390fd5b601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151581151514156126b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126ad906152ca565b60405180910390fd5b80601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60105481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60095481565b60115481565b60006127b4612ab6565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612843576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161283a90614aa1565b60405180910390fd5b6000600f60006101000a81548160ff0219169083151502179055506001905090565b600c5481565b612873612ab6565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612902576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128f990614aa1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612972576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129699061535c565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600a5481565b601b6020528060005260406000206000915054906101000a900460ff1681565b6000808284612a679190614af0565b905083811015612aac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612aa3906153c8565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612b2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b259061545a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612b9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b95906154ec565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612c7c9190614635565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612cf9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cf09061557e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612d69576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d6090615610565b60405180910390fd5b601a60009054906101000a900460ff161580612e255750601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612e245750601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b5b612e64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e5b9061567c565b60405180910390fd5b6000811415612e7e57612e7983836000613ac9565b6139b5565b600d60019054906101000a900460ff16612f7357601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612f335750601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612f72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f69906156e8565b60405180910390fd5b5b600d60009054906101000a900460ff161561354357612f90611d64565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612ffe5750612fce611d64565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156130375750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015613071575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561308a5750600660149054906101000a900460ff16155b1561354257600f60009054906101000a900460ff1615613259576130ac611d64565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141580156131355750600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561318d57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156132585743600e60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410613213576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161320a906157a0565b60405180910390fd5b43600e60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156132fc5750601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156133a357600854811115613346576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161333d90615832565b60405180910390fd5b600a5461335283611759565b8261335d9190614af0565b111561339e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133959061589e565b60405180910390fd5b613541565b601c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156134465750601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561349557600854811115613490576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161348790615930565b60405180910390fd5b613540565b601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661353f57600a546134f283611759565b826134fd9190614af0565b111561353e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135359061589e565b60405180910390fd5b5b5b5b5b5b600061354e30611759565b9050600060095482101590508080156135735750600d60029054906101000a900460ff165b801561358c5750600660149054906101000a900460ff16155b80156135e25750601c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156136385750601860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561368e5750601860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156136d2576001600660146101000a81548160ff0219169083151502179055506136b6613d5e565b6000600660146101000a81548160ff0219169083151502179055505b6000600660149054906101000a900460ff16159050601860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806137885750601860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561379257600090505b600081156139a557601c60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156137f557506000601054115b1561388f57613822606461381460105488613f4390919063ffffffff16565b613fbe90919063ffffffff16565b9050601054601254826138359190614c13565b61383f9190614c9c565b601760008282546138509190614af0565b92505081905550601054601154826138689190614c13565b6138729190614c9c565b601660008282546138839190614af0565b92505081905550613981565b601c60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156138ea57506000601354115b1561398057613917606461390960135488613f4390919063ffffffff16565b613fbe90919063ffffffff16565b90506013546015548261392a9190614c13565b6139349190614c9c565b601760008282546139459190614af0565b925050819055506013546014548261395d9190614c13565b6139679190614c9c565b601660008282546139789190614af0565b925050819055505b5b600081111561399657613995873083613ac9565b5b80856139a29190615950565b94505b6139b0878787613ac9565b505050505b505050565b6000838311158290613a02576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016139f99190614530565b60405180910390fd5b5060008385613a119190615950565b9050809150509392505050565b80601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550613a7f82826119cf565b8015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613b39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613b309061557e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613ba9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613ba090615610565b60405180910390fd5b613bb4838383614008565b613c1f81604051806060016040528060268152602001615b71602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546139ba9092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613cb2816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612a5890919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051613d519190614635565b60405180910390a3505050565b6000613d6930611759565b9050600080601654601754613d7e9190614af0565b90506000831480613d8f5750600081145b15613d9c57505050613f41565b600060028260175486613daf9190614c13565b613db99190614c9c565b613dc39190614c9c565b90506000613dda828661400d90919063ffffffff16565b90506000479050613dea82614057565b6000613dff824761400d90919063ffffffff16565b90506000613e2a86613e1c60165485613f4390919063ffffffff16565b613fbe90919063ffffffff16565b905060008183613e3a9190615950565b905060006017819055506000601681905550600086118015613e5c5750600081115b15613ea957613e6b86826142a9565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618582601754604051613ea093929190615984565b60405180910390a15b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051613eef90614fd8565b60006040518083038185875af1925050503d8060008114613f2c576040519150601f19603f3d011682016040523d82523d6000602084013e613f31565b606091505b5050809850505050505050505050505b565b600080831415613f565760009050613fb8565b60008284613f649190614c13565b9050828482613f739190614c9c565b14613fb3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613faa90615a2d565b60405180910390fd5b809150505b92915050565b600061400083836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506143aa565b905092915050565b505050565b600061404f83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506139ba565b905092915050565b6000600267ffffffffffffffff81111561407457614073614876565b5b6040519080825280602002602001820160405280156140a25781602001602082028036833780820191505090505b50905030816000815181106140ba576140b9614e33565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561415c57600080fd5b505afa158015614170573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141949190614e06565b816001815181106141a8576141a7614e33565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061420f30600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612abe565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401614273959493929190615a4d565b600060405180830381600087803b15801561428d57600080fd5b505af11580156142a1573d6000803e3d6000fd5b505050505050565b6142d630600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612abe565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080736d1d50d8fc68f9eb02cc57b8010d999be850c123426040518863ffffffff1660e01b815260040161435196959493929190615aa7565b6060604051808303818588803b15801561436a57600080fd5b505af115801561437e573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906143a39190615b1d565b5050505050565b600080831182906143f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016143e89190614530565b60405180910390fd5b50600083856144009190614c9c565b9050809150509392505050565b6000604051905090565b600080fd5b600080fd5b6000819050919050565b61443481614421565b811461443f57600080fd5b50565b6000813590506144518161442b565b92915050565b6000806040838503121561446e5761446d614417565b5b600061447c85828601614442565b925050602061448d85828601614442565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b60005b838110156144d15780820151818401526020810190506144b6565b838111156144e0576000848401525b50505050565b6000601f19601f8301169050919050565b600061450282614497565b61450c81856144a2565b935061451c8185602086016144b3565b614525816144e6565b840191505092915050565b6000602082019050818103600083015261454a81846144f7565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061457d82614552565b9050919050565b61458d81614572565b811461459857600080fd5b50565b6000813590506145aa81614584565b92915050565b600080604083850312156145c7576145c6614417565b5b60006145d58582860161459b565b92505060206145e685828601614442565b9150509250929050565b60008115159050919050565b614605816145f0565b82525050565b600060208201905061462060008301846145fc565b92915050565b61462f81614421565b82525050565b600060208201905061464a6000830184614626565b92915050565b60006020828403121561466657614665614417565b5b600061467484828501614442565b91505092915050565b60006020828403121561469357614692614417565b5b60006146a18482850161459b565b91505092915050565b6000819050919050565b60006146cf6146ca6146c584614552565b6146aa565b614552565b9050919050565b60006146e1826146b4565b9050919050565b60006146f3826146d6565b9050919050565b614703816146e8565b82525050565b600060208201905061471e60008301846146fa565b92915050565b61472d816145f0565b811461473857600080fd5b50565b60008135905061474a81614724565b92915050565b60006020828403121561476657614765614417565b5b60006147748482850161473b565b91505092915050565b60008060006060848603121561479657614795614417565b5b60006147a48682870161459b565b93505060206147b58682870161459b565b92505060406147c686828701614442565b9150509250925092565b600060ff82169050919050565b6147e6816147d0565b82525050565b600060208201905061480160008301846147dd565b92915050565b61481081614572565b82525050565b600060208201905061482b6000830184614807565b92915050565b6000806040838503121561484857614847614417565b5b60006148568582860161459b565b92505060206148678582860161473b565b9150509250929050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6148ae826144e6565b810181811067ffffffffffffffff821117156148cd576148cc614876565b5b80604052505050565b60006148e061440d565b90506148ec82826148a5565b919050565b600067ffffffffffffffff82111561490c5761490b614876565b5b602082029050602081019050919050565b600080fd5b6000614935614930846148f1565b6148d6565b905080838252602082019050602084028301858111156149585761495761491d565b5b835b81811015614981578061496d888261459b565b84526020840193505060208101905061495a565b5050509392505050565b600082601f8301126149a05761499f614871565b5b81356149b0848260208601614922565b91505092915050565b600080604083850312156149d0576149cf614417565b5b600083013567ffffffffffffffff8111156149ee576149ed61441c565b5b6149fa8582860161498b565b9250506020614a0b8582860161473b565b9150509250929050565b60008060408385031215614a2c57614a2b614417565b5b6000614a3a8582860161459b565b9250506020614a4b8582860161459b565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614a8b6020836144a2565b9150614a9682614a55565b602082019050919050565b60006020820190508181036000830152614aba81614a7e565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614afb82614421565b9150614b0683614421565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614b3b57614b3a614ac1565b5b828201905092915050565b7f4d757374206b656570206665657320617420393925206f72206c657373000000600082015250565b6000614b7c601d836144a2565b9150614b8782614b46565b602082019050919050565b60006020820190508181036000830152614bab81614b6f565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680614bf957607f821691505b60208210811415614c0d57614c0c614bb2565b5b50919050565b6000614c1e82614421565b9150614c2983614421565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614c6257614c61614ac1565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614ca782614421565b9150614cb283614421565b925082614cc257614cc1614c6d565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302c35250000000000000000000000000000000000602082015250565b6000614d29602f836144a2565b9150614d3482614ccd565b604082019050919050565b60006020820190508181036000830152614d5881614d1c565b9050919050565b7f426c61636b6c697374206d6f646520697320616c726561647920656e61626c6560008201527f6400000000000000000000000000000000000000000000000000000000000000602082015250565b6000614dbb6021836144a2565b9150614dc682614d5f565b604082019050919050565b60006020820190508181036000830152614dea81614dae565b9050919050565b600081519050614e0081614584565b92915050565b600060208284031215614e1c57614e1b614417565b5b6000614e2a84828501614df1565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000819050919050565b6000614e87614e82614e7d84614e62565b6146aa565b614421565b9050919050565b614e9781614e6c565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614ed281614572565b82525050565b6000614ee48383614ec9565b60208301905092915050565b6000602082019050919050565b6000614f0882614e9d565b614f128185614ea8565b9350614f1d83614eb9565b8060005b83811015614f4e578151614f358882614ed8565b9750614f4083614ef0565b925050600181019050614f21565b5085935050505092915050565b6000608082019050614f706000830187614e8e565b8181036020830152614f828186614efd565b9050614f916040830185614807565b614f9e6060830184614626565b95945050505050565b600081905092915050565b50565b6000614fc2600083614fa7565b9150614fcd82614fb2565b600082019050919050565b6000614fe382614fb5565b9150819050919050565b7f6661696c656420746f2077697468647261770000000000000000000000000000600082015250565b60006150236012836144a2565b915061502e82614fed565b602082019050919050565b6000602082019050818103600083015261505281615016565b9050919050565b7f54686520556e695377617020706169722063616e6e6f742062652072656d6f7660008201527f65642066726f6d206175746f6d617465644d61726b65744d616b65725061697260208201527f7300000000000000000000000000000000000000000000000000000000000000604082015250565b60006150db6041836144a2565b91506150e682615059565b606082019050919050565b6000602082019050818103600083015261510a816150ce565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f3125000000000000000000000000000000000000000000000000000000000000602082015250565b600061516d6022836144a2565b915061517882615111565b604082019050919050565b6000602082019050818103600083015261519c81615160565b9050919050565b7f536f6d65206f66207468652076616c7565732061726520616c7265616479207360008201527f657420617320426c61636b6c6973746564000000000000000000000000000000602082015250565b60006151ff6031836144a2565b915061520a826151a3565b604082019050919050565b6000602082019050818103600083015261522e816151f2565b9050919050565b600061524082614421565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561527357615272614ac1565b5b600182019050919050565b7f57616c6c657420697320626c61636b6c697374656420616c7265616479000000600082015250565b60006152b4601d836144a2565b91506152bf8261527e565b602082019050919050565b600060208201905081810360008301526152e3816152a7565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006153466026836144a2565b9150615351826152ea565b604082019050919050565b6000602082019050818103600083015261537581615339565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b60006153b2601b836144a2565b91506153bd8261537c565b602082019050919050565b600060208201905081810360008301526153e1816153a5565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006154446024836144a2565b915061544f826153e8565b604082019050919050565b6000602082019050818103600083015261547381615437565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006154d66022836144a2565b91506154e18261547a565b604082019050919050565b60006020820190508181036000830152615505816154c9565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006155686025836144a2565b91506155738261550c565b604082019050919050565b600060208201905081810360008301526155978161555b565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006155fa6023836144a2565b91506156058261559e565b604082019050919050565b60006020820190508181036000830152615629816155ed565b9050919050565b7f426c61636b6c6973746564210000000000000000000000000000000000000000600082015250565b6000615666600c836144a2565b915061567182615630565b602082019050919050565b6000602082019050818103600083015261569581615659565b9050919050565b7f54726164696e67206973206e6f7420616374697665207965742e000000000000600082015250565b60006156d2601a836144a2565b91506156dd8261569c565b602082019050919050565b60006020820190508181036000830152615701816156c5565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b600061578a6049836144a2565b915061579582615708565b606082019050919050565b600060208201905081810360008301526157b98161577d565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b600061581c6035836144a2565b9150615827826157c0565b604082019050919050565b6000602082019050818103600083015261584b8161580f565b9050919050565b7f556e61626c6520746f20657863656564204d61782057616c6c65740000000000600082015250565b6000615888601b836144a2565b915061589382615852565b602082019050919050565b600060208201905081810360008301526158b78161587b565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b600061591a6036836144a2565b9150615925826158be565b604082019050919050565b600060208201905081810360008301526159498161590d565b9050919050565b600061595b82614421565b915061596683614421565b92508282101561597957615978614ac1565b5b828203905092915050565b60006060820190506159996000830186614626565b6159a66020830185614626565b6159b36040830184614626565b949350505050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000615a176021836144a2565b9150615a22826159bb565b604082019050919050565b60006020820190508181036000830152615a4681615a0a565b9050919050565b600060a082019050615a626000830188614626565b615a6f6020830187614e8e565b8181036040830152615a818186614efd565b9050615a906060830185614807565b615a9d6080830184614626565b9695505050505050565b600060c082019050615abc6000830189614807565b615ac96020830188614626565b615ad66040830187614e8e565b615ae36060830186614e8e565b615af06080830185614807565b615afd60a0830184614626565b979650505050505050565b600081519050615b178161442b565b92915050565b600080600060608486031215615b3657615b35614417565b5b6000615b4486828701615b08565b9350506020615b5586828701615b08565b9250506040615b6686828701615b08565b915050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122026cb26ed96f6d55ceef1eb17669c1f3453d349449a85043f2384abd336e5d7aa64736f6c63430008090033
Deployed Bytecode
0x6080604052600436106103545760003560e01c80637fa787ba116101c6578063c876d0b9116100f7578063e2f4560511610095578063ee40166e1161006f578063ee40166e14610c51578063f2fde38b14610c7c578063f8b45b0514610ca5578063fe575a8714610cd05761035b565b8063e2f4560514610bd0578063e7f444b314610bfb578063e884f26014610c265761035b565b8063ccb61358116100d1578063ccb6135814610b14578063d01dd6d214610b3f578063d0a3981414610b68578063dd62ed3e14610b935761035b565b8063c876d0b914610a95578063c8c8ebe414610ac0578063ca7b260714610aeb5761035b565b8063a457c2d711610164578063b9e937001161013e578063b9e93700146109ed578063bbc0c74214610a18578063c024666814610a43578063c18bc19514610a6c5761035b565b8063a457c2d714610936578063a9059cbb14610973578063b62496f5146109b05761035b565b80638da5cb5b116101a05780638da5cb5b1461088e578063924de9b7146108b957806395d89b41146108e25780639a7a23d61461090d5761035b565b80637fa787ba1461083557806380c1f2291461084c5780638a8c523c146108775761035b565b8063313ce567116102a0578063680789521161023e578063715018a611610218578063715018a61461079f578063751039fc146107b65780637571336a146107e157806375f0a8741461080a5761035b565b8063680789521461070c5780636ddd17131461073757806370a08231146107625761035b565b806349bd5a5e1161027a57806349bd5a5e146106505780634a62bb651461067b5780634fbee193146106a657806366ca9b83146106e35761035b565b8063313ce567146105bf57806339509351146105ea5780633f3539ef146106275761035b565b806310d5de531161030d5780631a8145bb116102e75780631a8145bb146105035780631e433c0d1461052e5780631f3fed8f1461055757806323b872dd146105825761035b565b806310d5de53146104705780631694505e146104ad57806318160ddd146104d85761035b565b806302dbd8f81461036057806306fdde0314610389578063095ea7b3146103b4578063099d0d30146103f15780630f4432e31461041c578063106b5da1146104475761035b565b3661035b57005b600080fd5b34801561036c57600080fd5b5061038760048036038101906103829190614457565b610d0d565b005b34801561039557600080fd5b5061039e610e12565b6040516103ab9190614530565b60405180910390f35b3480156103c057600080fd5b506103db60048036038101906103d691906145b0565b610ea4565b6040516103e8919061460b565b60405180910390f35b3480156103fd57600080fd5b50610406610ec2565b6040516104139190614635565b60405180910390f35b34801561042857600080fd5b50610431610ec8565b60405161043e9190614635565b60405180910390f35b34801561045357600080fd5b5061046e60048036038101906104699190614650565b610ece565b005b34801561047c57600080fd5b506104976004803603810190610492919061467d565b610ff6565b6040516104a4919061460b565b60405180910390f35b3480156104b957600080fd5b506104c2611016565b6040516104cf9190614709565b60405180910390f35b3480156104e457600080fd5b506104ed61103c565b6040516104fa9190614635565b60405180910390f35b34801561050f57600080fd5b50610518611046565b6040516105259190614635565b60405180910390f35b34801561053a57600080fd5b5061055560048036038101906105509190614750565b61104c565b005b34801561056357600080fd5b5061056c611156565b6040516105799190614635565b60405180910390f35b34801561058e57600080fd5b506105a960048036038101906105a4919061477d565b61115c565b6040516105b6919061460b565b60405180910390f35b3480156105cb57600080fd5b506105d4611235565b6040516105e191906147ec565b60405180910390f35b3480156105f657600080fd5b50610611600480360381019061060c91906145b0565b61123e565b60405161061e919061460b565b60405180910390f35b34801561063357600080fd5b5061064e60048036038101906106499190614650565b6112f1565b005b34801561065c57600080fd5b506106656115ae565b6040516106729190614816565b60405180910390f35b34801561068757600080fd5b506106906115d2565b60405161069d919061460b565b60405180910390f35b3480156106b257600080fd5b506106cd60048036038101906106c8919061467d565b6115e5565b6040516106da919061460b565b60405180910390f35b3480156106ef57600080fd5b5061070a60048036038101906107059190614457565b61163b565b005b34801561071857600080fd5b50610721611740565b60405161072e9190614635565b60405180910390f35b34801561074357600080fd5b5061074c611746565b604051610759919061460b565b60405180910390f35b34801561076e57600080fd5b506107896004803603810190610784919061467d565b611759565b6040516107969190614635565b60405180910390f35b3480156107ab57600080fd5b506107b46117a1565b005b3480156107c257600080fd5b506107cb6118f9565b6040516107d8919061460b565b60405180910390f35b3480156107ed57600080fd5b5061080860048036038101906108039190614831565b6119cf565b005b34801561081657600080fd5b5061081f611b0f565b60405161082c9190614816565b60405180910390f35b34801561084157600080fd5b5061084a611b35565b005b34801561085857600080fd5b50610861611c7b565b60405161086e919061460b565b60405180910390f35b34801561088357600080fd5b5061088c611c8e565b005b34801561089a57600080fd5b506108a3611d64565b6040516108b09190614816565b60405180910390f35b3480156108c557600080fd5b506108e060048036038101906108db9190614750565b611d8e565b005b3480156108ee57600080fd5b506108f7611e42565b6040516109049190614530565b60405180910390f35b34801561091957600080fd5b50610934600480360381019061092f9190614831565b611ed4565b005b34801561094257600080fd5b5061095d600480360381019061095891906145b0565b612008565b60405161096a919061460b565b60405180910390f35b34801561097f57600080fd5b5061099a600480360381019061099591906145b0565b6120d5565b6040516109a7919061460b565b60405180910390f35b3480156109bc57600080fd5b506109d760048036038101906109d2919061467d565b6120f3565b6040516109e4919061460b565b60405180910390f35b3480156109f957600080fd5b50610a02612113565b604051610a0f9190614635565b60405180910390f35b348015610a2457600080fd5b50610a2d612119565b604051610a3a919061460b565b60405180910390f35b348015610a4f57600080fd5b50610a6a6004803603810190610a659190614831565b61212c565b005b348015610a7857600080fd5b50610a936004803603810190610a8e9190614650565b61226c565b005b348015610aa157600080fd5b50610aaa612394565b604051610ab7919061460b565b60405180910390f35b348015610acc57600080fd5b50610ad56123a7565b604051610ae29190614635565b60405180910390f35b348015610af757600080fd5b50610b126004803603810190610b0d91906149b9565b6123ad565b005b348015610b2057600080fd5b50610b29612586565b604051610b369190614635565b60405180910390f35b348015610b4b57600080fd5b50610b666004803603810190610b619190614831565b61258c565b005b348015610b7457600080fd5b50610b7d612711565b604051610b8a9190614635565b60405180910390f35b348015610b9f57600080fd5b50610bba6004803603810190610bb59190614a15565b612717565b604051610bc79190614635565b60405180910390f35b348015610bdc57600080fd5b50610be561279e565b604051610bf29190614635565b60405180910390f35b348015610c0757600080fd5b50610c106127a4565b604051610c1d9190614635565b60405180910390f35b348015610c3257600080fd5b50610c3b6127aa565b604051610c48919061460b565b60405180910390f35b348015610c5d57600080fd5b50610c66612865565b604051610c739190614635565b60405180910390f35b348015610c8857600080fd5b50610ca36004803603810190610c9e919061467d565b61286b565b005b348015610cb157600080fd5b50610cba612a32565b604051610cc79190614635565b60405180910390f35b348015610cdc57600080fd5b50610cf76004803603810190610cf2919061467d565b612a38565b604051610d04919061460b565b60405180910390f35b610d15612ab6565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610da4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9b90614aa1565b60405180910390fd5b8160118190555080601281905550601254601154610dc29190614af0565b60108190555060636010541115610e0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0590614b92565b60405180910390fd5b5050565b606060038054610e2190614be1565b80601f0160208091040260200160405190810160405280929190818152602001828054610e4d90614be1565b8015610e9a5780601f10610e6f57610100808354040283529160200191610e9a565b820191906000526020600020905b815481529060010190602001808311610e7d57829003601f168201915b5050505050905090565b6000610eb8610eb1612ab6565b8484612abe565b6001905092915050565b60125481565b600b5481565b610ed6612ab6565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f65576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f5c90614aa1565b60405180910390fd5b670de0b6b3a764000060c86001610f7a61103c565b610f849190614c13565b610f8e9190614c9c565b610f989190614c9c565b8111610fd9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fd090614d3f565b60405180910390fd5b670de0b6b3a764000081610fed9190614c13565b60088190555050565b60196020528060005260406000206000915054906101000a900460ff1681565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600254905090565b60175481565b611054612ab6565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110da90614aa1565b60405180910390fd5b801515601a60009054906101000a900460ff1615151415611139576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113090614dd1565b60405180910390fd5b80601a60006101000a81548160ff02191690831515021790555050565b60165481565b6000611169848484612c89565b61122a84611175612ab6565b61122585604051806060016040528060288152602001615b9760289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006111db612ab6565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546139ba9092919063ffffffff16565b612abe565b600190509392505050565b60006012905090565b60006112e761124b612ab6565b846112e2856001600061125c612ab6565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612a5890919063ffffffff16565b612abe565b6001905092915050565b6112f9612ab6565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611388576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137f90614aa1565b60405180910390fd5b6000600267ffffffffffffffff8111156113a5576113a4614876565b5b6040519080825280602002602001820160405280156113d35781602001602082028036833780820191505090505b509050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561143e57600080fd5b505afa158015611452573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114769190614e06565b8160008151811061148a57611489614e33565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505030816001815181106114d9576114d8614e33565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b6f9de958360008461dead426040518663ffffffff1660e01b81526004016115789493929190614f5b565b6000604051808303818588803b15801561159157600080fd5b505af11580156115a5573d6000803e3d6000fd5b50505050505050565b7f000000000000000000000000e4521f340205b595a1d60a4e9b6e4609efc10e9981565b600d60009054906101000a900460ff1681565b6000601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b611643612ab6565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146116d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116c990614aa1565b60405180910390fd5b81601481905550806015819055506015546014546116f09190614af0565b6013819055506063601354111561173c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161173390614b92565b60405180910390fd5b5050565b60145481565b600d60029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6117a9612ab6565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611838576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161182f90614aa1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000611903612ab6565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611992576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161198990614aa1565b60405180910390fd5b6000600d60006101000a81548160ff0219169083151502179055506000600f60006101000a81548160ff0219169083151502179055506001905090565b6119d7612ab6565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a66576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a5d90614aa1565b60405180910390fd5b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f575f9d01836c9206322151b9e9ec3f2b77b87e71176933b9b44d2d732f768d9582604051611b03919061460b565b60405180910390a25050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611b3d612ab6565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611bcc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bc390614aa1565b60405180910390fd5b60003373ffffffffffffffffffffffffffffffffffffffff1647604051611bf290614fd8565b60006040518083038185875af1925050503d8060008114611c2f576040519150601f19603f3d011682016040523d82523d6000602084013e611c34565b606091505b5050905080611c78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c6f90615039565b60405180910390fd5b50565b601a60009054906101000a900460ff1681565b611c96612ab6565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d1c90614aa1565b60405180910390fd5b6001600d60016101000a81548160ff0219169083151502179055506001600d60026101000a81548160ff02191690831515021790555043600c81905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611d96612ab6565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1c90614aa1565b60405180910390fd5b80600d60026101000a81548160ff02191690831515021790555050565b606060048054611e5190614be1565b80601f0160208091040260200160405190810160405280929190818152602001828054611e7d90614be1565b8015611eca5780601f10611e9f57610100808354040283529160200191611eca565b820191906000526020600020905b815481529060010190602001808311611ead57829003601f168201915b5050505050905090565b611edc612ab6565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f6b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f6290614aa1565b60405180910390fd5b7f000000000000000000000000e4521f340205b595a1d60a4e9b6e4609efc10e9973ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611ffa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ff1906150f1565b60405180910390fd5b6120048282613a1e565b5050565b60006120cb612015612ab6565b846120c685604051806060016040528060258152602001615bbf602591396001600061203f612ab6565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546139ba9092919063ffffffff16565b612abe565b6001905092915050565b60006120e96120e2612ab6565b8484612c89565b6001905092915050565b601c6020528060005260406000206000915054906101000a900460ff1681565b60135481565b600d60019054906101000a900460ff1681565b612134612ab6565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146121c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121ba90614aa1565b60405180910390fd5b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051612260919061460b565b60405180910390a25050565b612274612ab6565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612303576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122fa90614aa1565b60405180910390fd5b670de0b6b3a76400006064600161231861103c565b6123229190614c13565b61232c9190614c9c565b6123369190614c9c565b8111612377576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161236e90615183565b60405180910390fd5b670de0b6b3a76400008161238b9190614c13565b600a8190555050565b600f60009054906101000a900460ff1681565b60085481565b6123b5612ab6565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612444576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161243b90614aa1565b60405180910390fd5b60005b825181101561258157601b600084838151811061246757612466614e33565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151582151514156124fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124f490615215565b60405180910390fd5b81601b600085848151811061251557612514614e33565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550808061257990615235565b915050612447565b505050565b60155481565b612594612ab6565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612623576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161261a90614aa1565b60405180910390fd5b601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151581151514156126b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126ad906152ca565b60405180910390fd5b80601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60105481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60095481565b60115481565b60006127b4612ab6565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612843576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161283a90614aa1565b60405180910390fd5b6000600f60006101000a81548160ff0219169083151502179055506001905090565b600c5481565b612873612ab6565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612902576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128f990614aa1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612972576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129699061535c565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600a5481565b601b6020528060005260406000206000915054906101000a900460ff1681565b6000808284612a679190614af0565b905083811015612aac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612aa3906153c8565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612b2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b259061545a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612b9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b95906154ec565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612c7c9190614635565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612cf9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cf09061557e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612d69576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d6090615610565b60405180910390fd5b601a60009054906101000a900460ff161580612e255750601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612e245750601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b5b612e64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e5b9061567c565b60405180910390fd5b6000811415612e7e57612e7983836000613ac9565b6139b5565b600d60019054906101000a900460ff16612f7357601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612f335750601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612f72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f69906156e8565b60405180910390fd5b5b600d60009054906101000a900460ff161561354357612f90611d64565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612ffe5750612fce611d64565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156130375750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015613071575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561308a5750600660149054906101000a900460ff16155b1561354257600f60009054906101000a900460ff1615613259576130ac611d64565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141580156131355750600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561318d57507f000000000000000000000000e4521f340205b595a1d60a4e9b6e4609efc10e9973ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156132585743600e60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410613213576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161320a906157a0565b60405180910390fd5b43600e60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156132fc5750601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156133a357600854811115613346576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161333d90615832565b60405180910390fd5b600a5461335283611759565b8261335d9190614af0565b111561339e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133959061589e565b60405180910390fd5b613541565b601c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156134465750601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561349557600854811115613490576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161348790615930565b60405180910390fd5b613540565b601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661353f57600a546134f283611759565b826134fd9190614af0565b111561353e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135359061589e565b60405180910390fd5b5b5b5b5b5b600061354e30611759565b9050600060095482101590508080156135735750600d60029054906101000a900460ff165b801561358c5750600660149054906101000a900460ff16155b80156135e25750601c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156136385750601860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561368e5750601860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156136d2576001600660146101000a81548160ff0219169083151502179055506136b6613d5e565b6000600660146101000a81548160ff0219169083151502179055505b6000600660149054906101000a900460ff16159050601860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806137885750601860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561379257600090505b600081156139a557601c60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156137f557506000601054115b1561388f57613822606461381460105488613f4390919063ffffffff16565b613fbe90919063ffffffff16565b9050601054601254826138359190614c13565b61383f9190614c9c565b601760008282546138509190614af0565b92505081905550601054601154826138689190614c13565b6138729190614c9c565b601660008282546138839190614af0565b92505081905550613981565b601c60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156138ea57506000601354115b1561398057613917606461390960135488613f4390919063ffffffff16565b613fbe90919063ffffffff16565b90506013546015548261392a9190614c13565b6139349190614c9c565b601760008282546139459190614af0565b925050819055506013546014548261395d9190614c13565b6139679190614c9c565b601660008282546139789190614af0565b925050819055505b5b600081111561399657613995873083613ac9565b5b80856139a29190615950565b94505b6139b0878787613ac9565b505050505b505050565b6000838311158290613a02576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016139f99190614530565b60405180910390fd5b5060008385613a119190615950565b9050809150509392505050565b80601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550613a7f82826119cf565b8015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613b39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613b309061557e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613ba9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613ba090615610565b60405180910390fd5b613bb4838383614008565b613c1f81604051806060016040528060268152602001615b71602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546139ba9092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613cb2816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612a5890919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051613d519190614635565b60405180910390a3505050565b6000613d6930611759565b9050600080601654601754613d7e9190614af0565b90506000831480613d8f5750600081145b15613d9c57505050613f41565b600060028260175486613daf9190614c13565b613db99190614c9c565b613dc39190614c9c565b90506000613dda828661400d90919063ffffffff16565b90506000479050613dea82614057565b6000613dff824761400d90919063ffffffff16565b90506000613e2a86613e1c60165485613f4390919063ffffffff16565b613fbe90919063ffffffff16565b905060008183613e3a9190615950565b905060006017819055506000601681905550600086118015613e5c5750600081115b15613ea957613e6b86826142a9565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618582601754604051613ea093929190615984565b60405180910390a15b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051613eef90614fd8565b60006040518083038185875af1925050503d8060008114613f2c576040519150601f19603f3d011682016040523d82523d6000602084013e613f31565b606091505b5050809850505050505050505050505b565b600080831415613f565760009050613fb8565b60008284613f649190614c13565b9050828482613f739190614c9c565b14613fb3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613faa90615a2d565b60405180910390fd5b809150505b92915050565b600061400083836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506143aa565b905092915050565b505050565b600061404f83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506139ba565b905092915050565b6000600267ffffffffffffffff81111561407457614073614876565b5b6040519080825280602002602001820160405280156140a25781602001602082028036833780820191505090505b50905030816000815181106140ba576140b9614e33565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561415c57600080fd5b505afa158015614170573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141949190614e06565b816001815181106141a8576141a7614e33565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061420f30600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612abe565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401614273959493929190615a4d565b600060405180830381600087803b15801561428d57600080fd5b505af11580156142a1573d6000803e3d6000fd5b505050505050565b6142d630600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612abe565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080736d1d50d8fc68f9eb02cc57b8010d999be850c123426040518863ffffffff1660e01b815260040161435196959493929190615aa7565b6060604051808303818588803b15801561436a57600080fd5b505af115801561437e573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906143a39190615b1d565b5050505050565b600080831182906143f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016143e89190614530565b60405180910390fd5b50600083856144009190614c9c565b9050809150509392505050565b6000604051905090565b600080fd5b600080fd5b6000819050919050565b61443481614421565b811461443f57600080fd5b50565b6000813590506144518161442b565b92915050565b6000806040838503121561446e5761446d614417565b5b600061447c85828601614442565b925050602061448d85828601614442565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b60005b838110156144d15780820151818401526020810190506144b6565b838111156144e0576000848401525b50505050565b6000601f19601f8301169050919050565b600061450282614497565b61450c81856144a2565b935061451c8185602086016144b3565b614525816144e6565b840191505092915050565b6000602082019050818103600083015261454a81846144f7565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061457d82614552565b9050919050565b61458d81614572565b811461459857600080fd5b50565b6000813590506145aa81614584565b92915050565b600080604083850312156145c7576145c6614417565b5b60006145d58582860161459b565b92505060206145e685828601614442565b9150509250929050565b60008115159050919050565b614605816145f0565b82525050565b600060208201905061462060008301846145fc565b92915050565b61462f81614421565b82525050565b600060208201905061464a6000830184614626565b92915050565b60006020828403121561466657614665614417565b5b600061467484828501614442565b91505092915050565b60006020828403121561469357614692614417565b5b60006146a18482850161459b565b91505092915050565b6000819050919050565b60006146cf6146ca6146c584614552565b6146aa565b614552565b9050919050565b60006146e1826146b4565b9050919050565b60006146f3826146d6565b9050919050565b614703816146e8565b82525050565b600060208201905061471e60008301846146fa565b92915050565b61472d816145f0565b811461473857600080fd5b50565b60008135905061474a81614724565b92915050565b60006020828403121561476657614765614417565b5b60006147748482850161473b565b91505092915050565b60008060006060848603121561479657614795614417565b5b60006147a48682870161459b565b93505060206147b58682870161459b565b92505060406147c686828701614442565b9150509250925092565b600060ff82169050919050565b6147e6816147d0565b82525050565b600060208201905061480160008301846147dd565b92915050565b61481081614572565b82525050565b600060208201905061482b6000830184614807565b92915050565b6000806040838503121561484857614847614417565b5b60006148568582860161459b565b92505060206148678582860161473b565b9150509250929050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6148ae826144e6565b810181811067ffffffffffffffff821117156148cd576148cc614876565b5b80604052505050565b60006148e061440d565b90506148ec82826148a5565b919050565b600067ffffffffffffffff82111561490c5761490b614876565b5b602082029050602081019050919050565b600080fd5b6000614935614930846148f1565b6148d6565b905080838252602082019050602084028301858111156149585761495761491d565b5b835b81811015614981578061496d888261459b565b84526020840193505060208101905061495a565b5050509392505050565b600082601f8301126149a05761499f614871565b5b81356149b0848260208601614922565b91505092915050565b600080604083850312156149d0576149cf614417565b5b600083013567ffffffffffffffff8111156149ee576149ed61441c565b5b6149fa8582860161498b565b9250506020614a0b8582860161473b565b9150509250929050565b60008060408385031215614a2c57614a2b614417565b5b6000614a3a8582860161459b565b9250506020614a4b8582860161459b565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614a8b6020836144a2565b9150614a9682614a55565b602082019050919050565b60006020820190508181036000830152614aba81614a7e565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614afb82614421565b9150614b0683614421565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614b3b57614b3a614ac1565b5b828201905092915050565b7f4d757374206b656570206665657320617420393925206f72206c657373000000600082015250565b6000614b7c601d836144a2565b9150614b8782614b46565b602082019050919050565b60006020820190508181036000830152614bab81614b6f565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680614bf957607f821691505b60208210811415614c0d57614c0c614bb2565b5b50919050565b6000614c1e82614421565b9150614c2983614421565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614c6257614c61614ac1565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614ca782614421565b9150614cb283614421565b925082614cc257614cc1614c6d565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302c35250000000000000000000000000000000000602082015250565b6000614d29602f836144a2565b9150614d3482614ccd565b604082019050919050565b60006020820190508181036000830152614d5881614d1c565b9050919050565b7f426c61636b6c697374206d6f646520697320616c726561647920656e61626c6560008201527f6400000000000000000000000000000000000000000000000000000000000000602082015250565b6000614dbb6021836144a2565b9150614dc682614d5f565b604082019050919050565b60006020820190508181036000830152614dea81614dae565b9050919050565b600081519050614e0081614584565b92915050565b600060208284031215614e1c57614e1b614417565b5b6000614e2a84828501614df1565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000819050919050565b6000614e87614e82614e7d84614e62565b6146aa565b614421565b9050919050565b614e9781614e6c565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614ed281614572565b82525050565b6000614ee48383614ec9565b60208301905092915050565b6000602082019050919050565b6000614f0882614e9d565b614f128185614ea8565b9350614f1d83614eb9565b8060005b83811015614f4e578151614f358882614ed8565b9750614f4083614ef0565b925050600181019050614f21565b5085935050505092915050565b6000608082019050614f706000830187614e8e565b8181036020830152614f828186614efd565b9050614f916040830185614807565b614f9e6060830184614626565b95945050505050565b600081905092915050565b50565b6000614fc2600083614fa7565b9150614fcd82614fb2565b600082019050919050565b6000614fe382614fb5565b9150819050919050565b7f6661696c656420746f2077697468647261770000000000000000000000000000600082015250565b60006150236012836144a2565b915061502e82614fed565b602082019050919050565b6000602082019050818103600083015261505281615016565b9050919050565b7f54686520556e695377617020706169722063616e6e6f742062652072656d6f7660008201527f65642066726f6d206175746f6d617465644d61726b65744d616b65725061697260208201527f7300000000000000000000000000000000000000000000000000000000000000604082015250565b60006150db6041836144a2565b91506150e682615059565b606082019050919050565b6000602082019050818103600083015261510a816150ce565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f3125000000000000000000000000000000000000000000000000000000000000602082015250565b600061516d6022836144a2565b915061517882615111565b604082019050919050565b6000602082019050818103600083015261519c81615160565b9050919050565b7f536f6d65206f66207468652076616c7565732061726520616c7265616479207360008201527f657420617320426c61636b6c6973746564000000000000000000000000000000602082015250565b60006151ff6031836144a2565b915061520a826151a3565b604082019050919050565b6000602082019050818103600083015261522e816151f2565b9050919050565b600061524082614421565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561527357615272614ac1565b5b600182019050919050565b7f57616c6c657420697320626c61636b6c697374656420616c7265616479000000600082015250565b60006152b4601d836144a2565b91506152bf8261527e565b602082019050919050565b600060208201905081810360008301526152e3816152a7565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006153466026836144a2565b9150615351826152ea565b604082019050919050565b6000602082019050818103600083015261537581615339565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b60006153b2601b836144a2565b91506153bd8261537c565b602082019050919050565b600060208201905081810360008301526153e1816153a5565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006154446024836144a2565b915061544f826153e8565b604082019050919050565b6000602082019050818103600083015261547381615437565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006154d66022836144a2565b91506154e18261547a565b604082019050919050565b60006020820190508181036000830152615505816154c9565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006155686025836144a2565b91506155738261550c565b604082019050919050565b600060208201905081810360008301526155978161555b565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006155fa6023836144a2565b91506156058261559e565b604082019050919050565b60006020820190508181036000830152615629816155ed565b9050919050565b7f426c61636b6c6973746564210000000000000000000000000000000000000000600082015250565b6000615666600c836144a2565b915061567182615630565b602082019050919050565b6000602082019050818103600083015261569581615659565b9050919050565b7f54726164696e67206973206e6f7420616374697665207965742e000000000000600082015250565b60006156d2601a836144a2565b91506156dd8261569c565b602082019050919050565b60006020820190508181036000830152615701816156c5565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b600061578a6049836144a2565b915061579582615708565b606082019050919050565b600060208201905081810360008301526157b98161577d565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b600061581c6035836144a2565b9150615827826157c0565b604082019050919050565b6000602082019050818103600083015261584b8161580f565b9050919050565b7f556e61626c6520746f20657863656564204d61782057616c6c65740000000000600082015250565b6000615888601b836144a2565b915061589382615852565b602082019050919050565b600060208201905081810360008301526158b78161587b565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b600061591a6036836144a2565b9150615925826158be565b604082019050919050565b600060208201905081810360008301526159498161590d565b9050919050565b600061595b82614421565b915061596683614421565b92508282101561597957615978614ac1565b5b828203905092915050565b60006060820190506159996000830186614626565b6159a66020830185614626565b6159b36040830184614626565b949350505050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000615a176021836144a2565b9150615a22826159bb565b604082019050919050565b60006020820190508181036000830152615a4681615a0a565b9050919050565b600060a082019050615a626000830188614626565b615a6f6020830187614e8e565b8181036040830152615a818186614efd565b9050615a906060830185614807565b615a9d6080830184614626565b9695505050505050565b600060c082019050615abc6000830189614807565b615ac96020830188614626565b615ad66040830187614e8e565b615ae36060830186614e8e565b615af06080830185614807565b615afd60a0830184614626565b979650505050505050565b600081519050615b178161442b565b92915050565b600080600060608486031215615b3657615b35614417565b5b6000615b4486828701615b08565b9350506020615b5586828701615b08565b9250506040615b6686828701615b08565b915050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122026cb26ed96f6d55ceef1eb17669c1f3453d349449a85043f2384abd336e5d7aa64736f6c63430008090033
Deployed Bytecode Sourcemap
30625:15705:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37333:317;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8765:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10932:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31597:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30995:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36551:229;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31980:64;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30704:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9885:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31795:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35287:195;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31755:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11583:355;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9727:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12347:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45593:529;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30752:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31163:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38567:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37011:310;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31675:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31243:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10056:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23244:148;;;;;;;;;;;;;:::i;:::-;;38748:159;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37658:202;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30829:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46134:191;;;;;;;;;;;;;:::i;:::-;;32070:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36186:156;;;;;;;;;;;;;:::i;:::-;;22602:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36442:101;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8984:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38060:252;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13068:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10396:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32308:58;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31641:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31203:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37868:184;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36792:211;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31466:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30876:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35796:331;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31712:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35528:216;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31524:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10634:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30918:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31559:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35085:134;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31080:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23547:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30958:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32104:46;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37333:317;22824:12;:10;:12::i;:::-;22814:22;;:6;;;;;;;;;;;:22;;;22806:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;37452:13:::1;37433:16;:32;;;;37495:13;37476:16;:32;;;;37554:16;;37535;;:35;;;;:::i;:::-;37519:13;:51;;;;37606:2;37589:13;;:19;;37581:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;37333:317:::0;;:::o;8765:100::-;8819:13;8852:5;8845:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8765:100;:::o;10932:169::-;11015:4;11032:39;11041:12;:10;:12::i;:::-;11055:7;11064:6;11032:8;:39::i;:::-;11089:4;11082:11;;10932:169;;;;:::o;31597:31::-;;;;:::o;30995:39::-;;;;:::o;36551:229::-;22824:12;:10;:12::i;:::-;22814:22;;:6;;;;;;;;;;;:22;;;22806:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36665:4:::1;36660:3;36656:1;36640:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:23;;;;:::i;:::-;36639:30;;;;:::i;:::-;36630:6;:39;36622:99;;;;;;;;;;;;:::i;:::-;;;;;;;;;36765:6;36755;:17;;;;:::i;:::-;36732:20;:40;;;;36551:229:::0;:::o;31980:64::-;;;;;;;;;;;;;;;;;;;;;;:::o;30704:41::-;;;;;;;;;;;;;:::o;9885:108::-;9946:7;9973:12;;9966:19;;9885:108;:::o;31795:33::-;;;;:::o;35287:195::-;22824:12;:10;:12::i;:::-;22814:22;;:6;;;;;;;;;;;:22;;;22806:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35389:8:::1;35370:27;;:15;;;;;;;;;;;:27;;;;35362:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;35466:8;35448:15;;:26;;;;;;;;;;;;;;;;;;35287:195:::0;:::o;31755:33::-;;;;:::o;11583:355::-;11723:4;11740:36;11750:6;11758:9;11769:6;11740:9;:36::i;:::-;11787:121;11796:6;11804:12;:10;:12::i;:::-;11818:89;11856:6;11818:89;;;;;;;;;;;;;;;;;:11;:19;11830:6;11818:19;;;;;;;;;;;;;;;:33;11838:12;:10;:12::i;:::-;11818:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;11787:8;:121::i;:::-;11926:4;11919:11;;11583:355;;;;;:::o;9727:93::-;9785:5;9810:2;9803:9;;9727:93;:::o;12347:218::-;12435:4;12452:83;12461:12;:10;:12::i;:::-;12475:7;12484:50;12523:10;12484:11;:25;12496:12;:10;:12::i;:::-;12484:25;;;;;;;;;;;;;;;:34;12510:7;12484:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;12452:8;:83::i;:::-;12553:4;12546:11;;12347:218;;;;:::o;45593:529::-;22824:12;:10;:12::i;:::-;22814:22;;:6;;;;;;;;;;;:22;;;22806:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;45730:21:::1;45768:1;45754:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45730:40;;45791:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;45781:4;45786:1;45781:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;::::0;::::1;45842:4;45824;45829:1;45824:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;::::0;::::1;45886:15;;;;;;;;;;;:66;;;45960:14;45990:1;46039:4;46066:6;46088:15;45886:228;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;45661:461;45593:529:::0;:::o;30752:38::-;;;:::o;31163:33::-;;;;;;;;;;;;;:::o;38567:125::-;38632:4;38656:19;:28;38676:7;38656:28;;;;;;;;;;;;;;;;;;;;;;;;;38649:35;;38567:125;;;:::o;37011:310::-;22824:12;:10;:12::i;:::-;22814:22;;:6;;;;;;;;;;;:22;;;22806:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;37128:13:::1;37110:15;:31;;;;37170:13;37152:15;:31;;;;37227:15;;37209;;:33;;;;:::i;:::-;37194:12;:48;;;;37277:2;37261:12;;:18;;37253:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;37011:310:::0;;:::o;31675:30::-;;;;:::o;31243:31::-;;;;;;;;;;;;;:::o;10056:127::-;10130:7;10157:9;:18;10167:7;10157:18;;;;;;;;;;;;;;;;10150:25;;10056:127;;;:::o;23244:148::-;22824:12;:10;:12::i;:::-;22814:22;;:6;;;;;;;;;;;:22;;;22806:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23351:1:::1;23314:40;;23335:6;;;;;;;;;;;23314:40;;;;;;;;;;;;23382:1;23365:6;;:19;;;;;;;;;;;;;;;;;;23244:148::o:0;38748:159::-;38800:4;22824:12;:10;:12::i;:::-;22814:22;;:6;;;;;;;;;;;:22;;;22806:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;38833:5:::1;38816:14;;:22;;;;;;;;;;;;;;;;;;38872:5;38849:20;;:28;;;;;;;;;;;;;;;;;;38895:4;38888:11;;38748:159:::0;:::o;37658:202::-;22824:12;:10;:12::i;:::-;22814:22;;:6;;;;;;;;;;;:22;;;22806:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;37790:4:::1;37748:31;:39;37780:6;37748:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;37839:6;37810:42;;;37847:4;37810:42;;;;;;:::i;:::-;;;;;;;;37658:202:::0;;:::o;30829:30::-;;;;;;;;;;;;;:::o;46134:191::-;22824:12;:10;:12::i;:::-;22814:22;;:6;;;;;;;;;;;:22;;;22806:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;46193:12:::1;46218:10;46210:24;;46242:21;46210:58;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46192:76;;;46287:7;46279:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;46181:144;46134:191::o:0;32070:27::-;;;;;;;;;;;;;:::o;36186:156::-;22824:12;:10;:12::i;:::-;22814:22;;:6;;;;;;;;;;;:22;;;22806:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36257:4:::1;36241:13;;:20;;;;;;;;;;;;;;;;;;36286:4;36272:11;;:18;;;;;;;;;;;;;;;;;;36322:12;36301:18;:33;;;;36186:156::o:0;22602:79::-;22640:7;22667:6;;;;;;;;;;;22660:13;;22602:79;:::o;36442:101::-;22824:12;:10;:12::i;:::-;22814:22;;:6;;;;;;;;;;;:22;;;22806:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36528:7:::1;36514:11;;:21;;;;;;;;;;;;;;;;;;36442:101:::0;:::o;8984:104::-;9040:13;9073:7;9066:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8984:104;:::o;38060:252::-;22824:12;:10;:12::i;:::-;22814:22;;:6;;;;;;;;;;;:22;;;22806:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;38167:13:::1;38159:21;;:4;:21;;;;38151:99;;;;;;;;;;;;:::i;:::-;;;;;;;;;38263:41;38292:4;38298:5;38263:28;:41::i;:::-;38060:252:::0;;:::o;13068:269::-;13161:4;13178:129;13187:12;:10;:12::i;:::-;13201:7;13210:96;13249:15;13210:96;;;;;;;;;;;;;;;;;:11;:25;13222:12;:10;:12::i;:::-;13210:25;;;;;;;;;;;;;;;:34;13236:7;13210:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;13178:8;:129::i;:::-;13325:4;13318:11;;13068:269;;;;:::o;10396:175::-;10482:4;10499:42;10509:12;:10;:12::i;:::-;10523:9;10534:6;10499:9;:42::i;:::-;10559:4;10552:11;;10396:175;;;;:::o;32308:58::-;;;;;;;;;;;;;;;;;;;;;;:::o;31641:27::-;;;;:::o;31203:33::-;;;;;;;;;;;;;:::o;37868:184::-;22824:12;:10;:12::i;:::-;22814:22;;:6;;;;;;;;;;;:22;;;22806:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;37984:8:::1;37953:19;:28;37973:7;37953:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;38026:7;38010:34;;;38035:8;38010:34;;;;;;:::i;:::-;;;;;;;;37868:184:::0;;:::o;36792:211::-;22824:12;:10;:12::i;:::-;22814:22;;:6;;;;;;;;;;;:22;;;22806:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36912:4:::1;36907:3;36903:1;36887:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:23;;;;:::i;:::-;36886:30;;;;:::i;:::-;36877:6;:39;36869:86;;;;;;;;;;;;:::i;:::-;;;;;;;;;36988:6;36978;:17;;;;:::i;:::-;36966:9;:29;;;;36792:211:::0;:::o;31466:39::-;;;;;;;;;;;;;:::o;30876:35::-;;;;:::o;35796:331::-;22824:12;:10;:12::i;:::-;22814:22;;:6;;;;;;;;;;;:22;;;22806:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35902:9:::1;35898:222;35917:8;:15;35913:1;:19;35898:222;;;35974:13;:26;35988:8;35997:1;35988:11;;;;;;;;:::i;:::-;;;;;;;;35974:26;;;;;;;;;;;;;;;;;;;;;;;;;35962:38;;:8;:38;;;;35954:100;;;;;;;;;;;;:::i;:::-;;;;;;;;;36100:8;36071:13;:26;36085:8;36094:1;36085:11;;;;;;;;:::i;:::-;;;;;;;;36071:26;;;;;;;;;;;;;;;;:37;;;;;;;;;;;;;;;;;;35934:3;;;;;:::i;:::-;;;;35898:222;;;;35796:331:::0;;:::o;31712:30::-;;;;:::o;35528:216::-;22824:12;:10;:12::i;:::-;22814:22;;:6;;;;;;;;;;;:22;;;22806:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35636:13:::1;:22;35650:7;35636:22;;;;;;;;;;;;;;;;;;;;;;;;;35624:34;;:8;:34;;;;35616:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;35728:8;35703:13;:22;35717:7;35703:22;;;;;;;;;;;;;;;;:33;;;;;;;;;;;;;;;;;;35528:216:::0;;:::o;31524:28::-;;;;:::o;10634:151::-;10723:7;10750:11;:18;10762:5;10750:18;;;;;;;;;;;;;;;:27;10769:7;10750:27;;;;;;;;;;;;;;;;10743:34;;10634:151;;;;:::o;30918:33::-;;;;:::o;31559:31::-;;;;:::o;35085:134::-;35145:4;22824:12;:10;:12::i;:::-;22814:22;;:6;;;;;;;;;;;:22;;;22806:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35184:5:::1;35161:20;;:28;;;;;;;;;;;;;;;;;;35207:4;35200:11;;35085:134:::0;:::o;31080:37::-;;;;:::o;23547:244::-;22824:12;:10;:12::i;:::-;22814:22;;:6;;;;;;;;;;;:22;;;22806:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23656:1:::1;23636:22;;:8;:22;;;;23628:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;23746:8;23717:38;;23738:6;;;;;;;;;;;23717:38;;;;;;;;;;;;23775:8;23766:6;;:17;;;;;;;;;;;;;;;;;;23547:244:::0;:::o;30958:24::-;;;;:::o;32104:46::-;;;;;;;;;;;;;;;;;;;;;;:::o;17646:181::-;17704:7;17724:9;17740:1;17736;:5;;;;:::i;:::-;17724:17;;17765:1;17760;:6;;17752:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;17818:1;17811:8;;;17646:181;;;;:::o;1399:98::-;1452:7;1479:10;1472:17;;1399:98;:::o;16268:380::-;16421:1;16404:19;;:5;:19;;;;16396:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;16502:1;16483:21;;:7;:21;;;;16475:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;16586:6;16556:11;:18;16568:5;16556:18;;;;;;;;;;;;;;;:27;16575:7;16556:27;;;;;;;;;;;;;;;:36;;;;16624:7;16608:32;;16617:5;16608:32;;;16633:6;16608:32;;;;;;:::i;:::-;;;;;;;;16268:380;;;:::o;38919:4010::-;39067:1;39051:18;;:4;:18;;;;39043:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39144:1;39130:16;;:2;:16;;;;39122:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;39201:15;;;;;;;;;;;39200:16;:64;;;;39222:13;:19;39236:4;39222:19;;;;;;;;;;;;;;;;;;;;;;;;;39221:20;:42;;;;;39246:13;:17;39260:2;39246:17;;;;;;;;;;;;;;;;;;;;;;;;;39245:18;39221:42;39200:64;39192:89;;;;;;;;;;;;:::i;:::-;;;;;;;;;39316:1;39306:6;:11;39303:92;;;39334:28;39350:4;39356:2;39360:1;39334:15;:28::i;:::-;39377:7;;39303:92;39419:13;;;;;;;;;;;39415:136;;39456:19;:25;39476:4;39456:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;39485:19;:23;39505:2;39485:23;;;;;;;;;;;;;;;;;;;;;;;;;39456:52;39448:91;;;;;;;;;;;;:::i;:::-;;;;;;;;;39415:136;39574:14;;;;;;;;;;;39571:1662;;;39634:7;:5;:7::i;:::-;39626:15;;:4;:15;;;;:49;;;;;39668:7;:5;:7::i;:::-;39662:13;;:2;:13;;;;39626:49;:86;;;;;39710:1;39696:16;;:2;:16;;;;39626:86;:128;;;;;39747:6;39733:21;;:2;:21;;;;39626:128;:158;;;;;39776:8;;;;;;;;;;;39775:9;39626:158;39604:1618;;;39958:20;;;;;;;;;;;39954:423;;;40012:7;:5;:7::i;:::-;40006:13;;:2;:13;;;;:47;;;;;40037:15;;;;;;;;;;;40023:30;;:2;:30;;;;40006:47;:79;;;;;40071:13;40057:28;;:2;:28;;;;40006:79;40002:356;;;40163:12;40121:28;:39;40150:9;40121:39;;;;;;;;;;;;;;;;:54;40113:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;40322:12;40280:28;:39;40309:9;40280:39;;;;;;;;;;;;;;;:54;;;;40002:356;39954:423;40445:25;:31;40471:4;40445:31;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;40481:31;:35;40513:2;40481:35;;;;;;;;;;;;;;;;;;;;;;;;;40480:36;40445:71;40441:766;;;40559:20;;40549:6;:30;;40541:96;;;;;;;;;;;;:::i;:::-;;;;;;;;;40694:9;;40677:13;40687:2;40677:9;:13::i;:::-;40668:6;:22;;;;:::i;:::-;:35;;40660:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;40441:766;;;40812:25;:29;40838:2;40812:29;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;40846:31;:37;40878:4;40846:37;;;;;;;;;;;;;;;;;;;;;;;;;40845:38;40812:71;40808:399;;;40926:20;;40916:6;:30;;40908:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;40808:399;;;41052:31;:35;41084:2;41052:35;;;;;;;;;;;;;;;;;;;;;;;;;41048:159;;41146:9;;41129:13;41139:2;41129:9;:13::i;:::-;41120:6;:22;;;;:::i;:::-;:35;;41112:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;41048:159;40808:399;40441:766;39604:1618;39571:1662;41239:28;41270:24;41288:4;41270:9;:24::i;:::-;41239:55;;41315:12;41354:18;;41330:20;:42;;41315:57;;41403:7;:35;;;;;41427:11;;;;;;;;;;;41403:35;:61;;;;;41456:8;;;;;;;;;;;41455:9;41403:61;:110;;;;;41482:25;:31;41508:4;41482:31;;;;;;;;;;;;;;;;;;;;;;;;;41481:32;41403:110;:153;;;;;41531:19;:25;41551:4;41531:25;;;;;;;;;;;;;;;;;;;;;;;;;41530:26;41403:153;:194;;;;;41574:19;:23;41594:2;41574:23;;;;;;;;;;;;;;;;;;;;;;;;;41573:24;41403:194;41385:322;;;41635:4;41624:8;;:15;;;;;;;;;;;;;;;;;;41654:10;:8;:10::i;:::-;41690:5;41679:8;;:16;;;;;;;;;;;;;;;;;;41385:322;41719:12;41735:8;;;;;;;;;;;41734:9;41719:24;;41844:19;:25;41864:4;41844:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;41873:19;:23;41893:2;41873:23;;;;;;;;;;;;;;;;;;;;;;;;;41844:52;41841:99;;;41923:5;41913:15;;41841:99;41960:12;42051:7;42048:824;;;42102:25;:29;42128:2;42102:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;42151:1;42135:13;;:17;42102:50;42098:617;;;42179:34;42209:3;42179:25;42190:13;;42179:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;42172:41;;42280:13;;42261:16;;42254:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;42232:18;;:61;;;;;;;:::i;:::-;;;;;;;;42360:13;;42341:16;;42334:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;42312:18;;:61;;;;;;;:::i;:::-;;;;;;;;42098:617;;;42434:25;:31;42460:4;42434:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;42484:1;42469:12;;:16;42434:51;42431:284;;;42510:33;42539:3;42510:24;42521:12;;42510:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;42503:40;;42609:12;;42591:15;;42584:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;42562:18;;:59;;;;;;;:::i;:::-;;;;;;;;42687:12;;42669:15;;42662:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;42640:18;;:59;;;;;;;:::i;:::-;;;;;;;;42431:284;42098:617;42741:1;42734:4;:8;42731:93;;;42766:42;42782:4;42796;42803;42766:15;:42::i;:::-;42731:93;42856:4;42846:14;;;;;:::i;:::-;;;42048:824;42884:33;42900:4;42906:2;42910:6;42884:15;:33::i;:::-;39032:3897;;;;38919:4010;;;;:::o;18549:192::-;18635:7;18668:1;18663;:6;;18671:12;18655:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;18695:9;18711:1;18707;:5;;;;:::i;:::-;18695:17;;18732:1;18725:8;;;18549:192;;;;;:::o;38320:239::-;38437:5;38403:25;:31;38429:4;38403:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;38455:38;38481:4;38487:5;38455:25;:38::i;:::-;38545:5;38511:40;;38539:4;38511:40;;;;;;;;;;;;38320:239;;:::o;13827:573::-;13985:1;13967:20;;:6;:20;;;;13959:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;14069:1;14048:23;;:9;:23;;;;14040:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;14124:47;14145:6;14153:9;14164:6;14124:20;:47::i;:::-;14204:71;14226:6;14204:71;;;;;;;;;;;;;;;;;:9;:17;14214:6;14204:17;;;;;;;;;;;;;;;;:21;;:71;;;;;:::i;:::-;14184:9;:17;14194:6;14184:17;;;;;;;;;;;;;;;:91;;;;14309:32;14334:6;14309:9;:20;14319:9;14309:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;14286:9;:20;14296:9;14286:20;;;;;;;;;;;;;;;:55;;;;14374:9;14357:35;;14366:6;14357:35;;;14385:6;14357:35;;;;;;:::i;:::-;;;;;;;;13827:573;;;:::o;44127:1363::-;44166:23;44192:24;44210:4;44192:9;:24::i;:::-;44166:50;;44227:12;44250:25;44299:18;;44278;;:39;;;;:::i;:::-;44250:67;;44360:1;44341:15;:20;:46;;;;44386:1;44365:17;:22;44341:46;44338:60;;;44390:7;;;;;44338:60;44467:23;44552:1;44532:17;44511:18;;44493:15;:36;;;;:::i;:::-;:56;;;;:::i;:::-;:60;;;;:::i;:::-;44467:86;;44564:26;44593:36;44613:15;44593;:19;;:36;;;;:::i;:::-;44564:65;;44650:25;44678:21;44650:49;;44712:36;44729:18;44712:16;:36::i;:::-;44770:18;44791:44;44817:17;44791:21;:25;;:44;;;;:::i;:::-;44770:65;;44856:23;44882:57;44921:17;44882:34;44897:18;;44882:10;:14;;:34;;;;:::i;:::-;:38;;:57;;;;:::i;:::-;44856:83;;44960:23;44999:15;44986:10;:28;;;;:::i;:::-;44960:54;;45056:1;45035:18;:22;;;;45089:1;45068:18;:22;;;;45134:1;45116:15;:19;:42;;;;;45157:1;45139:15;:19;45116:42;45113:210;;;45174:46;45187:15;45204;45174:12;:46::i;:::-;45240:71;45255:18;45275:15;45292:18;;45240:71;;;;;;;;:::i;:::-;;;;;;;;45113:210;45413:15;;;;;;;;;;;45405:29;;45442:15;45405:57;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45392:70;;;;;44155:1335;;;;;;;;;44127:1363;:::o;19000:471::-;19058:7;19308:1;19303;:6;19299:47;;;19333:1;19326:8;;;;19299:47;19358:9;19374:1;19370;:5;;;;:::i;:::-;19358:17;;19403:1;19398;19394;:5;;;;:::i;:::-;:10;19386:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;19462:1;19455:8;;;19000:471;;;;;:::o;19947:132::-;20005:7;20032:39;20036:1;20039;20032:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;20025:46;;19947:132;;;;:::o;17251:125::-;;;;:::o;18110:136::-;18168:7;18195:43;18199:1;18202;18195:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;18188:50;;18110:136;;;;:::o;42943:601::-;43071:21;43109:1;43095:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43071:40;;43140:4;43122;43127:1;43122:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;43166:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;43156:4;43161:1;43156:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;43201:62;43218:4;43233:15;;;;;;;;;;;43251:11;43201:8;:62::i;:::-;43302:15;;;;;;;;;;;:66;;;43383:11;43409:1;43453:4;43480;43500:15;43302:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42998:546;42943:601;:::o;43556:559::-;43704:62;43721:4;43736:15;;;;;;;;;;;43754:11;43704:8;:62::i;:::-;43809:15;;;;;;;;;;;:31;;;43848:9;43881:4;43901:11;43927:1;43970;44021:42;44079:15;43809:296;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;43556:559;;:::o;20575:278::-;20661:7;20693:1;20689;:5;20696:12;20681:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;20720:9;20736:1;20732;:5;;;;:::i;:::-;20720:17;;20844:1;20837:8;;;20575:278;;;;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:77;371:7;400:5;389:16;;334:77;;;:::o;417:122::-;490:24;508:5;490:24;:::i;:::-;483:5;480:35;470:63;;529:1;526;519:12;470:63;417:122;:::o;545:139::-;591:5;629:6;616:20;607:29;;645:33;672:5;645:33;:::i;:::-;545:139;;;;:::o;690:474::-;758:6;766;815:2;803:9;794:7;790:23;786:32;783:119;;;821:79;;:::i;:::-;783:119;941:1;966:53;1011:7;1002:6;991:9;987:22;966:53;:::i;:::-;956:63;;912:117;1068:2;1094:53;1139:7;1130:6;1119:9;1115:22;1094:53;:::i;:::-;1084:63;;1039:118;690:474;;;;;:::o;1170:99::-;1222:6;1256:5;1250:12;1240:22;;1170:99;;;:::o;1275:169::-;1359:11;1393:6;1388:3;1381:19;1433:4;1428:3;1424:14;1409:29;;1275:169;;;;:::o;1450:307::-;1518:1;1528:113;1542:6;1539:1;1536:13;1528:113;;;1627:1;1622:3;1618:11;1612:18;1608:1;1603:3;1599:11;1592:39;1564:2;1561:1;1557:10;1552:15;;1528:113;;;1659:6;1656:1;1653:13;1650:101;;;1739:1;1730:6;1725:3;1721:16;1714:27;1650:101;1499:258;1450:307;;;:::o;1763:102::-;1804:6;1855:2;1851:7;1846:2;1839:5;1835:14;1831:28;1821:38;;1763:102;;;:::o;1871:364::-;1959:3;1987:39;2020:5;1987:39;:::i;:::-;2042:71;2106:6;2101:3;2042:71;:::i;:::-;2035:78;;2122:52;2167:6;2162:3;2155:4;2148:5;2144:16;2122:52;:::i;:::-;2199:29;2221:6;2199:29;:::i;:::-;2194:3;2190:39;2183:46;;1963:272;1871:364;;;;:::o;2241:313::-;2354:4;2392:2;2381:9;2377:18;2369:26;;2441:9;2435:4;2431:20;2427:1;2416:9;2412:17;2405:47;2469:78;2542:4;2533:6;2469:78;:::i;:::-;2461:86;;2241:313;;;;:::o;2560:126::-;2597:7;2637:42;2630:5;2626:54;2615:65;;2560:126;;;:::o;2692:96::-;2729:7;2758:24;2776:5;2758:24;:::i;:::-;2747:35;;2692:96;;;:::o;2794:122::-;2867:24;2885:5;2867:24;:::i;:::-;2860:5;2857:35;2847:63;;2906:1;2903;2896:12;2847:63;2794:122;:::o;2922:139::-;2968:5;3006:6;2993:20;2984:29;;3022:33;3049:5;3022:33;:::i;:::-;2922:139;;;;:::o;3067:474::-;3135:6;3143;3192:2;3180:9;3171:7;3167:23;3163:32;3160:119;;;3198:79;;:::i;:::-;3160:119;3318:1;3343:53;3388:7;3379:6;3368:9;3364:22;3343:53;:::i;:::-;3333:63;;3289:117;3445:2;3471:53;3516:7;3507:6;3496:9;3492:22;3471:53;:::i;:::-;3461:63;;3416:118;3067:474;;;;;:::o;3547:90::-;3581:7;3624:5;3617:13;3610:21;3599:32;;3547:90;;;:::o;3643:109::-;3724:21;3739:5;3724:21;:::i;:::-;3719:3;3712:34;3643:109;;:::o;3758:210::-;3845:4;3883:2;3872:9;3868:18;3860:26;;3896:65;3958:1;3947:9;3943:17;3934:6;3896:65;:::i;:::-;3758:210;;;;:::o;3974:118::-;4061:24;4079:5;4061:24;:::i;:::-;4056:3;4049:37;3974:118;;:::o;4098:222::-;4191:4;4229:2;4218:9;4214:18;4206:26;;4242:71;4310:1;4299:9;4295:17;4286:6;4242:71;:::i;:::-;4098:222;;;;:::o;4326:329::-;4385:6;4434:2;4422:9;4413:7;4409:23;4405:32;4402:119;;;4440:79;;:::i;:::-;4402:119;4560:1;4585:53;4630:7;4621:6;4610:9;4606:22;4585:53;:::i;:::-;4575:63;;4531:117;4326:329;;;;:::o;4661:::-;4720:6;4769:2;4757:9;4748:7;4744:23;4740:32;4737:119;;;4775:79;;:::i;:::-;4737:119;4895:1;4920:53;4965:7;4956:6;4945:9;4941:22;4920:53;:::i;:::-;4910:63;;4866:117;4661:329;;;;:::o;4996:60::-;5024:3;5045:5;5038:12;;4996:60;;;:::o;5062:142::-;5112:9;5145:53;5163:34;5172:24;5190:5;5172:24;:::i;:::-;5163:34;:::i;:::-;5145:53;:::i;:::-;5132:66;;5062:142;;;:::o;5210:126::-;5260:9;5293:37;5324:5;5293:37;:::i;:::-;5280:50;;5210:126;;;:::o;5342:153::-;5419:9;5452:37;5483:5;5452:37;:::i;:::-;5439:50;;5342:153;;;:::o;5501:185::-;5615:64;5673:5;5615:64;:::i;:::-;5610:3;5603:77;5501:185;;:::o;5692:276::-;5812:4;5850:2;5839:9;5835:18;5827:26;;5863:98;5958:1;5947:9;5943:17;5934:6;5863:98;:::i;:::-;5692:276;;;;:::o;5974:116::-;6044:21;6059:5;6044:21;:::i;:::-;6037:5;6034:32;6024:60;;6080:1;6077;6070:12;6024:60;5974:116;:::o;6096:133::-;6139:5;6177:6;6164:20;6155:29;;6193:30;6217:5;6193:30;:::i;:::-;6096:133;;;;:::o;6235:323::-;6291:6;6340:2;6328:9;6319:7;6315:23;6311:32;6308:119;;;6346:79;;:::i;:::-;6308:119;6466:1;6491:50;6533:7;6524:6;6513:9;6509:22;6491:50;:::i;:::-;6481:60;;6437:114;6235:323;;;;:::o;6564:619::-;6641:6;6649;6657;6706:2;6694:9;6685:7;6681:23;6677:32;6674:119;;;6712:79;;:::i;:::-;6674:119;6832:1;6857:53;6902:7;6893:6;6882:9;6878:22;6857:53;:::i;:::-;6847:63;;6803:117;6959:2;6985:53;7030:7;7021:6;7010:9;7006:22;6985:53;:::i;:::-;6975:63;;6930:118;7087:2;7113:53;7158:7;7149:6;7138:9;7134:22;7113:53;:::i;:::-;7103:63;;7058:118;6564:619;;;;;:::o;7189:86::-;7224:7;7264:4;7257:5;7253:16;7242:27;;7189:86;;;:::o;7281:112::-;7364:22;7380:5;7364:22;:::i;:::-;7359:3;7352:35;7281:112;;:::o;7399:214::-;7488:4;7526:2;7515:9;7511:18;7503:26;;7539:67;7603:1;7592:9;7588:17;7579:6;7539:67;:::i;:::-;7399:214;;;;:::o;7619:118::-;7706:24;7724:5;7706:24;:::i;:::-;7701:3;7694:37;7619:118;;:::o;7743:222::-;7836:4;7874:2;7863:9;7859:18;7851:26;;7887:71;7955:1;7944:9;7940:17;7931:6;7887:71;:::i;:::-;7743:222;;;;:::o;7971:468::-;8036:6;8044;8093:2;8081:9;8072:7;8068:23;8064:32;8061:119;;;8099:79;;:::i;:::-;8061:119;8219:1;8244:53;8289:7;8280:6;8269:9;8265:22;8244:53;:::i;:::-;8234:63;;8190:117;8346:2;8372:50;8414:7;8405:6;8394:9;8390:22;8372:50;:::i;:::-;8362:60;;8317:115;7971:468;;;;;:::o;8445:117::-;8554:1;8551;8544:12;8568:180;8616:77;8613:1;8606:88;8713:4;8710:1;8703:15;8737:4;8734:1;8727:15;8754:281;8837:27;8859:4;8837:27;:::i;:::-;8829:6;8825:40;8967:6;8955:10;8952:22;8931:18;8919:10;8916:34;8913:62;8910:88;;;8978:18;;:::i;:::-;8910:88;9018:10;9014:2;9007:22;8797:238;8754:281;;:::o;9041:129::-;9075:6;9102:20;;:::i;:::-;9092:30;;9131:33;9159:4;9151:6;9131:33;:::i;:::-;9041:129;;;:::o;9176:311::-;9253:4;9343:18;9335:6;9332:30;9329:56;;;9365:18;;:::i;:::-;9329:56;9415:4;9407:6;9403:17;9395:25;;9475:4;9469;9465:15;9457:23;;9176:311;;;:::o;9493:117::-;9602:1;9599;9592:12;9633:710;9729:5;9754:81;9770:64;9827:6;9770:64;:::i;:::-;9754:81;:::i;:::-;9745:90;;9855:5;9884:6;9877:5;9870:21;9918:4;9911:5;9907:16;9900:23;;9971:4;9963:6;9959:17;9951:6;9947:30;10000:3;9992:6;9989:15;9986:122;;;10019:79;;:::i;:::-;9986:122;10134:6;10117:220;10151:6;10146:3;10143:15;10117:220;;;10226:3;10255:37;10288:3;10276:10;10255:37;:::i;:::-;10250:3;10243:50;10322:4;10317:3;10313:14;10306:21;;10193:144;10177:4;10172:3;10168:14;10161:21;;10117:220;;;10121:21;9735:608;;9633:710;;;;;:::o;10366:370::-;10437:5;10486:3;10479:4;10471:6;10467:17;10463:27;10453:122;;10494:79;;:::i;:::-;10453:122;10611:6;10598:20;10636:94;10726:3;10718:6;10711:4;10703:6;10699:17;10636:94;:::i;:::-;10627:103;;10443:293;10366:370;;;;:::o;10742:678::-;10832:6;10840;10889:2;10877:9;10868:7;10864:23;10860:32;10857:119;;;10895:79;;:::i;:::-;10857:119;11043:1;11032:9;11028:17;11015:31;11073:18;11065:6;11062:30;11059:117;;;11095:79;;:::i;:::-;11059:117;11200:78;11270:7;11261:6;11250:9;11246:22;11200:78;:::i;:::-;11190:88;;10986:302;11327:2;11353:50;11395:7;11386:6;11375:9;11371:22;11353:50;:::i;:::-;11343:60;;11298:115;10742:678;;;;;:::o;11426:474::-;11494:6;11502;11551:2;11539:9;11530:7;11526:23;11522:32;11519:119;;;11557:79;;:::i;:::-;11519:119;11677:1;11702:53;11747:7;11738:6;11727:9;11723:22;11702:53;:::i;:::-;11692:63;;11648:117;11804:2;11830:53;11875:7;11866:6;11855:9;11851:22;11830:53;:::i;:::-;11820:63;;11775:118;11426:474;;;;;:::o;11906:182::-;12046:34;12042:1;12034:6;12030:14;12023:58;11906:182;:::o;12094:366::-;12236:3;12257:67;12321:2;12316:3;12257:67;:::i;:::-;12250:74;;12333:93;12422:3;12333:93;:::i;:::-;12451:2;12446:3;12442:12;12435:19;;12094:366;;;:::o;12466:419::-;12632:4;12670:2;12659:9;12655:18;12647:26;;12719:9;12713:4;12709:20;12705:1;12694:9;12690:17;12683:47;12747:131;12873:4;12747:131;:::i;:::-;12739:139;;12466:419;;;:::o;12891:180::-;12939:77;12936:1;12929:88;13036:4;13033:1;13026:15;13060:4;13057:1;13050:15;13077:305;13117:3;13136:20;13154:1;13136:20;:::i;:::-;13131:25;;13170:20;13188:1;13170:20;:::i;:::-;13165:25;;13324:1;13256:66;13252:74;13249:1;13246:81;13243:107;;;13330:18;;:::i;:::-;13243:107;13374:1;13371;13367:9;13360:16;;13077:305;;;;:::o;13388:179::-;13528:31;13524:1;13516:6;13512:14;13505:55;13388:179;:::o;13573:366::-;13715:3;13736:67;13800:2;13795:3;13736:67;:::i;:::-;13729:74;;13812:93;13901:3;13812:93;:::i;:::-;13930:2;13925:3;13921:12;13914:19;;13573:366;;;:::o;13945:419::-;14111:4;14149:2;14138:9;14134:18;14126:26;;14198:9;14192:4;14188:20;14184:1;14173:9;14169:17;14162:47;14226:131;14352:4;14226:131;:::i;:::-;14218:139;;13945:419;;;:::o;14370:180::-;14418:77;14415:1;14408:88;14515:4;14512:1;14505:15;14539:4;14536:1;14529:15;14556:320;14600:6;14637:1;14631:4;14627:12;14617:22;;14684:1;14678:4;14674:12;14705:18;14695:81;;14761:4;14753:6;14749:17;14739:27;;14695:81;14823:2;14815:6;14812:14;14792:18;14789:38;14786:84;;;14842:18;;:::i;:::-;14786:84;14607:269;14556:320;;;:::o;14882:348::-;14922:7;14945:20;14963:1;14945:20;:::i;:::-;14940:25;;14979:20;14997:1;14979:20;:::i;:::-;14974:25;;15167:1;15099:66;15095:74;15092:1;15089:81;15084:1;15077:9;15070:17;15066:105;15063:131;;;15174:18;;:::i;:::-;15063:131;15222:1;15219;15215:9;15204:20;;14882:348;;;;:::o;15236:180::-;15284:77;15281:1;15274:88;15381:4;15378:1;15371:15;15405:4;15402:1;15395:15;15422:185;15462:1;15479:20;15497:1;15479:20;:::i;:::-;15474:25;;15513:20;15531:1;15513:20;:::i;:::-;15508:25;;15552:1;15542:35;;15557:18;;:::i;:::-;15542:35;15599:1;15596;15592:9;15587:14;;15422:185;;;;:::o;15613:234::-;15753:34;15749:1;15741:6;15737:14;15730:58;15822:17;15817:2;15809:6;15805:15;15798:42;15613:234;:::o;15853:366::-;15995:3;16016:67;16080:2;16075:3;16016:67;:::i;:::-;16009:74;;16092:93;16181:3;16092:93;:::i;:::-;16210:2;16205:3;16201:12;16194:19;;15853:366;;;:::o;16225:419::-;16391:4;16429:2;16418:9;16414:18;16406:26;;16478:9;16472:4;16468:20;16464:1;16453:9;16449:17;16442:47;16506:131;16632:4;16506:131;:::i;:::-;16498:139;;16225:419;;;:::o;16650:220::-;16790:34;16786:1;16778:6;16774:14;16767:58;16859:3;16854:2;16846:6;16842:15;16835:28;16650:220;:::o;16876:366::-;17018:3;17039:67;17103:2;17098:3;17039:67;:::i;:::-;17032:74;;17115:93;17204:3;17115:93;:::i;:::-;17233:2;17228:3;17224:12;17217:19;;16876:366;;;:::o;17248:419::-;17414:4;17452:2;17441:9;17437:18;17429:26;;17501:9;17495:4;17491:20;17487:1;17476:9;17472:17;17465:47;17529:131;17655:4;17529:131;:::i;:::-;17521:139;;17248:419;;;:::o;17673:143::-;17730:5;17761:6;17755:13;17746:22;;17777:33;17804:5;17777:33;:::i;:::-;17673:143;;;;:::o;17822:351::-;17892:6;17941:2;17929:9;17920:7;17916:23;17912:32;17909:119;;;17947:79;;:::i;:::-;17909:119;18067:1;18092:64;18148:7;18139:6;18128:9;18124:22;18092:64;:::i;:::-;18082:74;;18038:128;17822:351;;;;:::o;18179:180::-;18227:77;18224:1;18217:88;18324:4;18321:1;18314:15;18348:4;18345:1;18338:15;18365:85;18410:7;18439:5;18428:16;;18365:85;;;:::o;18456:158::-;18514:9;18547:61;18565:42;18574:32;18600:5;18574:32;:::i;:::-;18565:42;:::i;:::-;18547:61;:::i;:::-;18534:74;;18456:158;;;:::o;18620:147::-;18715:45;18754:5;18715:45;:::i;:::-;18710:3;18703:58;18620:147;;:::o;18773:114::-;18840:6;18874:5;18868:12;18858:22;;18773:114;;;:::o;18893:184::-;18992:11;19026:6;19021:3;19014:19;19066:4;19061:3;19057:14;19042:29;;18893:184;;;;:::o;19083:132::-;19150:4;19173:3;19165:11;;19203:4;19198:3;19194:14;19186:22;;19083:132;;;:::o;19221:108::-;19298:24;19316:5;19298:24;:::i;:::-;19293:3;19286:37;19221:108;;:::o;19335:179::-;19404:10;19425:46;19467:3;19459:6;19425:46;:::i;:::-;19503:4;19498:3;19494:14;19480:28;;19335:179;;;;:::o;19520:113::-;19590:4;19622;19617:3;19613:14;19605:22;;19520:113;;;:::o;19669:732::-;19788:3;19817:54;19865:5;19817:54;:::i;:::-;19887:86;19966:6;19961:3;19887:86;:::i;:::-;19880:93;;19997:56;20047:5;19997:56;:::i;:::-;20076:7;20107:1;20092:284;20117:6;20114:1;20111:13;20092:284;;;20193:6;20187:13;20220:63;20279:3;20264:13;20220:63;:::i;:::-;20213:70;;20306:60;20359:6;20306:60;:::i;:::-;20296:70;;20152:224;20139:1;20136;20132:9;20127:14;;20092:284;;;20096:14;20392:3;20385:10;;19793:608;;;19669:732;;;;:::o;20407:720::-;20642:4;20680:3;20669:9;20665:19;20657:27;;20694:79;20770:1;20759:9;20755:17;20746:6;20694:79;:::i;:::-;20820:9;20814:4;20810:20;20805:2;20794:9;20790:18;20783:48;20848:108;20951:4;20942:6;20848:108;:::i;:::-;20840:116;;20966:72;21034:2;21023:9;21019:18;21010:6;20966:72;:::i;:::-;21048;21116:2;21105:9;21101:18;21092:6;21048:72;:::i;:::-;20407:720;;;;;;;:::o;21133:147::-;21234:11;21271:3;21256:18;;21133:147;;;;:::o;21286:114::-;;:::o;21406:398::-;21565:3;21586:83;21667:1;21662:3;21586:83;:::i;:::-;21579:90;;21678:93;21767:3;21678:93;:::i;:::-;21796:1;21791:3;21787:11;21780:18;;21406:398;;;:::o;21810:379::-;21994:3;22016:147;22159:3;22016:147;:::i;:::-;22009:154;;22180:3;22173:10;;21810:379;;;:::o;22195:168::-;22335:20;22331:1;22323:6;22319:14;22312:44;22195:168;:::o;22369:366::-;22511:3;22532:67;22596:2;22591:3;22532:67;:::i;:::-;22525:74;;22608:93;22697:3;22608:93;:::i;:::-;22726:2;22721:3;22717:12;22710:19;;22369:366;;;:::o;22741:419::-;22907:4;22945:2;22934:9;22930:18;22922:26;;22994:9;22988:4;22984:20;22980:1;22969:9;22965:17;22958:47;23022:131;23148:4;23022:131;:::i;:::-;23014:139;;22741:419;;;:::o;23166:289::-;23306:34;23302:1;23294:6;23290:14;23283:58;23375:34;23370:2;23362:6;23358:15;23351:59;23444:3;23439:2;23431:6;23427:15;23420:28;23166:289;:::o;23461:366::-;23603:3;23624:67;23688:2;23683:3;23624:67;:::i;:::-;23617:74;;23700:93;23789:3;23700:93;:::i;:::-;23818:2;23813:3;23809:12;23802:19;;23461:366;;;:::o;23833:419::-;23999:4;24037:2;24026:9;24022:18;24014:26;;24086:9;24080:4;24076:20;24072:1;24061:9;24057:17;24050:47;24114:131;24240:4;24114:131;:::i;:::-;24106:139;;23833:419;;;:::o;24258:221::-;24398:34;24394:1;24386:6;24382:14;24375:58;24467:4;24462:2;24454:6;24450:15;24443:29;24258:221;:::o;24485:366::-;24627:3;24648:67;24712:2;24707:3;24648:67;:::i;:::-;24641:74;;24724:93;24813:3;24724:93;:::i;:::-;24842:2;24837:3;24833:12;24826:19;;24485:366;;;:::o;24857:419::-;25023:4;25061:2;25050:9;25046:18;25038:26;;25110:9;25104:4;25100:20;25096:1;25085:9;25081:17;25074:47;25138:131;25264:4;25138:131;:::i;:::-;25130:139;;24857:419;;;:::o;25282:236::-;25422:34;25418:1;25410:6;25406:14;25399:58;25491:19;25486:2;25478:6;25474:15;25467:44;25282:236;:::o;25524:366::-;25666:3;25687:67;25751:2;25746:3;25687:67;:::i;:::-;25680:74;;25763:93;25852:3;25763:93;:::i;:::-;25881:2;25876:3;25872:12;25865:19;;25524:366;;;:::o;25896:419::-;26062:4;26100:2;26089:9;26085:18;26077:26;;26149:9;26143:4;26139:20;26135:1;26124:9;26120:17;26113:47;26177:131;26303:4;26177:131;:::i;:::-;26169:139;;25896:419;;;:::o;26321:233::-;26360:3;26383:24;26401:5;26383:24;:::i;:::-;26374:33;;26429:66;26422:5;26419:77;26416:103;;;26499:18;;:::i;:::-;26416:103;26546:1;26539:5;26535:13;26528:20;;26321:233;;;:::o;26560:179::-;26700:31;26696:1;26688:6;26684:14;26677:55;26560:179;:::o;26745:366::-;26887:3;26908:67;26972:2;26967:3;26908:67;:::i;:::-;26901:74;;26984:93;27073:3;26984:93;:::i;:::-;27102:2;27097:3;27093:12;27086:19;;26745:366;;;:::o;27117:419::-;27283:4;27321:2;27310:9;27306:18;27298:26;;27370:9;27364:4;27360:20;27356:1;27345:9;27341:17;27334:47;27398:131;27524:4;27398:131;:::i;:::-;27390:139;;27117:419;;;:::o;27542:225::-;27682:34;27678:1;27670:6;27666:14;27659:58;27751:8;27746:2;27738:6;27734:15;27727:33;27542:225;:::o;27773:366::-;27915:3;27936:67;28000:2;27995:3;27936:67;:::i;:::-;27929:74;;28012:93;28101:3;28012:93;:::i;:::-;28130:2;28125:3;28121:12;28114:19;;27773:366;;;:::o;28145:419::-;28311:4;28349:2;28338:9;28334:18;28326:26;;28398:9;28392:4;28388:20;28384:1;28373:9;28369:17;28362:47;28426:131;28552:4;28426:131;:::i;:::-;28418:139;;28145:419;;;:::o;28570:177::-;28710:29;28706:1;28698:6;28694:14;28687:53;28570:177;:::o;28753:366::-;28895:3;28916:67;28980:2;28975:3;28916:67;:::i;:::-;28909:74;;28992:93;29081:3;28992:93;:::i;:::-;29110:2;29105:3;29101:12;29094:19;;28753:366;;;:::o;29125:419::-;29291:4;29329:2;29318:9;29314:18;29306:26;;29378:9;29372:4;29368:20;29364:1;29353:9;29349:17;29342:47;29406:131;29532:4;29406:131;:::i;:::-;29398:139;;29125:419;;;:::o;29550:223::-;29690:34;29686:1;29678:6;29674:14;29667:58;29759:6;29754:2;29746:6;29742:15;29735:31;29550:223;:::o;29779:366::-;29921:3;29942:67;30006:2;30001:3;29942:67;:::i;:::-;29935:74;;30018:93;30107:3;30018:93;:::i;:::-;30136:2;30131:3;30127:12;30120:19;;29779:366;;;:::o;30151:419::-;30317:4;30355:2;30344:9;30340:18;30332:26;;30404:9;30398:4;30394:20;30390:1;30379:9;30375:17;30368:47;30432:131;30558:4;30432:131;:::i;:::-;30424:139;;30151:419;;;:::o;30576:221::-;30716:34;30712:1;30704:6;30700:14;30693:58;30785:4;30780:2;30772:6;30768:15;30761:29;30576:221;:::o;30803:366::-;30945:3;30966:67;31030:2;31025:3;30966:67;:::i;:::-;30959:74;;31042:93;31131:3;31042:93;:::i;:::-;31160:2;31155:3;31151:12;31144:19;;30803:366;;;:::o;31175:419::-;31341:4;31379:2;31368:9;31364:18;31356:26;;31428:9;31422:4;31418:20;31414:1;31403:9;31399:17;31392:47;31456:131;31582:4;31456:131;:::i;:::-;31448:139;;31175:419;;;:::o;31600:224::-;31740:34;31736:1;31728:6;31724:14;31717:58;31809:7;31804:2;31796:6;31792:15;31785:32;31600:224;:::o;31830:366::-;31972:3;31993:67;32057:2;32052:3;31993:67;:::i;:::-;31986:74;;32069:93;32158:3;32069:93;:::i;:::-;32187:2;32182:3;32178:12;32171:19;;31830:366;;;:::o;32202:419::-;32368:4;32406:2;32395:9;32391:18;32383:26;;32455:9;32449:4;32445:20;32441:1;32430:9;32426:17;32419:47;32483:131;32609:4;32483:131;:::i;:::-;32475:139;;32202:419;;;:::o;32627:222::-;32767:34;32763:1;32755:6;32751:14;32744:58;32836:5;32831:2;32823:6;32819:15;32812:30;32627:222;:::o;32855:366::-;32997:3;33018:67;33082:2;33077:3;33018:67;:::i;:::-;33011:74;;33094:93;33183:3;33094:93;:::i;:::-;33212:2;33207:3;33203:12;33196:19;;32855:366;;;:::o;33227:419::-;33393:4;33431:2;33420:9;33416:18;33408:26;;33480:9;33474:4;33470:20;33466:1;33455:9;33451:17;33444:47;33508:131;33634:4;33508:131;:::i;:::-;33500:139;;33227:419;;;:::o;33652:162::-;33792:14;33788:1;33780:6;33776:14;33769:38;33652:162;:::o;33820:366::-;33962:3;33983:67;34047:2;34042:3;33983:67;:::i;:::-;33976:74;;34059:93;34148:3;34059:93;:::i;:::-;34177:2;34172:3;34168:12;34161:19;;33820:366;;;:::o;34192:419::-;34358:4;34396:2;34385:9;34381:18;34373:26;;34445:9;34439:4;34435:20;34431:1;34420:9;34416:17;34409:47;34473:131;34599:4;34473:131;:::i;:::-;34465:139;;34192:419;;;:::o;34617:176::-;34757:28;34753:1;34745:6;34741:14;34734:52;34617:176;:::o;34799:366::-;34941:3;34962:67;35026:2;35021:3;34962:67;:::i;:::-;34955:74;;35038:93;35127:3;35038:93;:::i;:::-;35156:2;35151:3;35147:12;35140:19;;34799:366;;;:::o;35171:419::-;35337:4;35375:2;35364:9;35360:18;35352:26;;35424:9;35418:4;35414:20;35410:1;35399:9;35395:17;35388:47;35452:131;35578:4;35452:131;:::i;:::-;35444:139;;35171:419;;;:::o;35596:297::-;35736:34;35732:1;35724:6;35720:14;35713:58;35805:34;35800:2;35792:6;35788:15;35781:59;35874:11;35869:2;35861:6;35857:15;35850:36;35596:297;:::o;35899:366::-;36041:3;36062:67;36126:2;36121:3;36062:67;:::i;:::-;36055:74;;36138:93;36227:3;36138:93;:::i;:::-;36256:2;36251:3;36247:12;36240:19;;35899:366;;;:::o;36271:419::-;36437:4;36475:2;36464:9;36460:18;36452:26;;36524:9;36518:4;36514:20;36510:1;36499:9;36495:17;36488:47;36552:131;36678:4;36552:131;:::i;:::-;36544:139;;36271:419;;;:::o;36696:240::-;36836:34;36832:1;36824:6;36820:14;36813:58;36905:23;36900:2;36892:6;36888:15;36881:48;36696:240;:::o;36942:366::-;37084:3;37105:67;37169:2;37164:3;37105:67;:::i;:::-;37098:74;;37181:93;37270:3;37181:93;:::i;:::-;37299:2;37294:3;37290:12;37283:19;;36942:366;;;:::o;37314:419::-;37480:4;37518:2;37507:9;37503:18;37495:26;;37567:9;37561:4;37557:20;37553:1;37542:9;37538:17;37531:47;37595:131;37721:4;37595:131;:::i;:::-;37587:139;;37314:419;;;:::o;37739:177::-;37879:29;37875:1;37867:6;37863:14;37856:53;37739:177;:::o;37922:366::-;38064:3;38085:67;38149:2;38144:3;38085:67;:::i;:::-;38078:74;;38161:93;38250:3;38161:93;:::i;:::-;38279:2;38274:3;38270:12;38263:19;;37922:366;;;:::o;38294:419::-;38460:4;38498:2;38487:9;38483:18;38475:26;;38547:9;38541:4;38537:20;38533:1;38522:9;38518:17;38511:47;38575:131;38701:4;38575:131;:::i;:::-;38567:139;;38294:419;;;:::o;38719:241::-;38859:34;38855:1;38847:6;38843:14;38836:58;38928:24;38923:2;38915:6;38911:15;38904:49;38719:241;:::o;38966:366::-;39108:3;39129:67;39193:2;39188:3;39129:67;:::i;:::-;39122:74;;39205:93;39294:3;39205:93;:::i;:::-;39323:2;39318:3;39314:12;39307:19;;38966:366;;;:::o;39338:419::-;39504:4;39542:2;39531:9;39527:18;39519:26;;39591:9;39585:4;39581:20;39577:1;39566:9;39562:17;39555:47;39619:131;39745:4;39619:131;:::i;:::-;39611:139;;39338:419;;;:::o;39763:191::-;39803:4;39823:20;39841:1;39823:20;:::i;:::-;39818:25;;39857:20;39875:1;39857:20;:::i;:::-;39852:25;;39896:1;39893;39890:8;39887:34;;;39901:18;;:::i;:::-;39887:34;39946:1;39943;39939:9;39931:17;;39763:191;;;;:::o;39960:442::-;40109:4;40147:2;40136:9;40132:18;40124:26;;40160:71;40228:1;40217:9;40213:17;40204:6;40160:71;:::i;:::-;40241:72;40309:2;40298:9;40294:18;40285:6;40241:72;:::i;:::-;40323;40391:2;40380:9;40376:18;40367:6;40323:72;:::i;:::-;39960:442;;;;;;:::o;40408:220::-;40548:34;40544:1;40536:6;40532:14;40525:58;40617:3;40612:2;40604:6;40600:15;40593:28;40408:220;:::o;40634:366::-;40776:3;40797:67;40861:2;40856:3;40797:67;:::i;:::-;40790:74;;40873:93;40962:3;40873:93;:::i;:::-;40991:2;40986:3;40982:12;40975:19;;40634:366;;;:::o;41006:419::-;41172:4;41210:2;41199:9;41195:18;41187:26;;41259:9;41253:4;41249:20;41245:1;41234:9;41230:17;41223:47;41287:131;41413:4;41287:131;:::i;:::-;41279:139;;41006:419;;;:::o;41431:831::-;41694:4;41732:3;41721:9;41717:19;41709:27;;41746:71;41814:1;41803:9;41799:17;41790:6;41746:71;:::i;:::-;41827:80;41903:2;41892:9;41888:18;41879:6;41827:80;:::i;:::-;41954:9;41948:4;41944:20;41939:2;41928:9;41924:18;41917:48;41982:108;42085:4;42076:6;41982:108;:::i;:::-;41974:116;;42100:72;42168:2;42157:9;42153:18;42144:6;42100:72;:::i;:::-;42182:73;42250:3;42239:9;42235:19;42226:6;42182:73;:::i;:::-;41431:831;;;;;;;;:::o;42268:807::-;42517:4;42555:3;42544:9;42540:19;42532:27;;42569:71;42637:1;42626:9;42622:17;42613:6;42569:71;:::i;:::-;42650:72;42718:2;42707:9;42703:18;42694:6;42650:72;:::i;:::-;42732:80;42808:2;42797:9;42793:18;42784:6;42732:80;:::i;:::-;42822;42898:2;42887:9;42883:18;42874:6;42822:80;:::i;:::-;42912:73;42980:3;42969:9;42965:19;42956:6;42912:73;:::i;:::-;42995;43063:3;43052:9;43048:19;43039:6;42995:73;:::i;:::-;42268:807;;;;;;;;;:::o;43081:143::-;43138:5;43169:6;43163:13;43154:22;;43185:33;43212:5;43185:33;:::i;:::-;43081:143;;;;:::o;43230:663::-;43318:6;43326;43334;43383:2;43371:9;43362:7;43358:23;43354:32;43351:119;;;43389:79;;:::i;:::-;43351:119;43509:1;43534:64;43590:7;43581:6;43570:9;43566:22;43534:64;:::i;:::-;43524:74;;43480:128;43647:2;43673:64;43729:7;43720:6;43709:9;43705:22;43673:64;:::i;:::-;43663:74;;43618:129;43786:2;43812:64;43868:7;43859:6;43848:9;43844:22;43812:64;:::i;:::-;43802:74;;43757:129;43230:663;;;;;:::o
Swarm Source
ipfs://26cb26ed96f6d55ceef1eb17669c1f3453d349449a85043f2384abd336e5d7aa
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.