Feature Tip: Add private address tag to any address under My Name Tag !
ERC-20
Humanity
Overview
Max Total Supply
1,000,000,000 EPF
Holders
142 (0.00%)
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Balance
0.000000000010293435 EPFValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
EmpaFeeToken
Compiler Version
v0.8.18+commit.87f61d96
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2024-07-21 */ // SPDX-License-Identifier: MIT pragma solidity 0.8.18; abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } interface IUniswapV2Pair { event Approval(address indexed owner, address indexed spender, uint value); event Transfer(address indexed from, address indexed to, uint value); function name() external pure returns (string memory); function symbol() external pure returns (string memory); function decimals() external pure returns (uint8); function totalSupply() external view returns (uint); function balanceOf(address owner) external view returns (uint); function allowance(address owner, address spender) external view returns (uint); function approve(address spender, uint value) external returns (bool); function transfer(address to, uint value) external returns (bool); function transferFrom(address from, address to, uint value) external returns (bool); function DOMAIN_SEPARATOR() external view returns (bytes32); function PERMIT_TYPEHASH() external pure returns (bytes32); function nonces(address owner) external view returns (uint); function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external; event Mint(address indexed sender, uint amount0, uint amount1); event Burn(address indexed sender, uint amount0, uint amount1, address indexed to); event Swap( address indexed sender, uint amount0In, uint amount1In, uint amount0Out, uint amount1Out, address indexed to ); event Sync(uint112 reserve0, uint112 reserve1); function MINIMUM_LIQUIDITY() external pure returns (uint); function factory() external view returns (address); function token0() external view returns (address); function token1() external view returns (address); function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast); function price0CumulativeLast() external view returns (uint); function price1CumulativeLast() external view returns (uint); function kLast() external view returns (uint); function mint(address to) external returns (uint liquidity); function burn(address to) external returns (uint amount0, uint amount1); function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external; function skim(address to) external; function sync() external; function initialize(address, address) external; } interface IUniswapV2Factory { event PairCreated(address indexed token0, address indexed token1, address pair, uint); function feeTo() external view returns (address); function feeToSetter() external view returns (address); function getPair(address tokenA, address tokenB) external view returns (address pair); function allPairs(uint) external view returns (address pair); function allPairsLength() external view returns (uint); function createPair(address tokenA, address tokenB) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; } interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address sender, address recipient, uint256 amount ) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); } interface IERC20Metadata is IERC20 { /** * @dev Returns the name of the token. */ function name() external view returns (string memory); /** * @dev Returns the symbol of the token. */ function symbol() external view returns (string memory); /** * @dev Returns the decimals places of the token. */ function decimals() external view returns (uint8); } contract ERC20 is Context, IERC20, IERC20Metadata { using SafeMath for uint256; mapping(address => uint256) private _balances; mapping(address => mapping(address => uint256)) private _allowances; uint256 private _totalSupply; string private _name; string private _symbol; /** * @dev Sets the values for {name} and {symbol}. * * The default value of {decimals} is 18. To select a different value for * {decimals} you should overload it. * * All two of these values are immutable: they can only be set once during * construction. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev Returns the name of the token. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev Returns the symbol of the token, usually a shorter version of the * name. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev Returns the number of decimals used to get its user representation. * For example, if `decimals` equals `2`, a balance of `505` tokens should * be displayed to a user as `5,05` (`505 / 10 ** 2`). * * Tokens usually opt for a value of 18, imitating the relationship between * Ether and Wei. This is the value {ERC20} uses, unless this function is * overridden; * * NOTE: This information is only used for _display_ purposes: it in * no way affects any of the arithmetic of the contract, including * {IERC20-balanceOf} and {IERC20-transfer}. */ function decimals() public view virtual override returns (uint8) { return 18; } /** * @dev See {IERC20-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _totalSupply; } /** * @dev See {IERC20-balanceOf}. */ function balanceOf(address account) public view virtual override returns (uint256) { return _balances[account]; } /** * @dev See {IERC20-transfer}. * * Requirements: * * - `recipient` cannot be the zero address. * - the caller must have a balance of at least `amount`. */ function transfer(address recipient, uint256 amount) public virtual override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } /** * @dev See {IERC20-allowance}. */ function allowance(address owner, address spender) public view virtual override returns (uint256) { return _allowances[owner][spender]; } /** * @dev See {IERC20-approve}. * * Requirements: * * - `spender` cannot be the zero address. */ function approve(address spender, uint256 amount) public virtual override returns (bool) { _approve(_msgSender(), spender, amount); return true; } /** * @dev See {IERC20-transferFrom}. * * Emits an {Approval} event indicating the updated allowance. This is not * required by the EIP. See the note at the beginning of {ERC20}. * * Requirements: * * - `sender` and `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. * - the caller must have allowance for ``sender``'s tokens of at least * `amount`. */ function transferFrom( address sender, address recipient, uint256 amount ) public virtual override returns (bool) { _transfer(sender, recipient, amount); _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance")); return true; } /** * @dev Atomically increases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. */ function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue)); return true; } /** * @dev Atomically decreases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. * - `spender` must have allowance for the caller of at least * `subtractedValue`. */ function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero")); return true; } /** * @dev Moves tokens `amount` from `sender` to `recipient`. * * This is internal function is equivalent to {transfer}, and can be used to * e.g. implement automatic token fees, slashing mechanisms, etc. * * Emits a {Transfer} event. * * Requirements: * * - `sender` cannot be the zero address. * - `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. */ function _transfer( address sender, address recipient, uint256 amount ) internal virtual { require(sender != address(0), "ERC20: transfer from the zero address"); require(recipient != address(0), "ERC20: transfer to the zero address"); _beforeTokenTransfer(sender, recipient, amount); _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance"); _balances[recipient] = _balances[recipient].add(amount); emit Transfer(sender, recipient, amount); } /** @dev Creates `amount` tokens and assigns them to `account`, increasing * the total supply. * * Emits a {Transfer} event with `from` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. */ function _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 EmpaFeeToken is ERC20, Ownable { using SafeMath for uint256; IUniswapV2Router02 public immutable uniswapV2Router; address public immutable uniswapV2Pair; address public constant deadAddress = address(0xdead); bool private swapping; address public EmpaFeeWallet; address public SaveTheChildrenWallet; address public DoctorsWithoutBordersWallet; uint256 public maxTransactionAmount; uint256 public swapTokensAtAmount; uint256 public maxWallet; bool public swapEnabled = true; uint256 public buyTotalFees; uint256 public buyEmpaFee; uint256 public buySaveTheChildrenFee; uint256 public buyLiquidityFee; uint256 public buyDoctorsWithoutBorders; uint256 public sellTotalFees; uint256 public sellEmpaFee; uint256 public sellSaveTheChildrenFee; uint256 public sellLiquidityFee; uint256 public sellDoctorsWithoutBorders; uint256 private tokensForEmpaFee; uint256 private tokensForSaveTheChildrenFee; uint256 private tokensForLiquidity; uint256 private tokensForBuyBack; /******************/ // exlcude from fees and max transaction amount mapping (address => bool) private _isExcludedFromFees; mapping (address => bool) public _isExcludedMaxTransactionAmount; // store addresses that a automatic market maker pairs. Any transfer *to* these addresses // could be subject to a maximum transfer amount mapping (address => bool) public automatedMarketMakerPairs; event UpdateUniswapV2Router(address indexed newAddress, address indexed oldAddress); event ExcludeFromFees(address indexed account, bool isExcluded); event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value); event EmpaFeeWalletUpdated(address indexed newWallet, address indexed oldWallet); event SaveTheChildrenWalletUpdated(address indexed newWallet, address indexed oldWallet); event DoctorsWithoutBordersWalletUpdated(address indexed newWallet, address indexed oldWallet); event SwapAndLiquify( uint256 tokensSwapped, uint256 ethReceived, uint256 tokensIntoLiquidity ); constructor() ERC20("EmpaFee", "EPF") { address newOwner = address(msg.sender); IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); excludeFromMaxTransaction(address(_uniswapV2Router), true); uniswapV2Router = _uniswapV2Router; uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH()); excludeFromMaxTransaction(address(uniswapV2Pair), true); _setAutomatedMarketMakerPair(address(uniswapV2Pair), true); uint256 _buyEmpaFee = 1; //1% uint256 _buySaveTheChildrenFee = 1; //1% uint256 _buyLiquidityFee = 0; uint256 _buyDoctorsWithoutBorders = 1; //1% uint256 _sellEmpaFee = 1; //1% uint256 _sellSaveTheChildrenFee = 1; //1% uint256 _sellLiquidityFee = 0; uint256 _sellDoctorsWithoutBorders = 1; //1% uint256 totalSupply = 1 * 1e9 * 1e18; maxTransactionAmount = totalSupply * 1 / 100; // 1% maxTransactionAmountTxn swapTokensAtAmount = totalSupply * 5 / 10000; // 0.05% swap wallet maxWallet = totalSupply * 5 / 100; // 5% max wallet buyEmpaFee = _buyEmpaFee; buySaveTheChildrenFee = _buySaveTheChildrenFee; buyLiquidityFee = _buyLiquidityFee; buyDoctorsWithoutBorders = _buyDoctorsWithoutBorders; buyTotalFees = buyEmpaFee + buySaveTheChildrenFee + buyLiquidityFee + buyDoctorsWithoutBorders; sellEmpaFee = _sellEmpaFee; sellSaveTheChildrenFee = _sellSaveTheChildrenFee; sellLiquidityFee = _sellLiquidityFee; sellDoctorsWithoutBorders = _sellDoctorsWithoutBorders; sellTotalFees = sellEmpaFee + sellLiquidityFee + sellDoctorsWithoutBorders; EmpaFeeWallet = address(0x7a7cAcDa7d5aec92feC15e248F6770Fd2275521a); // set as empafee wallet SaveTheChildrenWallet = address(0x4aAb2278a1325cFdbDF389e0664D100c74B95cf5); // set as save the children wallet DoctorsWithoutBordersWallet = address(0xe88D3382A7DDaCCc832d710605CFf46661Bc3c32); // set as doctors without borders wallet // exclude from paying fees or having max transaction amount excludeFromFees(newOwner, true); excludeFromFees(address(this), true); excludeFromFees(address(0xdead), true); excludeFromFees(DoctorsWithoutBordersWallet, true); excludeFromMaxTransaction(newOwner, true); excludeFromMaxTransaction(address(this), true); excludeFromMaxTransaction(DoctorsWithoutBordersWallet, 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(newOwner, totalSupply); transferOwnership(newOwner); } receive() external payable { } // 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 updateMaxAmount(uint256 newNum) external onlyOwner { require(newNum >= (totalSupply() * 5 / 1000)/1e18, "Cannot set maxTransactionAmount lower than 0.5%"); maxTransactionAmount = newNum * (10**18); } function excludeFromMaxTransaction(address updAds, bool isEx) public onlyOwner { _isExcludedMaxTransactionAmount[updAds] = isEx; } // only use to disable contract sales if absolutely necessary (emergency use only) function updateSwapEnabled(bool enabled) external onlyOwner(){ swapEnabled = enabled; } function updateBuyFees(uint256 _EmpaFeeWallet, uint256 _liquidityFee, uint256 _DoctorsWithoutBorders, uint256 _SaveTheChildrenFee) external onlyOwner { buyEmpaFee = _EmpaFeeWallet; buySaveTheChildrenFee = _SaveTheChildrenFee; buyLiquidityFee = _liquidityFee; buyDoctorsWithoutBorders = _DoctorsWithoutBorders; buyTotalFees = buyEmpaFee + buySaveTheChildrenFee + buyLiquidityFee + buyDoctorsWithoutBorders; // require(buyTotalFees <= 15, "Must keep fees at 15% or less"); } function updateSellFees(uint256 _EmpaFeeWallet, uint256 _liquidityFee, uint256 _DoctorsWithoutBorders, uint256 _SaveTheChildrenFee) external onlyOwner { sellEmpaFee = _EmpaFeeWallet; sellSaveTheChildrenFee = _SaveTheChildrenFee; sellLiquidityFee = _liquidityFee; sellDoctorsWithoutBorders = _DoctorsWithoutBorders; sellTotalFees = sellEmpaFee + sellSaveTheChildrenFee + sellLiquidityFee + sellDoctorsWithoutBorders; // require(sellTotalFees <= 30, "Must keep fees at 30% or less"); } function excludeFromFees(address account, bool excluded) public onlyOwner { _isExcludedFromFees[account] = excluded; emit ExcludeFromFees(account, excluded); } function setAutomatedMarketMakerPair(address pair, bool value) public onlyOwner { require(pair != uniswapV2Pair, "The pair cannot be removed from automatedMarketMakerPairs"); _setAutomatedMarketMakerPair(pair, value); } function _setAutomatedMarketMakerPair(address pair, bool value) private { automatedMarketMakerPairs[pair] = value; emit SetAutomatedMarketMakerPair(pair, value); } function updateEmpaFeeWallet (address newEmpaFeeWallet ) external onlyOwner { require(newEmpaFeeWallet != address(0), "zero address cant be set"); EmpaFeeWallet = newEmpaFeeWallet ; emit EmpaFeeWalletUpdated(newEmpaFeeWallet , EmpaFeeWallet ); } function updateSaveTheChildrenWallet(address newSaveTheChildrenWallet) external onlyOwner { require(newSaveTheChildrenWallet != address(0), "zero address cant be set"); SaveTheChildrenWallet = newSaveTheChildrenWallet; emit SaveTheChildrenWalletUpdated(newSaveTheChildrenWallet, SaveTheChildrenWallet); } function updateDoctorsWithoutBordersWallet(address newWallet) external onlyOwner { require(newWallet != address(0), "zero address cant be set"); DoctorsWithoutBordersWallet = newWallet; emit DoctorsWithoutBordersWalletUpdated(newWallet, DoctorsWithoutBordersWallet); } 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; } bool takeFee = !swapping; // if any account belongs to _isExcludedFromFee account then remove the fee if(_isExcludedFromFees[from] || _isExcludedFromFees[to]) { takeFee = false; } uint256 fees = 0; // only take fees on buys/sells, do not take on wallet transfers if(takeFee){ // on sell if (automatedMarketMakerPairs[to] && sellTotalFees > 0){ fees = amount.mul(sellTotalFees).div(100); tokensForLiquidity += fees * sellLiquidityFee / sellTotalFees; tokensForBuyBack += fees * sellDoctorsWithoutBorders / sellTotalFees; tokensForEmpaFee += fees * sellEmpaFee / sellTotalFees; tokensForSaveTheChildrenFee += fees * sellSaveTheChildrenFee / sellTotalFees; } // on buy else if(automatedMarketMakerPairs[from] && buyTotalFees > 0) { fees = amount.mul(buyTotalFees).div(100); tokensForLiquidity += fees * buyLiquidityFee / buyTotalFees; tokensForBuyBack += fees * buyDoctorsWithoutBorders / buyTotalFees; tokensForEmpaFee += fees * buyEmpaFee / buyTotalFees; tokensForBuyBack += fees * buySaveTheChildrenFee / buyTotalFees; } if(fees > 0){ super._transfer(from, address(this), fees); } amount -= fees; } if ( from != owner() && to != owner() && to != address(0) && to != address(0xdead) && !swapping ){ //when buy if (automatedMarketMakerPairs[from] && !_isExcludedMaxTransactionAmount[to]) { require(amount <= maxTransactionAmount, "Buy transfer amount exceeds the maxTransactionAmount."); require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded"); } //when sell else if (automatedMarketMakerPairs[to] && !_isExcludedMaxTransactionAmount[from]) { require(amount <= maxTransactionAmount, "Sell transfer amount exceeds the maxTransactionAmount."); } else { require((amount) + balanceOf(to) <= maxWallet, "Max wallet exceeded"); } } uint256 contractTokenBalance = balanceOf(address(this)); bool canSwap = contractTokenBalance >= swapTokensAtAmount; if( canSwap && swapEnabled && !swapping && !automatedMarketMakerPairs[from] && !_isExcludedFromFees[from] && !_isExcludedFromFees[to] ) { swapping = true; swapBack(); swapping = false; } 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 deadAddress, block.timestamp ); } function swapBack() private { uint256 contractBalance = balanceOf(address(this)); uint256 totalTokensToSwap = tokensForLiquidity + tokensForEmpaFee + tokensForBuyBack + tokensForSaveTheChildrenFee; if(contractBalance == 0 || totalTokensToSwap == 0) {return;} // Halve the amount of liquidity tokens uint256 liquidityTokens = contractBalance * tokensForLiquidity / totalTokensToSwap / 2; uint256 amountToSwapForETH = contractBalance.sub(liquidityTokens); uint256 initialETHBalance = address(this).balance; swapTokensForEth(amountToSwapForETH); uint256 ethBalance = address(this).balance.sub(initialETHBalance); uint256 ethForMarketing = ethBalance.mul(tokensForEmpaFee).div(totalTokensToSwap); uint256 ethForDonation = ethBalance.mul(tokensForSaveTheChildrenFee).div(totalTokensToSwap); uint256 ethForBuyBack = ethBalance.mul(tokensForBuyBack).div(totalTokensToSwap); uint256 ethForLiquidity = ethBalance - ethForMarketing - ethForDonation - ethForBuyBack; tokensForLiquidity = 0; tokensForEmpaFee = 0; tokensForSaveTheChildrenFee = 0; tokensForBuyBack = 0; (bool success,) = address(EmpaFeeWallet ).call{value: ethForMarketing}(""); (success,) = address(SaveTheChildrenWallet).call{value: ethForDonation}(""); if(liquidityTokens > 0 && ethForLiquidity > 0){ addLiquidity(liquidityTokens, ethForLiquidity); emit SwapAndLiquify(amountToSwapForETH, ethForLiquidity, liquidityTokens); } // keep leftover ETH for buyback (success,) = address(DoctorsWithoutBordersWallet).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":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"DoctorsWithoutBordersWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"EmpaFeeWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":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":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"SaveTheChildrenWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"inputs":[],"name":"DoctorsWithoutBordersWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"EmpaFeeWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SaveTheChildrenWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyDoctorsWithoutBorders","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyEmpaFee","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":"buySaveTheChildrenFee","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":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"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":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellDoctorsWithoutBorders","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellEmpaFee","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":"sellSaveTheChildrenFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"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":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_EmpaFeeWallet","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_DoctorsWithoutBorders","type":"uint256"},{"internalType":"uint256","name":"_SaveTheChildrenFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateDoctorsWithoutBordersWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newEmpaFeeWallet","type":"address"}],"name":"updateEmpaFeeWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newSaveTheChildrenWallet","type":"address"}],"name":"updateSaveTheChildrenWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_EmpaFeeWallet","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_DoctorsWithoutBorders","type":"uint256"},{"internalType":"uint256","name":"_SaveTheChildrenFee","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
60c06040526001600c60006101000a81548160ff0219169083151502179055503480156200002c57600080fd5b506040518060400160405280600781526020017f456d7061466565000000000000000000000000000000000000000000000000008152506040518060400160405280600381526020017f45504600000000000000000000000000000000000000000000000000000000008152508160039081620000aa919062001037565b508060049081620000bc919062001037565b5050506000620000d1620006e060201b60201c565b905080600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35060003390506000737a250d5630b4cf539739df2c5dacb4c659f2488d9050620001a1816001620006e860201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000221573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000247919062001188565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002af573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002d5919062001188565b6040518363ffffffff1660e01b8152600401620002f4929190620011cb565b6020604051808303816000875af115801562000314573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200033a919062001188565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250506200038260a0516001620006e860201b60201c565b6200039760a0516001620007e560201b60201c565b600060019050600060019050600080600190506000600190506000600190506000806001905060006b033b2e3c9fd0803ce800000090506064600182620003df919062001227565b620003eb9190620012a1565b60098190555061271060058262000403919062001227565b6200040f9190620012a1565b600a81905550606460058262000426919062001227565b620004329190620012a1565b600b8190555088600e8190555087600f819055508660108190555085601181905550601154601054600f54600e546200046c9190620012d9565b620004789190620012d9565b620004849190620012d9565b600d8190555084601381905550836014819055508260158190555081601681905550601654601554601354620004bb9190620012d9565b620004c79190620012d9565b601281905550737a7cacda7d5aec92fec15e248f6770fd2275521a600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550734aab2278a1325cfdbdf389e0664d100c74b95cf5600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073e88d3382a7ddaccc832d710605cff46661bc3c32600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620005df8b60016200088660201b60201c565b620005f23060016200088660201b60201c565b6200060761dead60016200088660201b60201c565b6200063c600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200088660201b60201c565b6200064f8b6001620006e860201b60201c565b62000662306001620006e860201b60201c565b62000697600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001620006e860201b60201c565b620006ac61dead6001620006e860201b60201c565b620006be8b82620009d360201b60201c565b620006cf8b62000b8160201b60201c565b50505050505050505050506200157b565b600033905090565b620006f8620006e060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146200078a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007819062001375565b60405180910390fd5b80601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b80601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b62000896620006e060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161462000928576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200091f9062001375565b60405180910390fd5b80601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051620009c79190620013b4565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000a45576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000a3c9062001421565b60405180910390fd5b62000a596000838362000d5560201b60201c565b62000a758160025462000d5a60201b620022c01790919060201c565b60028190555062000ad3816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205462000d5a60201b620022c01790919060201c565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000b75919062001454565b60405180910390a35050565b62000b91620006e060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161462000c23576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000c1a9062001375565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160362000c95576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000c8c90620014e7565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b505050565b600080828462000d6b9190620012d9565b90508381101562000db3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000daa9062001559565b60405180910390fd5b8091505092915050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000e3f57607f821691505b60208210810362000e555762000e5462000df7565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000ebf7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000e80565b62000ecb868362000e80565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000f1862000f1262000f0c8462000ee3565b62000eed565b62000ee3565b9050919050565b6000819050919050565b62000f348362000ef7565b62000f4c62000f438262000f1f565b84845462000e8d565b825550505050565b600090565b62000f6362000f54565b62000f7081848462000f29565b505050565b5b8181101562000f985762000f8c60008262000f59565b60018101905062000f76565b5050565b601f82111562000fe75762000fb18162000e5b565b62000fbc8462000e70565b8101602085101562000fcc578190505b62000fe462000fdb8562000e70565b83018262000f75565b50505b505050565b600082821c905092915050565b60006200100c6000198460080262000fec565b1980831691505092915050565b600062001027838362000ff9565b9150826002028217905092915050565b620010428262000dbd565b67ffffffffffffffff8111156200105e576200105d62000dc8565b5b6200106a825462000e26565b6200107782828562000f9c565b600060209050601f831160018114620010af57600084156200109a578287015190505b620010a6858262001019565b86555062001116565b601f198416620010bf8662000e5b565b60005b82811015620010e957848901518255600182019150602085019450602081019050620010c2565b8683101562001109578489015162001105601f89168262000ff9565b8355505b6001600288020188555050505b505050505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620011508262001123565b9050919050565b620011628162001143565b81146200116e57600080fd5b50565b600081519050620011828162001157565b92915050565b600060208284031215620011a157620011a06200111e565b5b6000620011b18482850162001171565b91505092915050565b620011c58162001143565b82525050565b6000604082019050620011e26000830185620011ba565b620011f16020830184620011ba565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000620012348262000ee3565b9150620012418362000ee3565b9250828202620012518162000ee3565b915082820484148315176200126b576200126a620011f8565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000620012ae8262000ee3565b9150620012bb8362000ee3565b925082620012ce57620012cd62001272565b5b828204905092915050565b6000620012e68262000ee3565b9150620012f38362000ee3565b92508282019050808211156200130e576200130d620011f8565b5b92915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006200135d60208362001314565b91506200136a8262001325565b602082019050919050565b6000602082019050818103600083015262001390816200134e565b9050919050565b60008115159050919050565b620013ae8162001397565b82525050565b6000602082019050620013cb6000830184620013a3565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062001409601f8362001314565b91506200141682620013d1565b602082019050919050565b600060208201905081810360008301526200143c81620013fa565b9050919050565b6200144e8162000ee3565b82525050565b60006020820190506200146b600083018462001443565b92915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000620014cf60268362001314565b9150620014dc8262001471565b604082019050919050565b600060208201905081810360008301526200150281620014c0565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b600062001541601b8362001314565b91506200154e8262001509565b602082019050919050565b60006020820190508181036000830152620015748162001532565b9050919050565b60805160a051614d39620015cb600039600081816111cf0152611ab3015260008181610d4b01528181613809015281816138ea01528181613911015281816139ad01526139d40152614d396000f3fe6080604052600436106102975760003560e01c806387fbd1741161015a578063d257b34f116100c1578063f11a24d31161007a578063f11a24d314610a4f578063f2fde38b14610a7a578063f637434214610aa3578063f8b45b0514610ace578063fe197ee814610af9578063ff96ca4214610b245761029e565b8063d257b34f1461092b578063d85ba06314610968578063dd62ed3e14610993578063e1d447ec146109d0578063e2f45605146109fb578063e7ad9fcd14610a265761029e565b8063a9059cbb11610113578063a9059cbb14610807578063b25afc0314610844578063b62496f51461086f578063c0246668146108ac578063c8c8ebe4146108d5578063c928f332146109005761029e565b806387fbd174146106f95780638da5cb5b14610722578063924de9b71461074d57806395d89b41146107765780639a7a23d6146107a1578063a457c2d7146107ca5761029e565b806339d5b471116101fe5780636a486a8e116101b75780636a486a8e146105fb5780636ddd17131461062657806370a0823114610651578063715018a61461068e5780637571336a146106a55780637fcbc507146106ce5761029e565b806339d5b471146104eb5780633ec620fc1461051657806349bd5a5e1461053f5780634fbee1931461056a5780634fe7ad0e146105a75780635ea8e83c146105d05761029e565b806323b872dd1161025057806323b872dd146103c757806327c8f835146104045780632e388b051461042f5780632e6ed7ef1461045a578063313ce5671461048357806339509351146104ae5761029e565b806306fdde03146102a3578063095ea7b3146102ce578063106b5da11461030b57806310d5de53146103345780631694505e1461037157806318160ddd1461039c5761029e565b3661029e57005b600080fd5b3480156102af57600080fd5b506102b8610b4f565b6040516102c59190613b13565b60405180910390f35b3480156102da57600080fd5b506102f560048036038101906102f09190613bce565b610be1565b6040516103029190613c29565b60405180910390f35b34801561031757600080fd5b50610332600480360381019061032d9190613c44565b610bff565b005b34801561034057600080fd5b5061035b60048036038101906103569190613c71565b610d29565b6040516103689190613c29565b60405180910390f35b34801561037d57600080fd5b50610386610d49565b6040516103939190613cfd565b60405180910390f35b3480156103a857600080fd5b506103b1610d6d565b6040516103be9190613d27565b60405180910390f35b3480156103d357600080fd5b506103ee60048036038101906103e99190613d42565b610d77565b6040516103fb9190613c29565b60405180910390f35b34801561041057600080fd5b50610419610e50565b6040516104269190613da4565b60405180910390f35b34801561043b57600080fd5b50610444610e56565b6040516104519190613d27565b60405180910390f35b34801561046657600080fd5b50610481600480360381019061047c9190613dbf565b610e5c565b005b34801561048f57600080fd5b50610498610f45565b6040516104a59190613e42565b60405180910390f35b3480156104ba57600080fd5b506104d560048036038101906104d09190613bce565b610f4e565b6040516104e29190613c29565b60405180910390f35b3480156104f757600080fd5b50610500611001565b60405161050d9190613d27565b60405180910390f35b34801561052257600080fd5b5061053d60048036038101906105389190613c71565b611007565b005b34801561054b57600080fd5b506105546111cd565b6040516105619190613da4565b60405180910390f35b34801561057657600080fd5b50610591600480360381019061058c9190613c71565b6111f1565b60405161059e9190613c29565b60405180910390f35b3480156105b357600080fd5b506105ce60048036038101906105c99190613c71565b611247565b005b3480156105dc57600080fd5b506105e561140d565b6040516105f29190613d27565b60405180910390f35b34801561060757600080fd5b50610610611413565b60405161061d9190613d27565b60405180910390f35b34801561063257600080fd5b5061063b611419565b6040516106489190613c29565b60405180910390f35b34801561065d57600080fd5b5061067860048036038101906106739190613c71565b61142c565b6040516106859190613d27565b60405180910390f35b34801561069a57600080fd5b506106a3611474565b005b3480156106b157600080fd5b506106cc60048036038101906106c79190613e89565b6115cc565b005b3480156106da57600080fd5b506106e36116be565b6040516106f09190613da4565b60405180910390f35b34801561070557600080fd5b50610720600480360381019061071b9190613c71565b6116e4565b005b34801561072e57600080fd5b506107376118aa565b6040516107449190613da4565b60405180910390f35b34801561075957600080fd5b50610774600480360381019061076f9190613ec9565b6118d4565b005b34801561078257600080fd5b5061078b611988565b6040516107989190613b13565b60405180910390f35b3480156107ad57600080fd5b506107c860048036038101906107c39190613e89565b611a1a565b005b3480156107d657600080fd5b506107f160048036038101906107ec9190613bce565b611b4d565b6040516107fe9190613c29565b60405180910390f35b34801561081357600080fd5b5061082e60048036038101906108299190613bce565b611c1a565b60405161083b9190613c29565b60405180910390f35b34801561085057600080fd5b50610859611c38565b6040516108669190613d27565b60405180910390f35b34801561087b57600080fd5b5061089660048036038101906108919190613c71565b611c3e565b6040516108a39190613c29565b60405180910390f35b3480156108b857600080fd5b506108d360048036038101906108ce9190613e89565b611c5e565b005b3480156108e157600080fd5b506108ea611d9e565b6040516108f79190613d27565b60405180910390f35b34801561090c57600080fd5b50610915611da4565b6040516109229190613d27565b60405180910390f35b34801561093757600080fd5b50610952600480360381019061094d9190613c44565b611daa565b60405161095f9190613c29565b60405180910390f35b34801561097457600080fd5b5061097d611f1a565b60405161098a9190613d27565b60405180910390f35b34801561099f57600080fd5b506109ba60048036038101906109b59190613ef6565b611f20565b6040516109c79190613d27565b60405180910390f35b3480156109dc57600080fd5b506109e5611fa7565b6040516109f29190613d27565b60405180910390f35b348015610a0757600080fd5b50610a10611fad565b604051610a1d9190613d27565b60405180910390f35b348015610a3257600080fd5b50610a4d6004803603810190610a489190613dbf565b611fb3565b005b348015610a5b57600080fd5b50610a6461209c565b604051610a719190613d27565b60405180910390f35b348015610a8657600080fd5b50610aa16004803603810190610a9c9190613c71565b6120a2565b005b348015610aaf57600080fd5b50610ab8612268565b604051610ac59190613d27565b60405180910390f35b348015610ada57600080fd5b50610ae361226e565b604051610af09190613d27565b60405180910390f35b348015610b0557600080fd5b50610b0e612274565b604051610b1b9190613da4565b60405180910390f35b348015610b3057600080fd5b50610b3961229a565b604051610b469190613da4565b60405180910390f35b606060038054610b5e90613f65565b80601f0160208091040260200160405190810160405280929190818152602001828054610b8a90613f65565b8015610bd75780601f10610bac57610100808354040283529160200191610bd7565b820191906000526020600020905b815481529060010190602001808311610bba57829003601f168201915b5050505050905090565b6000610bf5610bee61231e565b8484612326565b6001905092915050565b610c0761231e565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610c96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c8d90613fe2565b60405180910390fd5b670de0b6b3a76400006103e86005610cac610d6d565b610cb69190614031565b610cc091906140a2565b610cca91906140a2565b811015610d0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d0390614145565b60405180910390fd5b670de0b6b3a764000081610d209190614031565b60098190555050565b601c6020528060005260406000206000915054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b6000610d848484846124ef565b610e4584610d9061231e565b610e4085604051806060016040528060288152602001614cb760289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610df661231e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ec79092919063ffffffff16565b612326565b600190509392505050565b61dead81565b60145481565b610e6461231e565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610ef3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eea90613fe2565b60405180910390fd5b83600e8190555080600f819055508260108190555081601181905550601154601054600f54600e54610f259190614165565b610f2f9190614165565b610f399190614165565b600d8190555050505050565b60006012905090565b6000610ff7610f5b61231e565b84610ff28560016000610f6c61231e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546122c090919063ffffffff16565b612326565b6001905092915050565b60115481565b61100f61231e565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461109e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109590613fe2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361110d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611104906141e5565b60405180910390fd5b80600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f4f8f8bdda241ddb39623e9c97f643512e10e1741eeb80805f0e1b2a759df691560405160405180910390a350565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b61124f61231e565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146112de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112d590613fe2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361134d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611344906141e5565b60405180910390fd5b80600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167ffcef6b046aa3998efbaa05408eeb6c2f9f2e0e924bc4c57e1b4dbed7db5e88ce60405160405180910390a350565b60165481565b60125481565b600c60009054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61147c61231e565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461150b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161150290613fe2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6115d461231e565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611663576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165a90613fe2565b60405180910390fd5b80601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6116ec61231e565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461177b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161177290613fe2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036117ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117e1906141e5565b60405180910390fd5b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f10e845ae5a1b0559eadb2dc93a448618c28ec7e443a6581672efcb2be195d43e60405160405180910390a350565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6118dc61231e565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461196b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196290613fe2565b60405180910390fd5b80600c60006101000a81548160ff02191690831515021790555050565b60606004805461199790613f65565b80601f01602080910402602001604051908101604052809291908181526020018280546119c390613f65565b8015611a105780601f106119e557610100808354040283529160200191611a10565b820191906000526020600020905b8154815290600101906020018083116119f357829003601f168201915b5050505050905090565b611a2261231e565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ab1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aa890613fe2565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611b3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b3690614277565b60405180910390fd5b611b498282612f2b565b5050565b6000611c10611b5a61231e565b84611c0b85604051806060016040528060258152602001614cdf6025913960016000611b8461231e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ec79092919063ffffffff16565b612326565b6001905092915050565b6000611c2e611c2761231e565b84846124ef565b6001905092915050565b600f5481565b601d6020528060005260406000206000915054906101000a900460ff1681565b611c6661231e565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611cf5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cec90613fe2565b60405180910390fd5b80601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611d929190613c29565b60405180910390a25050565b60095481565b60135481565b6000611db461231e565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e3a90613fe2565b60405180910390fd5b620186a06001611e51610d6d565b611e5b9190614031565b611e6591906140a2565b821015611ea7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e9e90614309565b60405180910390fd5b6103e86005611eb4610d6d565b611ebe9190614031565b611ec891906140a2565b821115611f0a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f019061439b565b60405180910390fd5b81600a8190555060019050919050565b600d5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600e5481565b600a5481565b611fbb61231e565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461204a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161204190613fe2565b60405180910390fd5b8360138190555080601481905550826015819055508160168190555060165460155460145460135461207c9190614165565b6120869190614165565b6120909190614165565b60128190555050505050565b60105481565b6120aa61231e565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612139576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161213090613fe2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036121a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161219f9061442d565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60155481565b600b5481565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008082846122cf9190614165565b905083811015612314576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161230b90614499565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612395576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161238c9061452b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612404576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123fb906145bd565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516124e29190613d27565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361255e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125559061464f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036125cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125c4906146e1565b60405180910390fd5b600081036125e6576125e183836000612fcc565b612ec2565b6000600560149054906101000a900460ff16159050601b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061269c5750601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156126a657600090505b6000811561298557601d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561270957506000601254115b156128095761273660646127286012548661325f90919063ffffffff16565b6132d990919063ffffffff16565b9050601254601554826127499190614031565b61275391906140a2565b601960008282546127649190614165565b925050819055506012546016548261277c9190614031565b61278691906140a2565b601a60008282546127979190614165565b92505081905550601254601354826127af9190614031565b6127b991906140a2565b601760008282546127ca9190614165565b92505081905550601254601454826127e29190614031565b6127ec91906140a2565b601860008282546127fd9190614165565b92505081905550612961565b601d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561286457506000600d54115b15612960576128916064612883600d548661325f90919063ffffffff16565b6132d990919063ffffffff16565b9050600d54601054826128a49190614031565b6128ae91906140a2565b601960008282546128bf9190614165565b92505081905550600d54601154826128d79190614031565b6128e191906140a2565b601a60008282546128f29190614165565b92505081905550600d54600e548261290a9190614031565b61291491906140a2565b601760008282546129259190614165565b92505081905550600d54600f548261293d9190614031565b61294791906140a2565b601a60008282546129589190614165565b925050819055505b5b600081111561297657612975853083612fcc565b5b80836129829190614701565b92505b61298d6118aa565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16141580156129fb57506129cb6118aa565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b8015612a345750600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b8015612a6e575061dead73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b8015612a875750600560149054906101000a900460ff16155b15612d2357601d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612b2f5750601c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612bd657600954831115612b79576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b70906147a7565b60405180910390fd5b600b54612b858561142c565b84612b909190614165565b1115612bd1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bc890614813565b60405180910390fd5b612d22565b601d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612c795750601c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612cc857600954831115612cc3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cba906148a5565b60405180910390fd5b612d21565b600b54612cd48561142c565b84612cdf9190614165565b1115612d20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d1790614813565b60405180910390fd5b5b5b5b6000612d2e3061142c565b90506000600a548210159050808015612d535750600c60009054906101000a900460ff165b8015612d6c5750600560149054906101000a900460ff16155b8015612dc25750601d60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612e185750601b60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612e6e5750601b60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612eb2576001600560146101000a81548160ff021916908315150217905550612e96613323565b6000600560146101000a81548160ff0219169083151502179055505b612ebd878787612fcc565b505050505b505050565b6000838311158290612f0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f069190613b13565b60405180910390fd5b5060008385612f1e9190614701565b9050809150509392505050565b80601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361303b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130329061464f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036130aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130a1906146e1565b60405180910390fd5b6130b58383836136b8565b61312081604051806060016040528060268152602001614c91602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ec79092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506131b3816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546122c090919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516132529190613d27565b60405180910390a3505050565b600080830361327157600090506132d3565b6000828461327f9190614031565b905082848261328e91906140a2565b146132ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132c590614937565b60405180910390fd5b809150505b92915050565b600061331b83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506136bd565b905092915050565b600061332e3061142c565b90506000601854601a546017546019546133489190614165565b6133529190614165565b61335c9190614165565b9050600082148061336d5750600081145b156133795750506136b6565b60006002826019548561338c9190614031565b61339691906140a2565b6133a091906140a2565b905060006133b7828561372090919063ffffffff16565b905060004790506133c78261376a565b60006133dc824761372090919063ffffffff16565b90506000613407866133f96017548561325f90919063ffffffff16565b6132d990919063ffffffff16565b90506000613432876134246018548661325f90919063ffffffff16565b6132d990919063ffffffff16565b9050600061345d8861344f601a548761325f90919063ffffffff16565b6132d990919063ffffffff16565b905060008183858761346f9190614701565b6134799190614701565b6134839190614701565b90506000601981905550600060178190555060006018819055506000601a819055506000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16856040516134ed90614988565b60006040518083038185875af1925050503d806000811461352a576040519150601f19603f3d011682016040523d82523d6000602084013e61352f565b606091505b50509050600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168460405161357990614988565b60006040518083038185875af1925050503d80600081146135b6576040519150601f19603f3d011682016040523d82523d6000602084013e6135bb565b606091505b5050809150506000891180156135d15750600082115b1561361c576135e089836139a7565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb56188838b6040516136139392919061499d565b60405180910390a15b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161366290614988565b60006040518083038185875af1925050503d806000811461369f576040519150601f19603f3d011682016040523d82523d6000602084013e6136a4565b606091505b50508091505050505050505050505050505b565b505050565b60008083118290613704576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136fb9190613b13565b60405180910390fd5b506000838561371391906140a2565b9050809150509392505050565b600061376283836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612ec7565b905092915050565b6000600267ffffffffffffffff811115613787576137866149d4565b5b6040519080825280602002602001820160405280156137b55781602001602082028036833780820191505090505b50905030816000815181106137cd576137cc614a03565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613872573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138969190614a47565b816001815181106138aa576138a9614a03565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061390f307f000000000000000000000000000000000000000000000000000000000000000084612326565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613971959493929190614b6d565b600060405180830381600087803b15801561398b57600080fd5b505af115801561399f573d6000803e3d6000fd5b505050505050565b6139d2307f000000000000000000000000000000000000000000000000000000000000000084612326565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008061dead426040518863ffffffff1660e01b8152600401613a3996959493929190614bc7565b60606040518083038185885af1158015613a57573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613a7c9190614c3d565b5050505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613abd578082015181840152602081019050613aa2565b60008484015250505050565b6000601f19601f8301169050919050565b6000613ae582613a83565b613aef8185613a8e565b9350613aff818560208601613a9f565b613b0881613ac9565b840191505092915050565b60006020820190508181036000830152613b2d8184613ada565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613b6582613b3a565b9050919050565b613b7581613b5a565b8114613b8057600080fd5b50565b600081359050613b9281613b6c565b92915050565b6000819050919050565b613bab81613b98565b8114613bb657600080fd5b50565b600081359050613bc881613ba2565b92915050565b60008060408385031215613be557613be4613b35565b5b6000613bf385828601613b83565b9250506020613c0485828601613bb9565b9150509250929050565b60008115159050919050565b613c2381613c0e565b82525050565b6000602082019050613c3e6000830184613c1a565b92915050565b600060208284031215613c5a57613c59613b35565b5b6000613c6884828501613bb9565b91505092915050565b600060208284031215613c8757613c86613b35565b5b6000613c9584828501613b83565b91505092915050565b6000819050919050565b6000613cc3613cbe613cb984613b3a565b613c9e565b613b3a565b9050919050565b6000613cd582613ca8565b9050919050565b6000613ce782613cca565b9050919050565b613cf781613cdc565b82525050565b6000602082019050613d126000830184613cee565b92915050565b613d2181613b98565b82525050565b6000602082019050613d3c6000830184613d18565b92915050565b600080600060608486031215613d5b57613d5a613b35565b5b6000613d6986828701613b83565b9350506020613d7a86828701613b83565b9250506040613d8b86828701613bb9565b9150509250925092565b613d9e81613b5a565b82525050565b6000602082019050613db96000830184613d95565b92915050565b60008060008060808587031215613dd957613dd8613b35565b5b6000613de787828801613bb9565b9450506020613df887828801613bb9565b9350506040613e0987828801613bb9565b9250506060613e1a87828801613bb9565b91505092959194509250565b600060ff82169050919050565b613e3c81613e26565b82525050565b6000602082019050613e576000830184613e33565b92915050565b613e6681613c0e565b8114613e7157600080fd5b50565b600081359050613e8381613e5d565b92915050565b60008060408385031215613ea057613e9f613b35565b5b6000613eae85828601613b83565b9250506020613ebf85828601613e74565b9150509250929050565b600060208284031215613edf57613ede613b35565b5b6000613eed84828501613e74565b91505092915050565b60008060408385031215613f0d57613f0c613b35565b5b6000613f1b85828601613b83565b9250506020613f2c85828601613b83565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613f7d57607f821691505b602082108103613f9057613f8f613f36565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613fcc602083613a8e565b9150613fd782613f96565b602082019050919050565b60006020820190508181036000830152613ffb81613fbf565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061403c82613b98565b915061404783613b98565b925082820261405581613b98565b9150828204841483151761406c5761406b614002565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006140ad82613b98565b91506140b883613b98565b9250826140c8576140c7614073565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e35250000000000000000000000000000000000602082015250565b600061412f602f83613a8e565b915061413a826140d3565b604082019050919050565b6000602082019050818103600083015261415e81614122565b9050919050565b600061417082613b98565b915061417b83613b98565b925082820190508082111561419357614192614002565b5b92915050565b7f7a65726f20616464726573732063616e74206265207365740000000000000000600082015250565b60006141cf601883613a8e565b91506141da82614199565b602082019050919050565b600060208201905081810360008301526141fe816141c2565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000614261603983613a8e565b915061426c82614205565b604082019050919050565b6000602082019050818103600083015261429081614254565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b60006142f3603583613a8e565b91506142fe82614297565b604082019050919050565b60006020820190508181036000830152614322816142e6565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b6000614385603483613a8e565b915061439082614329565b604082019050919050565b600060208201905081810360008301526143b481614378565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614417602683613a8e565b9150614422826143bb565b604082019050919050565b600060208201905081810360008301526144468161440a565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000614483601b83613a8e565b915061448e8261444d565b602082019050919050565b600060208201905081810360008301526144b281614476565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614515602483613a8e565b9150614520826144b9565b604082019050919050565b6000602082019050818103600083015261454481614508565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006145a7602283613a8e565b91506145b28261454b565b604082019050919050565b600060208201905081810360008301526145d68161459a565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614639602583613a8e565b9150614644826145dd565b604082019050919050565b600060208201905081810360008301526146688161462c565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006146cb602383613a8e565b91506146d68261466f565b604082019050919050565b600060208201905081810360008301526146fa816146be565b9050919050565b600061470c82613b98565b915061471783613b98565b925082820390508181111561472f5761472e614002565b5b92915050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b6000614791603583613a8e565b915061479c82614735565b604082019050919050565b600060208201905081810360008301526147c081614784565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b60006147fd601383613a8e565b9150614808826147c7565b602082019050919050565b6000602082019050818103600083015261482c816147f0565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b600061488f603683613a8e565b915061489a82614833565b604082019050919050565b600060208201905081810360008301526148be81614882565b9050919050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000614921602183613a8e565b915061492c826148c5565b604082019050919050565b6000602082019050818103600083015261495081614914565b9050919050565b600081905092915050565b50565b6000614972600083614957565b915061497d82614962565b600082019050919050565b600061499382614965565b9150819050919050565b60006060820190506149b26000830186613d18565b6149bf6020830185613d18565b6149cc6040830184613d18565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050614a4181613b6c565b92915050565b600060208284031215614a5d57614a5c613b35565b5b6000614a6b84828501614a32565b91505092915050565b6000819050919050565b6000614a99614a94614a8f84614a74565b613c9e565b613b98565b9050919050565b614aa981614a7e565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614ae481613b5a565b82525050565b6000614af68383614adb565b60208301905092915050565b6000602082019050919050565b6000614b1a82614aaf565b614b248185614aba565b9350614b2f83614acb565b8060005b83811015614b60578151614b478882614aea565b9750614b5283614b02565b925050600181019050614b33565b5085935050505092915050565b600060a082019050614b826000830188613d18565b614b8f6020830187614aa0565b8181036040830152614ba18186614b0f565b9050614bb06060830185613d95565b614bbd6080830184613d18565b9695505050505050565b600060c082019050614bdc6000830189613d95565b614be96020830188613d18565b614bf66040830187614aa0565b614c036060830186614aa0565b614c106080830185613d95565b614c1d60a0830184613d18565b979650505050505050565b600081519050614c3781613ba2565b92915050565b600080600060608486031215614c5657614c55613b35565b5b6000614c6486828701614c28565b9350506020614c7586828701614c28565b9250506040614c8686828701614c28565b915050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212207999466ac02b7838087cc28784b593221efc99dd04c7e883a75f4a7f8ce67ac564736f6c63430008120033
Deployed Bytecode
0x6080604052600436106102975760003560e01c806387fbd1741161015a578063d257b34f116100c1578063f11a24d31161007a578063f11a24d314610a4f578063f2fde38b14610a7a578063f637434214610aa3578063f8b45b0514610ace578063fe197ee814610af9578063ff96ca4214610b245761029e565b8063d257b34f1461092b578063d85ba06314610968578063dd62ed3e14610993578063e1d447ec146109d0578063e2f45605146109fb578063e7ad9fcd14610a265761029e565b8063a9059cbb11610113578063a9059cbb14610807578063b25afc0314610844578063b62496f51461086f578063c0246668146108ac578063c8c8ebe4146108d5578063c928f332146109005761029e565b806387fbd174146106f95780638da5cb5b14610722578063924de9b71461074d57806395d89b41146107765780639a7a23d6146107a1578063a457c2d7146107ca5761029e565b806339d5b471116101fe5780636a486a8e116101b75780636a486a8e146105fb5780636ddd17131461062657806370a0823114610651578063715018a61461068e5780637571336a146106a55780637fcbc507146106ce5761029e565b806339d5b471146104eb5780633ec620fc1461051657806349bd5a5e1461053f5780634fbee1931461056a5780634fe7ad0e146105a75780635ea8e83c146105d05761029e565b806323b872dd1161025057806323b872dd146103c757806327c8f835146104045780632e388b051461042f5780632e6ed7ef1461045a578063313ce5671461048357806339509351146104ae5761029e565b806306fdde03146102a3578063095ea7b3146102ce578063106b5da11461030b57806310d5de53146103345780631694505e1461037157806318160ddd1461039c5761029e565b3661029e57005b600080fd5b3480156102af57600080fd5b506102b8610b4f565b6040516102c59190613b13565b60405180910390f35b3480156102da57600080fd5b506102f560048036038101906102f09190613bce565b610be1565b6040516103029190613c29565b60405180910390f35b34801561031757600080fd5b50610332600480360381019061032d9190613c44565b610bff565b005b34801561034057600080fd5b5061035b60048036038101906103569190613c71565b610d29565b6040516103689190613c29565b60405180910390f35b34801561037d57600080fd5b50610386610d49565b6040516103939190613cfd565b60405180910390f35b3480156103a857600080fd5b506103b1610d6d565b6040516103be9190613d27565b60405180910390f35b3480156103d357600080fd5b506103ee60048036038101906103e99190613d42565b610d77565b6040516103fb9190613c29565b60405180910390f35b34801561041057600080fd5b50610419610e50565b6040516104269190613da4565b60405180910390f35b34801561043b57600080fd5b50610444610e56565b6040516104519190613d27565b60405180910390f35b34801561046657600080fd5b50610481600480360381019061047c9190613dbf565b610e5c565b005b34801561048f57600080fd5b50610498610f45565b6040516104a59190613e42565b60405180910390f35b3480156104ba57600080fd5b506104d560048036038101906104d09190613bce565b610f4e565b6040516104e29190613c29565b60405180910390f35b3480156104f757600080fd5b50610500611001565b60405161050d9190613d27565b60405180910390f35b34801561052257600080fd5b5061053d60048036038101906105389190613c71565b611007565b005b34801561054b57600080fd5b506105546111cd565b6040516105619190613da4565b60405180910390f35b34801561057657600080fd5b50610591600480360381019061058c9190613c71565b6111f1565b60405161059e9190613c29565b60405180910390f35b3480156105b357600080fd5b506105ce60048036038101906105c99190613c71565b611247565b005b3480156105dc57600080fd5b506105e561140d565b6040516105f29190613d27565b60405180910390f35b34801561060757600080fd5b50610610611413565b60405161061d9190613d27565b60405180910390f35b34801561063257600080fd5b5061063b611419565b6040516106489190613c29565b60405180910390f35b34801561065d57600080fd5b5061067860048036038101906106739190613c71565b61142c565b6040516106859190613d27565b60405180910390f35b34801561069a57600080fd5b506106a3611474565b005b3480156106b157600080fd5b506106cc60048036038101906106c79190613e89565b6115cc565b005b3480156106da57600080fd5b506106e36116be565b6040516106f09190613da4565b60405180910390f35b34801561070557600080fd5b50610720600480360381019061071b9190613c71565b6116e4565b005b34801561072e57600080fd5b506107376118aa565b6040516107449190613da4565b60405180910390f35b34801561075957600080fd5b50610774600480360381019061076f9190613ec9565b6118d4565b005b34801561078257600080fd5b5061078b611988565b6040516107989190613b13565b60405180910390f35b3480156107ad57600080fd5b506107c860048036038101906107c39190613e89565b611a1a565b005b3480156107d657600080fd5b506107f160048036038101906107ec9190613bce565b611b4d565b6040516107fe9190613c29565b60405180910390f35b34801561081357600080fd5b5061082e60048036038101906108299190613bce565b611c1a565b60405161083b9190613c29565b60405180910390f35b34801561085057600080fd5b50610859611c38565b6040516108669190613d27565b60405180910390f35b34801561087b57600080fd5b5061089660048036038101906108919190613c71565b611c3e565b6040516108a39190613c29565b60405180910390f35b3480156108b857600080fd5b506108d360048036038101906108ce9190613e89565b611c5e565b005b3480156108e157600080fd5b506108ea611d9e565b6040516108f79190613d27565b60405180910390f35b34801561090c57600080fd5b50610915611da4565b6040516109229190613d27565b60405180910390f35b34801561093757600080fd5b50610952600480360381019061094d9190613c44565b611daa565b60405161095f9190613c29565b60405180910390f35b34801561097457600080fd5b5061097d611f1a565b60405161098a9190613d27565b60405180910390f35b34801561099f57600080fd5b506109ba60048036038101906109b59190613ef6565b611f20565b6040516109c79190613d27565b60405180910390f35b3480156109dc57600080fd5b506109e5611fa7565b6040516109f29190613d27565b60405180910390f35b348015610a0757600080fd5b50610a10611fad565b604051610a1d9190613d27565b60405180910390f35b348015610a3257600080fd5b50610a4d6004803603810190610a489190613dbf565b611fb3565b005b348015610a5b57600080fd5b50610a6461209c565b604051610a719190613d27565b60405180910390f35b348015610a8657600080fd5b50610aa16004803603810190610a9c9190613c71565b6120a2565b005b348015610aaf57600080fd5b50610ab8612268565b604051610ac59190613d27565b60405180910390f35b348015610ada57600080fd5b50610ae361226e565b604051610af09190613d27565b60405180910390f35b348015610b0557600080fd5b50610b0e612274565b604051610b1b9190613da4565b60405180910390f35b348015610b3057600080fd5b50610b3961229a565b604051610b469190613da4565b60405180910390f35b606060038054610b5e90613f65565b80601f0160208091040260200160405190810160405280929190818152602001828054610b8a90613f65565b8015610bd75780601f10610bac57610100808354040283529160200191610bd7565b820191906000526020600020905b815481529060010190602001808311610bba57829003601f168201915b5050505050905090565b6000610bf5610bee61231e565b8484612326565b6001905092915050565b610c0761231e565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610c96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c8d90613fe2565b60405180910390fd5b670de0b6b3a76400006103e86005610cac610d6d565b610cb69190614031565b610cc091906140a2565b610cca91906140a2565b811015610d0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d0390614145565b60405180910390fd5b670de0b6b3a764000081610d209190614031565b60098190555050565b601c6020528060005260406000206000915054906101000a900460ff1681565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b6000610d848484846124ef565b610e4584610d9061231e565b610e4085604051806060016040528060288152602001614cb760289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610df661231e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ec79092919063ffffffff16565b612326565b600190509392505050565b61dead81565b60145481565b610e6461231e565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610ef3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eea90613fe2565b60405180910390fd5b83600e8190555080600f819055508260108190555081601181905550601154601054600f54600e54610f259190614165565b610f2f9190614165565b610f399190614165565b600d8190555050505050565b60006012905090565b6000610ff7610f5b61231e565b84610ff28560016000610f6c61231e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546122c090919063ffffffff16565b612326565b6001905092915050565b60115481565b61100f61231e565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461109e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109590613fe2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361110d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611104906141e5565b60405180910390fd5b80600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f4f8f8bdda241ddb39623e9c97f643512e10e1741eeb80805f0e1b2a759df691560405160405180910390a350565b7f000000000000000000000000b3c50bc5e58e80364cba10043c0da764adf26a9c81565b6000601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b61124f61231e565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146112de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112d590613fe2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361134d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611344906141e5565b60405180910390fd5b80600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167ffcef6b046aa3998efbaa05408eeb6c2f9f2e0e924bc4c57e1b4dbed7db5e88ce60405160405180910390a350565b60165481565b60125481565b600c60009054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61147c61231e565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461150b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161150290613fe2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6115d461231e565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611663576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165a90613fe2565b60405180910390fd5b80601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6116ec61231e565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461177b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161177290613fe2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036117ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117e1906141e5565b60405180910390fd5b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f10e845ae5a1b0559eadb2dc93a448618c28ec7e443a6581672efcb2be195d43e60405160405180910390a350565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6118dc61231e565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461196b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196290613fe2565b60405180910390fd5b80600c60006101000a81548160ff02191690831515021790555050565b60606004805461199790613f65565b80601f01602080910402602001604051908101604052809291908181526020018280546119c390613f65565b8015611a105780601f106119e557610100808354040283529160200191611a10565b820191906000526020600020905b8154815290600101906020018083116119f357829003601f168201915b5050505050905090565b611a2261231e565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ab1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aa890613fe2565b60405180910390fd5b7f000000000000000000000000b3c50bc5e58e80364cba10043c0da764adf26a9c73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611b3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b3690614277565b60405180910390fd5b611b498282612f2b565b5050565b6000611c10611b5a61231e565b84611c0b85604051806060016040528060258152602001614cdf6025913960016000611b8461231e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ec79092919063ffffffff16565b612326565b6001905092915050565b6000611c2e611c2761231e565b84846124ef565b6001905092915050565b600f5481565b601d6020528060005260406000206000915054906101000a900460ff1681565b611c6661231e565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611cf5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cec90613fe2565b60405180910390fd5b80601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611d929190613c29565b60405180910390a25050565b60095481565b60135481565b6000611db461231e565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e3a90613fe2565b60405180910390fd5b620186a06001611e51610d6d565b611e5b9190614031565b611e6591906140a2565b821015611ea7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e9e90614309565b60405180910390fd5b6103e86005611eb4610d6d565b611ebe9190614031565b611ec891906140a2565b821115611f0a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f019061439b565b60405180910390fd5b81600a8190555060019050919050565b600d5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600e5481565b600a5481565b611fbb61231e565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461204a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161204190613fe2565b60405180910390fd5b8360138190555080601481905550826015819055508160168190555060165460155460145460135461207c9190614165565b6120869190614165565b6120909190614165565b60128190555050505050565b60105481565b6120aa61231e565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612139576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161213090613fe2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036121a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161219f9061442d565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60155481565b600b5481565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008082846122cf9190614165565b905083811015612314576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161230b90614499565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612395576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161238c9061452b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612404576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123fb906145bd565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516124e29190613d27565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361255e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125559061464f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036125cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125c4906146e1565b60405180910390fd5b600081036125e6576125e183836000612fcc565b612ec2565b6000600560149054906101000a900460ff16159050601b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061269c5750601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156126a657600090505b6000811561298557601d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561270957506000601254115b156128095761273660646127286012548661325f90919063ffffffff16565b6132d990919063ffffffff16565b9050601254601554826127499190614031565b61275391906140a2565b601960008282546127649190614165565b925050819055506012546016548261277c9190614031565b61278691906140a2565b601a60008282546127979190614165565b92505081905550601254601354826127af9190614031565b6127b991906140a2565b601760008282546127ca9190614165565b92505081905550601254601454826127e29190614031565b6127ec91906140a2565b601860008282546127fd9190614165565b92505081905550612961565b601d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561286457506000600d54115b15612960576128916064612883600d548661325f90919063ffffffff16565b6132d990919063ffffffff16565b9050600d54601054826128a49190614031565b6128ae91906140a2565b601960008282546128bf9190614165565b92505081905550600d54601154826128d79190614031565b6128e191906140a2565b601a60008282546128f29190614165565b92505081905550600d54600e548261290a9190614031565b61291491906140a2565b601760008282546129259190614165565b92505081905550600d54600f548261293d9190614031565b61294791906140a2565b601a60008282546129589190614165565b925050819055505b5b600081111561297657612975853083612fcc565b5b80836129829190614701565b92505b61298d6118aa565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16141580156129fb57506129cb6118aa565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b8015612a345750600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b8015612a6e575061dead73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b8015612a875750600560149054906101000a900460ff16155b15612d2357601d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612b2f5750601c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612bd657600954831115612b79576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b70906147a7565b60405180910390fd5b600b54612b858561142c565b84612b909190614165565b1115612bd1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bc890614813565b60405180910390fd5b612d22565b601d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612c795750601c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612cc857600954831115612cc3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cba906148a5565b60405180910390fd5b612d21565b600b54612cd48561142c565b84612cdf9190614165565b1115612d20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d1790614813565b60405180910390fd5b5b5b5b6000612d2e3061142c565b90506000600a548210159050808015612d535750600c60009054906101000a900460ff165b8015612d6c5750600560149054906101000a900460ff16155b8015612dc25750601d60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612e185750601b60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612e6e5750601b60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612eb2576001600560146101000a81548160ff021916908315150217905550612e96613323565b6000600560146101000a81548160ff0219169083151502179055505b612ebd878787612fcc565b505050505b505050565b6000838311158290612f0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f069190613b13565b60405180910390fd5b5060008385612f1e9190614701565b9050809150509392505050565b80601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361303b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130329061464f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036130aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130a1906146e1565b60405180910390fd5b6130b58383836136b8565b61312081604051806060016040528060268152602001614c91602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ec79092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506131b3816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546122c090919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516132529190613d27565b60405180910390a3505050565b600080830361327157600090506132d3565b6000828461327f9190614031565b905082848261328e91906140a2565b146132ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132c590614937565b60405180910390fd5b809150505b92915050565b600061331b83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506136bd565b905092915050565b600061332e3061142c565b90506000601854601a546017546019546133489190614165565b6133529190614165565b61335c9190614165565b9050600082148061336d5750600081145b156133795750506136b6565b60006002826019548561338c9190614031565b61339691906140a2565b6133a091906140a2565b905060006133b7828561372090919063ffffffff16565b905060004790506133c78261376a565b60006133dc824761372090919063ffffffff16565b90506000613407866133f96017548561325f90919063ffffffff16565b6132d990919063ffffffff16565b90506000613432876134246018548661325f90919063ffffffff16565b6132d990919063ffffffff16565b9050600061345d8861344f601a548761325f90919063ffffffff16565b6132d990919063ffffffff16565b905060008183858761346f9190614701565b6134799190614701565b6134839190614701565b90506000601981905550600060178190555060006018819055506000601a819055506000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16856040516134ed90614988565b60006040518083038185875af1925050503d806000811461352a576040519150601f19603f3d011682016040523d82523d6000602084013e61352f565b606091505b50509050600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168460405161357990614988565b60006040518083038185875af1925050503d80600081146135b6576040519150601f19603f3d011682016040523d82523d6000602084013e6135bb565b606091505b5050809150506000891180156135d15750600082115b1561361c576135e089836139a7565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb56188838b6040516136139392919061499d565b60405180910390a15b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161366290614988565b60006040518083038185875af1925050503d806000811461369f576040519150601f19603f3d011682016040523d82523d6000602084013e6136a4565b606091505b50508091505050505050505050505050505b565b505050565b60008083118290613704576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136fb9190613b13565b60405180910390fd5b506000838561371391906140a2565b9050809150509392505050565b600061376283836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612ec7565b905092915050565b6000600267ffffffffffffffff811115613787576137866149d4565b5b6040519080825280602002602001820160405280156137b55781602001602082028036833780820191505090505b50905030816000815181106137cd576137cc614a03565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613872573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138969190614a47565b816001815181106138aa576138a9614a03565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061390f307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84612326565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613971959493929190614b6d565b600060405180830381600087803b15801561398b57600080fd5b505af115801561399f573d6000803e3d6000fd5b505050505050565b6139d2307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84612326565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008061dead426040518863ffffffff1660e01b8152600401613a3996959493929190614bc7565b60606040518083038185885af1158015613a57573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613a7c9190614c3d565b5050505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613abd578082015181840152602081019050613aa2565b60008484015250505050565b6000601f19601f8301169050919050565b6000613ae582613a83565b613aef8185613a8e565b9350613aff818560208601613a9f565b613b0881613ac9565b840191505092915050565b60006020820190508181036000830152613b2d8184613ada565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613b6582613b3a565b9050919050565b613b7581613b5a565b8114613b8057600080fd5b50565b600081359050613b9281613b6c565b92915050565b6000819050919050565b613bab81613b98565b8114613bb657600080fd5b50565b600081359050613bc881613ba2565b92915050565b60008060408385031215613be557613be4613b35565b5b6000613bf385828601613b83565b9250506020613c0485828601613bb9565b9150509250929050565b60008115159050919050565b613c2381613c0e565b82525050565b6000602082019050613c3e6000830184613c1a565b92915050565b600060208284031215613c5a57613c59613b35565b5b6000613c6884828501613bb9565b91505092915050565b600060208284031215613c8757613c86613b35565b5b6000613c9584828501613b83565b91505092915050565b6000819050919050565b6000613cc3613cbe613cb984613b3a565b613c9e565b613b3a565b9050919050565b6000613cd582613ca8565b9050919050565b6000613ce782613cca565b9050919050565b613cf781613cdc565b82525050565b6000602082019050613d126000830184613cee565b92915050565b613d2181613b98565b82525050565b6000602082019050613d3c6000830184613d18565b92915050565b600080600060608486031215613d5b57613d5a613b35565b5b6000613d6986828701613b83565b9350506020613d7a86828701613b83565b9250506040613d8b86828701613bb9565b9150509250925092565b613d9e81613b5a565b82525050565b6000602082019050613db96000830184613d95565b92915050565b60008060008060808587031215613dd957613dd8613b35565b5b6000613de787828801613bb9565b9450506020613df887828801613bb9565b9350506040613e0987828801613bb9565b9250506060613e1a87828801613bb9565b91505092959194509250565b600060ff82169050919050565b613e3c81613e26565b82525050565b6000602082019050613e576000830184613e33565b92915050565b613e6681613c0e565b8114613e7157600080fd5b50565b600081359050613e8381613e5d565b92915050565b60008060408385031215613ea057613e9f613b35565b5b6000613eae85828601613b83565b9250506020613ebf85828601613e74565b9150509250929050565b600060208284031215613edf57613ede613b35565b5b6000613eed84828501613e74565b91505092915050565b60008060408385031215613f0d57613f0c613b35565b5b6000613f1b85828601613b83565b9250506020613f2c85828601613b83565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613f7d57607f821691505b602082108103613f9057613f8f613f36565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613fcc602083613a8e565b9150613fd782613f96565b602082019050919050565b60006020820190508181036000830152613ffb81613fbf565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061403c82613b98565b915061404783613b98565b925082820261405581613b98565b9150828204841483151761406c5761406b614002565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006140ad82613b98565b91506140b883613b98565b9250826140c8576140c7614073565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e35250000000000000000000000000000000000602082015250565b600061412f602f83613a8e565b915061413a826140d3565b604082019050919050565b6000602082019050818103600083015261415e81614122565b9050919050565b600061417082613b98565b915061417b83613b98565b925082820190508082111561419357614192614002565b5b92915050565b7f7a65726f20616464726573732063616e74206265207365740000000000000000600082015250565b60006141cf601883613a8e565b91506141da82614199565b602082019050919050565b600060208201905081810360008301526141fe816141c2565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000614261603983613a8e565b915061426c82614205565b604082019050919050565b6000602082019050818103600083015261429081614254565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b60006142f3603583613a8e565b91506142fe82614297565b604082019050919050565b60006020820190508181036000830152614322816142e6565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b6000614385603483613a8e565b915061439082614329565b604082019050919050565b600060208201905081810360008301526143b481614378565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614417602683613a8e565b9150614422826143bb565b604082019050919050565b600060208201905081810360008301526144468161440a565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000614483601b83613a8e565b915061448e8261444d565b602082019050919050565b600060208201905081810360008301526144b281614476565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614515602483613a8e565b9150614520826144b9565b604082019050919050565b6000602082019050818103600083015261454481614508565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006145a7602283613a8e565b91506145b28261454b565b604082019050919050565b600060208201905081810360008301526145d68161459a565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614639602583613a8e565b9150614644826145dd565b604082019050919050565b600060208201905081810360008301526146688161462c565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006146cb602383613a8e565b91506146d68261466f565b604082019050919050565b600060208201905081810360008301526146fa816146be565b9050919050565b600061470c82613b98565b915061471783613b98565b925082820390508181111561472f5761472e614002565b5b92915050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b6000614791603583613a8e565b915061479c82614735565b604082019050919050565b600060208201905081810360008301526147c081614784565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b60006147fd601383613a8e565b9150614808826147c7565b602082019050919050565b6000602082019050818103600083015261482c816147f0565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b600061488f603683613a8e565b915061489a82614833565b604082019050919050565b600060208201905081810360008301526148be81614882565b9050919050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000614921602183613a8e565b915061492c826148c5565b604082019050919050565b6000602082019050818103600083015261495081614914565b9050919050565b600081905092915050565b50565b6000614972600083614957565b915061497d82614962565b600082019050919050565b600061499382614965565b9150819050919050565b60006060820190506149b26000830186613d18565b6149bf6020830185613d18565b6149cc6040830184613d18565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050614a4181613b6c565b92915050565b600060208284031215614a5d57614a5c613b35565b5b6000614a6b84828501614a32565b91505092915050565b6000819050919050565b6000614a99614a94614a8f84614a74565b613c9e565b613b98565b9050919050565b614aa981614a7e565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614ae481613b5a565b82525050565b6000614af68383614adb565b60208301905092915050565b6000602082019050919050565b6000614b1a82614aaf565b614b248185614aba565b9350614b2f83614acb565b8060005b83811015614b60578151614b478882614aea565b9750614b5283614b02565b925050600181019050614b33565b5085935050505092915050565b600060a082019050614b826000830188613d18565b614b8f6020830187614aa0565b8181036040830152614ba18186614b0f565b9050614bb06060830185613d95565b614bbd6080830184613d18565b9695505050505050565b600060c082019050614bdc6000830189613d95565b614be96020830188613d18565b614bf66040830187614aa0565b614c036060830186614aa0565b614c106080830185613d95565b614c1d60a0830184613d18565b979650505050505050565b600081519050614c3781613ba2565b92915050565b600080600060608486031215614c5657614c55613b35565b5b6000614c6486828701614c28565b9350506020614c7586828701614c28565b9250506040614c8686828701614c28565b915050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212207999466ac02b7838087cc28784b593221efc99dd04c7e883a75f4a7f8ce67ac564736f6c63430008120033
Deployed Bytecode Sourcemap
29434:15692:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7590:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9757:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35210:231;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30715:64;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29516:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8710:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10408:355;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29619:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30264:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35810:531;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8552:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11172:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30144:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37827:336;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29574:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38489:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38175:300;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30346:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30196:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29959:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8881:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22055:148;;;;;;;;;;;;;:::i;:::-;;35453:144;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29789:42;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37541:278;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21413:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35697:101;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7809:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37093:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11893:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9221:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30064:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30937:58;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36903:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29844:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30231:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34817:381;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29998:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9459:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30032:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29886:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36353:542;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30107:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22358:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30308:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29926:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29746:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29711:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7590:100;7644:13;7677:5;7670:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7590:100;:::o;9757:169::-;9840:4;9857:39;9866:12;:10;:12::i;:::-;9880:7;9889:6;9857:8;:39::i;:::-;9914:4;9907:11;;9757:169;;;;:::o;35210:231::-;21635:12;:10;:12::i;:::-;21625:22;;:6;;;;;;;;;;;:22;;;21617:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35326:4:::1;35320;35316:1;35300:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;35299:31;;;;:::i;:::-;35289:6;:41;;35281:101;;;;;;;;;;;;:::i;:::-;;;;;;;;;35426:6;35416;:17;;;;:::i;:::-;35393:20;:40;;;;35210:231:::0;:::o;30715:64::-;;;;;;;;;;;;;;;;;;;;;;:::o;29516:51::-;;;:::o;8710:108::-;8771:7;8798:12;;8791:19;;8710:108;:::o;10408:355::-;10548:4;10565:36;10575:6;10583:9;10594:6;10565:9;:36::i;:::-;10612:121;10621:6;10629:12;:10;:12::i;:::-;10643:89;10681:6;10643:89;;;;;;;;;;;;;;;;;:11;:19;10655:6;10643:19;;;;;;;;;;;;;;;:33;10663:12;:10;:12::i;:::-;10643:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;10612:8;:121::i;:::-;10751:4;10744:11;;10408:355;;;;;:::o;29619:53::-;29665:6;29619:53;:::o;30264:37::-;;;;:::o;35810:531::-;21635:12;:10;:12::i;:::-;21625:22;;:6;;;;;;;;;;;:22;;;21617:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35984:14:::1;35971:10;:27;;;;36033:19;36009:21;:43;;;;36081:13;36063:15;:31;;;;36132:22;36105:24;:49;;;;36235:24;;36217:15;;36193:21;;36180:10;;:34;;;;:::i;:::-;:52;;;;:::i;:::-;:79;;;;:::i;:::-;36165:12;:94;;;;35810:531:::0;;;;:::o;8552:93::-;8610:5;8635:2;8628:9;;8552:93;:::o;11172:218::-;11260:4;11277:83;11286:12;:10;:12::i;:::-;11300:7;11309:50;11348:10;11309:11;:25;11321:12;:10;:12::i;:::-;11309:25;;;;;;;;;;;;;;;:34;11335:7;11309:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;11277:8;:83::i;:::-;11378:4;11371:11;;11172:218;;;;:::o;30144:39::-;;;;:::o;37827:336::-;21635:12;:10;:12::i;:::-;21625:22;;:6;;;;;;;;;;;:22;;;21617:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;37972:1:::1;37936:38;;:24;:38;;::::0;37928:75:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;38038:24;38014:21;;:48;;;;;;;;;;;;;;;;;;38133:21;;;;;;;;;;;38078:77;;38107:24;38078:77;;;;;;;;;;;;37827:336:::0;:::o;29574:38::-;;;:::o;38489:125::-;38554:4;38578:19;:28;38598:7;38578:28;;;;;;;;;;;;;;;;;;;;;;;;;38571:35;;38489:125;;;:::o;38175:300::-;21635:12;:10;:12::i;:::-;21625:22;;:6;;;;;;;;;;;:22;;;21617:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;38296:1:::1;38275:23;;:9;:23;;::::0;38267:60:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;38368:9;38338:27;;:39;;;;;;;;;;;;;;;;;;38439:27;;;;;;;;;;;38393:74;;38428:9;38393:74;;;;;;;;;;;;38175:300:::0;:::o;30346:40::-;;;;:::o;30196:28::-;;;;:::o;29959:30::-;;;;;;;;;;;;;:::o;8881:127::-;8955:7;8982:9;:18;8992:7;8982:18;;;;;;;;;;;;;;;;8975:25;;8881:127;;;:::o;22055:148::-;21635:12;:10;:12::i;:::-;21625:22;;:6;;;;;;;;;;;:22;;;21617:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22162:1:::1;22125:40;;22146:6;;;;;;;;;;;22125:40;;;;;;;;;;;;22193:1;22176:6;;:19;;;;;;;;;;;;;;;;;;22055:148::o:0;35453:144::-;21635:12;:10;:12::i;:::-;21625:22;;:6;;;;;;;;;;;:22;;;21617:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35585:4:::1;35543:31;:39;35575:6;35543:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;35453:144:::0;;:::o;29789:42::-;;;;;;;;;;;;;:::o;37541:278::-;21635:12;:10;:12::i;:::-;21625:22;;:6;;;;;;;;;;;:22;;;21617:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;37664:1:::1;37636:30;;:16;:30;;::::0;37628:67:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;37723:16;37706:13;;:33;;;;;;;;;;;;;;;;;;37796:13;;;;;;;;;;;37756:55;;37777:16;37756:55;;;;;;;;;;;;37541:278:::0;:::o;21413:79::-;21451:7;21478:6;;;;;;;;;;;21471:13;;21413:79;:::o;35697:101::-;21635:12;:10;:12::i;:::-;21625:22;;:6;;;;;;;;;;;:22;;;21617:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35783:7:::1;35769:11;;:21;;;;;;;;;;;;;;;;;;35697:101:::0;:::o;7809:104::-;7865:13;7898:7;7891:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7809:104;:::o;37093:244::-;21635:12;:10;:12::i;:::-;21625:22;;:6;;;;;;;;;;;:22;;;21617:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;37200:13:::1;37192:21;;:4;:21;;::::0;37184:91:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;37288:41;37317:4;37323:5;37288:28;:41::i;:::-;37093:244:::0;;:::o;11893:269::-;11986:4;12003:129;12012:12;:10;:12::i;:::-;12026:7;12035:96;12074:15;12035:96;;;;;;;;;;;;;;;;;:11;:25;12047:12;:10;:12::i;:::-;12035:25;;;;;;;;;;;;;;;:34;12061:7;12035:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;12003:8;:129::i;:::-;12150:4;12143:11;;11893:269;;;;:::o;9221:175::-;9307:4;9324:42;9334:12;:10;:12::i;:::-;9348:9;9359:6;9324:9;:42::i;:::-;9384:4;9377:11;;9221:175;;;;:::o;30064:36::-;;;;:::o;30937:58::-;;;;;;;;;;;;;;;;;;;;;;:::o;36903:182::-;21635:12;:10;:12::i;:::-;21625:22;;:6;;;;;;;;;;;:22;;;21617:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;37019:8:::1;36988:19;:28;37008:7;36988:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;37059:7;37043:34;;;37068:8;37043:34;;;;;;:::i;:::-;;;;;;;;36903:182:::0;;:::o;29844:35::-;;;;:::o;30231:26::-;;;;:::o;34817:381::-;34898:4;21635:12;:10;:12::i;:::-;21625:22;;:6;;;;;;;;;;;:22;;;21617:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34954:6:::1;34950:1;34934:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:26;;;;:::i;:::-;34921:9;:39;;34913:105;;;;;;;;;;;;:::i;:::-;;;;;;;;;35069:4;35065:1;35049:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;35036:9;:37;;35028:102;;;;;;;;;;;;:::i;:::-;;;;;;;;;35161:9;35140:18;:30;;;;35187:4;35180:11;;34817:381:::0;;;:::o;29998:27::-;;;;:::o;9459:151::-;9548:7;9575:11;:18;9587:5;9575:18;;;;;;;;;;;;;;;:27;9594:7;9575:27;;;;;;;;;;;;;;;;9568:34;;9459:151;;;;:::o;30032:25::-;;;;:::o;29886:33::-;;;;:::o;36353:542::-;21635:12;:10;:12::i;:::-;21625:22;;:6;;;;;;;;;;;:22;;;21617:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36529:14:::1;36515:11;:28;;;;36579:19;36554:22;:44;;;;36628:13;36609:16;:32;;;;36680:22;36652:25;:50;;;;36787:25;;36768:16;;36743:22;;36729:11;;:36;;;;:::i;:::-;:55;;;;:::i;:::-;:83;;;;:::i;:::-;36713:13;:99;;;;36353:542:::0;;;;:::o;30107:30::-;;;;:::o;22358:244::-;21635:12;:10;:12::i;:::-;21625:22;;:6;;;;;;;;;;;:22;;;21617:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22467:1:::1;22447:22;;:8;:22;;::::0;22439:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;22557:8;22528:38;;22549:6;;;;;;;;;;;22528:38;;;;;;;;;;;;22586:8;22577:6;;:17;;;;;;;;;;;;;;;;;;22358:244:::0;:::o;30308:31::-;;;;:::o;29926:24::-;;;;:::o;29746:36::-;;;;;;;;;;;;;:::o;29711:28::-;;;;;;;;;;;;;:::o;16457:181::-;16515:7;16535:9;16551:1;16547;:5;;;;:::i;:::-;16535:17;;16576:1;16571;:6;;16563:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;16629:1;16622:8;;;16457:181;;;;:::o;226:98::-;279:7;306:10;299:17;;226:98;:::o;15079:380::-;15232:1;15215:19;;:5;:19;;;15207:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15313:1;15294:21;;:7;:21;;;15286:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15397:6;15367:11;:18;15379:5;15367:18;;;;;;;;;;;;;;;:27;15386:7;15367:27;;;;;;;;;;;;;;;:36;;;;15435:7;15419:32;;15428:5;15419:32;;;15444:6;15419:32;;;;;;:::i;:::-;;;;;;;;15079:380;;;:::o;38622:3485::-;38770:1;38754:18;;:4;:18;;;38746:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38847:1;38833:16;;:2;:16;;;38825:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;38924:1;38914:6;:11;38911:92;;38942:28;38958:4;38964:2;38968:1;38942:15;:28::i;:::-;38985:7;;38911:92;39016:12;39032:8;;;;;;;;;;;39031:9;39016:24;;39141:19;:25;39161:4;39141:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;39170:19;:23;39190:2;39170:23;;;;;;;;;;;;;;;;;;;;;;;;;39141:52;39138:99;;;39220:5;39210:15;;39138:99;39257:12;39361:7;39358:1168;;;39412:25;:29;39438:2;39412:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;39461:1;39445:13;;:17;39412:50;39408:949;;;39489:34;39519:3;39489:25;39500:13;;39489:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;39482:41;;39590:13;;39571:16;;39564:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;39542:18;;:61;;;;;;;:::i;:::-;;;;;;;;39677:13;;39649:25;;39642:4;:32;;;;:::i;:::-;:48;;;;:::i;:::-;39622:16;;:68;;;;;;;:::i;:::-;;;;;;;;39750:13;;39736:11;;39729:4;:18;;;;:::i;:::-;:34;;;;:::i;:::-;39709:16;;:54;;;;;;;:::i;:::-;;;;;;;;39845:13;;39820:22;;39813:4;:29;;;;:::i;:::-;:45;;;;:::i;:::-;39782:27;;:76;;;;;;;:::i;:::-;;;;;;;;39408:949;;;39919:25;:31;39945:4;39919:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;39969:1;39954:12;;:16;39919:51;39916:441;;;39995:33;40024:3;39995:24;40006:12;;39995:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;39988:40;;40091:12;;40073:15;;40066:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;40044:18;;:59;;;;;;;:::i;:::-;;;;;;;;40176:12;;40149:24;;40142:4;:31;;;;:::i;:::-;:46;;;;:::i;:::-;40122:16;;:66;;;;;;;:::i;:::-;;;;;;;;40247:12;;40234:10;;40227:4;:17;;;;:::i;:::-;:32;;;;:::i;:::-;40207:16;;:52;;;;;;;:::i;:::-;;;;;;;;40329:12;;40305:21;;40298:4;:28;;;;:::i;:::-;:43;;;;:::i;:::-;40278:16;;:63;;;;;;;:::i;:::-;;;;;;;;39916:441;39408:949;40395:1;40388:4;:8;40385:93;;;40420:42;40436:4;40450;40457;40420:15;:42::i;:::-;40385:93;40510:4;40500:14;;;;;:::i;:::-;;;39358:1168;40570:7;:5;:7::i;:::-;40562:15;;:4;:15;;;;:49;;;;;40604:7;:5;:7::i;:::-;40598:13;;:2;:13;;;;40562:49;:86;;;;;40646:1;40632:16;;:2;:16;;;;40562:86;:128;;;;;40683:6;40669:21;;:2;:21;;;;40562:128;:158;;;;;40712:8;;;;;;;;;;;40711:9;40562:158;40540:1016;;;40805:25;:31;40831:4;40805:31;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;40841:31;:35;40873:2;40841:35;;;;;;;;;;;;;;;;;;;;;;;;;40840:36;40805:71;40801:740;;;40923:20;;40913:6;:30;;40905:96;;;;;;;;;;;;:::i;:::-;;;;;;;;;41062:9;;41045:13;41055:2;41045:9;:13::i;:::-;41036:6;:22;;;;:::i;:::-;:35;;41028:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;40801:740;;;41189:25;:29;41215:2;41189:29;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;41223:31;:37;41255:4;41223:37;;;;;;;;;;;;;;;;;;;;;;;;;41222:38;41189:71;41185:356;;;41307:20;;41297:6;:30;;41289:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;41185:356;;;41488:9;;41471:13;41481:2;41471:9;:13::i;:::-;41461:6;41460:24;;;;:::i;:::-;:37;;41452:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;41185:356;40801:740;40540:1016;41570:28;41601:24;41619:4;41601:9;:24::i;:::-;41570:55;;41646:12;41685:18;;41661:20;:42;;41646:57;;41734:7;:35;;;;;41758:11;;;;;;;;;;;41734:35;:61;;;;;41787:8;;;;;;;;;;;41786:9;41734:61;:110;;;;;41813:25;:31;41839:4;41813:31;;;;;;;;;;;;;;;;;;;;;;;;;41812:32;41734:110;:153;;;;;41862:19;:25;41882:4;41862:25;;;;;;;;;;;;;;;;;;;;;;;;;41861:26;41734:153;:194;;;;;41905:19;:23;41925:2;41905:23;;;;;;;;;;;;;;;;;;;;;;;;;41904:24;41734:194;41716:338;;;41966:4;41955:8;;:15;;;;;;;;;;;;;;;;;;41999:10;:8;:10::i;:::-;42037:5;42026:8;;:16;;;;;;;;;;;;;;;;;;41716:338;42066:33;42082:4;42088:2;42092:6;42066:15;:33::i;:::-;38735:3372;;;;38622:3485;;;;:::o;17360:192::-;17446:7;17479:1;17474;:6;;17482:12;17466:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;17506:9;17522:1;17518;:5;;;;:::i;:::-;17506:17;;17543:1;17536:8;;;17360:192;;;;;:::o;37345:188::-;37462:5;37428:25;:31;37454:4;37428:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;37519:5;37485:40;;37513:4;37485:40;;;;;;;;;;;;37345:188;;:::o;12652:573::-;12810:1;12792:20;;:6;:20;;;12784:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;12894:1;12873:23;;:9;:23;;;12865:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;12949:47;12970:6;12978:9;12989:6;12949:20;:47::i;:::-;13029:71;13051:6;13029:71;;;;;;;;;;;;;;;;;:9;:17;13039:6;13029:17;;;;;;;;;;;;;;;;:21;;:71;;;;;:::i;:::-;13009:9;:17;13019:6;13009:17;;;;;;;;;;;;;;;:91;;;;13134:32;13159:6;13134:9;:20;13144:9;13134:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;13111:9;:20;13121:9;13111:20;;;;;;;;;;;;;;;:55;;;;13199:9;13182:35;;13191:6;13182:35;;;13210:6;13182:35;;;;;;:::i;:::-;;;;;;;;12652:573;;;:::o;17811:471::-;17869:7;18119:1;18114;:6;18110:47;;18144:1;18137:8;;;;18110:47;18169:9;18185:1;18181;:5;;;;:::i;:::-;18169:17;;18214:1;18209;18205;:5;;;;:::i;:::-;:10;18197:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;18273:1;18266:8;;;17811:471;;;;;:::o;18758:132::-;18816:7;18843:39;18847:1;18850;18843:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;18836:46;;18758:132;;;;:::o;43265:1858::-;43304:23;43330:24;43348:4;43330:9;:24::i;:::-;43304:50;;43365:25;43452:27;;43433:16;;43414;;43393:18;;:37;;;;:::i;:::-;:56;;;;:::i;:::-;:86;;;;:::i;:::-;43365:114;;43522:1;43503:15;:20;:46;;;;43548:1;43527:17;:22;43503:46;43500:60;;;43552:7;;;;43500:60;43629:23;43714:1;43694:17;43673:18;;43655:15;:36;;;;:::i;:::-;:56;;;;:::i;:::-;:60;;;;:::i;:::-;43629:86;;43726:26;43755:36;43775:15;43755;:19;;:36;;;;:::i;:::-;43726:65;;43812:25;43840:21;43812:49;;43874:36;43891:18;43874:16;:36::i;:::-;43932:18;43953:44;43979:17;43953:21;:25;;:44;;;;:::i;:::-;43932:65;;44018:23;44044:55;44081:17;44044:32;44059:16;;44044:10;:14;;:32;;;;:::i;:::-;:36;;:55;;;;:::i;:::-;44018:81;;44110:22;44135:66;44183:17;44135:43;44150:27;;44135:10;:14;;:43;;;;:::i;:::-;:47;;:66;;;;:::i;:::-;44110:91;;44212:21;44236:55;44273:17;44236:32;44251:16;;44236:10;:14;;:32;;;;:::i;:::-;:36;;:55;;;;:::i;:::-;44212:79;;44322:23;44396:13;44379:14;44361:15;44348:10;:28;;;;:::i;:::-;:45;;;;:::i;:::-;:61;;;;:::i;:::-;44322:87;;44461:1;44440:18;:22;;;;44492:1;44473:16;:20;;;;44534:1;44504:27;:31;;;;44565:1;44546:16;:20;;;;44588:12;44613:13;;;;;;;;;;;44605:28;;44641:15;44605:56;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44587:74;;;44693:21;;;;;;;;;;;44685:35;;44728:14;44685:62;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44672:75;;;;;44779:1;44761:15;:19;:42;;;;;44802:1;44784:15;:19;44761:42;44758:207;;;44819:46;44832:15;44849;44819:12;:46::i;:::-;44885:68;44900:18;44920:15;44937;44885:68;;;;;;;;:::i;:::-;;;;;;;;44758:207;45048:27;;;;;;;;;;;45040:41;;45089:21;45040:75;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45027:88;;;;;43293:1830;;;;;;;;;;;43265:1858;:::o;16062:125::-;;;;:::o;19386:278::-;19472:7;19504:1;19500;:5;19507:12;19492:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;19531:9;19547:1;19543;:5;;;;:::i;:::-;19531:17;;19655:1;19648:8;;;19386:278;;;;;:::o;16921:136::-;16979:7;17006:43;17010:1;17013;17006:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;16999:50;;16921:136;;;;:::o;42115:601::-;42243:21;42281:1;42267:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42243:40;;42312:4;42294;42299:1;42294:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;42338:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;42328:4;42333:1;42328:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;42373:62;42390:4;42405:15;42423:11;42373:8;:62::i;:::-;42474:15;:66;;;42555:11;42581:1;42625:4;42652;42672:15;42474:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42170:546;42115:601;:::o;42740:517::-;42888:62;42905:4;42920:15;42938:11;42888:8;:62::i;:::-;42993:15;:31;;;43032:9;43065:4;43085:11;43111:1;43154;29665:6;43223:15;42993:256;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;42740:517;;:::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:::-;3840:6;3889:2;3877:9;3868:7;3864:23;3860:32;3857:119;;;3895:79;;:::i;:::-;3857:119;4015:1;4040:53;4085:7;4076:6;4065:9;4061:22;4040:53;:::i;:::-;4030:63;;3986:117;3781:329;;;;:::o;4116:60::-;4144:3;4165:5;4158:12;;4116:60;;;:::o;4182:142::-;4232:9;4265:53;4283:34;4292:24;4310:5;4292:24;:::i;:::-;4283:34;:::i;:::-;4265:53;:::i;:::-;4252:66;;4182:142;;;:::o;4330:126::-;4380:9;4413:37;4444:5;4413:37;:::i;:::-;4400:50;;4330:126;;;:::o;4462:153::-;4539:9;4572:37;4603:5;4572:37;:::i;:::-;4559:50;;4462:153;;;:::o;4621:185::-;4735:64;4793:5;4735:64;:::i;:::-;4730:3;4723:77;4621:185;;:::o;4812:276::-;4932:4;4970:2;4959:9;4955:18;4947:26;;4983:98;5078:1;5067:9;5063:17;5054:6;4983:98;:::i;:::-;4812:276;;;;:::o;5094:118::-;5181:24;5199:5;5181:24;:::i;:::-;5176:3;5169:37;5094:118;;:::o;5218:222::-;5311:4;5349:2;5338:9;5334:18;5326:26;;5362:71;5430:1;5419:9;5415:17;5406:6;5362:71;:::i;:::-;5218:222;;;;:::o;5446:619::-;5523:6;5531;5539;5588:2;5576:9;5567:7;5563:23;5559:32;5556:119;;;5594:79;;:::i;:::-;5556:119;5714:1;5739:53;5784:7;5775:6;5764:9;5760:22;5739:53;:::i;:::-;5729:63;;5685:117;5841:2;5867:53;5912:7;5903:6;5892:9;5888:22;5867:53;:::i;:::-;5857:63;;5812:118;5969:2;5995:53;6040:7;6031:6;6020:9;6016:22;5995:53;:::i;:::-;5985:63;;5940:118;5446:619;;;;;:::o;6071:118::-;6158:24;6176:5;6158:24;:::i;:::-;6153:3;6146:37;6071:118;;:::o;6195:222::-;6288:4;6326:2;6315:9;6311:18;6303:26;;6339:71;6407:1;6396:9;6392:17;6383:6;6339:71;:::i;:::-;6195:222;;;;:::o;6423:765::-;6509:6;6517;6525;6533;6582:3;6570:9;6561:7;6557:23;6553:33;6550:120;;;6589:79;;:::i;:::-;6550:120;6709:1;6734:53;6779:7;6770:6;6759:9;6755:22;6734:53;:::i;:::-;6724:63;;6680:117;6836:2;6862:53;6907:7;6898:6;6887:9;6883:22;6862:53;:::i;:::-;6852:63;;6807:118;6964:2;6990:53;7035:7;7026:6;7015:9;7011:22;6990:53;:::i;:::-;6980:63;;6935:118;7092:2;7118:53;7163:7;7154:6;7143:9;7139:22;7118:53;:::i;:::-;7108:63;;7063:118;6423:765;;;;;;;:::o;7194:86::-;7229:7;7269:4;7262:5;7258:16;7247:27;;7194:86;;;:::o;7286:112::-;7369:22;7385:5;7369:22;:::i;:::-;7364:3;7357:35;7286:112;;:::o;7404:214::-;7493:4;7531:2;7520:9;7516:18;7508:26;;7544:67;7608:1;7597:9;7593:17;7584:6;7544:67;:::i;:::-;7404:214;;;;:::o;7624:116::-;7694:21;7709:5;7694:21;:::i;:::-;7687:5;7684:32;7674:60;;7730:1;7727;7720:12;7674:60;7624:116;:::o;7746:133::-;7789:5;7827:6;7814:20;7805:29;;7843:30;7867:5;7843:30;:::i;:::-;7746:133;;;;:::o;7885:468::-;7950:6;7958;8007:2;7995:9;7986:7;7982:23;7978:32;7975:119;;;8013:79;;:::i;:::-;7975:119;8133:1;8158:53;8203:7;8194:6;8183:9;8179:22;8158:53;:::i;:::-;8148:63;;8104:117;8260:2;8286:50;8328:7;8319:6;8308:9;8304:22;8286:50;:::i;:::-;8276:60;;8231:115;7885:468;;;;;:::o;8359:323::-;8415:6;8464:2;8452:9;8443:7;8439:23;8435:32;8432:119;;;8470:79;;:::i;:::-;8432:119;8590:1;8615:50;8657:7;8648:6;8637:9;8633:22;8615:50;:::i;:::-;8605:60;;8561:114;8359:323;;;;:::o;8688:474::-;8756:6;8764;8813:2;8801:9;8792:7;8788:23;8784:32;8781:119;;;8819:79;;:::i;:::-;8781:119;8939:1;8964:53;9009:7;9000:6;8989:9;8985:22;8964:53;:::i;:::-;8954:63;;8910:117;9066:2;9092:53;9137:7;9128:6;9117:9;9113:22;9092:53;:::i;:::-;9082:63;;9037:118;8688:474;;;;;:::o;9168:180::-;9216:77;9213:1;9206:88;9313:4;9310:1;9303:15;9337:4;9334:1;9327:15;9354:320;9398:6;9435:1;9429:4;9425:12;9415:22;;9482:1;9476:4;9472:12;9503:18;9493:81;;9559:4;9551:6;9547:17;9537:27;;9493:81;9621:2;9613:6;9610:14;9590:18;9587:38;9584:84;;9640:18;;:::i;:::-;9584:84;9405:269;9354:320;;;:::o;9680:182::-;9820:34;9816:1;9808:6;9804:14;9797:58;9680:182;:::o;9868:366::-;10010:3;10031:67;10095:2;10090:3;10031:67;:::i;:::-;10024:74;;10107:93;10196:3;10107:93;:::i;:::-;10225:2;10220:3;10216:12;10209:19;;9868:366;;;:::o;10240:419::-;10406:4;10444:2;10433:9;10429:18;10421:26;;10493:9;10487:4;10483:20;10479:1;10468:9;10464:17;10457:47;10521:131;10647:4;10521:131;:::i;:::-;10513:139;;10240:419;;;:::o;10665:180::-;10713:77;10710:1;10703:88;10810:4;10807:1;10800:15;10834:4;10831:1;10824:15;10851:410;10891:7;10914:20;10932:1;10914:20;:::i;:::-;10909:25;;10948:20;10966:1;10948:20;:::i;:::-;10943:25;;11003:1;11000;10996:9;11025:30;11043:11;11025:30;:::i;:::-;11014:41;;11204:1;11195:7;11191:15;11188:1;11185:22;11165:1;11158:9;11138:83;11115:139;;11234:18;;:::i;:::-;11115:139;10899:362;10851:410;;;;:::o;11267:180::-;11315:77;11312:1;11305:88;11412:4;11409:1;11402:15;11436:4;11433:1;11426:15;11453:185;11493:1;11510:20;11528:1;11510:20;:::i;:::-;11505:25;;11544:20;11562:1;11544:20;:::i;:::-;11539:25;;11583:1;11573:35;;11588:18;;:::i;:::-;11573:35;11630:1;11627;11623:9;11618:14;;11453:185;;;;:::o;11644:234::-;11784:34;11780:1;11772:6;11768:14;11761:58;11853:17;11848:2;11840:6;11836:15;11829:42;11644:234;:::o;11884:366::-;12026:3;12047:67;12111:2;12106:3;12047:67;:::i;:::-;12040:74;;12123:93;12212:3;12123:93;:::i;:::-;12241:2;12236:3;12232:12;12225:19;;11884:366;;;:::o;12256:419::-;12422:4;12460:2;12449:9;12445:18;12437:26;;12509:9;12503:4;12499:20;12495:1;12484:9;12480:17;12473:47;12537:131;12663:4;12537:131;:::i;:::-;12529:139;;12256:419;;;:::o;12681:191::-;12721:3;12740:20;12758:1;12740:20;:::i;:::-;12735:25;;12774:20;12792:1;12774:20;:::i;:::-;12769:25;;12817:1;12814;12810:9;12803:16;;12838:3;12835:1;12832:10;12829:36;;;12845:18;;:::i;:::-;12829:36;12681:191;;;;:::o;12878:174::-;13018:26;13014:1;13006:6;13002:14;12995:50;12878:174;:::o;13058:366::-;13200:3;13221:67;13285:2;13280:3;13221:67;:::i;:::-;13214:74;;13297:93;13386:3;13297:93;:::i;:::-;13415:2;13410:3;13406:12;13399:19;;13058:366;;;:::o;13430:419::-;13596:4;13634:2;13623:9;13619:18;13611:26;;13683:9;13677:4;13673:20;13669:1;13658:9;13654:17;13647:47;13711:131;13837:4;13711:131;:::i;:::-;13703:139;;13430:419;;;:::o;13855:244::-;13995:34;13991:1;13983:6;13979:14;13972:58;14064:27;14059:2;14051:6;14047:15;14040:52;13855:244;:::o;14105:366::-;14247:3;14268:67;14332:2;14327:3;14268:67;:::i;:::-;14261:74;;14344:93;14433:3;14344:93;:::i;:::-;14462:2;14457:3;14453:12;14446:19;;14105:366;;;:::o;14477:419::-;14643:4;14681:2;14670:9;14666:18;14658:26;;14730:9;14724:4;14720:20;14716:1;14705:9;14701:17;14694:47;14758:131;14884:4;14758:131;:::i;:::-;14750:139;;14477:419;;;:::o;14902:240::-;15042:34;15038:1;15030:6;15026:14;15019:58;15111:23;15106:2;15098:6;15094:15;15087:48;14902:240;:::o;15148:366::-;15290:3;15311:67;15375:2;15370:3;15311:67;:::i;:::-;15304:74;;15387:93;15476:3;15387:93;:::i;:::-;15505:2;15500:3;15496:12;15489:19;;15148:366;;;:::o;15520:419::-;15686:4;15724:2;15713:9;15709:18;15701:26;;15773:9;15767:4;15763:20;15759:1;15748:9;15744:17;15737:47;15801:131;15927:4;15801:131;:::i;:::-;15793:139;;15520:419;;;:::o;15945:239::-;16085:34;16081:1;16073:6;16069:14;16062:58;16154:22;16149:2;16141:6;16137:15;16130:47;15945:239;:::o;16190:366::-;16332:3;16353:67;16417:2;16412:3;16353:67;:::i;:::-;16346:74;;16429:93;16518:3;16429:93;:::i;:::-;16547:2;16542:3;16538:12;16531:19;;16190:366;;;:::o;16562:419::-;16728:4;16766:2;16755:9;16751:18;16743:26;;16815:9;16809:4;16805:20;16801:1;16790:9;16786:17;16779:47;16843:131;16969:4;16843:131;:::i;:::-;16835:139;;16562:419;;;:::o;16987:225::-;17127:34;17123:1;17115:6;17111:14;17104:58;17196:8;17191:2;17183:6;17179:15;17172:33;16987:225;:::o;17218:366::-;17360:3;17381:67;17445:2;17440:3;17381:67;:::i;:::-;17374:74;;17457:93;17546:3;17457:93;:::i;:::-;17575:2;17570:3;17566:12;17559:19;;17218:366;;;:::o;17590:419::-;17756:4;17794:2;17783:9;17779:18;17771:26;;17843:9;17837:4;17833:20;17829:1;17818:9;17814:17;17807:47;17871:131;17997:4;17871:131;:::i;:::-;17863:139;;17590:419;;;:::o;18015:177::-;18155:29;18151:1;18143:6;18139:14;18132:53;18015:177;:::o;18198:366::-;18340:3;18361:67;18425:2;18420:3;18361:67;:::i;:::-;18354:74;;18437:93;18526:3;18437:93;:::i;:::-;18555:2;18550:3;18546:12;18539:19;;18198:366;;;:::o;18570:419::-;18736:4;18774:2;18763:9;18759:18;18751:26;;18823:9;18817:4;18813:20;18809:1;18798:9;18794:17;18787:47;18851:131;18977:4;18851:131;:::i;:::-;18843:139;;18570:419;;;:::o;18995:223::-;19135:34;19131:1;19123:6;19119:14;19112:58;19204:6;19199:2;19191:6;19187:15;19180:31;18995:223;:::o;19224:366::-;19366:3;19387:67;19451:2;19446:3;19387:67;:::i;:::-;19380:74;;19463:93;19552:3;19463:93;:::i;:::-;19581:2;19576:3;19572:12;19565:19;;19224:366;;;:::o;19596:419::-;19762:4;19800:2;19789:9;19785:18;19777:26;;19849:9;19843:4;19839:20;19835:1;19824:9;19820:17;19813:47;19877:131;20003:4;19877:131;:::i;:::-;19869:139;;19596:419;;;:::o;20021:221::-;20161:34;20157:1;20149:6;20145:14;20138:58;20230:4;20225:2;20217:6;20213:15;20206:29;20021:221;:::o;20248:366::-;20390:3;20411:67;20475:2;20470:3;20411:67;:::i;:::-;20404:74;;20487:93;20576:3;20487:93;:::i;:::-;20605:2;20600:3;20596:12;20589:19;;20248:366;;;:::o;20620:419::-;20786:4;20824:2;20813:9;20809:18;20801:26;;20873:9;20867:4;20863:20;20859:1;20848:9;20844:17;20837:47;20901:131;21027:4;20901:131;:::i;:::-;20893:139;;20620:419;;;:::o;21045:224::-;21185:34;21181:1;21173:6;21169:14;21162:58;21254:7;21249:2;21241:6;21237:15;21230:32;21045:224;:::o;21275:366::-;21417:3;21438:67;21502:2;21497:3;21438:67;:::i;:::-;21431:74;;21514:93;21603:3;21514:93;:::i;:::-;21632:2;21627:3;21623:12;21616:19;;21275:366;;;:::o;21647:419::-;21813:4;21851:2;21840:9;21836:18;21828:26;;21900:9;21894:4;21890:20;21886:1;21875:9;21871:17;21864:47;21928:131;22054:4;21928:131;:::i;:::-;21920:139;;21647:419;;;:::o;22072:222::-;22212:34;22208:1;22200:6;22196:14;22189:58;22281:5;22276:2;22268:6;22264:15;22257:30;22072:222;:::o;22300:366::-;22442:3;22463:67;22527:2;22522:3;22463:67;:::i;:::-;22456:74;;22539:93;22628:3;22539:93;:::i;:::-;22657:2;22652:3;22648:12;22641:19;;22300:366;;;:::o;22672:419::-;22838:4;22876:2;22865:9;22861:18;22853:26;;22925:9;22919:4;22915:20;22911:1;22900:9;22896:17;22889:47;22953:131;23079:4;22953:131;:::i;:::-;22945:139;;22672:419;;;:::o;23097:194::-;23137:4;23157:20;23175:1;23157:20;:::i;:::-;23152:25;;23191:20;23209:1;23191:20;:::i;:::-;23186:25;;23235:1;23232;23228:9;23220:17;;23259:1;23253:4;23250:11;23247:37;;;23264:18;;:::i;:::-;23247:37;23097:194;;;;:::o;23297:240::-;23437:34;23433:1;23425:6;23421:14;23414:58;23506:23;23501:2;23493:6;23489:15;23482:48;23297:240;:::o;23543:366::-;23685:3;23706:67;23770:2;23765:3;23706:67;:::i;:::-;23699:74;;23782:93;23871:3;23782:93;:::i;:::-;23900:2;23895:3;23891:12;23884:19;;23543:366;;;:::o;23915:419::-;24081:4;24119:2;24108:9;24104:18;24096:26;;24168:9;24162:4;24158:20;24154:1;24143:9;24139:17;24132:47;24196:131;24322:4;24196:131;:::i;:::-;24188:139;;23915:419;;;:::o;24340:169::-;24480:21;24476:1;24468:6;24464:14;24457:45;24340:169;:::o;24515:366::-;24657:3;24678:67;24742:2;24737:3;24678:67;:::i;:::-;24671:74;;24754:93;24843:3;24754:93;:::i;:::-;24872:2;24867:3;24863:12;24856:19;;24515:366;;;:::o;24887:419::-;25053:4;25091:2;25080:9;25076:18;25068:26;;25140:9;25134:4;25130:20;25126:1;25115:9;25111:17;25104:47;25168:131;25294:4;25168:131;:::i;:::-;25160:139;;24887:419;;;:::o;25312:241::-;25452:34;25448:1;25440:6;25436:14;25429:58;25521:24;25516:2;25508:6;25504:15;25497:49;25312:241;:::o;25559:366::-;25701:3;25722:67;25786:2;25781:3;25722:67;:::i;:::-;25715:74;;25798:93;25887:3;25798:93;:::i;:::-;25916:2;25911:3;25907:12;25900:19;;25559:366;;;:::o;25931:419::-;26097:4;26135:2;26124:9;26120:18;26112:26;;26184:9;26178:4;26174:20;26170:1;26159:9;26155:17;26148:47;26212:131;26338:4;26212:131;:::i;:::-;26204:139;;25931:419;;;:::o;26356:220::-;26496:34;26492:1;26484:6;26480:14;26473:58;26565:3;26560:2;26552:6;26548:15;26541:28;26356:220;:::o;26582:366::-;26724:3;26745:67;26809:2;26804:3;26745:67;:::i;:::-;26738:74;;26821:93;26910:3;26821:93;:::i;:::-;26939:2;26934:3;26930:12;26923:19;;26582:366;;;:::o;26954:419::-;27120:4;27158:2;27147:9;27143:18;27135:26;;27207:9;27201:4;27197:20;27193:1;27182:9;27178:17;27171:47;27235:131;27361:4;27235:131;:::i;:::-;27227:139;;26954:419;;;:::o;27379:147::-;27480:11;27517:3;27502:18;;27379:147;;;;:::o;27532:114::-;;:::o;27652:398::-;27811:3;27832:83;27913:1;27908:3;27832:83;:::i;:::-;27825:90;;27924:93;28013:3;27924:93;:::i;:::-;28042:1;28037:3;28033:11;28026:18;;27652:398;;;:::o;28056:379::-;28240:3;28262:147;28405:3;28262:147;:::i;:::-;28255:154;;28426:3;28419:10;;28056:379;;;:::o;28441:442::-;28590:4;28628:2;28617:9;28613:18;28605:26;;28641:71;28709:1;28698:9;28694:17;28685:6;28641:71;:::i;:::-;28722:72;28790:2;28779:9;28775:18;28766:6;28722:72;:::i;:::-;28804;28872:2;28861:9;28857:18;28848:6;28804:72;:::i;:::-;28441:442;;;;;;:::o;28889:180::-;28937:77;28934:1;28927:88;29034:4;29031:1;29024:15;29058:4;29055:1;29048:15;29075:180;29123:77;29120:1;29113:88;29220:4;29217:1;29210:15;29244:4;29241:1;29234:15;29261:143;29318:5;29349:6;29343:13;29334:22;;29365:33;29392:5;29365:33;:::i;:::-;29261:143;;;;:::o;29410:351::-;29480:6;29529:2;29517:9;29508:7;29504:23;29500:32;29497:119;;;29535:79;;:::i;:::-;29497:119;29655:1;29680:64;29736:7;29727:6;29716:9;29712:22;29680:64;:::i;:::-;29670:74;;29626:128;29410:351;;;;:::o;29767:85::-;29812:7;29841:5;29830:16;;29767:85;;;:::o;29858:158::-;29916:9;29949:61;29967:42;29976:32;30002:5;29976:32;:::i;:::-;29967:42;:::i;:::-;29949:61;:::i;:::-;29936:74;;29858:158;;;:::o;30022:147::-;30117:45;30156:5;30117:45;:::i;:::-;30112:3;30105:58;30022:147;;:::o;30175:114::-;30242:6;30276:5;30270:12;30260:22;;30175:114;;;:::o;30295:184::-;30394:11;30428:6;30423:3;30416:19;30468:4;30463:3;30459:14;30444:29;;30295:184;;;;:::o;30485:132::-;30552:4;30575:3;30567:11;;30605:4;30600:3;30596:14;30588:22;;30485:132;;;:::o;30623:108::-;30700:24;30718:5;30700:24;:::i;:::-;30695:3;30688:37;30623:108;;:::o;30737:179::-;30806:10;30827:46;30869:3;30861:6;30827:46;:::i;:::-;30905:4;30900:3;30896:14;30882:28;;30737:179;;;;:::o;30922:113::-;30992:4;31024;31019:3;31015:14;31007:22;;30922:113;;;:::o;31071:732::-;31190:3;31219:54;31267:5;31219:54;:::i;:::-;31289:86;31368:6;31363:3;31289:86;:::i;:::-;31282:93;;31399:56;31449:5;31399:56;:::i;:::-;31478:7;31509:1;31494:284;31519:6;31516:1;31513:13;31494:284;;;31595:6;31589:13;31622:63;31681:3;31666:13;31622:63;:::i;:::-;31615:70;;31708:60;31761:6;31708:60;:::i;:::-;31698:70;;31554:224;31541:1;31538;31534:9;31529:14;;31494:284;;;31498:14;31794:3;31787:10;;31195:608;;;31071:732;;;;:::o;31809:831::-;32072:4;32110:3;32099:9;32095:19;32087:27;;32124:71;32192:1;32181:9;32177:17;32168:6;32124:71;:::i;:::-;32205:80;32281:2;32270:9;32266:18;32257:6;32205:80;:::i;:::-;32332:9;32326:4;32322:20;32317:2;32306:9;32302:18;32295:48;32360:108;32463:4;32454:6;32360:108;:::i;:::-;32352:116;;32478:72;32546:2;32535:9;32531:18;32522:6;32478:72;:::i;:::-;32560:73;32628:3;32617:9;32613:19;32604:6;32560:73;:::i;:::-;31809:831;;;;;;;;:::o;32646:807::-;32895:4;32933:3;32922:9;32918:19;32910:27;;32947:71;33015:1;33004:9;33000:17;32991:6;32947:71;:::i;:::-;33028:72;33096:2;33085:9;33081:18;33072:6;33028:72;:::i;:::-;33110:80;33186:2;33175:9;33171:18;33162:6;33110:80;:::i;:::-;33200;33276:2;33265:9;33261:18;33252:6;33200:80;:::i;:::-;33290:73;33358:3;33347:9;33343:19;33334:6;33290:73;:::i;:::-;33373;33441:3;33430:9;33426:19;33417:6;33373:73;:::i;:::-;32646:807;;;;;;;;;:::o;33459:143::-;33516:5;33547:6;33541:13;33532:22;;33563:33;33590:5;33563:33;:::i;:::-;33459:143;;;;:::o;33608:663::-;33696:6;33704;33712;33761:2;33749:9;33740:7;33736:23;33732:32;33729:119;;;33767:79;;:::i;:::-;33729:119;33887:1;33912:64;33968:7;33959:6;33948:9;33944:22;33912:64;:::i;:::-;33902:74;;33858:128;34025:2;34051:64;34107:7;34098:6;34087:9;34083:22;34051:64;:::i;:::-;34041:74;;33996:129;34164:2;34190:64;34246:7;34237:6;34226:9;34222:22;34190:64;:::i;:::-;34180:74;;34135:129;33608:663;;;;;:::o
Swarm Source
ipfs://7999466ac02b7838087cc28784b593221efc99dd04c7e883a75f4a7f8ce67ac5
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.