ERC-20
Overview
Max Total Supply
1,000,000,000 BINU
Holders
14
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Balance
15,000,000 BINUValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
BINU
Compiler Version
v0.8.17+commit.8df45f5f
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2023-01-08 */ // https://t.me/BOUVIERINU //SPDX-License-Identifier: Unlicensed pragma solidity 0.8.17; abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } interface IUniswapV2Pair { event Approval(address indexed owner, address indexed spender, uint value); event Transfer(address indexed from, address indexed to, uint value); function name() external pure returns (string memory); function symbol() external pure returns (string memory); function decimals() external pure returns (uint8); function totalSupply() external view returns (uint); function balanceOf(address owner) external view returns (uint); function allowance(address owner, address spender) external view returns (uint); function approve(address spender, uint value) external returns (bool); function transfer(address to, uint value) external returns (bool); function transferFrom(address from, address to, uint value) external returns (bool); function DOMAIN_SEPARATOR() external view returns (bytes32); function PERMIT_TYPEHASH() external pure returns (bytes32); function nonces(address owner) external view returns (uint); function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external; event Mint(address indexed sender, uint amount0, uint amount1); event Swap( address indexed sender, uint amount0In, uint amount1In, uint amount0Out, uint amount1Out, address indexed to ); event Sync(uint112 reserve0, uint112 reserve1); function MINIMUM_LIQUIDITY() external pure returns (uint); function factory() external view returns (address); function token0() external view returns (address); function token1() external view returns (address); function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast); function price0CumulativeLast() external view returns (uint); function price1CumulativeLast() external view returns (uint); function kLast() external view returns (uint); function mint(address to) external returns (uint liquidity); function burn(address to) external returns (uint amount0, uint amount1); function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external; function skim(address to) external; function sync() external; function initialize(address, address) external; } interface IUniswapV2Factory { event PairCreated(address indexed token0, address indexed token1, address pair, uint); function feeTo() external view returns (address); function feeToSetter() external view returns (address); function getPair(address tokenA, address tokenB) external view returns (address pair); function allPairs(uint) external view returns (address pair); function allPairsLength() external view returns (uint); function createPair(address tokenA, address tokenB) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; } interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @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 _mint(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: mint to the zero address"); _beforeTokenTransfer(address(0), account, amount); _totalSupply = _totalSupply.add(amount); _balances[account] = _balances[account].add(amount); emit Transfer(address(0), account, amount); } /** * @dev Destroys `amount` tokens from `account`, reducing the * total supply. * * Emits a {Transfer} event with `to` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. * - `account` must have at least `amount` tokens. */ function _burn(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: burn from the zero address"); _beforeTokenTransfer(account, address(0), amount); _balances[account] = _balances[account].sub(amount, "ERC20: burn amount exceeds balance"); _totalSupply = _totalSupply.sub(amount); emit Transfer(account, address(0), amount); } /** * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens. * * This internal function is equivalent to `approve`, and can be used to * e.g. set automatic allowances for certain subsystems, etc. * * Emits an {Approval} event. * * Requirements: * * - `owner` cannot be the zero address. * - `spender` cannot be the zero address. */ function _approve( address owner, address spender, uint256 amount ) internal virtual { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } /** * @dev Hook that is called before any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * will be to transferred to `to`. * - when `from` is zero, `amount` tokens will be minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 amount ) internal virtual {} } library SafeMath { /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @dev Returns the integer division of two unsigned integers. Reverts on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } /** * @dev Returns the integer division of two unsigned integers. Reverts with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return mod(a, b, "SafeMath: modulo by zero"); } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts with custom message when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } } contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor () { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } /** * @dev Returns the address of the current owner. */ function owner() public view returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(_owner == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } library SafeMathInt { int256 private constant MIN_INT256 = int256(1) << 255; int256 private constant MAX_INT256 = ~(int256(1) << 255); /** * @dev Multiplies two int256 variables and fails on overflow. */ function mul(int256 a, int256 b) internal pure returns (int256) { int256 c = a * b; // Detect overflow when multiplying MIN_INT256 with -1 require(c != MIN_INT256 || (a & MIN_INT256) != (b & MIN_INT256)); require((b == 0) || (c / b == a)); return c; } /** * @dev Division of two int256 variables and fails on overflow. */ function div(int256 a, int256 b) internal pure returns (int256) { // Prevent overflow when dividing MIN_INT256 by -1 require(b != -1 || a != MIN_INT256); // Solidity already throws when dividing by 0. return a / b; } /** * @dev Subtracts two int256 variables and fails on overflow. */ function sub(int256 a, int256 b) internal pure returns (int256) { int256 c = a - b; require((b >= 0 && c <= a) || (b < 0 && c > a)); return c; } /** * @dev Adds two int256 variables and fails on overflow. */ function add(int256 a, int256 b) internal pure returns (int256) { int256 c = a + b; require((b >= 0 && c >= a) || (b < 0 && c < a)); return c; } /** * @dev Converts to absolute value, and fails on overflow. */ function abs(int256 a) internal pure returns (int256) { require(a != MIN_INT256); return a < 0 ? -a : a; } function toUint256Safe(int256 a) internal pure returns (uint256) { require(a >= 0); return uint256(a); } } library SafeMathUint { function toInt256Safe(uint256 a) internal pure returns (int256) { int256 b = int256(a); require(b >= 0); return b; } } interface IUniswapV2Router01 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint amountADesired, uint amountBDesired, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB, uint liquidity); function addLiquidityETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external payable returns (uint amountToken, uint amountETH, uint liquidity); function removeLiquidity( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB); function removeLiquidityETH( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountToken, uint amountETH); function removeLiquidityWithPermit( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountA, uint amountB); function removeLiquidityETHWithPermit( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountToken, uint amountETH); function swapExactTokensForTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapTokensForExactTokens( uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB); function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut); function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn); function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts); function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts); } interface IUniswapV2Router02 is IUniswapV2Router01 { function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountETH); function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountETH); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint amountOutMin, address[] calldata path, address to, uint deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; } contract BINU is ERC20, Ownable { using SafeMath for uint256; IUniswapV2Router02 public immutable uniswapV2Router; address public immutable uniswapV2Pair; bool private swapping; address private marketingWallet; address private devWallet; uint256 public maxTransactionAmount; uint256 public swapTokensAtAmount; uint256 public maxWallet; bool public limitsInEffect = true; bool public tradingActive = true; bool public swapEnabled = true; uint256 public buyTotalFees; uint256 public buyMarketingFee; uint256 public buyLiquidityFee; uint256 public buyDevFee; uint256 public sellTotalFees; uint256 public sellMarketingFee; uint256 public sellLiquidityFee; uint256 public sellDevFee; uint256 public tokensForMarketing; uint256 public tokensForLiquidity; uint256 public tokensForDev; // block number of opened trading uint256 launchedAt; /******************/ // exclude from fees and max transaction amount mapping (address => bool) private _isExcludedFromFees; mapping (address => bool) public _isExcludedMaxTransactionAmount; // store addresses that a automatic market maker pairs. Any transfer *to* these addresses // could be subject to a maximum transfer amount mapping (address => bool) public partners; event UpdateUniswapV2Router(address indexed newAddress, address indexed oldAddress); event ExcludeFromFees(address indexed account, bool isExcluded); event Setpartner(address indexed pair, bool indexed value); event marketingWalletUpdated(address indexed newWallet, address indexed oldWallet); event devWalletUpdated(address indexed newWallet, address indexed oldWallet); event SwapAndLiquify( uint256 tokensSwapped, uint256 ethReceived, uint256 tokensIntoLiquidity ); event AutoNukeLP(); event ManualNukeLP(); constructor() ERC20("BOUVIER INU","BINU") { IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); excludeFromMaxTransaction(address(_uniswapV2Router), true); uniswapV2Router = _uniswapV2Router; uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH()); excludeFromMaxTransaction(address(uniswapV2Pair), true); _setpartner(address(uniswapV2Pair), true); uint256 _buyMarketingFee = 15; uint256 _buyLiquidityFee = 1; uint256 _buyDevFee = 0; uint256 _sellMarketingFee = 30; uint256 _sellLiquidityFee = 1; uint256 _sellDevFee = 0; uint256 totalSupply = 1 * 1e9 * 1e18; maxTransactionAmount = totalSupply * 20 / 1000; // 2% maxWallet = totalSupply * 20 / 1000; // 2% swapTokensAtAmount = totalSupply * 5 / 10000; // 0.1% buyMarketingFee = _buyMarketingFee; buyLiquidityFee = _buyLiquidityFee; buyDevFee = _buyDevFee; buyTotalFees = buyMarketingFee + buyLiquidityFee + buyDevFee; sellMarketingFee = _sellMarketingFee; sellLiquidityFee = _sellLiquidityFee; sellDevFee = _sellDevFee; sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevFee; marketingWallet = 0x15B0CE9c6CbC955c5AE13B5f85a8364B35C00f6f; devWallet = 0x15B0CE9c6CbC955c5AE13B5f85a8364B35C00f6f; // exclude from paying fees or having max transaction amount excludeFromFees(owner(), true); excludeFromFees(address(this), true); excludeFromFees(address(0xdead), true); excludeFromMaxTransaction(owner(), true); excludeFromMaxTransaction(address(this), true); excludeFromMaxTransaction(address(0xdead), true); /* _mint is an internal function in ERC20.sol that is only called here, and CANNOT be called ever again */ _mint(msg.sender, totalSupply); } receive() external payable { } // once enabled, can never be turned off function enableTrading() external onlyOwner { tradingActive = true; swapEnabled = true; launchedAt = block.number; } // remove limits after token is stable function removeLimits() external onlyOwner returns (bool){ limitsInEffect = false; return true; } // change the minimum amount of tokens to sell from fees function updateSwapTokensAtAmount(uint256 newAmount) external onlyOwner returns (bool){ require(newAmount >= totalSupply() * 1 / 100000, "Swap amount cannot be lower than 0.001% total supply."); require(newAmount <= totalSupply() * 5 / 1000, "Swap amount cannot be higher than 0.5% total supply."); swapTokensAtAmount = newAmount; return true; } function updateMaxTxnAmount(uint256 newNum) external onlyOwner { require(newNum >= (totalSupply() * 1 / 1000)/1e18, "Cannot set maxTransactionAmount lower than 0.1%"); maxTransactionAmount = newNum * (10**18); } function updateMaxWalletAmount(uint256 newNum) external onlyOwner { require(newNum >= (totalSupply() * 5 / 1000)/1e18, "Cannot set maxWallet lower than 0.5%"); maxWallet = newNum * (10**18); } function excludeFromMaxTransaction(address updAds, bool isEx) public onlyOwner { _isExcludedMaxTransactionAmount[updAds] = isEx; } function updateBuyFees( uint256 _devFee, uint256 _liquidityFee, uint256 _marketingFee ) external onlyOwner { buyDevFee = _devFee; buyLiquidityFee = _liquidityFee; buyMarketingFee = _marketingFee; buyTotalFees = buyDevFee + buyLiquidityFee + buyMarketingFee; require(buyTotalFees <= 30, "Must keep fees at 10% or less"); } function updateSellFees( uint256 _devFee, uint256 _liquidityFee, uint256 _marketingFee ) external onlyOwner { sellDevFee = _devFee; sellLiquidityFee = _liquidityFee; sellMarketingFee = _marketingFee; sellTotalFees = sellDevFee + sellLiquidityFee + sellMarketingFee; require(sellTotalFees <= 90, "Must keep fees at 90% or less"); } // only use to disable contract sales if absolutely necessary (emergency use only) function updateSwapEnabled(bool enabled) external onlyOwner(){ swapEnabled = enabled; } function excludeFromFees(address account, bool excluded) public onlyOwner { _isExcludedFromFees[account] = excluded; emit ExcludeFromFees(account, excluded); } function setpartner(address pair, bool value) public onlyOwner { require(pair != uniswapV2Pair, "The pair cannot be removed from partners"); _setpartner(pair, value); } function _setpartner(address pair, bool value) private { partners[pair] = value; emit Setpartner(pair, value); } function updateMarketingWallet(address newMarketingWallet) external onlyOwner { emit marketingWalletUpdated(newMarketingWallet, marketingWallet); marketingWallet = newMarketingWallet; } function updateDevWallet(address newWallet) external onlyOwner { emit devWalletUpdated(newWallet, devWallet); devWallet = newWallet; } function isExcludedFromFees(address account) public view returns(bool) { return _isExcludedFromFees[account]; } 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"); if(amount == 0) { super._transfer(from, to, 0); return; } if(limitsInEffect){ if ( from != owner() && to != owner() && to != address(0) && to != address(0xdead) && !swapping ){ if(!tradingActive){ require(_isExcludedFromFees[from] || _isExcludedFromFees[to], "Trading is not active."); } //when buy if (partners[from] && !_isExcludedMaxTransactionAmount[to]) { require(amount <= maxTransactionAmount, "Buy transfer amount exceeds the maxTransactionAmount."); require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded"); } else if (partners[to] && !_isExcludedMaxTransactionAmount[from]) { require(amount <= maxTransactionAmount, "Sell transfer amount exceeds the maxTransactionAmount."); } else if(!_isExcludedMaxTransactionAmount[to]){ require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded"); } } } uint256 contractTokenBalance = balanceOf(address(this)); bool canSwap = contractTokenBalance >= swapTokensAtAmount; if( canSwap && swapEnabled && !swapping && !partners[from] && !_isExcludedFromFees[from] && !_isExcludedFromFees[to] ) { swapping = true; swapBack(); swapping = false; } bool takeFee = !swapping; // if any account belongs to _isExcludedFromFee account then remove the fee if(_isExcludedFromFees[from] || _isExcludedFromFees[to]) { takeFee = false; } uint256 fees = 0; // only take fees on buys/sells, do not take on wallet transfers if(takeFee){ // on sell if (partners[to] && sellTotalFees > 0){ fees = amount.mul(sellTotalFees).div(100); tokensForLiquidity += fees * sellLiquidityFee / sellTotalFees; tokensForDev += fees * sellDevFee / sellTotalFees; tokensForMarketing += fees * sellMarketingFee / sellTotalFees; } // on buy else if(partners[from] && buyTotalFees > 0) { fees = amount.mul(buyTotalFees).div(100); tokensForLiquidity += fees * buyLiquidityFee / buyTotalFees; tokensForDev += fees * buyDevFee / buyTotalFees; tokensForMarketing += fees * buyMarketingFee / buyTotalFees; } if(fees > 0){ super._transfer(from, address(this), fees); } amount -= fees; } super._transfer(from, to, amount); } function swapTokensForEth(uint256 tokenAmount) private { // generate the uniswap pair path of token -> weth address[] memory path = new address[](2); path[0] = address(this); path[1] = uniswapV2Router.WETH(); _approve(address(this), address(uniswapV2Router), tokenAmount); // make the swap uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, // accept any amount of ETH path, address(this), block.timestamp ); } function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private { // approve token transfer to cover all possible scenarios _approve(address(this), address(uniswapV2Router), tokenAmount); // add the liquidity uniswapV2Router.addLiquidityETH{value: ethAmount}( address(this), tokenAmount, 0, // slippage is unavoidable 0, // slippage is unavoidable address(this), block.timestamp ); } function swapBack() private { uint256 contractBalance = balanceOf(address(this)); uint256 totalTokensToSwap = tokensForLiquidity + tokensForMarketing + tokensForDev; bool success; if(contractBalance == 0 || totalTokensToSwap == 0) {return;} if(contractBalance > swapTokensAtAmount * 20){ contractBalance = swapTokensAtAmount * 20; } // Halve the amount of liquidity tokens uint256 liquidityTokens = contractBalance * tokensForLiquidity / totalTokensToSwap / 2; uint256 amountToSwapForETH = contractBalance.sub(liquidityTokens); uint256 initialETHBalance = address(this).balance; swapTokensForEth(amountToSwapForETH); uint256 ethBalance = address(this).balance.sub(initialETHBalance); uint256 ethForMarketing = ethBalance.mul(tokensForMarketing).div(totalTokensToSwap); uint256 ethForDev = ethBalance.mul(tokensForDev).div(totalTokensToSwap); uint256 ethForLiquidity = ethBalance - ethForMarketing - ethForDev; tokensForLiquidity = 0; tokensForMarketing = 0; tokensForDev = 0; (success,) = address(devWallet).call{value: ethForDev}(""); if(liquidityTokens > 0 && ethForLiquidity > 0){ addLiquidity(liquidityTokens, ethForLiquidity); emit SwapAndLiquify(amountToSwapForETH, ethForLiquidity, tokensForLiquidity); } (success,) = address(marketingWallet).call{value: address(this).balance}(""); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[],"name":"AutoNukeLP","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[],"name":"ManualNukeLP","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"Setpartner","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"devWalletUpdated","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"},{"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":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"partners","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setpartner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForDev","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"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":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"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":"_devFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_marketingFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateDevWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newMarketingWallet","type":"address"}],"name":"updateMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_devFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_marketingFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60c06040526001600b60006101000a81548160ff0219169083151502179055506001600b60016101000a81548160ff0219169083151502179055506001600b60026101000a81548160ff0219169083151502179055503480156200006257600080fd5b506040518060400160405280600b81526020017f424f555649455220494e550000000000000000000000000000000000000000008152506040518060400160405280600481526020017f42494e55000000000000000000000000000000000000000000000000000000008152508160039081620000e0919062000de2565b508060049081620000f2919062000de2565b5050506000620001076200063560201b60201c565b905080600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506000737a250d5630b4cf539739df2c5dacb4c659f2488d9050620001d28160016200063d60201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000252573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000278919062000f33565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002e0573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000306919062000f33565b6040518363ffffffff1660e01b81526004016200032592919062000f76565b6020604051808303816000875af115801562000345573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200036b919062000f33565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1681525050620003b360a05160016200063d60201b60201c565b620003c860a05160016200073a60201b60201c565b6000600f9050600060019050600080601e90506000600190506000806b033b2e3c9fd0803ce800000090506103e860148262000405919062000fd2565b6200041191906200104c565b6008819055506103e860148262000429919062000fd2565b6200043591906200104c565b600a819055506127106005826200044d919062000fd2565b6200045991906200104c565b60098190555086600d8190555085600e8190555084600f81905550600f54600e54600d5462000489919062001084565b62000495919062001084565b600c81905550836011819055508260128190555081601381905550601354601254601154620004c5919062001084565b620004d1919062001084565b6010819055507315b0ce9c6cbc955c5ae13b5f85a8364b35c00f6f600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507315b0ce9c6cbc955c5ae13b5f85a8364b35c00f6f600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620005a362000595620007db60201b60201c565b60016200080560201b60201c565b620005b63060016200080560201b60201c565b620005cb61dead60016200080560201b60201c565b620005ed620005df620007db60201b60201c565b60016200063d60201b60201c565b620006003060016200063d60201b60201c565b6200061561dead60016200063d60201b60201c565b6200062733826200095260201b60201c565b50505050505050506200128e565b600033905090565b6200064d6200063560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614620006df576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006d69062001120565b60405180910390fd5b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167f86866eb41d8e92d6c25444e7c64d1afbb6521f9f48efd135bf4299ef7f9ce47560405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b620008156200063560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614620008a7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200089e9062001120565b60405180910390fd5b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516200094691906200115f565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620009c4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009bb90620011cc565b60405180910390fd5b620009d86000838362000b0060201b60201c565b620009f48160025462000b0560201b6200231f1790919060201c565b60028190555062000a52816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205462000b0560201b6200231f1790919060201c565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000af49190620011ff565b60405180910390a35050565b505050565b600080828462000b16919062001084565b90508381101562000b5e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000b55906200126c565b60405180910390fd5b8091505092915050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000bea57607f821691505b60208210810362000c005762000bff62000ba2565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000c6a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000c2b565b62000c76868362000c2b565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000cc362000cbd62000cb78462000c8e565b62000c98565b62000c8e565b9050919050565b6000819050919050565b62000cdf8362000ca2565b62000cf762000cee8262000cca565b84845462000c38565b825550505050565b600090565b62000d0e62000cff565b62000d1b81848462000cd4565b505050565b5b8181101562000d435762000d3760008262000d04565b60018101905062000d21565b5050565b601f82111562000d925762000d5c8162000c06565b62000d678462000c1b565b8101602085101562000d77578190505b62000d8f62000d868562000c1b565b83018262000d20565b50505b505050565b600082821c905092915050565b600062000db76000198460080262000d97565b1980831691505092915050565b600062000dd2838362000da4565b9150826002028217905092915050565b62000ded8262000b68565b67ffffffffffffffff81111562000e095762000e0862000b73565b5b62000e15825462000bd1565b62000e2282828562000d47565b600060209050601f83116001811462000e5a576000841562000e45578287015190505b62000e51858262000dc4565b86555062000ec1565b601f19841662000e6a8662000c06565b60005b8281101562000e945784890151825560018201915060208501945060208101905062000e6d565b8683101562000eb4578489015162000eb0601f89168262000da4565b8355505b6001600288020188555050505b505050505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000efb8262000ece565b9050919050565b62000f0d8162000eee565b811462000f1957600080fd5b50565b60008151905062000f2d8162000f02565b92915050565b60006020828403121562000f4c5762000f4b62000ec9565b5b600062000f5c8482850162000f1c565b91505092915050565b62000f708162000eee565b82525050565b600060408201905062000f8d600083018562000f65565b62000f9c602083018462000f65565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000fdf8262000c8e565b915062000fec8362000c8e565b925082820262000ffc8162000c8e565b9150828204841483151762001016576200101562000fa3565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000620010598262000c8e565b9150620010668362000c8e565b9250826200107957620010786200101d565b5b828204905092915050565b6000620010918262000c8e565b91506200109e8362000c8e565b9250828201905080821115620010b957620010b862000fa3565b5b92915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062001108602083620010bf565b91506200111582620010d0565b602082019050919050565b600060208201905081810360008301526200113b81620010f9565b9050919050565b60008115159050919050565b620011598162001142565b82525050565b60006020820190506200117660008301846200114e565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6000620011b4601f83620010bf565b9150620011c1826200117c565b602082019050919050565b60006020820190508181036000830152620011e781620011a5565b9050919050565b620011f98162000c8e565b82525050565b6000602082019050620012166000830184620011ee565b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b600062001254601b83620010bf565b915062001261826200121c565b602082019050919050565b60006020820190508181036000830152620012878162001245565b9050919050565b60805160a051614f35620012de60003960008181610e7501526111d6015260008181610c530152818161384e0152818161392f01528181613956015281816139f20152613a190152614f356000f3fe6080604052600436106102b25760003560e01c80638a8c523c11610175578063bbc0c742116100dc578063d85ba06311610095578063f11a24d31161006f578063f11a24d314610ad7578063f2fde38b14610b02578063f637434214610b2b578063f8b45b0514610b56576102b9565b8063d85ba06314610a44578063dd62ed3e14610a6f578063e2f4560514610aac576102b9565b8063bbc0c74214610936578063c024666814610961578063c17b5b8c1461098a578063c18bc195146109b3578063c8c8ebe4146109dc578063d257b34f14610a07576102b9565b80639c3b4fdc1161012e5780639c3b4fdc146108125780639fccce321461083d578063a0d82dc514610868578063a457c2d714610893578063a9059cbb146108d0578063aacebbe31461090d576102b9565b80638a8c523c146107145780638da5cb5b1461072b5780639213691314610756578063924de9b71461078157806395c33652146107aa57806395d89b41146107e7576102b9565b8063395093511161021957806370a08231116101d257806370a0823114610618578063715018a614610655578063751039fc1461066c5780637571336a146106975780637bce5a04146106c05780638095d564146106eb576102b9565b806339509351146104f257806349bd5a5e1461052f5780634a62bb651461055a5780634fbee193146105855780636a486a8e146105c25780636ddd1713146105ed576102b9565b80631a8145bb1161026b5780631a8145bb146103e25780631a89e9471461040d5780631f3fed8f14610436578063203e727e1461046157806323b872dd1461048a578063313ce567146104c7576102b9565b806306fdde03146102be578063095ea7b3146102e957806310d5de53146103265780631694505e1461036357806318160ddd1461038e5780631816467f146103b9576102b9565b366102b957005b600080fd5b3480156102ca57600080fd5b506102d3610b81565b6040516102e09190613bb9565b60405180910390f35b3480156102f557600080fd5b50610310600480360381019061030b9190613c74565b610c13565b60405161031d9190613ccf565b60405180910390f35b34801561033257600080fd5b5061034d60048036038101906103489190613cea565b610c31565b60405161035a9190613ccf565b60405180910390f35b34801561036f57600080fd5b50610378610c51565b6040516103859190613d76565b60405180910390f35b34801561039a57600080fd5b506103a3610c75565b6040516103b09190613da0565b60405180910390f35b3480156103c557600080fd5b506103e060048036038101906103db9190613cea565b610c7f565b005b3480156103ee57600080fd5b506103f7610dd6565b6040516104049190613da0565b60405180910390f35b34801561041957600080fd5b50610434600480360381019061042f9190613de7565b610ddc565b005b34801561044257600080fd5b5061044b610f0f565b6040516104589190613da0565b60405180910390f35b34801561046d57600080fd5b5061048860048036038101906104839190613e27565b610f15565b005b34801561049657600080fd5b506104b160048036038101906104ac9190613e54565b61103f565b6040516104be9190613ccf565b60405180910390f35b3480156104d357600080fd5b506104dc611118565b6040516104e99190613ec3565b60405180910390f35b3480156104fe57600080fd5b5061051960048036038101906105149190613c74565b611121565b6040516105269190613ccf565b60405180910390f35b34801561053b57600080fd5b506105446111d4565b6040516105519190613eed565b60405180910390f35b34801561056657600080fd5b5061056f6111f8565b60405161057c9190613ccf565b60405180910390f35b34801561059157600080fd5b506105ac60048036038101906105a79190613cea565b61120b565b6040516105b99190613ccf565b60405180910390f35b3480156105ce57600080fd5b506105d7611261565b6040516105e49190613da0565b60405180910390f35b3480156105f957600080fd5b50610602611267565b60405161060f9190613ccf565b60405180910390f35b34801561062457600080fd5b5061063f600480360381019061063a9190613cea565b61127a565b60405161064c9190613da0565b60405180910390f35b34801561066157600080fd5b5061066a6112c2565b005b34801561067857600080fd5b5061068161141a565b60405161068e9190613ccf565b60405180910390f35b3480156106a357600080fd5b506106be60048036038101906106b99190613de7565b6114d5565b005b3480156106cc57600080fd5b506106d56115c7565b6040516106e29190613da0565b60405180910390f35b3480156106f757600080fd5b50610712600480360381019061070d9190613f08565b6115cd565b005b34801561072057600080fd5b506107296116e7565b005b34801561073757600080fd5b506107406117bd565b60405161074d9190613eed565b60405180910390f35b34801561076257600080fd5b5061076b6117e7565b6040516107789190613da0565b60405180910390f35b34801561078d57600080fd5b506107a860048036038101906107a39190613f5b565b6117ed565b005b3480156107b657600080fd5b506107d160048036038101906107cc9190613cea565b6118a1565b6040516107de9190613ccf565b60405180910390f35b3480156107f357600080fd5b506107fc6118c1565b6040516108099190613bb9565b60405180910390f35b34801561081e57600080fd5b50610827611953565b6040516108349190613da0565b60405180910390f35b34801561084957600080fd5b50610852611959565b60405161085f9190613da0565b60405180910390f35b34801561087457600080fd5b5061087d61195f565b60405161088a9190613da0565b60405180910390f35b34801561089f57600080fd5b506108ba60048036038101906108b59190613c74565b611965565b6040516108c79190613ccf565b60405180910390f35b3480156108dc57600080fd5b506108f760048036038101906108f29190613c74565b611a32565b6040516109049190613ccf565b60405180910390f35b34801561091957600080fd5b50610934600480360381019061092f9190613cea565b611a50565b005b34801561094257600080fd5b5061094b611ba7565b6040516109589190613ccf565b60405180910390f35b34801561096d57600080fd5b5061098860048036038101906109839190613de7565b611bba565b005b34801561099657600080fd5b506109b160048036038101906109ac9190613f08565b611cfa565b005b3480156109bf57600080fd5b506109da60048036038101906109d59190613e27565b611e14565b005b3480156109e857600080fd5b506109f1611f3e565b6040516109fe9190613da0565b60405180910390f35b348015610a1357600080fd5b50610a2e6004803603810190610a299190613e27565b611f44565b604051610a3b9190613ccf565b60405180910390f35b348015610a5057600080fd5b50610a596120b4565b604051610a669190613da0565b60405180910390f35b348015610a7b57600080fd5b50610a966004803603810190610a919190613f88565b6120ba565b604051610aa39190613da0565b60405180910390f35b348015610ab857600080fd5b50610ac1612141565b604051610ace9190613da0565b60405180910390f35b348015610ae357600080fd5b50610aec612147565b604051610af99190613da0565b60405180910390f35b348015610b0e57600080fd5b50610b296004803603810190610b249190613cea565b61214d565b005b348015610b3757600080fd5b50610b40612313565b604051610b4d9190613da0565b60405180910390f35b348015610b6257600080fd5b50610b6b612319565b604051610b789190613da0565b60405180910390f35b606060038054610b9090613ff7565b80601f0160208091040260200160405190810160405280929190818152602001828054610bbc90613ff7565b8015610c095780601f10610bde57610100808354040283529160200191610c09565b820191906000526020600020905b815481529060010190602001808311610bec57829003601f168201915b5050505050905090565b6000610c27610c2061237d565b8484612385565b6001905092915050565b60196020528060005260406000206000915054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b610c8761237d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610d16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d0d90614074565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60155481565b610de461237d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e6a90614074565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610f01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ef890614106565b60405180910390fd5b610f0b828261254e565b5050565b60145481565b610f1d61237d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610fac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa390614074565b60405180910390fd5b670de0b6b3a76400006103e86001610fc2610c75565b610fcc9190614155565b610fd691906141c6565b610fe091906141c6565b811015611022576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101990614269565b60405180910390fd5b670de0b6b3a7640000816110369190614155565b60088190555050565b600061104c8484846125ef565b61110d8461105861237d565b61110885604051806060016040528060288152602001614eb360289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006110be61237d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546130be9092919063ffffffff16565b612385565b600190509392505050565b60006012905090565b60006111ca61112e61237d565b846111c5856001600061113f61237d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461231f90919063ffffffff16565b612385565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600b60009054906101000a900460ff1681565b6000601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60105481565b600b60029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6112ca61237d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611359576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135090614074565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600061142461237d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146114b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114aa90614074565b60405180910390fd5b6000600b60006101000a81548160ff0219169083151502179055506001905090565b6114dd61237d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461156c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161156390614074565b60405180910390fd5b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600d5481565b6115d561237d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611664576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165b90614074565b60405180910390fd5b82600f8190555081600e8190555080600d81905550600d54600e54600f5461168c9190614289565b6116969190614289565b600c81905550601e600c5411156116e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116d990614309565b60405180910390fd5b505050565b6116ef61237d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461177e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161177590614074565b60405180910390fd5b6001600b60016101000a81548160ff0219169083151502179055506001600b60026101000a81548160ff02191690831515021790555043601781905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60115481565b6117f561237d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611884576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187b90614074565b60405180910390fd5b80600b60026101000a81548160ff02191690831515021790555050565b601a6020528060005260406000206000915054906101000a900460ff1681565b6060600480546118d090613ff7565b80601f01602080910402602001604051908101604052809291908181526020018280546118fc90613ff7565b80156119495780601f1061191e57610100808354040283529160200191611949565b820191906000526020600020905b81548152906001019060200180831161192c57829003601f168201915b5050505050905090565b600f5481565b60165481565b60135481565b6000611a2861197261237d565b84611a2385604051806060016040528060258152602001614edb602591396001600061199c61237d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546130be9092919063ffffffff16565b612385565b6001905092915050565b6000611a46611a3f61237d565b84846125ef565b6001905092915050565b611a5861237d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ae7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ade90614074565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600b60019054906101000a900460ff1681565b611bc261237d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c4890614074565b60405180910390fd5b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611cee9190613ccf565b60405180910390a25050565b611d0261237d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d8890614074565b60405180910390fd5b826013819055508160128190555080601181905550601154601254601354611db99190614289565b611dc39190614289565b601081905550605a6010541115611e0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e0690614375565b60405180910390fd5b505050565b611e1c61237d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611eab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ea290614074565b60405180910390fd5b670de0b6b3a76400006103e86005611ec1610c75565b611ecb9190614155565b611ed591906141c6565b611edf91906141c6565b811015611f21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f1890614407565b60405180910390fd5b670de0b6b3a764000081611f359190614155565b600a8190555050565b60085481565b6000611f4e61237d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611fdd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fd490614074565b60405180910390fd5b620186a06001611feb610c75565b611ff59190614155565b611fff91906141c6565b821015612041576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161203890614499565b60405180910390fd5b6103e8600561204e610c75565b6120589190614155565b61206291906141c6565b8211156120a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161209b9061452b565b60405180910390fd5b8160098190555060019050919050565b600c5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60095481565b600e5481565b61215561237d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146121e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121db90614074565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612253576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161224a906145bd565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60125481565b600a5481565b600080828461232e9190614289565b905083811015612373576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161236a90614629565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036123f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123eb906146bb565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612463576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161245a9061474d565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516125419190613da0565b60405180910390a3505050565b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167f86866eb41d8e92d6c25444e7c64d1afbb6521f9f48efd135bf4299ef7f9ce47560405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361265e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612655906147df565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036126cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126c490614871565b60405180910390fd5b600081036126e6576126e183836000613122565b6130b9565b600b60009054906101000a900460ff1615612be1576127036117bd565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561277157506127416117bd565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156127aa5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156127e4575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156127fd5750600560149054906101000a900460ff16155b15612be057600b60019054906101000a900460ff166128f757601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806128b75750601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6128f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128ed906148dd565b60405180910390fd5b5b601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561299a5750601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612a41576008548111156129e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129db9061496f565b60405180910390fd5b600a546129f08361127a565b826129fb9190614289565b1115612a3c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a33906149db565b60405180910390fd5b612bdf565b601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612ae45750601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612b3357600854811115612b2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b2590614a6d565b60405180910390fd5b612bde565b601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612bdd57600a54612b908361127a565b82612b9b9190614289565b1115612bdc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bd3906149db565b60405180910390fd5b5b5b5b5b5b6000612bec3061127a565b905060006009548210159050808015612c115750600b60029054906101000a900460ff165b8015612c2a5750600560149054906101000a900460ff16155b8015612c805750601a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612cd65750601860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612d2c5750601860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612d70576001600560146101000a81548160ff021916908315150217905550612d546133b5565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050601860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612e265750601860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612e3057600090505b600081156130a957601a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612e9357506000601054115b15612f6057612ec06064612eb26010548861369c90919063ffffffff16565b61371690919063ffffffff16565b905060105460125482612ed39190614155565b612edd91906141c6565b60156000828254612eee9190614289565b9250508190555060105460135482612f069190614155565b612f1091906141c6565b60166000828254612f219190614289565b9250508190555060105460115482612f399190614155565b612f4391906141c6565b60146000828254612f549190614289565b92505081905550613085565b601a60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612fbb57506000600c54115b1561308457612fe86064612fda600c548861369c90919063ffffffff16565b61371690919063ffffffff16565b9050600c54600e5482612ffb9190614155565b61300591906141c6565b601560008282546130169190614289565b92505081905550600c54600f548261302e9190614155565b61303891906141c6565b601660008282546130499190614289565b92505081905550600c54600d54826130619190614155565b61306b91906141c6565b6014600082825461307c9190614289565b925050819055505b5b600081111561309a57613099873083613122565b5b80856130a69190614a8d565b94505b6130b4878787613122565b505050505b505050565b6000838311158290613106576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130fd9190613bb9565b60405180910390fd5b50600083856131159190614a8d565b9050809150509392505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613191576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613188906147df565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613200576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131f790614871565b60405180910390fd5b61320b838383613760565b61327681604051806060016040528060268152602001614e8d602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546130be9092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613309816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461231f90919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516133a89190613da0565b60405180910390a3505050565b60006133c03061127a565b905060006016546014546015546133d79190614289565b6133e19190614289565b90506000808314806133f35750600082145b156134005750505061369a565b601460095461340f9190614155565b8311156134285760146009546134259190614155565b92505b60006002836015548661343b9190614155565b61344591906141c6565b61344f91906141c6565b90506000613466828661376590919063ffffffff16565b90506000479050613476826137af565b600061348b824761376590919063ffffffff16565b905060006134b6876134a86014548561369c90919063ffffffff16565b61371690919063ffffffff16565b905060006134e1886134d36016548661369c90919063ffffffff16565b61371690919063ffffffff16565b905060008183856134f29190614a8d565b6134fc9190614a8d565b9050600060158190555060006014819055506000601681905550600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168260405161355c90614af2565b60006040518083038185875af1925050503d8060008114613599576040519150601f19603f3d011682016040523d82523d6000602084013e61359e565b606091505b5050809850506000871180156135b45750600081115b15613601576135c387826139ec565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb56186826015546040516135f893929190614b07565b60405180910390a15b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161364790614af2565b60006040518083038185875af1925050503d8060008114613684576040519150601f19603f3d011682016040523d82523d6000602084013e613689565b606091505b505080985050505050505050505050505b565b60008083036136ae5760009050613710565b600082846136bc9190614155565b90508284826136cb91906141c6565b1461370b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161370290614bb0565b60405180910390fd5b809150505b92915050565b600061375883836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613ac6565b905092915050565b505050565b60006137a783836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506130be565b905092915050565b6000600267ffffffffffffffff8111156137cc576137cb614bd0565b5b6040519080825280602002602001820160405280156137fa5781602001602082028036833780820191505090505b509050308160008151811061381257613811614bff565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156138b7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138db9190614c43565b816001815181106138ef576138ee614bff565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613954307f000000000000000000000000000000000000000000000000000000000000000084612385565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016139b6959493929190614d69565b600060405180830381600087803b1580156139d057600080fd5b505af11580156139e4573d6000803e3d6000fd5b505050505050565b613a17307f000000000000000000000000000000000000000000000000000000000000000084612385565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008030426040518863ffffffff1660e01b8152600401613a7c96959493929190614dc3565b60606040518083038185885af1158015613a9a573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613abf9190614e39565b5050505050565b60008083118290613b0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613b049190613bb9565b60405180910390fd5b5060008385613b1c91906141c6565b9050809150509392505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613b63578082015181840152602081019050613b48565b60008484015250505050565b6000601f19601f8301169050919050565b6000613b8b82613b29565b613b958185613b34565b9350613ba5818560208601613b45565b613bae81613b6f565b840191505092915050565b60006020820190508181036000830152613bd38184613b80565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613c0b82613be0565b9050919050565b613c1b81613c00565b8114613c2657600080fd5b50565b600081359050613c3881613c12565b92915050565b6000819050919050565b613c5181613c3e565b8114613c5c57600080fd5b50565b600081359050613c6e81613c48565b92915050565b60008060408385031215613c8b57613c8a613bdb565b5b6000613c9985828601613c29565b9250506020613caa85828601613c5f565b9150509250929050565b60008115159050919050565b613cc981613cb4565b82525050565b6000602082019050613ce46000830184613cc0565b92915050565b600060208284031215613d0057613cff613bdb565b5b6000613d0e84828501613c29565b91505092915050565b6000819050919050565b6000613d3c613d37613d3284613be0565b613d17565b613be0565b9050919050565b6000613d4e82613d21565b9050919050565b6000613d6082613d43565b9050919050565b613d7081613d55565b82525050565b6000602082019050613d8b6000830184613d67565b92915050565b613d9a81613c3e565b82525050565b6000602082019050613db56000830184613d91565b92915050565b613dc481613cb4565b8114613dcf57600080fd5b50565b600081359050613de181613dbb565b92915050565b60008060408385031215613dfe57613dfd613bdb565b5b6000613e0c85828601613c29565b9250506020613e1d85828601613dd2565b9150509250929050565b600060208284031215613e3d57613e3c613bdb565b5b6000613e4b84828501613c5f565b91505092915050565b600080600060608486031215613e6d57613e6c613bdb565b5b6000613e7b86828701613c29565b9350506020613e8c86828701613c29565b9250506040613e9d86828701613c5f565b9150509250925092565b600060ff82169050919050565b613ebd81613ea7565b82525050565b6000602082019050613ed86000830184613eb4565b92915050565b613ee781613c00565b82525050565b6000602082019050613f026000830184613ede565b92915050565b600080600060608486031215613f2157613f20613bdb565b5b6000613f2f86828701613c5f565b9350506020613f4086828701613c5f565b9250506040613f5186828701613c5f565b9150509250925092565b600060208284031215613f7157613f70613bdb565b5b6000613f7f84828501613dd2565b91505092915050565b60008060408385031215613f9f57613f9e613bdb565b5b6000613fad85828601613c29565b9250506020613fbe85828601613c29565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061400f57607f821691505b60208210810361402257614021613fc8565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061405e602083613b34565b915061406982614028565b602082019050919050565b6000602082019050818103600083015261408d81614051565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f706172746e657273000000000000000000000000000000000000000000000000602082015250565b60006140f0602883613b34565b91506140fb82614094565b604082019050919050565b6000602082019050818103600083015261411f816140e3565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061416082613c3e565b915061416b83613c3e565b925082820261417981613c3e565b915082820484148315176141905761418f614126565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006141d182613c3e565b91506141dc83613c3e565b9250826141ec576141eb614197565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b6000614253602f83613b34565b915061425e826141f7565b604082019050919050565b6000602082019050818103600083015261428281614246565b9050919050565b600061429482613c3e565b915061429f83613c3e565b92508282019050808211156142b7576142b6614126565b5b92915050565b7f4d757374206b656570206665657320617420313025206f72206c657373000000600082015250565b60006142f3601d83613b34565b91506142fe826142bd565b602082019050919050565b60006020820190508181036000830152614322816142e6565b9050919050565b7f4d757374206b656570206665657320617420393025206f72206c657373000000600082015250565b600061435f601d83613b34565b915061436a82614329565b602082019050919050565b6000602082019050818103600083015261438e81614352565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b60006143f1602483613b34565b91506143fc82614395565b604082019050919050565b60006020820190508181036000830152614420816143e4565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b6000614483603583613b34565b915061448e82614427565b604082019050919050565b600060208201905081810360008301526144b281614476565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b6000614515603483613b34565b9150614520826144b9565b604082019050919050565b6000602082019050818103600083015261454481614508565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006145a7602683613b34565b91506145b28261454b565b604082019050919050565b600060208201905081810360008301526145d68161459a565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000614613601b83613b34565b915061461e826145dd565b602082019050919050565b6000602082019050818103600083015261464281614606565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006146a5602483613b34565b91506146b082614649565b604082019050919050565b600060208201905081810360008301526146d481614698565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614737602283613b34565b9150614742826146db565b604082019050919050565b600060208201905081810360008301526147668161472a565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006147c9602583613b34565b91506147d48261476d565b604082019050919050565b600060208201905081810360008301526147f8816147bc565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061485b602383613b34565b9150614866826147ff565b604082019050919050565b6000602082019050818103600083015261488a8161484e565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b60006148c7601683613b34565b91506148d282614891565b602082019050919050565b600060208201905081810360008301526148f6816148ba565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b6000614959603583613b34565b9150614964826148fd565b604082019050919050565b600060208201905081810360008301526149888161494c565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b60006149c5601383613b34565b91506149d08261498f565b602082019050919050565b600060208201905081810360008301526149f4816149b8565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b6000614a57603683613b34565b9150614a62826149fb565b604082019050919050565b60006020820190508181036000830152614a8681614a4a565b9050919050565b6000614a9882613c3e565b9150614aa383613c3e565b9250828203905081811115614abb57614aba614126565b5b92915050565b600081905092915050565b50565b6000614adc600083614ac1565b9150614ae782614acc565b600082019050919050565b6000614afd82614acf565b9150819050919050565b6000606082019050614b1c6000830186613d91565b614b296020830185613d91565b614b366040830184613d91565b949350505050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000614b9a602183613b34565b9150614ba582614b3e565b604082019050919050565b60006020820190508181036000830152614bc981614b8d565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050614c3d81613c12565b92915050565b600060208284031215614c5957614c58613bdb565b5b6000614c6784828501614c2e565b91505092915050565b6000819050919050565b6000614c95614c90614c8b84614c70565b613d17565b613c3e565b9050919050565b614ca581614c7a565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614ce081613c00565b82525050565b6000614cf28383614cd7565b60208301905092915050565b6000602082019050919050565b6000614d1682614cab565b614d208185614cb6565b9350614d2b83614cc7565b8060005b83811015614d5c578151614d438882614ce6565b9750614d4e83614cfe565b925050600181019050614d2f565b5085935050505092915050565b600060a082019050614d7e6000830188613d91565b614d8b6020830187614c9c565b8181036040830152614d9d8186614d0b565b9050614dac6060830185613ede565b614db96080830184613d91565b9695505050505050565b600060c082019050614dd86000830189613ede565b614de56020830188613d91565b614df26040830187614c9c565b614dff6060830186614c9c565b614e0c6080830185613ede565b614e1960a0830184613d91565b979650505050505050565b600081519050614e3381613c48565b92915050565b600080600060608486031215614e5257614e51613bdb565b5b6000614e6086828701614e24565b9350506020614e7186828701614e24565b9250506040614e8286828701614e24565b915050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212203982adf3341ca07a22370fcd147057e6a699af08f171d524bee239517629a9af64736f6c63430008110033
Deployed Bytecode
0x6080604052600436106102b25760003560e01c80638a8c523c11610175578063bbc0c742116100dc578063d85ba06311610095578063f11a24d31161006f578063f11a24d314610ad7578063f2fde38b14610b02578063f637434214610b2b578063f8b45b0514610b56576102b9565b8063d85ba06314610a44578063dd62ed3e14610a6f578063e2f4560514610aac576102b9565b8063bbc0c74214610936578063c024666814610961578063c17b5b8c1461098a578063c18bc195146109b3578063c8c8ebe4146109dc578063d257b34f14610a07576102b9565b80639c3b4fdc1161012e5780639c3b4fdc146108125780639fccce321461083d578063a0d82dc514610868578063a457c2d714610893578063a9059cbb146108d0578063aacebbe31461090d576102b9565b80638a8c523c146107145780638da5cb5b1461072b5780639213691314610756578063924de9b71461078157806395c33652146107aa57806395d89b41146107e7576102b9565b8063395093511161021957806370a08231116101d257806370a0823114610618578063715018a614610655578063751039fc1461066c5780637571336a146106975780637bce5a04146106c05780638095d564146106eb576102b9565b806339509351146104f257806349bd5a5e1461052f5780634a62bb651461055a5780634fbee193146105855780636a486a8e146105c25780636ddd1713146105ed576102b9565b80631a8145bb1161026b5780631a8145bb146103e25780631a89e9471461040d5780631f3fed8f14610436578063203e727e1461046157806323b872dd1461048a578063313ce567146104c7576102b9565b806306fdde03146102be578063095ea7b3146102e957806310d5de53146103265780631694505e1461036357806318160ddd1461038e5780631816467f146103b9576102b9565b366102b957005b600080fd5b3480156102ca57600080fd5b506102d3610b81565b6040516102e09190613bb9565b60405180910390f35b3480156102f557600080fd5b50610310600480360381019061030b9190613c74565b610c13565b60405161031d9190613ccf565b60405180910390f35b34801561033257600080fd5b5061034d60048036038101906103489190613cea565b610c31565b60405161035a9190613ccf565b60405180910390f35b34801561036f57600080fd5b50610378610c51565b6040516103859190613d76565b60405180910390f35b34801561039a57600080fd5b506103a3610c75565b6040516103b09190613da0565b60405180910390f35b3480156103c557600080fd5b506103e060048036038101906103db9190613cea565b610c7f565b005b3480156103ee57600080fd5b506103f7610dd6565b6040516104049190613da0565b60405180910390f35b34801561041957600080fd5b50610434600480360381019061042f9190613de7565b610ddc565b005b34801561044257600080fd5b5061044b610f0f565b6040516104589190613da0565b60405180910390f35b34801561046d57600080fd5b5061048860048036038101906104839190613e27565b610f15565b005b34801561049657600080fd5b506104b160048036038101906104ac9190613e54565b61103f565b6040516104be9190613ccf565b60405180910390f35b3480156104d357600080fd5b506104dc611118565b6040516104e99190613ec3565b60405180910390f35b3480156104fe57600080fd5b5061051960048036038101906105149190613c74565b611121565b6040516105269190613ccf565b60405180910390f35b34801561053b57600080fd5b506105446111d4565b6040516105519190613eed565b60405180910390f35b34801561056657600080fd5b5061056f6111f8565b60405161057c9190613ccf565b60405180910390f35b34801561059157600080fd5b506105ac60048036038101906105a79190613cea565b61120b565b6040516105b99190613ccf565b60405180910390f35b3480156105ce57600080fd5b506105d7611261565b6040516105e49190613da0565b60405180910390f35b3480156105f957600080fd5b50610602611267565b60405161060f9190613ccf565b60405180910390f35b34801561062457600080fd5b5061063f600480360381019061063a9190613cea565b61127a565b60405161064c9190613da0565b60405180910390f35b34801561066157600080fd5b5061066a6112c2565b005b34801561067857600080fd5b5061068161141a565b60405161068e9190613ccf565b60405180910390f35b3480156106a357600080fd5b506106be60048036038101906106b99190613de7565b6114d5565b005b3480156106cc57600080fd5b506106d56115c7565b6040516106e29190613da0565b60405180910390f35b3480156106f757600080fd5b50610712600480360381019061070d9190613f08565b6115cd565b005b34801561072057600080fd5b506107296116e7565b005b34801561073757600080fd5b506107406117bd565b60405161074d9190613eed565b60405180910390f35b34801561076257600080fd5b5061076b6117e7565b6040516107789190613da0565b60405180910390f35b34801561078d57600080fd5b506107a860048036038101906107a39190613f5b565b6117ed565b005b3480156107b657600080fd5b506107d160048036038101906107cc9190613cea565b6118a1565b6040516107de9190613ccf565b60405180910390f35b3480156107f357600080fd5b506107fc6118c1565b6040516108099190613bb9565b60405180910390f35b34801561081e57600080fd5b50610827611953565b6040516108349190613da0565b60405180910390f35b34801561084957600080fd5b50610852611959565b60405161085f9190613da0565b60405180910390f35b34801561087457600080fd5b5061087d61195f565b60405161088a9190613da0565b60405180910390f35b34801561089f57600080fd5b506108ba60048036038101906108b59190613c74565b611965565b6040516108c79190613ccf565b60405180910390f35b3480156108dc57600080fd5b506108f760048036038101906108f29190613c74565b611a32565b6040516109049190613ccf565b60405180910390f35b34801561091957600080fd5b50610934600480360381019061092f9190613cea565b611a50565b005b34801561094257600080fd5b5061094b611ba7565b6040516109589190613ccf565b60405180910390f35b34801561096d57600080fd5b5061098860048036038101906109839190613de7565b611bba565b005b34801561099657600080fd5b506109b160048036038101906109ac9190613f08565b611cfa565b005b3480156109bf57600080fd5b506109da60048036038101906109d59190613e27565b611e14565b005b3480156109e857600080fd5b506109f1611f3e565b6040516109fe9190613da0565b60405180910390f35b348015610a1357600080fd5b50610a2e6004803603810190610a299190613e27565b611f44565b604051610a3b9190613ccf565b60405180910390f35b348015610a5057600080fd5b50610a596120b4565b604051610a669190613da0565b60405180910390f35b348015610a7b57600080fd5b50610a966004803603810190610a919190613f88565b6120ba565b604051610aa39190613da0565b60405180910390f35b348015610ab857600080fd5b50610ac1612141565b604051610ace9190613da0565b60405180910390f35b348015610ae357600080fd5b50610aec612147565b604051610af99190613da0565b60405180910390f35b348015610b0e57600080fd5b50610b296004803603810190610b249190613cea565b61214d565b005b348015610b3757600080fd5b50610b40612313565b604051610b4d9190613da0565b60405180910390f35b348015610b6257600080fd5b50610b6b612319565b604051610b789190613da0565b60405180910390f35b606060038054610b9090613ff7565b80601f0160208091040260200160405190810160405280929190818152602001828054610bbc90613ff7565b8015610c095780601f10610bde57610100808354040283529160200191610c09565b820191906000526020600020905b815481529060010190602001808311610bec57829003601f168201915b5050505050905090565b6000610c27610c2061237d565b8484612385565b6001905092915050565b60196020528060005260406000206000915054906101000a900460ff1681565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b610c8761237d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610d16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d0d90614074565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60155481565b610de461237d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e6a90614074565b60405180910390fd5b7f00000000000000000000000069e0be969a75e347647dda5d891ffad67477064173ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610f01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ef890614106565b60405180910390fd5b610f0b828261254e565b5050565b60145481565b610f1d61237d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610fac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa390614074565b60405180910390fd5b670de0b6b3a76400006103e86001610fc2610c75565b610fcc9190614155565b610fd691906141c6565b610fe091906141c6565b811015611022576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101990614269565b60405180910390fd5b670de0b6b3a7640000816110369190614155565b60088190555050565b600061104c8484846125ef565b61110d8461105861237d565b61110885604051806060016040528060288152602001614eb360289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006110be61237d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546130be9092919063ffffffff16565b612385565b600190509392505050565b60006012905090565b60006111ca61112e61237d565b846111c5856001600061113f61237d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461231f90919063ffffffff16565b612385565b6001905092915050565b7f00000000000000000000000069e0be969a75e347647dda5d891ffad67477064181565b600b60009054906101000a900460ff1681565b6000601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60105481565b600b60029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6112ca61237d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611359576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135090614074565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600061142461237d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146114b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114aa90614074565b60405180910390fd5b6000600b60006101000a81548160ff0219169083151502179055506001905090565b6114dd61237d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461156c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161156390614074565b60405180910390fd5b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600d5481565b6115d561237d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611664576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165b90614074565b60405180910390fd5b82600f8190555081600e8190555080600d81905550600d54600e54600f5461168c9190614289565b6116969190614289565b600c81905550601e600c5411156116e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116d990614309565b60405180910390fd5b505050565b6116ef61237d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461177e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161177590614074565b60405180910390fd5b6001600b60016101000a81548160ff0219169083151502179055506001600b60026101000a81548160ff02191690831515021790555043601781905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60115481565b6117f561237d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611884576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187b90614074565b60405180910390fd5b80600b60026101000a81548160ff02191690831515021790555050565b601a6020528060005260406000206000915054906101000a900460ff1681565b6060600480546118d090613ff7565b80601f01602080910402602001604051908101604052809291908181526020018280546118fc90613ff7565b80156119495780601f1061191e57610100808354040283529160200191611949565b820191906000526020600020905b81548152906001019060200180831161192c57829003601f168201915b5050505050905090565b600f5481565b60165481565b60135481565b6000611a2861197261237d565b84611a2385604051806060016040528060258152602001614edb602591396001600061199c61237d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546130be9092919063ffffffff16565b612385565b6001905092915050565b6000611a46611a3f61237d565b84846125ef565b6001905092915050565b611a5861237d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ae7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ade90614074565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600b60019054906101000a900460ff1681565b611bc261237d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c4890614074565b60405180910390fd5b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611cee9190613ccf565b60405180910390a25050565b611d0261237d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d8890614074565b60405180910390fd5b826013819055508160128190555080601181905550601154601254601354611db99190614289565b611dc39190614289565b601081905550605a6010541115611e0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e0690614375565b60405180910390fd5b505050565b611e1c61237d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611eab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ea290614074565b60405180910390fd5b670de0b6b3a76400006103e86005611ec1610c75565b611ecb9190614155565b611ed591906141c6565b611edf91906141c6565b811015611f21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f1890614407565b60405180910390fd5b670de0b6b3a764000081611f359190614155565b600a8190555050565b60085481565b6000611f4e61237d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611fdd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fd490614074565b60405180910390fd5b620186a06001611feb610c75565b611ff59190614155565b611fff91906141c6565b821015612041576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161203890614499565b60405180910390fd5b6103e8600561204e610c75565b6120589190614155565b61206291906141c6565b8211156120a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161209b9061452b565b60405180910390fd5b8160098190555060019050919050565b600c5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60095481565b600e5481565b61215561237d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146121e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121db90614074565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612253576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161224a906145bd565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60125481565b600a5481565b600080828461232e9190614289565b905083811015612373576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161236a90614629565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036123f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123eb906146bb565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612463576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161245a9061474d565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516125419190613da0565b60405180910390a3505050565b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167f86866eb41d8e92d6c25444e7c64d1afbb6521f9f48efd135bf4299ef7f9ce47560405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361265e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612655906147df565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036126cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126c490614871565b60405180910390fd5b600081036126e6576126e183836000613122565b6130b9565b600b60009054906101000a900460ff1615612be1576127036117bd565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561277157506127416117bd565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156127aa5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156127e4575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156127fd5750600560149054906101000a900460ff16155b15612be057600b60019054906101000a900460ff166128f757601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806128b75750601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6128f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128ed906148dd565b60405180910390fd5b5b601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561299a5750601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612a41576008548111156129e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129db9061496f565b60405180910390fd5b600a546129f08361127a565b826129fb9190614289565b1115612a3c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a33906149db565b60405180910390fd5b612bdf565b601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612ae45750601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612b3357600854811115612b2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b2590614a6d565b60405180910390fd5b612bde565b601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612bdd57600a54612b908361127a565b82612b9b9190614289565b1115612bdc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bd3906149db565b60405180910390fd5b5b5b5b5b5b6000612bec3061127a565b905060006009548210159050808015612c115750600b60029054906101000a900460ff165b8015612c2a5750600560149054906101000a900460ff16155b8015612c805750601a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612cd65750601860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612d2c5750601860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612d70576001600560146101000a81548160ff021916908315150217905550612d546133b5565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050601860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612e265750601860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612e3057600090505b600081156130a957601a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612e9357506000601054115b15612f6057612ec06064612eb26010548861369c90919063ffffffff16565b61371690919063ffffffff16565b905060105460125482612ed39190614155565b612edd91906141c6565b60156000828254612eee9190614289565b9250508190555060105460135482612f069190614155565b612f1091906141c6565b60166000828254612f219190614289565b9250508190555060105460115482612f399190614155565b612f4391906141c6565b60146000828254612f549190614289565b92505081905550613085565b601a60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612fbb57506000600c54115b1561308457612fe86064612fda600c548861369c90919063ffffffff16565b61371690919063ffffffff16565b9050600c54600e5482612ffb9190614155565b61300591906141c6565b601560008282546130169190614289565b92505081905550600c54600f548261302e9190614155565b61303891906141c6565b601660008282546130499190614289565b92505081905550600c54600d54826130619190614155565b61306b91906141c6565b6014600082825461307c9190614289565b925050819055505b5b600081111561309a57613099873083613122565b5b80856130a69190614a8d565b94505b6130b4878787613122565b505050505b505050565b6000838311158290613106576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130fd9190613bb9565b60405180910390fd5b50600083856131159190614a8d565b9050809150509392505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613191576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613188906147df565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613200576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131f790614871565b60405180910390fd5b61320b838383613760565b61327681604051806060016040528060268152602001614e8d602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546130be9092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613309816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461231f90919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516133a89190613da0565b60405180910390a3505050565b60006133c03061127a565b905060006016546014546015546133d79190614289565b6133e19190614289565b90506000808314806133f35750600082145b156134005750505061369a565b601460095461340f9190614155565b8311156134285760146009546134259190614155565b92505b60006002836015548661343b9190614155565b61344591906141c6565b61344f91906141c6565b90506000613466828661376590919063ffffffff16565b90506000479050613476826137af565b600061348b824761376590919063ffffffff16565b905060006134b6876134a86014548561369c90919063ffffffff16565b61371690919063ffffffff16565b905060006134e1886134d36016548661369c90919063ffffffff16565b61371690919063ffffffff16565b905060008183856134f29190614a8d565b6134fc9190614a8d565b9050600060158190555060006014819055506000601681905550600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168260405161355c90614af2565b60006040518083038185875af1925050503d8060008114613599576040519150601f19603f3d011682016040523d82523d6000602084013e61359e565b606091505b5050809850506000871180156135b45750600081115b15613601576135c387826139ec565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb56186826015546040516135f893929190614b07565b60405180910390a15b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161364790614af2565b60006040518083038185875af1925050503d8060008114613684576040519150601f19603f3d011682016040523d82523d6000602084013e613689565b606091505b505080985050505050505050505050505b565b60008083036136ae5760009050613710565b600082846136bc9190614155565b90508284826136cb91906141c6565b1461370b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161370290614bb0565b60405180910390fd5b809150505b92915050565b600061375883836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613ac6565b905092915050565b505050565b60006137a783836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506130be565b905092915050565b6000600267ffffffffffffffff8111156137cc576137cb614bd0565b5b6040519080825280602002602001820160405280156137fa5781602001602082028036833780820191505090505b509050308160008151811061381257613811614bff565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156138b7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138db9190614c43565b816001815181106138ef576138ee614bff565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613954307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84612385565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016139b6959493929190614d69565b600060405180830381600087803b1580156139d057600080fd5b505af11580156139e4573d6000803e3d6000fd5b505050505050565b613a17307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84612385565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008030426040518863ffffffff1660e01b8152600401613a7c96959493929190614dc3565b60606040518083038185885af1158015613a9a573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613abf9190614e39565b5050505050565b60008083118290613b0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613b049190613bb9565b60405180910390fd5b5060008385613b1c91906141c6565b9050809150509392505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613b63578082015181840152602081019050613b48565b60008484015250505050565b6000601f19601f8301169050919050565b6000613b8b82613b29565b613b958185613b34565b9350613ba5818560208601613b45565b613bae81613b6f565b840191505092915050565b60006020820190508181036000830152613bd38184613b80565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613c0b82613be0565b9050919050565b613c1b81613c00565b8114613c2657600080fd5b50565b600081359050613c3881613c12565b92915050565b6000819050919050565b613c5181613c3e565b8114613c5c57600080fd5b50565b600081359050613c6e81613c48565b92915050565b60008060408385031215613c8b57613c8a613bdb565b5b6000613c9985828601613c29565b9250506020613caa85828601613c5f565b9150509250929050565b60008115159050919050565b613cc981613cb4565b82525050565b6000602082019050613ce46000830184613cc0565b92915050565b600060208284031215613d0057613cff613bdb565b5b6000613d0e84828501613c29565b91505092915050565b6000819050919050565b6000613d3c613d37613d3284613be0565b613d17565b613be0565b9050919050565b6000613d4e82613d21565b9050919050565b6000613d6082613d43565b9050919050565b613d7081613d55565b82525050565b6000602082019050613d8b6000830184613d67565b92915050565b613d9a81613c3e565b82525050565b6000602082019050613db56000830184613d91565b92915050565b613dc481613cb4565b8114613dcf57600080fd5b50565b600081359050613de181613dbb565b92915050565b60008060408385031215613dfe57613dfd613bdb565b5b6000613e0c85828601613c29565b9250506020613e1d85828601613dd2565b9150509250929050565b600060208284031215613e3d57613e3c613bdb565b5b6000613e4b84828501613c5f565b91505092915050565b600080600060608486031215613e6d57613e6c613bdb565b5b6000613e7b86828701613c29565b9350506020613e8c86828701613c29565b9250506040613e9d86828701613c5f565b9150509250925092565b600060ff82169050919050565b613ebd81613ea7565b82525050565b6000602082019050613ed86000830184613eb4565b92915050565b613ee781613c00565b82525050565b6000602082019050613f026000830184613ede565b92915050565b600080600060608486031215613f2157613f20613bdb565b5b6000613f2f86828701613c5f565b9350506020613f4086828701613c5f565b9250506040613f5186828701613c5f565b9150509250925092565b600060208284031215613f7157613f70613bdb565b5b6000613f7f84828501613dd2565b91505092915050565b60008060408385031215613f9f57613f9e613bdb565b5b6000613fad85828601613c29565b9250506020613fbe85828601613c29565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061400f57607f821691505b60208210810361402257614021613fc8565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061405e602083613b34565b915061406982614028565b602082019050919050565b6000602082019050818103600083015261408d81614051565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f706172746e657273000000000000000000000000000000000000000000000000602082015250565b60006140f0602883613b34565b91506140fb82614094565b604082019050919050565b6000602082019050818103600083015261411f816140e3565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061416082613c3e565b915061416b83613c3e565b925082820261417981613c3e565b915082820484148315176141905761418f614126565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006141d182613c3e565b91506141dc83613c3e565b9250826141ec576141eb614197565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b6000614253602f83613b34565b915061425e826141f7565b604082019050919050565b6000602082019050818103600083015261428281614246565b9050919050565b600061429482613c3e565b915061429f83613c3e565b92508282019050808211156142b7576142b6614126565b5b92915050565b7f4d757374206b656570206665657320617420313025206f72206c657373000000600082015250565b60006142f3601d83613b34565b91506142fe826142bd565b602082019050919050565b60006020820190508181036000830152614322816142e6565b9050919050565b7f4d757374206b656570206665657320617420393025206f72206c657373000000600082015250565b600061435f601d83613b34565b915061436a82614329565b602082019050919050565b6000602082019050818103600083015261438e81614352565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b60006143f1602483613b34565b91506143fc82614395565b604082019050919050565b60006020820190508181036000830152614420816143e4565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b6000614483603583613b34565b915061448e82614427565b604082019050919050565b600060208201905081810360008301526144b281614476565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b6000614515603483613b34565b9150614520826144b9565b604082019050919050565b6000602082019050818103600083015261454481614508565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006145a7602683613b34565b91506145b28261454b565b604082019050919050565b600060208201905081810360008301526145d68161459a565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000614613601b83613b34565b915061461e826145dd565b602082019050919050565b6000602082019050818103600083015261464281614606565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006146a5602483613b34565b91506146b082614649565b604082019050919050565b600060208201905081810360008301526146d481614698565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614737602283613b34565b9150614742826146db565b604082019050919050565b600060208201905081810360008301526147668161472a565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006147c9602583613b34565b91506147d48261476d565b604082019050919050565b600060208201905081810360008301526147f8816147bc565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061485b602383613b34565b9150614866826147ff565b604082019050919050565b6000602082019050818103600083015261488a8161484e565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b60006148c7601683613b34565b91506148d282614891565b602082019050919050565b600060208201905081810360008301526148f6816148ba565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b6000614959603583613b34565b9150614964826148fd565b604082019050919050565b600060208201905081810360008301526149888161494c565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b60006149c5601383613b34565b91506149d08261498f565b602082019050919050565b600060208201905081810360008301526149f4816149b8565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b6000614a57603683613b34565b9150614a62826149fb565b604082019050919050565b60006020820190508181036000830152614a8681614a4a565b9050919050565b6000614a9882613c3e565b9150614aa383613c3e565b9250828203905081811115614abb57614aba614126565b5b92915050565b600081905092915050565b50565b6000614adc600083614ac1565b9150614ae782614acc565b600082019050919050565b6000614afd82614acf565b9150819050919050565b6000606082019050614b1c6000830186613d91565b614b296020830185613d91565b614b366040830184613d91565b949350505050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000614b9a602183613b34565b9150614ba582614b3e565b604082019050919050565b60006020820190508181036000830152614bc981614b8d565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050614c3d81613c12565b92915050565b600060208284031215614c5957614c58613bdb565b5b6000614c6784828501614c2e565b91505092915050565b6000819050919050565b6000614c95614c90614c8b84614c70565b613d17565b613c3e565b9050919050565b614ca581614c7a565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614ce081613c00565b82525050565b6000614cf28383614cd7565b60208301905092915050565b6000602082019050919050565b6000614d1682614cab565b614d208185614cb6565b9350614d2b83614cc7565b8060005b83811015614d5c578151614d438882614ce6565b9750614d4e83614cfe565b925050600181019050614d2f565b5085935050505092915050565b600060a082019050614d7e6000830188613d91565b614d8b6020830187614c9c565b8181036040830152614d9d8186614d0b565b9050614dac6060830185613ede565b614db96080830184613d91565b9695505050505050565b600060c082019050614dd86000830189613ede565b614de56020830188613d91565b614df26040830187614c9c565b614dff6060830186614c9c565b614e0c6080830185613ede565b614e1960a0830184613d91565b979650505050505050565b600081519050614e3381613c48565b92915050565b600080600060608486031215614e5257614e51613bdb565b5b6000614e6086828701614e24565b9350506020614e7186828701614e24565b9250506040614e8286828701614e24565b915050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212203982adf3341ca07a22370fcd147057e6a699af08f171d524bee239517629a9af64736f6c63430008110033
Deployed Bytecode Sourcemap
29341:13843:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7439:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9613:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30481:64;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29416:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8562:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36821:157;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30195:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36254:194;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30155:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34405:234;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10265:355;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8403:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11030:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29474:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29742:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36988:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30009:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29821:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8734:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21941:148;;;;;;;;;;;;;:::i;:::-;;33811:120;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34872:144;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29901:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35030:403;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33610:148;;;;;;;;;;;;;:::i;:::-;;21297:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30044:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35950:101;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30704:41;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7659:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29975:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30235:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30120:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11752:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9075:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36604:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29782:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36060:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35441:412;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34648:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29626:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34010:386;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29867:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9314:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29668:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29938:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22245:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30082:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29708:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7439:100;7493:13;7526:5;7519:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7439:100;:::o;9613:169::-;9696:4;9713:39;9722:12;:10;:12::i;:::-;9736:7;9745:6;9713:8;:39::i;:::-;9770:4;9763:11;;9613:169;;;;:::o;30481:64::-;;;;;;;;;;;;;;;;;;;;;;:::o;29416:51::-;;;:::o;8562:108::-;8623:7;8650:12;;8643:19;;8562:108;:::o;36821:157::-;21520:12;:10;:12::i;:::-;21510:22;;:6;;;;;;;;;;;:22;;;21502:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36928:9:::1;;;;;;;;;;;36900:38;;36917:9;36900:38;;;;;;;;;;;;36961:9;36949;;:21;;;;;;;;;;;;;;;;;;36821:157:::0;:::o;30195:33::-;;;;:::o;36254:194::-;21520:12;:10;:12::i;:::-;21510:22;;:6;;;;;;;;;;;:22;;;21502:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36344:13:::1;36336:21;;:4;:21;;::::0;36328:74:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;36416:24;36428:4;36434:5;36416:11;:24::i;:::-;36254:194:::0;;:::o;30155:33::-;;;;:::o;34405:234::-;21520:12;:10;:12::i;:::-;21510:22;;:6;;;;;;;;;;;:22;;;21502:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34524:4:::1;34518;34514:1;34498:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;34497:31;;;;:::i;:::-;34487:6;:41;;34479:101;;;;;;;;;;;;:::i;:::-;;;;;;;;;34624:6;34614;:17;;;;:::i;:::-;34591:20;:40;;;;34405:234:::0;:::o;10265:355::-;10405:4;10422:36;10432:6;10440:9;10451:6;10422:9;:36::i;:::-;10469:121;10478:6;10486:12;:10;:12::i;:::-;10500:89;10538:6;10500:89;;;;;;;;;;;;;;;;;:11;:19;10512:6;10500:19;;;;;;;;;;;;;;;:33;10520:12;:10;:12::i;:::-;10500:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;10469:8;:121::i;:::-;10608:4;10601:11;;10265:355;;;;;:::o;8403:93::-;8461:5;8486:2;8479:9;;8403:93;:::o;11030:218::-;11118:4;11135:83;11144:12;:10;:12::i;:::-;11158:7;11167:50;11206:10;11167:11;:25;11179:12;:10;:12::i;:::-;11167:25;;;;;;;;;;;;;;;:34;11193:7;11167:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;11135:8;:83::i;:::-;11236:4;11229:11;;11030:218;;;;:::o;29474:38::-;;;:::o;29742:33::-;;;;;;;;;;;;;:::o;36988:125::-;37053:4;37077:19;:28;37097:7;37077:28;;;;;;;;;;;;;;;;;;;;;;;;;37070:35;;36988:125;;;:::o;30009:28::-;;;;:::o;29821:30::-;;;;;;;;;;;;;:::o;8734:127::-;8808:7;8835:9;:18;8845:7;8835:18;;;;;;;;;;;;;;;;8828:25;;8734:127;;;:::o;21941:148::-;21520:12;:10;:12::i;:::-;21510:22;;:6;;;;;;;;;;;:22;;;21502:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22048:1:::1;22011:40;;22032:6;;;;;;;;;;;22011:40;;;;;;;;;;;;22079:1;22062:6;;:19;;;;;;;;;;;;;;;;;;21941:148::o:0;33811:120::-;33863:4;21520:12;:10;:12::i;:::-;21510:22;;:6;;;;;;;;;;;:22;;;21502:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;33896:5:::1;33879:14;;:22;;;;;;;;;;;;;;;;;;33919:4;33912:11;;33811:120:::0;:::o;34872:144::-;21520:12;:10;:12::i;:::-;21510:22;;:6;;;;;;;;;;;:22;;;21502:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35004:4:::1;34962:31;:39;34994:6;34962:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;34872:144:::0;;:::o;29901:30::-;;;;:::o;35030:403::-;21520:12;:10;:12::i;:::-;21510:22;;:6;;;;;;;;;;;:22;;;21502:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35192:7:::1;35180:9;:19;;;;35228:13;35210:15;:31;;;;35270:13;35252:15;:31;;;;35339:15;;35321;;35309:9;;:27;;;;:::i;:::-;:45;;;;:::i;:::-;35294:12;:60;;;;35389:2;35373:12;;:18;;35365:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;35030:403:::0;;;:::o;33610:148::-;21520:12;:10;:12::i;:::-;21510:22;;:6;;;;;;;;;;;:22;;;21502:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;33681:4:::1;33665:13;;:20;;;;;;;;;;;;;;;;;;33710:4;33696:11;;:18;;;;;;;;;;;;;;;;;;33738:12;33725:10;:25;;;;33610:148::o:0;21297:79::-;21335:7;21362:6;;;;;;;;;;;21355:13;;21297:79;:::o;30044:31::-;;;;:::o;35950:101::-;21520:12;:10;:12::i;:::-;21510:22;;:6;;;;;;;;;;;:22;;;21502:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36036:7:::1;36022:11;;:21;;;;;;;;;;;;;;;;;;35950:101:::0;:::o;30704:41::-;;;;;;;;;;;;;;;;;;;;;;:::o;7659:104::-;7715:13;7748:7;7741:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7659:104;:::o;29975:24::-;;;;:::o;30235:27::-;;;;:::o;30120:25::-;;;;:::o;11752:269::-;11845:4;11862:129;11871:12;:10;:12::i;:::-;11885:7;11894:96;11933:15;11894:96;;;;;;;;;;;;;;;;;:11;:25;11906:12;:10;:12::i;:::-;11894:25;;;;;;;;;;;;;;;:34;11920:7;11894:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;11862:8;:129::i;:::-;12009:4;12002:11;;11752:269;;;;:::o;9075:175::-;9161:4;9178:42;9188:12;:10;:12::i;:::-;9202:9;9213:6;9178:9;:42::i;:::-;9238:4;9231:11;;9075:175;;;;:::o;36604:208::-;21520:12;:10;:12::i;:::-;21510:22;;:6;;;;;;;;;;;:22;;;21502:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36741:15:::1;;;;;;;;;;;36698:59;;36721:18;36698:59;;;;;;;;;;;;36786:18;36768:15;;:36;;;;;;;;;;;;;;;;;;36604:208:::0;:::o;29782:32::-;;;;;;;;;;;;;:::o;36060:182::-;21520:12;:10;:12::i;:::-;21510:22;;:6;;;;;;;;;;;:22;;;21502:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36176:8:::1;36145:19;:28;36165:7;36145:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;36216:7;36200:34;;;36225:8;36200:34;;;;;;:::i;:::-;;;;;;;;36060:182:::0;;:::o;35441:412::-;21520:12;:10;:12::i;:::-;21510:22;;:6;;;;;;;;;;;:22;;;21502:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35605:7:::1;35592:10;:20;;;;35642:13;35623:16;:32;;;;35685:13;35666:16;:32;;;;35757:16;;35738;;35725:10;;:29;;;;:::i;:::-;:48;;;;:::i;:::-;35709:13;:64;;;;35809:2;35792:13;;:19;;35784:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;35441:412:::0;;;:::o;34648:215::-;21520:12;:10;:12::i;:::-;21510:22;;:6;;;;;;;;;;;:22;;;21502:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34770:4:::1;34764;34760:1;34744:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;34743:31;;;;:::i;:::-;34733:6;:41;;34725:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;34848:6;34838;:17;;;;:::i;:::-;34826:9;:29;;;;34648:215:::0;:::o;29626:35::-;;;;:::o;34010:386::-;34091:4;21520:12;:10;:12::i;:::-;21510:22;;:6;;;;;;;;;;;:22;;;21502:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34148:6:::1;34144:1;34128:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:26;;;;:::i;:::-;34115:9;:39;;34107:105;;;;;;;;;;;;:::i;:::-;;;;;;;;;34264:4;34260:1;34244:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;34231:9;:37;;34223:102;;;;;;;;;;;;:::i;:::-;;;;;;;;;34357:9;34336:18;:30;;;;34384:4;34377:11;;34010:386:::0;;;:::o;29867:27::-;;;;:::o;9314:151::-;9403:7;9430:11;:18;9442:5;9430:18;;;;;;;;;;;;;;;:27;9449:7;9430:27;;;;;;;;;;;;;;;;9423:34;;9314:151;;;;:::o;29668:33::-;;;;:::o;29938:30::-;;;;:::o;22245:244::-;21520:12;:10;:12::i;:::-;21510:22;;:6;;;;;;;;;;;:22;;;21502:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22354:1:::1;22334:22;;:8;:22;;::::0;22326:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;22444:8;22415:38;;22436:6;;;;;;;;;;;22415:38;;;;;;;;;;;;22473:8;22464:6;;:17;;;;;;;;;;;;;;;;;;22245:244:::0;:::o;30082:31::-;;;;:::o;29708:24::-;;;;:::o;16329:182::-;16387:7;16407:9;16423:1;16419;:5;;;;:::i;:::-;16407:17;;16448:1;16443;:6;;16435:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;16502:1;16495:8;;;16329:182;;;;:::o;130:98::-;183:7;210:10;203:17;;130:98;:::o;14948:381::-;15101:1;15084:19;;:5;:19;;;15076:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15182:1;15163:21;;:7;:21;;;15155:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15267:6;15237:11;:18;15249:5;15237:18;;;;;;;;;;;;;;;:27;15256:7;15237:27;;;;;;;;;;;;;;;:36;;;;15305:7;15289:32;;15298:5;15289:32;;;15314:6;15289:32;;;;;;:::i;:::-;;;;;;;;14948:381;;;:::o;36457:138::-;36540:5;36523:8;:14;36532:4;36523:14;;;;;;;;;;;;;;;;:22;;;;;;;;;;;;;;;;;;36581:5;36564:23;;36575:4;36564:23;;;;;;;;;;;;36457:138;;:::o;37122:3347::-;37270:1;37254:18;;:4;:18;;;37246:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37347:1;37333:16;;:2;:16;;;37325:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;37417:1;37407:6;:11;37404:92;;37435:28;37451:4;37457:2;37461:1;37435:15;:28::i;:::-;37478:7;;37404:92;37512:14;;;;;;;;;;;37509:1170;;;37572:7;:5;:7::i;:::-;37564:15;;:4;:15;;;;:49;;;;;37606:7;:5;:7::i;:::-;37600:13;;:2;:13;;;;37564:49;:86;;;;;37648:1;37634:16;;:2;:16;;;;37564:86;:128;;;;;37685:6;37671:21;;:2;:21;;;;37564:128;:158;;;;;37714:8;;;;;;;;;;;37713:9;37564:158;37542:1126;;;37760:13;;;;;;;;;;;37756:148;;37805:19;:25;37825:4;37805:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;37834:19;:23;37854:2;37834:23;;;;;;;;;;;;;;;;;;;;;;;;;37805:52;37797:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;37756:148;37957:8;:14;37966:4;37957:14;;;;;;;;;;;;;;;;;;;;;;;;;:54;;;;;37976:31;:35;38008:2;37976:35;;;;;;;;;;;;;;;;;;;;;;;;;37975:36;37957:54;37953:700;;;38058:20;;38048:6;:30;;38040:96;;;;;;;;;;;;:::i;:::-;;;;;;;;;38197:9;;38180:13;38190:2;38180:9;:13::i;:::-;38171:6;:22;;;;:::i;:::-;:35;;38163:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;37953:700;;;38280:8;:12;38289:2;38280:12;;;;;;;;;;;;;;;;;;;;;;;;;:54;;;;;38297:31;:37;38329:4;38297:37;;;;;;;;;;;;;;;;;;;;;;;;;38296:38;38280:54;38276:377;;;38381:20;;38371:6;:30;;38363:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;38276:377;;;38507:31;:35;38539:2;38507:35;;;;;;;;;;;;;;;;;;;;;;;;;38503:150;;38600:9;;38583:13;38593:2;38583:9;:13::i;:::-;38574:6;:22;;;;:::i;:::-;:35;;38566:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;38503:150;38276:377;37953:700;37542:1126;37509:1170;38692:28;38723:24;38741:4;38723:9;:24::i;:::-;38692:55;;38761:12;38800:18;;38776:20;:42;;38761:57;;38850:7;:35;;;;;38874:11;;;;;;;;;;;38850:35;:61;;;;;38903:8;;;;;;;;;;;38902:9;38850:61;:93;;;;;38929:8;:14;38938:4;38929:14;;;;;;;;;;;;;;;;;;;;;;;;;38928:15;38850:93;:136;;;;;38961:19;:25;38981:4;38961:25;;;;;;;;;;;;;;;;;;;;;;;;;38960:26;38850:136;:177;;;;;39004:19;:23;39024:2;39004:23;;;;;;;;;;;;;;;;;;;;;;;;;39003:24;38850:177;38832:311;;;39065:4;39054:8;;:15;;;;;;;;;;;;;;;;;;39087:10;:8;:10::i;:::-;39126:5;39115:8;;:16;;;;;;;;;;;;;;;;;;38832:311;39156:12;39172:8;;;;;;;;;;;39171:9;39156:24;;39282:19;:25;39302:4;39282:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;39311:19;:23;39331:2;39311:23;;;;;;;;;;;;;;;;;;;;;;;;;39282:52;39279:99;;;39361:5;39351:15;;39279:99;39391:12;39495:7;39492:923;;;39546:8;:12;39555:2;39546:12;;;;;;;;;;;;;;;;;;;;;;;;;:33;;;;;39578:1;39562:13;;:17;39546:33;39542:720;;;39606:34;39636:3;39606:25;39617:13;;39606:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;39599:41;;39707:13;;39688:16;;39681:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;39659:18;;:61;;;;;;;:::i;:::-;;;;;;;;39775:13;;39762:10;;39755:4;:17;;;;:::i;:::-;:33;;;;:::i;:::-;39739:12;;:49;;;;;;;:::i;:::-;;;;;;;;39855:13;;39836:16;;39829:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;39807:18;;:61;;;;;;;:::i;:::-;;;;;;;;39542:720;;;39929:8;:14;39938:4;39929:14;;;;;;;;;;;;;;;;;;;;;;;;;:34;;;;;39962:1;39947:12;;:16;39929:34;39926:336;;;39991:33;40020:3;39991:24;40002:12;;39991:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;39984:40;;40090:12;;40072:15;;40065:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;40043:18;;:59;;;;;;;:::i;:::-;;;;;;;;40156:12;;40144:9;;40137:4;:16;;;;:::i;:::-;:31;;;;:::i;:::-;40121:12;;:47;;;;;;;:::i;:::-;;;;;;;;40234:12;;40216:15;;40209:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;40187:18;;:59;;;;;;;:::i;:::-;;;;;;;;39926:336;39542:720;40289:1;40282:4;:8;40279:93;;;40314:42;40330:4;40344;40351;40314:15;:42::i;:::-;40279:93;40399:4;40389:14;;;;;:::i;:::-;;;39492:923;40428:33;40444:4;40450:2;40454:6;40428:15;:33::i;:::-;37235:3234;;;;37122:3347;;;;:::o;17235:193::-;17321:7;17354:1;17349;:6;;17357:12;17341:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;17381:9;17397:1;17393;:5;;;;:::i;:::-;17381:17;;17419:1;17412:8;;;17235:193;;;;;:::o;12512:575::-;12670:1;12652:20;;:6;:20;;;12644:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;12754:1;12733:23;;:9;:23;;;12725:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;12810:47;12831:6;12839:9;12850:6;12810:20;:47::i;:::-;12891:71;12913:6;12891:71;;;;;;;;;;;;;;;;;:9;:17;12901:6;12891:17;;;;;;;;;;;;;;;;:21;;:71;;;;;:::i;:::-;12871:9;:17;12881:6;12871:17;;;;;;;;;;;;;;;:91;;;;12996:32;13021:6;12996:9;:20;13006:9;12996:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;12973:9;:20;12983:9;12973:20;;;;;;;;;;;;;;;:55;;;;13061:9;13044:35;;13053:6;13044:35;;;13072:6;13044:35;;;;;;:::i;:::-;;;;;;;;12512:575;;;:::o;41613:1568::-;41652:23;41678:24;41696:4;41678:9;:24::i;:::-;41652:50;;41713:25;41783:12;;41762:18;;41741;;:39;;;;:::i;:::-;:54;;;;:::i;:::-;41713:82;;41806:12;41854:1;41835:15;:20;:46;;;;41880:1;41859:17;:22;41835:46;41832:60;;;41884:7;;;;;41832:60;41947:2;41926:18;;:23;;;;:::i;:::-;41908:15;:41;41905:111;;;42002:2;41981:18;;:23;;;;:::i;:::-;41963:41;;41905:111;42078:23;42163:1;42143:17;42122:18;;42104:15;:36;;;;:::i;:::-;:56;;;;:::i;:::-;:60;;;;:::i;:::-;42078:86;;42175:26;42204:36;42224:15;42204;:19;;:36;;;;:::i;:::-;42175:65;;42254:25;42282:21;42254:49;;42317:36;42334:18;42317:16;:36::i;:::-;42368:18;42389:44;42415:17;42389:21;:25;;:44;;;;:::i;:::-;42368:65;;42447:23;42473:57;42512:17;42473:34;42488:18;;42473:10;:14;;:34;;;;:::i;:::-;:38;;:57;;;;:::i;:::-;42447:83;;42541:17;42561:51;42594:17;42561:28;42576:12;;42561:10;:14;;:28;;;;:::i;:::-;:32;;:51;;;;:::i;:::-;42541:71;;42623:23;42680:9;42662:15;42649:10;:28;;;;:::i;:::-;:40;;;;:::i;:::-;42623:66;;42727:1;42706:18;:22;;;;42760:1;42739:18;:22;;;;42787:1;42772:12;:16;;;;42823:9;;;;;;;;;;;42815:23;;42846:9;42815:45;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42802:58;;;;;42895:1;42877:15;:19;:42;;;;;42918:1;42900:15;:19;42877:42;42874:210;;;42935:46;42948:15;42965;42935:12;:46::i;:::-;43001:71;43016:18;43036:15;43053:18;;43001:71;;;;;;;;:::i;:::-;;;;;;;;42874:210;43118:15;;;;;;;;;;;43110:29;;43147:21;43110:63;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43097:76;;;;;41641:1540;;;;;;;;;;41613:1568;:::o;17688:473::-;17746:7;17996:1;17991;:6;17987:47;;18021:1;18014:8;;;;17987:47;18047:9;18063:1;18059;:5;;;;:::i;:::-;18047:17;;18092:1;18087;18083;:5;;;;:::i;:::-;:10;18075:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;18152:1;18145:8;;;17688:473;;;;;:::o;18638:132::-;18696:7;18723:39;18727:1;18730;18723:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;18716:46;;18638:132;;;;:::o;15933:125::-;;;;:::o;16795:136::-;16853:7;16880:43;16884:1;16887;16880:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;16873:50;;16795:136;;;;:::o;40478:597::-;40607:21;40645:1;40631:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40607:40;;40676:4;40658;40663:1;40658:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;40702:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;40692:4;40697:1;40692:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;40738:62;40755:4;40770:15;40788:11;40738:8;:62::i;:::-;40840:15;:66;;;40921:11;40947:1;40991:4;41018;41038:15;40840:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40533:542;40478:597;:::o;41084:520::-;41232:62;41249:4;41264:15;41282:11;41232:8;:62::i;:::-;41338:15;:31;;;41377:9;41410:4;41430:11;41456:1;41499;41550:4;41570:15;41338:258;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;41084:520;;:::o;19267:279::-;19353:7;19385:1;19381;:5;19388:12;19373:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;19412:9;19428:1;19424;:5;;;;:::i;:::-;19412:17;;19537:1;19530:8;;;19267:279;;;;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;1430:117::-;1539:1;1536;1529:12;1676:126;1713:7;1753:42;1746:5;1742:54;1731:65;;1676:126;;;:::o;1808:96::-;1845:7;1874:24;1892:5;1874:24;:::i;:::-;1863:35;;1808:96;;;:::o;1910:122::-;1983:24;2001:5;1983:24;:::i;:::-;1976:5;1973:35;1963:63;;2022:1;2019;2012:12;1963:63;1910:122;:::o;2038:139::-;2084:5;2122:6;2109:20;2100:29;;2138:33;2165:5;2138:33;:::i;:::-;2038:139;;;;:::o;2183:77::-;2220:7;2249:5;2238:16;;2183:77;;;:::o;2266:122::-;2339:24;2357:5;2339:24;:::i;:::-;2332:5;2329:35;2319:63;;2378:1;2375;2368:12;2319:63;2266:122;:::o;2394:139::-;2440:5;2478:6;2465:20;2456:29;;2494:33;2521:5;2494:33;:::i;:::-;2394:139;;;;:::o;2539:474::-;2607:6;2615;2664:2;2652:9;2643:7;2639:23;2635:32;2632:119;;;2670:79;;:::i;:::-;2632:119;2790:1;2815:53;2860:7;2851:6;2840:9;2836:22;2815:53;:::i;:::-;2805:63;;2761:117;2917:2;2943:53;2988:7;2979:6;2968:9;2964:22;2943:53;:::i;:::-;2933:63;;2888:118;2539:474;;;;;:::o;3019:90::-;3053:7;3096:5;3089:13;3082:21;3071:32;;3019:90;;;:::o;3115:109::-;3196:21;3211:5;3196:21;:::i;:::-;3191:3;3184:34;3115:109;;:::o;3230:210::-;3317:4;3355:2;3344:9;3340:18;3332:26;;3368:65;3430:1;3419:9;3415:17;3406:6;3368:65;:::i;:::-;3230:210;;;;:::o;3446:329::-;3505:6;3554:2;3542:9;3533:7;3529:23;3525:32;3522:119;;;3560:79;;:::i;:::-;3522:119;3680:1;3705:53;3750:7;3741:6;3730:9;3726:22;3705:53;:::i;:::-;3695:63;;3651:117;3446:329;;;;:::o;3781:60::-;3809:3;3830:5;3823:12;;3781:60;;;:::o;3847:142::-;3897:9;3930:53;3948:34;3957:24;3975:5;3957:24;:::i;:::-;3948:34;:::i;:::-;3930:53;:::i;:::-;3917:66;;3847:142;;;:::o;3995:126::-;4045:9;4078:37;4109:5;4078:37;:::i;:::-;4065:50;;3995:126;;;:::o;4127:153::-;4204:9;4237:37;4268:5;4237:37;:::i;:::-;4224:50;;4127:153;;;:::o;4286:185::-;4400:64;4458:5;4400:64;:::i;:::-;4395:3;4388:77;4286:185;;:::o;4477:276::-;4597:4;4635:2;4624:9;4620:18;4612:26;;4648:98;4743:1;4732:9;4728:17;4719:6;4648:98;:::i;:::-;4477:276;;;;:::o;4759:118::-;4846:24;4864:5;4846:24;:::i;:::-;4841:3;4834:37;4759:118;;:::o;4883:222::-;4976:4;5014:2;5003:9;4999:18;4991:26;;5027:71;5095:1;5084:9;5080:17;5071:6;5027:71;:::i;:::-;4883:222;;;;:::o;5111:116::-;5181:21;5196:5;5181:21;:::i;:::-;5174:5;5171:32;5161:60;;5217:1;5214;5207:12;5161:60;5111:116;:::o;5233:133::-;5276:5;5314:6;5301:20;5292:29;;5330:30;5354:5;5330:30;:::i;:::-;5233:133;;;;:::o;5372:468::-;5437:6;5445;5494:2;5482:9;5473:7;5469:23;5465:32;5462:119;;;5500:79;;:::i;:::-;5462:119;5620:1;5645:53;5690:7;5681:6;5670:9;5666:22;5645:53;:::i;:::-;5635:63;;5591:117;5747:2;5773:50;5815:7;5806:6;5795:9;5791:22;5773:50;:::i;:::-;5763:60;;5718:115;5372:468;;;;;:::o;5846:329::-;5905:6;5954:2;5942:9;5933:7;5929:23;5925:32;5922:119;;;5960:79;;:::i;:::-;5922:119;6080:1;6105:53;6150:7;6141:6;6130:9;6126:22;6105:53;:::i;:::-;6095:63;;6051:117;5846:329;;;;:::o;6181:619::-;6258:6;6266;6274;6323:2;6311:9;6302:7;6298:23;6294:32;6291:119;;;6329:79;;:::i;:::-;6291:119;6449:1;6474:53;6519:7;6510:6;6499:9;6495:22;6474:53;:::i;:::-;6464:63;;6420:117;6576:2;6602:53;6647:7;6638:6;6627:9;6623:22;6602:53;:::i;:::-;6592:63;;6547:118;6704:2;6730:53;6775:7;6766:6;6755:9;6751:22;6730:53;:::i;:::-;6720:63;;6675:118;6181:619;;;;;:::o;6806:86::-;6841:7;6881:4;6874:5;6870:16;6859:27;;6806:86;;;:::o;6898:112::-;6981:22;6997:5;6981:22;:::i;:::-;6976:3;6969:35;6898:112;;:::o;7016:214::-;7105:4;7143:2;7132:9;7128:18;7120:26;;7156:67;7220:1;7209:9;7205:17;7196:6;7156:67;:::i;:::-;7016:214;;;;:::o;7236:118::-;7323:24;7341:5;7323:24;:::i;:::-;7318:3;7311:37;7236:118;;:::o;7360:222::-;7453:4;7491:2;7480:9;7476:18;7468:26;;7504:71;7572:1;7561:9;7557:17;7548:6;7504:71;:::i;:::-;7360:222;;;;:::o;7588:619::-;7665:6;7673;7681;7730:2;7718:9;7709:7;7705:23;7701:32;7698:119;;;7736:79;;:::i;:::-;7698:119;7856:1;7881:53;7926:7;7917:6;7906:9;7902:22;7881:53;:::i;:::-;7871:63;;7827:117;7983:2;8009:53;8054:7;8045:6;8034:9;8030:22;8009:53;:::i;:::-;7999:63;;7954:118;8111:2;8137:53;8182:7;8173:6;8162:9;8158:22;8137:53;:::i;:::-;8127:63;;8082:118;7588:619;;;;;:::o;8213:323::-;8269:6;8318:2;8306:9;8297:7;8293:23;8289:32;8286:119;;;8324:79;;:::i;:::-;8286:119;8444:1;8469:50;8511:7;8502:6;8491:9;8487:22;8469:50;:::i;:::-;8459:60;;8415:114;8213:323;;;;:::o;8542:474::-;8610:6;8618;8667:2;8655:9;8646:7;8642:23;8638:32;8635:119;;;8673:79;;:::i;:::-;8635:119;8793:1;8818:53;8863:7;8854:6;8843:9;8839:22;8818:53;:::i;:::-;8808:63;;8764:117;8920:2;8946:53;8991:7;8982:6;8971:9;8967:22;8946:53;:::i;:::-;8936:63;;8891:118;8542:474;;;;;:::o;9022:180::-;9070:77;9067:1;9060:88;9167:4;9164:1;9157:15;9191:4;9188:1;9181:15;9208:320;9252:6;9289:1;9283:4;9279:12;9269:22;;9336:1;9330:4;9326:12;9357:18;9347:81;;9413:4;9405:6;9401:17;9391:27;;9347:81;9475:2;9467:6;9464:14;9444:18;9441:38;9438:84;;9494:18;;:::i;:::-;9438:84;9259:269;9208:320;;;:::o;9534:182::-;9674:34;9670:1;9662:6;9658:14;9651:58;9534:182;:::o;9722:366::-;9864:3;9885:67;9949:2;9944:3;9885:67;:::i;:::-;9878:74;;9961:93;10050:3;9961:93;:::i;:::-;10079:2;10074:3;10070:12;10063:19;;9722:366;;;:::o;10094:419::-;10260:4;10298:2;10287:9;10283:18;10275:26;;10347:9;10341:4;10337:20;10333:1;10322:9;10318:17;10311:47;10375:131;10501:4;10375:131;:::i;:::-;10367:139;;10094:419;;;:::o;10519:227::-;10659:34;10655:1;10647:6;10643:14;10636:58;10728:10;10723:2;10715:6;10711:15;10704:35;10519:227;:::o;10752:366::-;10894:3;10915:67;10979:2;10974:3;10915:67;:::i;:::-;10908:74;;10991:93;11080:3;10991:93;:::i;:::-;11109:2;11104:3;11100:12;11093:19;;10752:366;;;:::o;11124:419::-;11290:4;11328:2;11317:9;11313:18;11305:26;;11377:9;11371:4;11367:20;11363:1;11352:9;11348:17;11341:47;11405:131;11531:4;11405:131;:::i;:::-;11397:139;;11124:419;;;:::o;11549:180::-;11597:77;11594:1;11587:88;11694:4;11691:1;11684:15;11718:4;11715:1;11708:15;11735:410;11775:7;11798:20;11816:1;11798:20;:::i;:::-;11793:25;;11832:20;11850:1;11832:20;:::i;:::-;11827:25;;11887:1;11884;11880:9;11909:30;11927:11;11909:30;:::i;:::-;11898:41;;12088:1;12079:7;12075:15;12072:1;12069:22;12049:1;12042:9;12022:83;11999:139;;12118:18;;:::i;:::-;11999:139;11783:362;11735:410;;;;:::o;12151:180::-;12199:77;12196:1;12189:88;12296:4;12293:1;12286:15;12320:4;12317:1;12310:15;12337:185;12377:1;12394:20;12412:1;12394:20;:::i;:::-;12389:25;;12428:20;12446:1;12428:20;:::i;:::-;12423:25;;12467:1;12457:35;;12472:18;;:::i;:::-;12457:35;12514:1;12511;12507:9;12502:14;;12337:185;;;;:::o;12528:234::-;12668:34;12664:1;12656:6;12652:14;12645:58;12737:17;12732:2;12724:6;12720:15;12713:42;12528:234;:::o;12768:366::-;12910:3;12931:67;12995:2;12990:3;12931:67;:::i;:::-;12924:74;;13007:93;13096:3;13007:93;:::i;:::-;13125:2;13120:3;13116:12;13109:19;;12768:366;;;:::o;13140:419::-;13306:4;13344:2;13333:9;13329:18;13321:26;;13393:9;13387:4;13383:20;13379:1;13368:9;13364:17;13357:47;13421:131;13547:4;13421:131;:::i;:::-;13413:139;;13140:419;;;:::o;13565:191::-;13605:3;13624:20;13642:1;13624:20;:::i;:::-;13619:25;;13658:20;13676:1;13658:20;:::i;:::-;13653:25;;13701:1;13698;13694:9;13687:16;;13722:3;13719:1;13716:10;13713:36;;;13729:18;;:::i;:::-;13713:36;13565:191;;;;:::o;13762:179::-;13902:31;13898:1;13890:6;13886:14;13879:55;13762:179;:::o;13947:366::-;14089:3;14110:67;14174:2;14169:3;14110:67;:::i;:::-;14103:74;;14186:93;14275:3;14186:93;:::i;:::-;14304:2;14299:3;14295:12;14288:19;;13947:366;;;:::o;14319:419::-;14485:4;14523:2;14512:9;14508:18;14500:26;;14572:9;14566:4;14562:20;14558:1;14547:9;14543:17;14536:47;14600:131;14726:4;14600:131;:::i;:::-;14592:139;;14319:419;;;:::o;14744:179::-;14884:31;14880:1;14872:6;14868:14;14861:55;14744:179;:::o;14929:366::-;15071:3;15092:67;15156:2;15151:3;15092:67;:::i;:::-;15085:74;;15168:93;15257:3;15168:93;:::i;:::-;15286:2;15281:3;15277:12;15270:19;;14929:366;;;:::o;15301:419::-;15467:4;15505:2;15494:9;15490:18;15482:26;;15554:9;15548:4;15544:20;15540:1;15529:9;15525:17;15518:47;15582:131;15708:4;15582:131;:::i;:::-;15574:139;;15301:419;;;:::o;15726:223::-;15866:34;15862:1;15854:6;15850:14;15843:58;15935:6;15930:2;15922:6;15918:15;15911:31;15726:223;:::o;15955:366::-;16097:3;16118:67;16182:2;16177:3;16118:67;:::i;:::-;16111:74;;16194:93;16283:3;16194:93;:::i;:::-;16312:2;16307:3;16303:12;16296:19;;15955:366;;;:::o;16327:419::-;16493:4;16531:2;16520:9;16516:18;16508:26;;16580:9;16574:4;16570:20;16566:1;16555:9;16551:17;16544:47;16608:131;16734:4;16608:131;:::i;:::-;16600:139;;16327:419;;;:::o;16752:240::-;16892:34;16888:1;16880:6;16876:14;16869:58;16961:23;16956:2;16948:6;16944:15;16937:48;16752:240;:::o;16998:366::-;17140:3;17161:67;17225:2;17220:3;17161:67;:::i;:::-;17154:74;;17237:93;17326:3;17237:93;:::i;:::-;17355:2;17350:3;17346:12;17339:19;;16998:366;;;:::o;17370:419::-;17536:4;17574:2;17563:9;17559:18;17551:26;;17623:9;17617:4;17613:20;17609:1;17598:9;17594:17;17587:47;17651:131;17777:4;17651:131;:::i;:::-;17643:139;;17370:419;;;:::o;17795:239::-;17935:34;17931:1;17923:6;17919:14;17912:58;18004:22;17999:2;17991:6;17987:15;17980:47;17795:239;:::o;18040:366::-;18182:3;18203:67;18267:2;18262:3;18203:67;:::i;:::-;18196:74;;18279:93;18368:3;18279:93;:::i;:::-;18397:2;18392:3;18388:12;18381:19;;18040:366;;;:::o;18412:419::-;18578:4;18616:2;18605:9;18601:18;18593:26;;18665:9;18659:4;18655:20;18651:1;18640:9;18636:17;18629:47;18693:131;18819:4;18693:131;:::i;:::-;18685:139;;18412:419;;;:::o;18837:225::-;18977:34;18973:1;18965:6;18961:14;18954:58;19046:8;19041:2;19033:6;19029:15;19022:33;18837:225;:::o;19068:366::-;19210:3;19231:67;19295:2;19290:3;19231:67;:::i;:::-;19224:74;;19307:93;19396:3;19307:93;:::i;:::-;19425:2;19420:3;19416:12;19409:19;;19068:366;;;:::o;19440:419::-;19606:4;19644:2;19633:9;19629:18;19621:26;;19693:9;19687:4;19683:20;19679:1;19668:9;19664:17;19657:47;19721:131;19847:4;19721:131;:::i;:::-;19713:139;;19440:419;;;:::o;19865:177::-;20005:29;20001:1;19993:6;19989:14;19982:53;19865:177;:::o;20048:366::-;20190:3;20211:67;20275:2;20270:3;20211:67;:::i;:::-;20204:74;;20287:93;20376:3;20287:93;:::i;:::-;20405:2;20400:3;20396:12;20389:19;;20048:366;;;:::o;20420:419::-;20586:4;20624:2;20613:9;20609:18;20601:26;;20673:9;20667:4;20663:20;20659:1;20648:9;20644:17;20637:47;20701:131;20827:4;20701:131;:::i;:::-;20693:139;;20420:419;;;:::o;20845:223::-;20985:34;20981:1;20973:6;20969:14;20962:58;21054:6;21049:2;21041:6;21037:15;21030:31;20845:223;:::o;21074:366::-;21216:3;21237:67;21301:2;21296:3;21237:67;:::i;:::-;21230:74;;21313:93;21402:3;21313:93;:::i;:::-;21431:2;21426:3;21422:12;21415:19;;21074:366;;;:::o;21446:419::-;21612:4;21650:2;21639:9;21635:18;21627:26;;21699:9;21693:4;21689:20;21685:1;21674:9;21670:17;21663:47;21727:131;21853:4;21727:131;:::i;:::-;21719:139;;21446:419;;;:::o;21871:221::-;22011:34;22007:1;21999:6;21995:14;21988:58;22080:4;22075:2;22067:6;22063:15;22056:29;21871:221;:::o;22098:366::-;22240:3;22261:67;22325:2;22320:3;22261:67;:::i;:::-;22254:74;;22337:93;22426:3;22337:93;:::i;:::-;22455:2;22450:3;22446:12;22439:19;;22098:366;;;:::o;22470:419::-;22636:4;22674:2;22663:9;22659:18;22651:26;;22723:9;22717:4;22713:20;22709:1;22698:9;22694:17;22687:47;22751:131;22877:4;22751:131;:::i;:::-;22743:139;;22470:419;;;:::o;22895:224::-;23035:34;23031:1;23023:6;23019:14;23012:58;23104:7;23099:2;23091:6;23087:15;23080:32;22895:224;:::o;23125:366::-;23267:3;23288:67;23352:2;23347:3;23288:67;:::i;:::-;23281:74;;23364:93;23453:3;23364:93;:::i;:::-;23482:2;23477:3;23473:12;23466:19;;23125:366;;;:::o;23497:419::-;23663:4;23701:2;23690:9;23686:18;23678:26;;23750:9;23744:4;23740:20;23736:1;23725:9;23721:17;23714:47;23778:131;23904:4;23778:131;:::i;:::-;23770:139;;23497:419;;;:::o;23922:222::-;24062:34;24058:1;24050:6;24046:14;24039:58;24131:5;24126:2;24118:6;24114:15;24107:30;23922:222;:::o;24150:366::-;24292:3;24313:67;24377:2;24372:3;24313:67;:::i;:::-;24306:74;;24389:93;24478:3;24389:93;:::i;:::-;24507:2;24502:3;24498:12;24491:19;;24150:366;;;:::o;24522:419::-;24688:4;24726:2;24715:9;24711:18;24703:26;;24775:9;24769:4;24765:20;24761:1;24750:9;24746:17;24739:47;24803:131;24929:4;24803:131;:::i;:::-;24795:139;;24522:419;;;:::o;24947:172::-;25087:24;25083:1;25075:6;25071:14;25064:48;24947:172;:::o;25125:366::-;25267:3;25288:67;25352:2;25347:3;25288:67;:::i;:::-;25281:74;;25364:93;25453:3;25364:93;:::i;:::-;25482:2;25477:3;25473:12;25466:19;;25125:366;;;:::o;25497:419::-;25663:4;25701:2;25690:9;25686:18;25678:26;;25750:9;25744:4;25740:20;25736:1;25725:9;25721:17;25714:47;25778:131;25904:4;25778:131;:::i;:::-;25770:139;;25497:419;;;:::o;25922:240::-;26062:34;26058:1;26050:6;26046:14;26039:58;26131:23;26126:2;26118:6;26114:15;26107:48;25922:240;:::o;26168:366::-;26310:3;26331:67;26395:2;26390:3;26331:67;:::i;:::-;26324:74;;26407:93;26496:3;26407:93;:::i;:::-;26525:2;26520:3;26516:12;26509:19;;26168:366;;;:::o;26540:419::-;26706:4;26744:2;26733:9;26729:18;26721:26;;26793:9;26787:4;26783:20;26779:1;26768:9;26764:17;26757:47;26821:131;26947:4;26821:131;:::i;:::-;26813:139;;26540:419;;;:::o;26965:169::-;27105:21;27101:1;27093:6;27089:14;27082:45;26965:169;:::o;27140:366::-;27282:3;27303:67;27367:2;27362:3;27303:67;:::i;:::-;27296:74;;27379:93;27468:3;27379:93;:::i;:::-;27497:2;27492:3;27488:12;27481:19;;27140:366;;;:::o;27512:419::-;27678:4;27716:2;27705:9;27701:18;27693:26;;27765:9;27759:4;27755:20;27751:1;27740:9;27736:17;27729:47;27793:131;27919:4;27793:131;:::i;:::-;27785:139;;27512:419;;;:::o;27937:241::-;28077:34;28073:1;28065:6;28061:14;28054:58;28146:24;28141:2;28133:6;28129:15;28122:49;27937:241;:::o;28184:366::-;28326:3;28347:67;28411:2;28406:3;28347:67;:::i;:::-;28340:74;;28423:93;28512:3;28423:93;:::i;:::-;28541:2;28536:3;28532:12;28525:19;;28184:366;;;:::o;28556:419::-;28722:4;28760:2;28749:9;28745:18;28737:26;;28809:9;28803:4;28799:20;28795:1;28784:9;28780:17;28773:47;28837:131;28963:4;28837:131;:::i;:::-;28829:139;;28556:419;;;:::o;28981:194::-;29021:4;29041:20;29059:1;29041:20;:::i;:::-;29036:25;;29075:20;29093:1;29075:20;:::i;:::-;29070:25;;29119:1;29116;29112:9;29104:17;;29143:1;29137:4;29134:11;29131:37;;;29148:18;;:::i;:::-;29131:37;28981:194;;;;:::o;29181:147::-;29282:11;29319:3;29304:18;;29181:147;;;;:::o;29334:114::-;;:::o;29454:398::-;29613:3;29634:83;29715:1;29710:3;29634:83;:::i;:::-;29627:90;;29726:93;29815:3;29726:93;:::i;:::-;29844:1;29839:3;29835:11;29828:18;;29454:398;;;:::o;29858:379::-;30042:3;30064:147;30207:3;30064:147;:::i;:::-;30057:154;;30228:3;30221:10;;29858:379;;;:::o;30243:442::-;30392:4;30430:2;30419:9;30415:18;30407:26;;30443:71;30511:1;30500:9;30496:17;30487:6;30443:71;:::i;:::-;30524:72;30592:2;30581:9;30577:18;30568:6;30524:72;:::i;:::-;30606;30674:2;30663:9;30659:18;30650:6;30606:72;:::i;:::-;30243:442;;;;;;:::o;30691:220::-;30831:34;30827:1;30819:6;30815:14;30808:58;30900:3;30895:2;30887:6;30883:15;30876:28;30691:220;:::o;30917:366::-;31059:3;31080:67;31144:2;31139:3;31080:67;:::i;:::-;31073:74;;31156:93;31245:3;31156:93;:::i;:::-;31274:2;31269:3;31265:12;31258:19;;30917:366;;;:::o;31289:419::-;31455:4;31493:2;31482:9;31478:18;31470:26;;31542:9;31536:4;31532:20;31528:1;31517:9;31513:17;31506:47;31570:131;31696:4;31570:131;:::i;:::-;31562:139;;31289:419;;;:::o;31714:180::-;31762:77;31759:1;31752:88;31859:4;31856:1;31849:15;31883:4;31880:1;31873:15;31900:180;31948:77;31945:1;31938:88;32045:4;32042:1;32035:15;32069:4;32066:1;32059:15;32086:143;32143:5;32174:6;32168:13;32159:22;;32190:33;32217:5;32190:33;:::i;:::-;32086:143;;;;:::o;32235:351::-;32305:6;32354:2;32342:9;32333:7;32329:23;32325:32;32322:119;;;32360:79;;:::i;:::-;32322:119;32480:1;32505:64;32561:7;32552:6;32541:9;32537:22;32505:64;:::i;:::-;32495:74;;32451:128;32235:351;;;;:::o;32592:85::-;32637:7;32666:5;32655:16;;32592:85;;;:::o;32683:158::-;32741:9;32774:61;32792:42;32801:32;32827:5;32801:32;:::i;:::-;32792:42;:::i;:::-;32774:61;:::i;:::-;32761:74;;32683:158;;;:::o;32847:147::-;32942:45;32981:5;32942:45;:::i;:::-;32937:3;32930:58;32847:147;;:::o;33000:114::-;33067:6;33101:5;33095:12;33085:22;;33000:114;;;:::o;33120:184::-;33219:11;33253:6;33248:3;33241:19;33293:4;33288:3;33284:14;33269:29;;33120:184;;;;:::o;33310:132::-;33377:4;33400:3;33392:11;;33430:4;33425:3;33421:14;33413:22;;33310:132;;;:::o;33448:108::-;33525:24;33543:5;33525:24;:::i;:::-;33520:3;33513:37;33448:108;;:::o;33562:179::-;33631:10;33652:46;33694:3;33686:6;33652:46;:::i;:::-;33730:4;33725:3;33721:14;33707:28;;33562:179;;;;:::o;33747:113::-;33817:4;33849;33844:3;33840:14;33832:22;;33747:113;;;:::o;33896:732::-;34015:3;34044:54;34092:5;34044:54;:::i;:::-;34114:86;34193:6;34188:3;34114:86;:::i;:::-;34107:93;;34224:56;34274:5;34224:56;:::i;:::-;34303:7;34334:1;34319:284;34344:6;34341:1;34338:13;34319:284;;;34420:6;34414:13;34447:63;34506:3;34491:13;34447:63;:::i;:::-;34440:70;;34533:60;34586:6;34533:60;:::i;:::-;34523:70;;34379:224;34366:1;34363;34359:9;34354:14;;34319:284;;;34323:14;34619:3;34612:10;;34020:608;;;33896:732;;;;:::o;34634:831::-;34897:4;34935:3;34924:9;34920:19;34912:27;;34949:71;35017:1;35006:9;35002:17;34993:6;34949:71;:::i;:::-;35030:80;35106:2;35095:9;35091:18;35082:6;35030:80;:::i;:::-;35157:9;35151:4;35147:20;35142:2;35131:9;35127:18;35120:48;35185:108;35288:4;35279:6;35185:108;:::i;:::-;35177:116;;35303:72;35371:2;35360:9;35356:18;35347:6;35303:72;:::i;:::-;35385:73;35453:3;35442:9;35438:19;35429:6;35385:73;:::i;:::-;34634:831;;;;;;;;:::o;35471:807::-;35720:4;35758:3;35747:9;35743:19;35735:27;;35772:71;35840:1;35829:9;35825:17;35816:6;35772:71;:::i;:::-;35853:72;35921:2;35910:9;35906:18;35897:6;35853:72;:::i;:::-;35935:80;36011:2;36000:9;35996:18;35987:6;35935:80;:::i;:::-;36025;36101:2;36090:9;36086:18;36077:6;36025:80;:::i;:::-;36115:73;36183:3;36172:9;36168:19;36159:6;36115:73;:::i;:::-;36198;36266:3;36255:9;36251:19;36242:6;36198:73;:::i;:::-;35471:807;;;;;;;;;:::o;36284:143::-;36341:5;36372:6;36366:13;36357:22;;36388:33;36415:5;36388:33;:::i;:::-;36284:143;;;;:::o;36433:663::-;36521:6;36529;36537;36586:2;36574:9;36565:7;36561:23;36557:32;36554:119;;;36592:79;;:::i;:::-;36554:119;36712:1;36737:64;36793:7;36784:6;36773:9;36769:22;36737:64;:::i;:::-;36727:74;;36683:128;36850:2;36876:64;36932:7;36923:6;36912:9;36908:22;36876:64;:::i;:::-;36866:74;;36821:129;36989:2;37015:64;37071:7;37062:6;37051:9;37047:22;37015:64;:::i;:::-;37005:74;;36960:129;36433:663;;;;;:::o
Swarm Source
ipfs://3982adf3341ca07a22370fcd147057e6a699af08f171d524bee239517629a9af
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.