ERC-20
Overview
Max Total Supply
1,000,000,000 CHAD
Holders
87
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Balance
2,385,660.881000000026732533 CHADValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Source Code Verified (Exact Match)
Contract Name:
CoinManufactory
Compiler Version
v0.8.15+commit.e14f2714
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-08-13 */ // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ 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 ); } /** * @dev Interface for the optional metadata functions from the ERC20 standard. * * _Available since v4.1._ */ 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); } /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== * * [IMPORTANT] * ==== * You shouldn't rely on `isContract` to protect against flash loan attacks! * * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract * constructor. * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize/address.code.length, which returns 0 // for contracts in construction, since the code is only stored at the end // of the constructor execution. return account.code.length > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require( address(this).balance >= amount, "Address: insufficient balance" ); (bool success, ) = recipient.call{value: amount}(""); require( success, "Address: unable to send value, recipient may have reverted" ); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue( target, data, value, "Address: low-level call with value failed" ); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require( address(this).balance >= value, "Address: insufficient balance for call" ); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}( data ); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall( target, data, "Address: low-level static call failed" ); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall( target, data, "Address: low-level delegate call failed" ); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract 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() { _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual 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 { _transferOwnership(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" ); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } /** * @dev Implementation of the {IERC20} interface. * * This implementation is agnostic to the way tokens are created. This means * that a supply mechanism has to be added in a derived contract using {_mint}. * For a generic mechanism see {ERC20PresetMinterPauser}. * * TIP: For a detailed writeup see our guide * https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How * to implement supply mechanisms]. * * We have followed general OpenZeppelin Contracts guidelines: functions revert * instead returning `false` on failure. This behavior is nonetheless * conventional and does not conflict with the expectations of ERC20 * applications. * * Additionally, an {Approval} event is emitted on calls to {transferFrom}. * This allows applications to reconstruct the allowance for all accounts just * by listening to said events. Other implementations of the EIP may not emit * these events, as it isn't required by the specification. * * Finally, the non-standard {decreaseAllowance} and {increaseAllowance} * functions have been added to mitigate the well-known issues around setting * allowances. See {IERC20-approve}. */ contract ERC20 is Context, IERC20, IERC20Metadata { mapping(address => uint256) internal _balances; mapping(address => mapping(address => uint256)) private _allowances; uint256 internal _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); uint256 currentAllowance = _allowances[sender][_msgSender()]; require( currentAllowance >= amount, "ERC20: transfer amount exceeds allowance" ); unchecked { _approve(sender, _msgSender(), currentAllowance - amount); } 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] + 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) { uint256 currentAllowance = _allowances[_msgSender()][spender]; require( currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero" ); unchecked { _approve(_msgSender(), spender, currentAllowance - subtractedValue); } return true; } /** * @dev Moves `amount` of tokens from `sender` to `recipient`. * * This 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); uint256 senderBalance = _balances[sender]; require( senderBalance >= amount, "ERC20: transfer amount exceeds balance" ); unchecked { _balances[sender] = senderBalance - amount; } _balances[recipient] += amount; emit Transfer(sender, recipient, amount); _afterTokenTransfer(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 += amount; _balances[account] += amount; emit Transfer(address(0), account, amount); _afterTokenTransfer(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); uint256 accountBalance = _balances[account]; require(accountBalance >= amount, "ERC20: burn amount exceeds balance"); unchecked { _balances[account] = accountBalance - amount; } _totalSupply -= amount; emit Transfer(account, address(0), amount); _afterTokenTransfer(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 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 {} /** * @dev Hook that is called after any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * has been transferred to `to`. * - when `from` is zero, `amount` tokens have been minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens have been 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 _afterTokenTransfer( address from, address to, uint256 amount ) internal virtual {} } // pragma solidity >=0.5.0; interface IUniswapV2Factory { event PairCreated( address indexed token0, address indexed token1, address pair, uint256 ); function feeTo() external view returns (address); function feeToSetter() external view returns (address); function getPair(address tokenA, address tokenB) external view returns (address pair); function allPairs(uint256) external view returns (address pair); function allPairsLength() external view returns (uint256); function createPair(address tokenA, address tokenB) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; } // pragma solidity >=0.5.0; interface IUniswapV2Pair { event Approval( address indexed owner, address indexed spender, uint256 value ); event Transfer(address indexed from, address indexed to, uint256 value); function name() external pure returns (string memory); function symbol() external pure returns (string memory); function decimals() external pure returns (uint8); function totalSupply() external view returns (uint256); function balanceOf(address owner) external view returns (uint256); function allowance(address owner, address spender) external view returns (uint256); function approve(address spender, uint256 value) external returns (bool); function transfer(address to, uint256 value) external returns (bool); function transferFrom( address from, address to, uint256 value ) external returns (bool); function DOMAIN_SEPARATOR() external view returns (bytes32); function PERMIT_TYPEHASH() external pure returns (bytes32); function nonces(address owner) external view returns (uint256); function permit( address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s ) external; event Burn( address indexed sender, uint256 amount0, uint256 amount1, address indexed to ); event Swap( address indexed sender, uint256 amount0In, uint256 amount1In, uint256 amount0Out, uint256 amount1Out, address indexed to ); event Sync(uint112 reserve0, uint112 reserve1); function MINIMUM_LIQUIDITY() external pure returns (uint256); function factory() external view returns (address); function token0() external view returns (address); function token1() external view returns (address); function getReserves() external view returns ( uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast ); function price0CumulativeLast() external view returns (uint256); function price1CumulativeLast() external view returns (uint256); function kLast() external view returns (uint256); function burn(address to) external returns (uint256 amount0, uint256 amount1); function swap( uint256 amount0Out, uint256 amount1Out, address to, bytes calldata data ) external; function skim(address to) external; function sync() external; function initialize(address, address) external; } // pragma solidity >=0.6.2; interface IUniswapV2Router01 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint256 amountADesired, uint256 amountBDesired, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline ) external returns ( uint256 amountA, uint256 amountB, uint256 liquidity ); function addLiquidityETH( address token, uint256 amountTokenDesired, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external payable returns ( uint256 amountToken, uint256 amountETH, uint256 liquidity ); function removeLiquidity( address tokenA, address tokenB, uint256 liquidity, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline ) external returns (uint256 amountA, uint256 amountB); function removeLiquidityETH( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external returns (uint256 amountToken, uint256 amountETH); function removeLiquidityWithPermit( address tokenA, address tokenB, uint256 liquidity, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint256 amountA, uint256 amountB); function removeLiquidityETHWithPermit( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint256 amountToken, uint256 amountETH); function swapExactTokensForTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapTokensForExactTokens( uint256 amountOut, uint256 amountInMax, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapExactETHForTokens( uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external payable returns (uint256[] memory amounts); function swapTokensForExactETH( uint256 amountOut, uint256 amountInMax, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapExactTokensForETH( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapETHForExactTokens( uint256 amountOut, address[] calldata path, address to, uint256 deadline ) external payable returns (uint256[] memory amounts); function quote( uint256 amountA, uint256 reserveA, uint256 reserveB ) external pure returns (uint256 amountB); function getAmountOut( uint256 amountIn, uint256 reserveIn, uint256 reserveOut ) external pure returns (uint256 amountOut); function getAmountIn( uint256 amountOut, uint256 reserveIn, uint256 reserveOut ) external pure returns (uint256 amountIn); function getAmountsOut(uint256 amountIn, address[] calldata path) external view returns (uint256[] memory amounts); function getAmountsIn(uint256 amountOut, address[] calldata path) external view returns (uint256[] memory amounts); } // pragma solidity >=0.6.2; interface IUniswapV2Router02 is IUniswapV2Router01 { function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external returns (uint256 amountETH); function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint256 amountETH); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external; } contract CoinManufactory is ERC20, Ownable { using Address for address; mapping(address => bool) private _isExcludedFromFee; uint8 private _decimals; address payable public marketingAddress; address payable public developerAddress; address payable public charityAddress; address public immutable deadAddress = 0x000000000000000000000000000000000000dEaD; uint256 private _combinedLiquidityFee; uint256 private _previousCombinedLiquidityFee; uint256 public _marketingFee; uint256 private _previousMarketingFee; uint256 public _developerFee; uint256 private _previousDeveloperFee; uint256 public _charityFee; uint256 private _previousCharityFee; uint256 public _burnFee; uint256 private _previousBurnFee; uint256 public _liquidityPoolFee; uint256 private _previousLiquidityPoolFee; uint256 public _maxTxAmount; uint256 private _previousMaxTxAmount; uint256 private minimumTokensBeforeSwap; IUniswapV2Router02 public immutable uniswapV2Router; address public immutable uniswapV2Pair; bool inSwapAndLiquify; bool public swapAndLiquifyEnabled = true; event RewardLiquidityProviders(uint256 tokenAmount); event SwapAndLiquifyEnabledUpdated(bool enabled); event SwapAndLiquify( uint256 tokensSwapped, uint256 ethReceived, uint256 tokensIntoLiqudity ); event SwapETHForTokens(uint256 amountIn, address[] path); event SwapTokensForETH(uint256 amountIn, address[] path); modifier lockTheSwap() { inSwapAndLiquify = true; _; inSwapAndLiquify = false; } constructor( string memory name_, string memory symbol_, uint256 totalSupply_, uint8 decimals_, address[6] memory addr_, uint256[5] memory value_ ) payable ERC20(name_, symbol_) { _decimals = decimals_; _liquidityPoolFee = value_[3]; _previousLiquidityPoolFee = _liquidityPoolFee; _burnFee = value_[4]; _previousBurnFee = _burnFee; _marketingFee = value_[0]; _previousMarketingFee = _marketingFee; _developerFee = value_[1]; _previousDeveloperFee = _developerFee; _charityFee = value_[2]; _previousCharityFee = _charityFee; _combinedLiquidityFee = _marketingFee + _developerFee + _charityFee + _liquidityPoolFee; _previousCombinedLiquidityFee = _combinedLiquidityFee; marketingAddress = payable(addr_[0]); developerAddress = payable(addr_[1]); charityAddress = payable(addr_[2]); _maxTxAmount = totalSupply_ * 10**decimals_; _previousMaxTxAmount = _maxTxAmount; minimumTokensBeforeSwap = ((totalSupply_ * 10**decimals_) / 10000) * 2; IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(addr_[3]); uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()) .createPair(address(this), _uniswapV2Router.WETH()); uniswapV2Router = _uniswapV2Router; //exclude owner and this contract from fee _isExcludedFromFee[owner()] = true; _isExcludedFromFee[marketingAddress] = true; _isExcludedFromFee[developerAddress] = true; _isExcludedFromFee[charityAddress] = true; _isExcludedFromFee[address(this)] = true; _mint(_msgSender(), totalSupply_ * 10**decimals()); if(addr_[5] == 0x000000000000000000000000000000000000dEaD) { payable(addr_[4]).transfer(getBalance()); } else { payable(addr_[5]).transfer(getBalance() * 10 / 119); payable(addr_[4]).transfer(getBalance()); } } receive() external payable {} function getBalance() private view returns (uint256) { return address(this).balance; } function decimals() public view virtual override returns (uint8) { return _decimals; } function minimumTokensBeforeSwapAmount() public view returns (uint256) { return minimumTokensBeforeSwap; } function setLiquidityPoolFee(uint256 liquidityPoolFee_) external onlyOwner { _liquidityPoolFee = liquidityPoolFee_; _combinedLiquidityFee = _liquidityPoolFee + _marketingFee + _developerFee + _charityFee; } function setBurnFee(uint256 burnFee_) external onlyOwner { _burnFee = burnFee_; } function setMarketingFee(uint256 marketingFee_) external onlyOwner { _marketingFee = marketingFee_; _combinedLiquidityFee = _liquidityPoolFee + _marketingFee + _developerFee + _charityFee; } function setDeveloperFee(uint256 developerFee_) external onlyOwner { _developerFee = developerFee_; _combinedLiquidityFee = _liquidityPoolFee + _marketingFee + _developerFee + _charityFee; } function setCharityFee(uint256 charityFee_) external onlyOwner { _charityFee = charityFee_; _combinedLiquidityFee = _liquidityPoolFee + _marketingFee + _developerFee + _charityFee; } function setNumTokensSellToAddToLiquidity(uint256 _minimumTokensBeforeSwap) external onlyOwner { minimumTokensBeforeSwap = _minimumTokensBeforeSwap; } function setMarketingAddress(address _marketingAddress) external onlyOwner { marketingAddress = payable(_marketingAddress); } function setDeveloperAddress(address _developerAddress) external onlyOwner { developerAddress = payable(_developerAddress); } function setCharityAddress(address _charityAddress) external onlyOwner { charityAddress = payable(_charityAddress); } function setSwapAndLiquifyEnabled(bool _enabled) public onlyOwner { swapAndLiquifyEnabled = _enabled; emit SwapAndLiquifyEnabledUpdated(_enabled); } function setMaxTxAmount(uint256 maxTxAmount) external onlyOwner { _maxTxAmount = maxTxAmount; } function isExcludedFromFee(address account) public view returns (bool) { return _isExcludedFromFee[account]; } function excludeFromFee(address account) public onlyOwner { _isExcludedFromFee[account] = true; } function includeInFee(address account) public onlyOwner { _isExcludedFromFee[account] = false; } function _transfer( address sender, address recipient, uint256 amount ) internal virtual override { require(sender != address(0), "ERC20: transfer from the zero address"); require(recipient != address(0), "ERC20: transfer to the zero address"); require(amount > 0, "Transfer amount must be greater than zero"); uint256 senderBalance = balanceOf(sender); require( senderBalance >= amount, "ERC20: transfer amount exceeds balance" ); if (sender != owner() && recipient != owner()) { require( amount <= _maxTxAmount, "Transfer amount exceeds the maxTxAmount." ); } _beforeTokenTransfer(sender, recipient, amount); uint256 contractTokenBalance = balanceOf(address(this)); bool overMinimumTokenBalance = contractTokenBalance >= minimumTokensBeforeSwap; if ( !inSwapAndLiquify && swapAndLiquifyEnabled && recipient == uniswapV2Pair ) { if (overMinimumTokenBalance) { contractTokenBalance = minimumTokensBeforeSwap; swapTokens(contractTokenBalance); } } bool takeFee = true; if (_isExcludedFromFee[sender] || _isExcludedFromFee[recipient]) { takeFee = false; } _tokenTransfer(sender, recipient, amount, takeFee); } function _tokenTransfer( address from, address to, uint256 value, bool takeFee ) private { if (!takeFee) { removeAllFee(); } _transferStandard(from, to, value); if (!takeFee) { restoreAllFee(); } } function _transferStandard( address from, address to, uint256 amount ) private { uint256 transferAmount = _getTransferValues(amount); _balances[from] = _balances[from] - amount; _balances[to] = _balances[to] + transferAmount; burnFeeTransfer(from, amount); _takeLiquidity(from, amount); emit Transfer(from, to, transferAmount); } function _getTransferValues(uint256 amount) private view returns (uint256) { uint256 taxValue = _getCompleteTaxValue(amount); uint256 transferAmount = amount - taxValue; return transferAmount; } function _getCompleteTaxValue(uint256 amount) private view returns (uint256) { uint256 allTaxes = _combinedLiquidityFee + _burnFee; uint256 taxValue = (amount * allTaxes) / 100; return taxValue; } function burnFeeTransfer(address sender, uint256 amount) private { uint256 burnFee = (amount * _burnFee) / 100; if (burnFee > 0) { _totalSupply = _totalSupply - burnFee; emit Transfer(sender, address(0), burnFee); } } function _takeLiquidity(address sender, uint256 amount) private { uint256 liquidity = (amount * _combinedLiquidityFee) / 100; _balances[address(this)] = _balances[address(this)] + liquidity; emit Transfer(sender, address(this), amount); } function swapTokens(uint256 contractTokenBalance) private lockTheSwap { uint256 initialBalance = address(this).balance; uint256 lpTokenBalance = (contractTokenBalance * _liquidityPoolFee) / _combinedLiquidityFee; uint256 liquidityHalf = lpTokenBalance / 2; uint256 otherLiquidityHalf = lpTokenBalance - liquidityHalf; swapTokensForEth(contractTokenBalance - otherLiquidityHalf); uint256 transferredBalance = address(this).balance - initialBalance; transferToAddressETH( marketingAddress, ((transferredBalance) * (_marketingFee * 10)) / (_combinedLiquidityFee * 10 - ((_liquidityPoolFee * 10) / 2)) ); transferToAddressETH( developerAddress, ((transferredBalance) * (_developerFee * 10)) / (_combinedLiquidityFee * 10 - ((_liquidityPoolFee * 10) / 2)) ); transferToAddressETH( charityAddress, ((transferredBalance) * (_charityFee * 10)) / (_combinedLiquidityFee * 10 - ((_liquidityPoolFee * 10) / 2)) ); uint256 liquidityBalance = (transferredBalance * ((_liquidityPoolFee * 10) / 2)) / ((_combinedLiquidityFee * 10) - ((_liquidityPoolFee * 10) / 2)); addLiquidity(otherLiquidityHalf, liquidityBalance); emit SwapAndLiquify( liquidityHalf, liquidityBalance, otherLiquidityHalf ); } 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), // The contract block.timestamp ); emit SwapTokensForETH(tokenAmount, path); } function swapETHForTokens(uint256 amount) private { // generate the uniswap pair path of token -> weth address[] memory path = new address[](2); path[0] = uniswapV2Router.WETH(); path[1] = address(this); // make the swap uniswapV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{ value: amount }( 0, // accept any amount of Tokens path, deadAddress, // Burn address block.timestamp + 300 ); emit SwapETHForTokens(amount, path); } function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private { // approve token transfer to cover all possible scenarios _approve(address(this), address(uniswapV2Router), tokenAmount); // add the liquidity uniswapV2Router.addLiquidityETH{value: ethAmount}( address(this), tokenAmount, 0, // slippage is unavoidable 0, // slippage is unavoidable owner(), block.timestamp ); } function removeAllFee() private { if (_combinedLiquidityFee == 0 && _burnFee == 0) return; _previousCombinedLiquidityFee = _combinedLiquidityFee; _previousMarketingFee = _marketingFee; _previousDeveloperFee = _developerFee; _previousCharityFee = _charityFee; _previousBurnFee = _burnFee; _previousLiquidityPoolFee = _liquidityPoolFee; _combinedLiquidityFee = 0; _marketingFee = 0; _developerFee = 0; _charityFee = 0; _burnFee = 0; _liquidityPoolFee = 0; } function restoreAllFee() private { _combinedLiquidityFee = _previousCombinedLiquidityFee; _marketingFee = _previousMarketingFee; _developerFee = _previousDeveloperFee; _charityFee = _previousCharityFee; _burnFee = _previousBurnFee; _liquidityPoolFee = _previousLiquidityPoolFee; } function presale(bool _presale) external onlyOwner { if (_presale) { setSwapAndLiquifyEnabled(false); removeAllFee(); _previousMaxTxAmount = _maxTxAmount; _maxTxAmount = totalSupply(); } else { setSwapAndLiquifyEnabled(true); restoreAllFee(); _maxTxAmount = _previousMaxTxAmount; } } function transferToAddressETH(address payable recipient, uint256 amount) private { recipient.transfer(amount); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"name_","type":"string"},{"internalType":"string","name":"symbol_","type":"string"},{"internalType":"uint256","name":"totalSupply_","type":"uint256"},{"internalType":"uint8","name":"decimals_","type":"uint8"},{"internalType":"address[6]","name":"addr_","type":"address[6]"},{"internalType":"uint256[5]","name":"value_","type":"uint256[5]"}],"stateMutability":"payable","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":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokenAmount","type":"uint256"}],"name":"RewardLiquidityProviders","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapETHForTokens","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapTokensForETH","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_burnFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_charityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_developerFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_liquidityPoolFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_marketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"charityAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"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":[],"name":"developerAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minimumTokensBeforeSwapAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_presale","type":"bool"}],"name":"presale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"burnFee_","type":"uint256"}],"name":"setBurnFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_charityAddress","type":"address"}],"name":"setCharityAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"charityFee_","type":"uint256"}],"name":"setCharityFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_developerAddress","type":"address"}],"name":"setDeveloperAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"developerFee_","type":"uint256"}],"name":"setDeveloperFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"liquidityPoolFee_","type":"uint256"}],"name":"setLiquidityPoolFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_marketingAddress","type":"address"}],"name":"setMarketingAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"marketingFee_","type":"uint256"}],"name":"setMarketingFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTxAmount","type":"uint256"}],"name":"setMaxTxAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_minimumTokensBeforeSwap","type":"uint256"}],"name":"setNumTokensSellToAddToLiquidity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"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"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60e060405261dead73ffffffffffffffffffffffffffffffffffffffff1660809073ffffffffffffffffffffffffffffffffffffffff168152506001601960016101000a81548160ff021916908315150217905550604051620055fc380380620055fc83398181016040528101906200007991906200104c565b858581600390816200008c919062001369565b5080600490816200009e919062001369565b505050620000c1620000b5620009ab60201b60201c565b620009b360201b60201c565b82600760006101000a81548160ff021916908360ff16021790555080600360058110620000f357620000f262001450565b5b6020020151601481905550601454601581905550806004600581106200011e576200011d62001450565b5b60200201516012819055506012546013819055508060006005811062000149576200014862001450565b5b6020020151600c81905550600c54600d819055508060016005811062000174576200017362001450565b5b6020020151600e81905550600e54600f81905550806002600581106200019f576200019e62001450565b5b6020020151601081905550601054601181905550601454601054600e54600c54620001cb9190620014ae565b620001d79190620014ae565b620001e39190620014ae565b600a81905550600a54600b819055508160006006811062000209576200020862001450565b5b6020020151600760016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508160016006811062000265576200026462001450565b5b6020020151600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600260068110620002c157620002c062001450565b5b6020020151600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082600a6200031591906200165f565b84620003229190620016b0565b601681905550601654601781905550600261271084600a6200034591906200165f565b86620003529190620016b0565b6200035e919062001740565b6200036a9190620016b0565b60188190555060008260036006811062000389576200038862001450565b5b602002015190508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620003dc573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000402919062001778565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200046a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000490919062001778565b6040518363ffffffff1660e01b8152600401620004af929190620017bb565b6020604051808303816000875af1158015620004cf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004f5919062001778565b73ffffffffffffffffffffffffffffffffffffffff1660c08173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250506001600660006200057262000a7960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160066000600760019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160066000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160066000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550620007d46200079d620009ab60201b60201c565b620007ad62000aa360201b60201c565b600a620007bb91906200165f565b87620007c89190620016b0565b62000aba60201b60201c565b61dead73ffffffffffffffffffffffffffffffffffffffff168360056006811062000804576200080362001450565b5b602002015173ffffffffffffffffffffffffffffffffffffffff16036200089d57826004600681106200083c576200083b62001450565b5b602002015173ffffffffffffffffffffffffffffffffffffffff166108fc6200086a62000c3260201b60201c565b9081150290604051600060405180830381858888f1935050505015801562000896573d6000803e3d6000fd5b506200099e565b82600560068110620008b457620008b362001450565b5b602002015173ffffffffffffffffffffffffffffffffffffffff166108fc6077600a620008e662000c3260201b60201c565b620008f29190620016b0565b620008fe919062001740565b9081150290604051600060405180830381858888f193505050501580156200092a573d6000803e3d6000fd5b508260046006811062000942576200094162001450565b5b602002015173ffffffffffffffffffffffffffffffffffffffff166108fc6200097062000c3260201b60201c565b9081150290604051600060405180830381858888f193505050501580156200099c573d6000803e3d6000fd5b505b5050505050505062001899565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600760009054906101000a900460ff16905090565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000b2c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000b239062001849565b60405180910390fd5b62000b406000838362000c3a60201b60201c565b806002600082825462000b549190620014ae565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825462000bab9190620014ae565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000c1291906200187c565b60405180910390a362000c2e6000838362000c3f60201b60201c565b5050565b600047905090565b505050565b505050565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b62000cad8262000c62565b810181811067ffffffffffffffff8211171562000ccf5762000cce62000c73565b5b80604052505050565b600062000ce462000c44565b905062000cf2828262000ca2565b919050565b600067ffffffffffffffff82111562000d155762000d1462000c73565b5b62000d208262000c62565b9050602081019050919050565b60005b8381101562000d4d57808201518184015260208101905062000d30565b8381111562000d5d576000848401525b50505050565b600062000d7a62000d748462000cf7565b62000cd8565b90508281526020810184848401111562000d995762000d9862000c5d565b5b62000da684828562000d2d565b509392505050565b600082601f83011262000dc65762000dc562000c58565b5b815162000dd884826020860162000d63565b91505092915050565b6000819050919050565b62000df68162000de1565b811462000e0257600080fd5b50565b60008151905062000e168162000deb565b92915050565b600060ff82169050919050565b62000e348162000e1c565b811462000e4057600080fd5b50565b60008151905062000e548162000e29565b92915050565b600067ffffffffffffffff82111562000e785762000e7762000c73565b5b602082029050919050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000eb58262000e88565b9050919050565b62000ec78162000ea8565b811462000ed357600080fd5b50565b60008151905062000ee78162000ebc565b92915050565b600062000f0462000efe8462000e5a565b62000cd8565b9050806020840283018581111562000f215762000f2062000e83565b5b835b8181101562000f4e578062000f39888262000ed6565b84526020840193505060208101905062000f23565b5050509392505050565b600082601f83011262000f705762000f6f62000c58565b5b600662000f7f84828562000eed565b91505092915050565b600067ffffffffffffffff82111562000fa65762000fa562000c73565b5b602082029050919050565b600062000fc862000fc28462000f88565b62000cd8565b9050806020840283018581111562000fe55762000fe462000e83565b5b835b8181101562001012578062000ffd888262000e05565b84526020840193505060208101905062000fe7565b5050509392505050565b600082601f83011262001034576200103362000c58565b5b60056200104384828562000fb1565b91505092915050565b6000806000806000806101e087890312156200106d576200106c62000c4e565b5b600087015167ffffffffffffffff8111156200108e576200108d62000c53565b5b6200109c89828a0162000dae565b965050602087015167ffffffffffffffff811115620010c057620010bf62000c53565b5b620010ce89828a0162000dae565b9550506040620010e189828a0162000e05565b9450506060620010f489828a0162000e43565b93505060806200110789828a0162000f58565b9250506101406200111b89828a016200101c565b9150509295509295509295565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200117b57607f821691505b60208210810362001191576200119062001133565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620011fb7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620011bc565b620012078683620011bc565b95508019841693508086168417925050509392505050565b6000819050919050565b60006200124a620012446200123e8462000de1565b6200121f565b62000de1565b9050919050565b6000819050919050565b620012668362001229565b6200127e620012758262001251565b848454620011c9565b825550505050565b600090565b6200129562001286565b620012a28184846200125b565b505050565b5b81811015620012ca57620012be6000826200128b565b600181019050620012a8565b5050565b601f8211156200131957620012e38162001197565b620012ee84620011ac565b81016020851015620012fe578190505b620013166200130d85620011ac565b830182620012a7565b50505b505050565b600082821c905092915050565b60006200133e600019846008026200131e565b1980831691505092915050565b60006200135983836200132b565b9150826002028217905092915050565b620013748262001128565b67ffffffffffffffff81111562001390576200138f62000c73565b5b6200139c825462001162565b620013a9828285620012ce565b600060209050601f831160018114620013e15760008415620013cc578287015190505b620013d885826200134b565b86555062001448565b601f198416620013f18662001197565b60005b828110156200141b57848901518255600182019150602085019450602081019050620013f4565b868310156200143b578489015162001437601f8916826200132b565b8355505b6001600288020188555050505b505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000620014bb8262000de1565b9150620014c88362000de1565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156200150057620014ff6200147f565b5b828201905092915050565b60008160011c9050919050565b6000808291508390505b60018511156200156a578086048111156200154257620015416200147f565b5b6001851615620015525780820291505b808102905062001562856200150b565b945062001522565b94509492505050565b60008262001585576001905062001658565b8162001595576000905062001658565b8160018114620015ae5760028114620015b957620015ef565b600191505062001658565b60ff841115620015ce57620015cd6200147f565b5b8360020a915084821115620015e857620015e76200147f565b5b5062001658565b5060208310610133831016604e8410600b8410161715620016295782820a9050838111156200162357620016226200147f565b5b62001658565b62001638848484600162001518565b925090508184048111156200165257620016516200147f565b5b81810290505b9392505050565b60006200166c8262000de1565b9150620016798362000e1c565b9250620016a87fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462001573565b905092915050565b6000620016bd8262000de1565b9150620016ca8362000de1565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156200170657620017056200147f565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006200174d8262000de1565b91506200175a8362000de1565b9250826200176d576200176c62001711565b5b828204905092915050565b60006020828403121562001791576200179062000c4e565b5b6000620017a18482850162000ed6565b91505092915050565b620017b58162000ea8565b82525050565b6000604082019050620017d26000830185620017aa565b620017e16020830184620017aa565b9392505050565b600082825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062001831601f83620017e8565b91506200183e82620017f9565b602082019050919050565b60006020820190508181036000830152620018648162001822565b9050919050565b620018768162000de1565b82525050565b60006020820190506200189360008301846200186b565b92915050565b60805160a05160c051613d09620018f360003960008181610f21015261204e015260008181610b75015281816126a701528181612788015281816127af015281816128cf01526128f601526000610d570152613d096000f3fe6080604052600436106102605760003560e01c8063715018a611610144578063afcf2fc4116100b6578063dd62ed3e1161007a578063dd62ed3e146108f9578063ea2f0b3714610936578063ec28438a1461095f578063edc2fcfb14610988578063f0f165af146109b1578063f2fde38b146109da57610267565b8063afcf2fc414610826578063c0b0fda214610851578063c49b9a801461087c578063caccd7f7146108a5578063dcc345f2146108d057610267565b806395d89b411161010857806395d89b4114610702578063a073d37f1461072d578063a457c2d714610758578063a5ece94114610795578063a9059cbb146107c0578063a94c8dd2146107fd57610267565b8063715018a6146106415780637d1db4a5146106585780638a0623b4146106835780638da5cb5b146106ae578063906e9dd0146106d957610267565b806339509351116101dd5780634a74bb02116101a15780634a74bb02146105215780634bf2c7c91461054c5780635342acb414610575578063625e764c146105b25780636c317232146105db57806370a082311461060457610267565b8063395093511461043a57806340f8007a14610477578063437823ec146104a257806348de478e146104cb57806349bd5a5e146104f657610267565b806320c7c5961161022457806320c7c5961461035357806322976e0d1461037c57806323b872dd146103a757806327c8f835146103e4578063313ce5671461040f57610267565b806306fdde031461026c578063095ea7b3146102975780630c9be46d146102d45780631694505e146102fd57806318160ddd1461032857610267565b3661026757005b600080fd5b34801561027857600080fd5b50610281610a03565b60405161028e9190612e05565b60405180910390f35b3480156102a357600080fd5b506102be60048036038101906102b99190612ec0565b610a95565b6040516102cb9190612f1b565b60405180910390f35b3480156102e057600080fd5b506102fb60048036038101906102f69190612f36565b610ab3565b005b34801561030957600080fd5b50610312610b73565b60405161031f9190612fc2565b60405180910390f35b34801561033457600080fd5b5061033d610b97565b60405161034a9190612fec565b60405180910390f35b34801561035f57600080fd5b5061037a60048036038101906103759190613007565b610ba1565b005b34801561038857600080fd5b50610391610c57565b60405161039e9190612fec565b60405180910390f35b3480156103b357600080fd5b506103ce60048036038101906103c99190613034565b610c5d565b6040516103db9190612f1b565b60405180910390f35b3480156103f057600080fd5b506103f9610d55565b6040516104069190613096565b60405180910390f35b34801561041b57600080fd5b50610424610d79565b60405161043191906130cd565b60405180910390f35b34801561044657600080fd5b50610461600480360381019061045c9190612ec0565b610d90565b60405161046e9190612f1b565b60405180910390f35b34801561048357600080fd5b5061048c610e3c565b6040516104999190612fec565b60405180910390f35b3480156104ae57600080fd5b506104c960048036038101906104c49190612f36565b610e42565b005b3480156104d757600080fd5b506104e0610f19565b6040516104ed9190612fec565b60405180910390f35b34801561050257600080fd5b5061050b610f1f565b6040516105189190613096565b60405180910390f35b34801561052d57600080fd5b50610536610f43565b6040516105439190612f1b565b60405180910390f35b34801561055857600080fd5b50610573600480360381019061056e9190613007565b610f56565b005b34801561058157600080fd5b5061059c60048036038101906105979190612f36565b610fdc565b6040516105a99190612f1b565b60405180910390f35b3480156105be57600080fd5b506105d960048036038101906105d49190613007565b611032565b005b3480156105e757600080fd5b5061060260048036038101906105fd9190613007565b6110e8565b005b34801561061057600080fd5b5061062b60048036038101906106269190612f36565b61119e565b6040516106389190612fec565b60405180910390f35b34801561064d57600080fd5b506106566111e6565b005b34801561066457600080fd5b5061066d61126e565b60405161067a9190612fec565b60405180910390f35b34801561068f57600080fd5b50610698611274565b6040516106a59190612fec565b60405180910390f35b3480156106ba57600080fd5b506106c361127a565b6040516106d09190613096565b60405180910390f35b3480156106e557600080fd5b5061070060048036038101906106fb9190612f36565b6112a4565b005b34801561070e57600080fd5b50610717611364565b6040516107249190612e05565b60405180910390f35b34801561073957600080fd5b506107426113f6565b60405161074f9190612fec565b60405180910390f35b34801561076457600080fd5b5061077f600480360381019061077a9190612ec0565b611400565b60405161078c9190612f1b565b60405180910390f35b3480156107a157600080fd5b506107aa6114eb565b6040516107b79190613109565b60405180910390f35b3480156107cc57600080fd5b506107e760048036038101906107e29190612ec0565b611511565b6040516107f49190612f1b565b60405180910390f35b34801561080957600080fd5b50610824600480360381019061081f9190613007565b61152f565b005b34801561083257600080fd5b5061083b6115e5565b6040516108489190613109565b60405180910390f35b34801561085d57600080fd5b5061086661160b565b6040516108739190612fec565b60405180910390f35b34801561088857600080fd5b506108a3600480360381019061089e9190613150565b611611565b005b3480156108b157600080fd5b506108ba6116e1565b6040516108c79190613109565b60405180910390f35b3480156108dc57600080fd5b506108f760048036038101906108f29190612f36565b611707565b005b34801561090557600080fd5b50610920600480360381019061091b919061317d565b6117c7565b60405161092d9190612fec565b60405180910390f35b34801561094257600080fd5b5061095d60048036038101906109589190612f36565b61184e565b005b34801561096b57600080fd5b5061098660048036038101906109819190613007565b611925565b005b34801561099457600080fd5b506109af60048036038101906109aa9190613150565b6119ab565b005b3480156109bd57600080fd5b506109d860048036038101906109d39190613007565b611a7a565b005b3480156109e657600080fd5b50610a0160048036038101906109fc9190612f36565b611b00565b005b606060038054610a12906131ec565b80601f0160208091040260200160405190810160405280929190818152602001828054610a3e906131ec565b8015610a8b5780601f10610a6057610100808354040283529160200191610a8b565b820191906000526020600020905b815481529060010190602001808311610a6e57829003601f168201915b5050505050905090565b6000610aa9610aa2611bf7565b8484611bff565b6001905092915050565b610abb611bf7565b73ffffffffffffffffffffffffffffffffffffffff16610ad961127a565b73ffffffffffffffffffffffffffffffffffffffff1614610b2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b2690613269565b60405180910390fd5b80600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b610ba9611bf7565b73ffffffffffffffffffffffffffffffffffffffff16610bc761127a565b73ffffffffffffffffffffffffffffffffffffffff1614610c1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c1490613269565b60405180910390fd5b80601081905550601054600e54600c54601454610c3a91906132b8565b610c4491906132b8565b610c4e91906132b8565b600a8190555050565b600c5481565b6000610c6a848484611dc8565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610cb5611bf7565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610d35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2c90613380565b60405180910390fd5b610d4985610d41611bf7565b858403611bff565b60019150509392505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600760009054906101000a900460ff16905090565b6000610e32610d9d611bf7565b848460016000610dab611bf7565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610e2d91906132b8565b611bff565b6001905092915050565b60105481565b610e4a611bf7565b73ffffffffffffffffffffffffffffffffffffffff16610e6861127a565b73ffffffffffffffffffffffffffffffffffffffff1614610ebe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb590613269565b60405180910390fd5b6001600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600e5481565b7f000000000000000000000000000000000000000000000000000000000000000081565b601960019054906101000a900460ff1681565b610f5e611bf7565b73ffffffffffffffffffffffffffffffffffffffff16610f7c61127a565b73ffffffffffffffffffffffffffffffffffffffff1614610fd2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fc990613269565b60405180910390fd5b8060128190555050565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b61103a611bf7565b73ffffffffffffffffffffffffffffffffffffffff1661105861127a565b73ffffffffffffffffffffffffffffffffffffffff16146110ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110a590613269565b60405180910390fd5b80600c81905550601054600e54600c546014546110cb91906132b8565b6110d591906132b8565b6110df91906132b8565b600a8190555050565b6110f0611bf7565b73ffffffffffffffffffffffffffffffffffffffff1661110e61127a565b73ffffffffffffffffffffffffffffffffffffffff1614611164576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115b90613269565b60405180910390fd5b80600e81905550601054600e54600c5460145461118191906132b8565b61118b91906132b8565b61119591906132b8565b600a8190555050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6111ee611bf7565b73ffffffffffffffffffffffffffffffffffffffff1661120c61127a565b73ffffffffffffffffffffffffffffffffffffffff1614611262576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161125990613269565b60405180910390fd5b61126c600061217d565b565b60165481565b60145481565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6112ac611bf7565b73ffffffffffffffffffffffffffffffffffffffff166112ca61127a565b73ffffffffffffffffffffffffffffffffffffffff1614611320576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131790613269565b60405180910390fd5b80600760016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b606060048054611373906131ec565b80601f016020809104026020016040519081016040528092919081815260200182805461139f906131ec565b80156113ec5780601f106113c1576101008083540402835291602001916113ec565b820191906000526020600020905b8154815290600101906020018083116113cf57829003601f168201915b5050505050905090565b6000601854905090565b6000806001600061140f611bf7565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050828110156114cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114c390613412565b60405180910390fd5b6114e06114d7611bf7565b85858403611bff565b600191505092915050565b600760019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600061152561151e611bf7565b8484611dc8565b6001905092915050565b611537611bf7565b73ffffffffffffffffffffffffffffffffffffffff1661155561127a565b73ffffffffffffffffffffffffffffffffffffffff16146115ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115a290613269565b60405180910390fd5b80601481905550601054600e54600c546014546115c891906132b8565b6115d291906132b8565b6115dc91906132b8565b600a8190555050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60125481565b611619611bf7565b73ffffffffffffffffffffffffffffffffffffffff1661163761127a565b73ffffffffffffffffffffffffffffffffffffffff161461168d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161168490613269565b60405180910390fd5b80601960016101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159816040516116d69190612f1b565b60405180910390a150565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61170f611bf7565b73ffffffffffffffffffffffffffffffffffffffff1661172d61127a565b73ffffffffffffffffffffffffffffffffffffffff1614611783576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161177a90613269565b60405180910390fd5b80600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611856611bf7565b73ffffffffffffffffffffffffffffffffffffffff1661187461127a565b73ffffffffffffffffffffffffffffffffffffffff16146118ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118c190613269565b60405180910390fd5b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b61192d611bf7565b73ffffffffffffffffffffffffffffffffffffffff1661194b61127a565b73ffffffffffffffffffffffffffffffffffffffff16146119a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199890613269565b60405180910390fd5b8060168190555050565b6119b3611bf7565b73ffffffffffffffffffffffffffffffffffffffff166119d161127a565b73ffffffffffffffffffffffffffffffffffffffff1614611a27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a1e90613269565b60405180910390fd5b8015611a5b57611a376000611611565b611a3f612243565b601654601781905550611a50610b97565b601681905550611a77565b611a656001611611565b611a6d6122c4565b6017546016819055505b50565b611a82611bf7565b73ffffffffffffffffffffffffffffffffffffffff16611aa061127a565b73ffffffffffffffffffffffffffffffffffffffff1614611af6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aed90613269565b60405180910390fd5b8060188190555050565b611b08611bf7565b73ffffffffffffffffffffffffffffffffffffffff16611b2661127a565b73ffffffffffffffffffffffffffffffffffffffff1614611b7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b7390613269565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611beb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611be2906134a4565b60405180910390fd5b611bf48161217d565b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611c6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c6590613536565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611cdd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cd4906135c8565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611dbb9190612fec565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611e37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e2e9061365a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611ea6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e9d906136ec565b60405180910390fd5b60008111611ee9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ee09061377e565b60405180910390fd5b6000611ef48461119e565b905081811015611f39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3090613810565b60405180910390fd5b611f4161127a565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614158015611faf5750611f7f61127a565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b15611ffa57601654821115611ff9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ff0906138a2565b60405180910390fd5b5b6120058484846122fc565b60006120103061119e565b905060006018548210159050601960009054906101000a900460ff161580156120455750601960019054906101000a900460ff165b801561209c57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16145b156120b75780156120b65760185491506120b582612301565b5b5b600060019050600660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061215e5750600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561216857600090505b612174878787846125db565b50505050505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000600a5414801561225757506000601254145b6122c257600a54600b81905550600c54600d81905550600e54600f819055506010546011819055506012546013819055506014546015819055506000600a819055506000600c819055506000600e819055506000601081905550600060128190555060006014819055505b565b600b54600a81905550600d54600c81905550600f54600e81905550601154601081905550601354601281905550601554601481905550565b505050565b6001601960006101000a81548160ff02191690831515021790555060004790506000600a546014548461233491906138c2565b61233e919061394b565b9050600060028261234f919061394b565b90506000818361235f919061397c565b90506123758186612370919061397c565b612608565b60008447612383919061397c565b9050612407600760019054906101000a900473ffffffffffffffffffffffffffffffffffffffff166002600a6014546123bc91906138c2565b6123c6919061394b565b600a80546123d491906138c2565b6123de919061397c565b600a600c546123ed91906138c2565b846123f891906138c2565b612402919061394b565b61287e565b612489600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166002600a60145461243e91906138c2565b612448919061394b565b600a805461245691906138c2565b612460919061397c565b600a600e5461246f91906138c2565b8461247a91906138c2565b612484919061394b565b61287e565b61250b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166002600a6014546124c091906138c2565b6124ca919061394b565b600a80546124d891906138c2565b6124e2919061397c565b600a6010546124f191906138c2565b846124fc91906138c2565b612506919061394b565b61287e565b60006002600a60145461251e91906138c2565b612528919061394b565b600a805461253691906138c2565b612540919061397c565b6002600a60145461255191906138c2565b61255b919061394b565b8361256691906138c2565b612570919061394b565b905061257c83826128c9565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618482856040516125af939291906139b0565b60405180910390a15050505050506000601960006101000a81548160ff02191690831515021790555050565b806125e9576125e8612243565b5b6125f48484846129aa565b80612602576126016122c4565b5b50505050565b6000600267ffffffffffffffff811115612625576126246139e7565b5b6040519080825280602002602001820160405280156126535781602001602082028036833780820191505090505b509050308160008151811061266b5761266a613a16565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612710573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127349190613a5a565b8160018151811061274857612747613a16565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506127ad307f000000000000000000000000000000000000000000000000000000000000000084611bff565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040161280f959493929190613b80565b600060405180830381600087803b15801561282957600080fd5b505af115801561283d573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a78282604051612872929190613bda565b60405180910390a15050565b8173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156128c4573d6000803e3d6000fd5b505050565b6128f4307f000000000000000000000000000000000000000000000000000000000000000084611bff565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008061293e61127a565b426040518863ffffffff1660e01b815260040161296096959493929190613c0a565b60606040518083038185885af115801561297e573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906129a39190613c80565b5050505050565b60006129b582612b4e565b9050816000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612a01919061397c565b6000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550806000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612a8d91906132b8565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612ad98483612b76565b612ae38483612c1d565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612b409190612fec565b60405180910390a350505050565b600080612b5a83612d31565b905060008184612b6a919061397c565b90508092505050919050565b6000606460125483612b8891906138c2565b612b92919061394b565b90506000811115612c185780600254612bab919061397c565b600281905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612c0f9190612fec565b60405180910390a35b505050565b60006064600a5483612c2f91906138c2565b612c39919061394b565b9050806000803073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612c8591906132b8565b6000803073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612d249190612fec565b60405180910390a3505050565b600080601254600a54612d4491906132b8565b9050600060648285612d5691906138c2565b612d60919061394b565b90508092505050919050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612da6578082015181840152602081019050612d8b565b83811115612db5576000848401525b50505050565b6000601f19601f8301169050919050565b6000612dd782612d6c565b612de18185612d77565b9350612df1818560208601612d88565b612dfa81612dbb565b840191505092915050565b60006020820190508181036000830152612e1f8184612dcc565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612e5782612e2c565b9050919050565b612e6781612e4c565b8114612e7257600080fd5b50565b600081359050612e8481612e5e565b92915050565b6000819050919050565b612e9d81612e8a565b8114612ea857600080fd5b50565b600081359050612eba81612e94565b92915050565b60008060408385031215612ed757612ed6612e27565b5b6000612ee585828601612e75565b9250506020612ef685828601612eab565b9150509250929050565b60008115159050919050565b612f1581612f00565b82525050565b6000602082019050612f306000830184612f0c565b92915050565b600060208284031215612f4c57612f4b612e27565b5b6000612f5a84828501612e75565b91505092915050565b6000819050919050565b6000612f88612f83612f7e84612e2c565b612f63565b612e2c565b9050919050565b6000612f9a82612f6d565b9050919050565b6000612fac82612f8f565b9050919050565b612fbc81612fa1565b82525050565b6000602082019050612fd76000830184612fb3565b92915050565b612fe681612e8a565b82525050565b60006020820190506130016000830184612fdd565b92915050565b60006020828403121561301d5761301c612e27565b5b600061302b84828501612eab565b91505092915050565b60008060006060848603121561304d5761304c612e27565b5b600061305b86828701612e75565b935050602061306c86828701612e75565b925050604061307d86828701612eab565b9150509250925092565b61309081612e4c565b82525050565b60006020820190506130ab6000830184613087565b92915050565b600060ff82169050919050565b6130c7816130b1565b82525050565b60006020820190506130e260008301846130be565b92915050565b60006130f382612e2c565b9050919050565b613103816130e8565b82525050565b600060208201905061311e60008301846130fa565b92915050565b61312d81612f00565b811461313857600080fd5b50565b60008135905061314a81613124565b92915050565b60006020828403121561316657613165612e27565b5b60006131748482850161313b565b91505092915050565b6000806040838503121561319457613193612e27565b5b60006131a285828601612e75565b92505060206131b385828601612e75565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061320457607f821691505b602082108103613217576132166131bd565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613253602083612d77565b915061325e8261321d565b602082019050919050565b6000602082019050818103600083015261328281613246565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006132c382612e8a565b91506132ce83612e8a565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561330357613302613289565b5b828201905092915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b600061336a602883612d77565b91506133758261330e565b604082019050919050565b600060208201905081810360008301526133998161335d565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b60006133fc602583612d77565b9150613407826133a0565b604082019050919050565b6000602082019050818103600083015261342b816133ef565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061348e602683612d77565b915061349982613432565b604082019050919050565b600060208201905081810360008301526134bd81613481565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000613520602483612d77565b915061352b826134c4565b604082019050919050565b6000602082019050818103600083015261354f81613513565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006135b2602283612d77565b91506135bd82613556565b604082019050919050565b600060208201905081810360008301526135e1816135a5565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000613644602583612d77565b915061364f826135e8565b604082019050919050565b6000602082019050818103600083015261367381613637565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006136d6602383612d77565b91506136e18261367a565b604082019050919050565b60006020820190508181036000830152613705816136c9565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b6000613768602983612d77565b91506137738261370c565b604082019050919050565b600060208201905081810360008301526137978161375b565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006137fa602683612d77565b91506138058261379e565b604082019050919050565b60006020820190508181036000830152613829816137ed565b9050919050565b7f5472616e7366657220616d6f756e74206578636565647320746865206d61785460008201527f78416d6f756e742e000000000000000000000000000000000000000000000000602082015250565b600061388c602883612d77565b915061389782613830565b604082019050919050565b600060208201905081810360008301526138bb8161387f565b9050919050565b60006138cd82612e8a565b91506138d883612e8a565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561391157613910613289565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061395682612e8a565b915061396183612e8a565b9250826139715761397061391c565b5b828204905092915050565b600061398782612e8a565b915061399283612e8a565b9250828210156139a5576139a4613289565b5b828203905092915050565b60006060820190506139c56000830186612fdd565b6139d26020830185612fdd565b6139df6040830184612fdd565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050613a5481612e5e565b92915050565b600060208284031215613a7057613a6f612e27565b5b6000613a7e84828501613a45565b91505092915050565b6000819050919050565b6000613aac613aa7613aa284613a87565b612f63565b612e8a565b9050919050565b613abc81613a91565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b613af781612e4c565b82525050565b6000613b098383613aee565b60208301905092915050565b6000602082019050919050565b6000613b2d82613ac2565b613b378185613acd565b9350613b4283613ade565b8060005b83811015613b73578151613b5a8882613afd565b9750613b6583613b15565b925050600181019050613b46565b5085935050505092915050565b600060a082019050613b956000830188612fdd565b613ba26020830187613ab3565b8181036040830152613bb48186613b22565b9050613bc36060830185613087565b613bd06080830184612fdd565b9695505050505050565b6000604082019050613bef6000830185612fdd565b8181036020830152613c018184613b22565b90509392505050565b600060c082019050613c1f6000830189613087565b613c2c6020830188612fdd565b613c396040830187613ab3565b613c466060830186613ab3565b613c536080830185613087565b613c6060a0830184612fdd565b979650505050505050565b600081519050613c7a81612e94565b92915050565b600080600060608486031215613c9957613c98612e27565b5b6000613ca786828701613c6b565b9350506020613cb886828701613c6b565b9250506040613cc986828701613c6b565b915050925092509256fea264697066735822122000fb434c88b1506dbc94b12a50cf6558af28dd762369727703e839876dff2d7a64736f6c634300080f003300000000000000000000000000000000000000000000000000000000000001e00000000000000000000000000000000000000000000000000000000000000220000000000000000000000000000000000000000000000000000000003b9aca000000000000000000000000000000000000000000000000000000000000000012000000000000000000000000940edb202f5b449d987afa4d8fd65910f40a42c6000000000000000000000000000000000000000000000000000000000000dead000000000000000000000000000000000000000000000000000000000000dead0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d000000000000000000000000e2c1470d8e3f8cafd7205de006987e7f8edef9ad000000000000000000000000000000000000000000000000000000000000dead000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004434841440000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044348414400000000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x6080604052600436106102605760003560e01c8063715018a611610144578063afcf2fc4116100b6578063dd62ed3e1161007a578063dd62ed3e146108f9578063ea2f0b3714610936578063ec28438a1461095f578063edc2fcfb14610988578063f0f165af146109b1578063f2fde38b146109da57610267565b8063afcf2fc414610826578063c0b0fda214610851578063c49b9a801461087c578063caccd7f7146108a5578063dcc345f2146108d057610267565b806395d89b411161010857806395d89b4114610702578063a073d37f1461072d578063a457c2d714610758578063a5ece94114610795578063a9059cbb146107c0578063a94c8dd2146107fd57610267565b8063715018a6146106415780637d1db4a5146106585780638a0623b4146106835780638da5cb5b146106ae578063906e9dd0146106d957610267565b806339509351116101dd5780634a74bb02116101a15780634a74bb02146105215780634bf2c7c91461054c5780635342acb414610575578063625e764c146105b25780636c317232146105db57806370a082311461060457610267565b8063395093511461043a57806340f8007a14610477578063437823ec146104a257806348de478e146104cb57806349bd5a5e146104f657610267565b806320c7c5961161022457806320c7c5961461035357806322976e0d1461037c57806323b872dd146103a757806327c8f835146103e4578063313ce5671461040f57610267565b806306fdde031461026c578063095ea7b3146102975780630c9be46d146102d45780631694505e146102fd57806318160ddd1461032857610267565b3661026757005b600080fd5b34801561027857600080fd5b50610281610a03565b60405161028e9190612e05565b60405180910390f35b3480156102a357600080fd5b506102be60048036038101906102b99190612ec0565b610a95565b6040516102cb9190612f1b565b60405180910390f35b3480156102e057600080fd5b506102fb60048036038101906102f69190612f36565b610ab3565b005b34801561030957600080fd5b50610312610b73565b60405161031f9190612fc2565b60405180910390f35b34801561033457600080fd5b5061033d610b97565b60405161034a9190612fec565b60405180910390f35b34801561035f57600080fd5b5061037a60048036038101906103759190613007565b610ba1565b005b34801561038857600080fd5b50610391610c57565b60405161039e9190612fec565b60405180910390f35b3480156103b357600080fd5b506103ce60048036038101906103c99190613034565b610c5d565b6040516103db9190612f1b565b60405180910390f35b3480156103f057600080fd5b506103f9610d55565b6040516104069190613096565b60405180910390f35b34801561041b57600080fd5b50610424610d79565b60405161043191906130cd565b60405180910390f35b34801561044657600080fd5b50610461600480360381019061045c9190612ec0565b610d90565b60405161046e9190612f1b565b60405180910390f35b34801561048357600080fd5b5061048c610e3c565b6040516104999190612fec565b60405180910390f35b3480156104ae57600080fd5b506104c960048036038101906104c49190612f36565b610e42565b005b3480156104d757600080fd5b506104e0610f19565b6040516104ed9190612fec565b60405180910390f35b34801561050257600080fd5b5061050b610f1f565b6040516105189190613096565b60405180910390f35b34801561052d57600080fd5b50610536610f43565b6040516105439190612f1b565b60405180910390f35b34801561055857600080fd5b50610573600480360381019061056e9190613007565b610f56565b005b34801561058157600080fd5b5061059c60048036038101906105979190612f36565b610fdc565b6040516105a99190612f1b565b60405180910390f35b3480156105be57600080fd5b506105d960048036038101906105d49190613007565b611032565b005b3480156105e757600080fd5b5061060260048036038101906105fd9190613007565b6110e8565b005b34801561061057600080fd5b5061062b60048036038101906106269190612f36565b61119e565b6040516106389190612fec565b60405180910390f35b34801561064d57600080fd5b506106566111e6565b005b34801561066457600080fd5b5061066d61126e565b60405161067a9190612fec565b60405180910390f35b34801561068f57600080fd5b50610698611274565b6040516106a59190612fec565b60405180910390f35b3480156106ba57600080fd5b506106c361127a565b6040516106d09190613096565b60405180910390f35b3480156106e557600080fd5b5061070060048036038101906106fb9190612f36565b6112a4565b005b34801561070e57600080fd5b50610717611364565b6040516107249190612e05565b60405180910390f35b34801561073957600080fd5b506107426113f6565b60405161074f9190612fec565b60405180910390f35b34801561076457600080fd5b5061077f600480360381019061077a9190612ec0565b611400565b60405161078c9190612f1b565b60405180910390f35b3480156107a157600080fd5b506107aa6114eb565b6040516107b79190613109565b60405180910390f35b3480156107cc57600080fd5b506107e760048036038101906107e29190612ec0565b611511565b6040516107f49190612f1b565b60405180910390f35b34801561080957600080fd5b50610824600480360381019061081f9190613007565b61152f565b005b34801561083257600080fd5b5061083b6115e5565b6040516108489190613109565b60405180910390f35b34801561085d57600080fd5b5061086661160b565b6040516108739190612fec565b60405180910390f35b34801561088857600080fd5b506108a3600480360381019061089e9190613150565b611611565b005b3480156108b157600080fd5b506108ba6116e1565b6040516108c79190613109565b60405180910390f35b3480156108dc57600080fd5b506108f760048036038101906108f29190612f36565b611707565b005b34801561090557600080fd5b50610920600480360381019061091b919061317d565b6117c7565b60405161092d9190612fec565b60405180910390f35b34801561094257600080fd5b5061095d60048036038101906109589190612f36565b61184e565b005b34801561096b57600080fd5b5061098660048036038101906109819190613007565b611925565b005b34801561099457600080fd5b506109af60048036038101906109aa9190613150565b6119ab565b005b3480156109bd57600080fd5b506109d860048036038101906109d39190613007565b611a7a565b005b3480156109e657600080fd5b50610a0160048036038101906109fc9190612f36565b611b00565b005b606060038054610a12906131ec565b80601f0160208091040260200160405190810160405280929190818152602001828054610a3e906131ec565b8015610a8b5780601f10610a6057610100808354040283529160200191610a8b565b820191906000526020600020905b815481529060010190602001808311610a6e57829003601f168201915b5050505050905090565b6000610aa9610aa2611bf7565b8484611bff565b6001905092915050565b610abb611bf7565b73ffffffffffffffffffffffffffffffffffffffff16610ad961127a565b73ffffffffffffffffffffffffffffffffffffffff1614610b2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b2690613269565b60405180910390fd5b80600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b610ba9611bf7565b73ffffffffffffffffffffffffffffffffffffffff16610bc761127a565b73ffffffffffffffffffffffffffffffffffffffff1614610c1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c1490613269565b60405180910390fd5b80601081905550601054600e54600c54601454610c3a91906132b8565b610c4491906132b8565b610c4e91906132b8565b600a8190555050565b600c5481565b6000610c6a848484611dc8565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610cb5611bf7565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610d35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2c90613380565b60405180910390fd5b610d4985610d41611bf7565b858403611bff565b60019150509392505050565b7f000000000000000000000000000000000000000000000000000000000000dead81565b6000600760009054906101000a900460ff16905090565b6000610e32610d9d611bf7565b848460016000610dab611bf7565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610e2d91906132b8565b611bff565b6001905092915050565b60105481565b610e4a611bf7565b73ffffffffffffffffffffffffffffffffffffffff16610e6861127a565b73ffffffffffffffffffffffffffffffffffffffff1614610ebe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb590613269565b60405180910390fd5b6001600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600e5481565b7f000000000000000000000000c7c0a40dde5eb6e857aa10a5f7100b282854b52a81565b601960019054906101000a900460ff1681565b610f5e611bf7565b73ffffffffffffffffffffffffffffffffffffffff16610f7c61127a565b73ffffffffffffffffffffffffffffffffffffffff1614610fd2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fc990613269565b60405180910390fd5b8060128190555050565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b61103a611bf7565b73ffffffffffffffffffffffffffffffffffffffff1661105861127a565b73ffffffffffffffffffffffffffffffffffffffff16146110ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110a590613269565b60405180910390fd5b80600c81905550601054600e54600c546014546110cb91906132b8565b6110d591906132b8565b6110df91906132b8565b600a8190555050565b6110f0611bf7565b73ffffffffffffffffffffffffffffffffffffffff1661110e61127a565b73ffffffffffffffffffffffffffffffffffffffff1614611164576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115b90613269565b60405180910390fd5b80600e81905550601054600e54600c5460145461118191906132b8565b61118b91906132b8565b61119591906132b8565b600a8190555050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6111ee611bf7565b73ffffffffffffffffffffffffffffffffffffffff1661120c61127a565b73ffffffffffffffffffffffffffffffffffffffff1614611262576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161125990613269565b60405180910390fd5b61126c600061217d565b565b60165481565b60145481565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6112ac611bf7565b73ffffffffffffffffffffffffffffffffffffffff166112ca61127a565b73ffffffffffffffffffffffffffffffffffffffff1614611320576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131790613269565b60405180910390fd5b80600760016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b606060048054611373906131ec565b80601f016020809104026020016040519081016040528092919081815260200182805461139f906131ec565b80156113ec5780601f106113c1576101008083540402835291602001916113ec565b820191906000526020600020905b8154815290600101906020018083116113cf57829003601f168201915b5050505050905090565b6000601854905090565b6000806001600061140f611bf7565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050828110156114cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114c390613412565b60405180910390fd5b6114e06114d7611bf7565b85858403611bff565b600191505092915050565b600760019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600061152561151e611bf7565b8484611dc8565b6001905092915050565b611537611bf7565b73ffffffffffffffffffffffffffffffffffffffff1661155561127a565b73ffffffffffffffffffffffffffffffffffffffff16146115ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115a290613269565b60405180910390fd5b80601481905550601054600e54600c546014546115c891906132b8565b6115d291906132b8565b6115dc91906132b8565b600a8190555050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60125481565b611619611bf7565b73ffffffffffffffffffffffffffffffffffffffff1661163761127a565b73ffffffffffffffffffffffffffffffffffffffff161461168d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161168490613269565b60405180910390fd5b80601960016101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159816040516116d69190612f1b565b60405180910390a150565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61170f611bf7565b73ffffffffffffffffffffffffffffffffffffffff1661172d61127a565b73ffffffffffffffffffffffffffffffffffffffff1614611783576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161177a90613269565b60405180910390fd5b80600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611856611bf7565b73ffffffffffffffffffffffffffffffffffffffff1661187461127a565b73ffffffffffffffffffffffffffffffffffffffff16146118ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118c190613269565b60405180910390fd5b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b61192d611bf7565b73ffffffffffffffffffffffffffffffffffffffff1661194b61127a565b73ffffffffffffffffffffffffffffffffffffffff16146119a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199890613269565b60405180910390fd5b8060168190555050565b6119b3611bf7565b73ffffffffffffffffffffffffffffffffffffffff166119d161127a565b73ffffffffffffffffffffffffffffffffffffffff1614611a27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a1e90613269565b60405180910390fd5b8015611a5b57611a376000611611565b611a3f612243565b601654601781905550611a50610b97565b601681905550611a77565b611a656001611611565b611a6d6122c4565b6017546016819055505b50565b611a82611bf7565b73ffffffffffffffffffffffffffffffffffffffff16611aa061127a565b73ffffffffffffffffffffffffffffffffffffffff1614611af6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aed90613269565b60405180910390fd5b8060188190555050565b611b08611bf7565b73ffffffffffffffffffffffffffffffffffffffff16611b2661127a565b73ffffffffffffffffffffffffffffffffffffffff1614611b7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b7390613269565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611beb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611be2906134a4565b60405180910390fd5b611bf48161217d565b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611c6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c6590613536565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611cdd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cd4906135c8565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611dbb9190612fec565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611e37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e2e9061365a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611ea6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e9d906136ec565b60405180910390fd5b60008111611ee9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ee09061377e565b60405180910390fd5b6000611ef48461119e565b905081811015611f39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3090613810565b60405180910390fd5b611f4161127a565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614158015611faf5750611f7f61127a565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b15611ffa57601654821115611ff9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ff0906138a2565b60405180910390fd5b5b6120058484846122fc565b60006120103061119e565b905060006018548210159050601960009054906101000a900460ff161580156120455750601960019054906101000a900460ff165b801561209c57507f000000000000000000000000c7c0a40dde5eb6e857aa10a5f7100b282854b52a73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16145b156120b75780156120b65760185491506120b582612301565b5b5b600060019050600660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061215e5750600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561216857600090505b612174878787846125db565b50505050505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000600a5414801561225757506000601254145b6122c257600a54600b81905550600c54600d81905550600e54600f819055506010546011819055506012546013819055506014546015819055506000600a819055506000600c819055506000600e819055506000601081905550600060128190555060006014819055505b565b600b54600a81905550600d54600c81905550600f54600e81905550601154601081905550601354601281905550601554601481905550565b505050565b6001601960006101000a81548160ff02191690831515021790555060004790506000600a546014548461233491906138c2565b61233e919061394b565b9050600060028261234f919061394b565b90506000818361235f919061397c565b90506123758186612370919061397c565b612608565b60008447612383919061397c565b9050612407600760019054906101000a900473ffffffffffffffffffffffffffffffffffffffff166002600a6014546123bc91906138c2565b6123c6919061394b565b600a80546123d491906138c2565b6123de919061397c565b600a600c546123ed91906138c2565b846123f891906138c2565b612402919061394b565b61287e565b612489600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166002600a60145461243e91906138c2565b612448919061394b565b600a805461245691906138c2565b612460919061397c565b600a600e5461246f91906138c2565b8461247a91906138c2565b612484919061394b565b61287e565b61250b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166002600a6014546124c091906138c2565b6124ca919061394b565b600a80546124d891906138c2565b6124e2919061397c565b600a6010546124f191906138c2565b846124fc91906138c2565b612506919061394b565b61287e565b60006002600a60145461251e91906138c2565b612528919061394b565b600a805461253691906138c2565b612540919061397c565b6002600a60145461255191906138c2565b61255b919061394b565b8361256691906138c2565b612570919061394b565b905061257c83826128c9565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618482856040516125af939291906139b0565b60405180910390a15050505050506000601960006101000a81548160ff02191690831515021790555050565b806125e9576125e8612243565b5b6125f48484846129aa565b80612602576126016122c4565b5b50505050565b6000600267ffffffffffffffff811115612625576126246139e7565b5b6040519080825280602002602001820160405280156126535781602001602082028036833780820191505090505b509050308160008151811061266b5761266a613a16565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612710573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127349190613a5a565b8160018151811061274857612747613a16565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506127ad307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611bff565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040161280f959493929190613b80565b600060405180830381600087803b15801561282957600080fd5b505af115801561283d573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a78282604051612872929190613bda565b60405180910390a15050565b8173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156128c4573d6000803e3d6000fd5b505050565b6128f4307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611bff565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008061293e61127a565b426040518863ffffffff1660e01b815260040161296096959493929190613c0a565b60606040518083038185885af115801561297e573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906129a39190613c80565b5050505050565b60006129b582612b4e565b9050816000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612a01919061397c565b6000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550806000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612a8d91906132b8565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612ad98483612b76565b612ae38483612c1d565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612b409190612fec565b60405180910390a350505050565b600080612b5a83612d31565b905060008184612b6a919061397c565b90508092505050919050565b6000606460125483612b8891906138c2565b612b92919061394b565b90506000811115612c185780600254612bab919061397c565b600281905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612c0f9190612fec565b60405180910390a35b505050565b60006064600a5483612c2f91906138c2565b612c39919061394b565b9050806000803073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612c8591906132b8565b6000803073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612d249190612fec565b60405180910390a3505050565b600080601254600a54612d4491906132b8565b9050600060648285612d5691906138c2565b612d60919061394b565b90508092505050919050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612da6578082015181840152602081019050612d8b565b83811115612db5576000848401525b50505050565b6000601f19601f8301169050919050565b6000612dd782612d6c565b612de18185612d77565b9350612df1818560208601612d88565b612dfa81612dbb565b840191505092915050565b60006020820190508181036000830152612e1f8184612dcc565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612e5782612e2c565b9050919050565b612e6781612e4c565b8114612e7257600080fd5b50565b600081359050612e8481612e5e565b92915050565b6000819050919050565b612e9d81612e8a565b8114612ea857600080fd5b50565b600081359050612eba81612e94565b92915050565b60008060408385031215612ed757612ed6612e27565b5b6000612ee585828601612e75565b9250506020612ef685828601612eab565b9150509250929050565b60008115159050919050565b612f1581612f00565b82525050565b6000602082019050612f306000830184612f0c565b92915050565b600060208284031215612f4c57612f4b612e27565b5b6000612f5a84828501612e75565b91505092915050565b6000819050919050565b6000612f88612f83612f7e84612e2c565b612f63565b612e2c565b9050919050565b6000612f9a82612f6d565b9050919050565b6000612fac82612f8f565b9050919050565b612fbc81612fa1565b82525050565b6000602082019050612fd76000830184612fb3565b92915050565b612fe681612e8a565b82525050565b60006020820190506130016000830184612fdd565b92915050565b60006020828403121561301d5761301c612e27565b5b600061302b84828501612eab565b91505092915050565b60008060006060848603121561304d5761304c612e27565b5b600061305b86828701612e75565b935050602061306c86828701612e75565b925050604061307d86828701612eab565b9150509250925092565b61309081612e4c565b82525050565b60006020820190506130ab6000830184613087565b92915050565b600060ff82169050919050565b6130c7816130b1565b82525050565b60006020820190506130e260008301846130be565b92915050565b60006130f382612e2c565b9050919050565b613103816130e8565b82525050565b600060208201905061311e60008301846130fa565b92915050565b61312d81612f00565b811461313857600080fd5b50565b60008135905061314a81613124565b92915050565b60006020828403121561316657613165612e27565b5b60006131748482850161313b565b91505092915050565b6000806040838503121561319457613193612e27565b5b60006131a285828601612e75565b92505060206131b385828601612e75565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061320457607f821691505b602082108103613217576132166131bd565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613253602083612d77565b915061325e8261321d565b602082019050919050565b6000602082019050818103600083015261328281613246565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006132c382612e8a565b91506132ce83612e8a565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561330357613302613289565b5b828201905092915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b600061336a602883612d77565b91506133758261330e565b604082019050919050565b600060208201905081810360008301526133998161335d565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b60006133fc602583612d77565b9150613407826133a0565b604082019050919050565b6000602082019050818103600083015261342b816133ef565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061348e602683612d77565b915061349982613432565b604082019050919050565b600060208201905081810360008301526134bd81613481565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000613520602483612d77565b915061352b826134c4565b604082019050919050565b6000602082019050818103600083015261354f81613513565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006135b2602283612d77565b91506135bd82613556565b604082019050919050565b600060208201905081810360008301526135e1816135a5565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000613644602583612d77565b915061364f826135e8565b604082019050919050565b6000602082019050818103600083015261367381613637565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006136d6602383612d77565b91506136e18261367a565b604082019050919050565b60006020820190508181036000830152613705816136c9565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b6000613768602983612d77565b91506137738261370c565b604082019050919050565b600060208201905081810360008301526137978161375b565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006137fa602683612d77565b91506138058261379e565b604082019050919050565b60006020820190508181036000830152613829816137ed565b9050919050565b7f5472616e7366657220616d6f756e74206578636565647320746865206d61785460008201527f78416d6f756e742e000000000000000000000000000000000000000000000000602082015250565b600061388c602883612d77565b915061389782613830565b604082019050919050565b600060208201905081810360008301526138bb8161387f565b9050919050565b60006138cd82612e8a565b91506138d883612e8a565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561391157613910613289565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061395682612e8a565b915061396183612e8a565b9250826139715761397061391c565b5b828204905092915050565b600061398782612e8a565b915061399283612e8a565b9250828210156139a5576139a4613289565b5b828203905092915050565b60006060820190506139c56000830186612fdd565b6139d26020830185612fdd565b6139df6040830184612fdd565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050613a5481612e5e565b92915050565b600060208284031215613a7057613a6f612e27565b5b6000613a7e84828501613a45565b91505092915050565b6000819050919050565b6000613aac613aa7613aa284613a87565b612f63565b612e8a565b9050919050565b613abc81613a91565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b613af781612e4c565b82525050565b6000613b098383613aee565b60208301905092915050565b6000602082019050919050565b6000613b2d82613ac2565b613b378185613acd565b9350613b4283613ade565b8060005b83811015613b73578151613b5a8882613afd565b9750613b6583613b15565b925050600181019050613b46565b5085935050505092915050565b600060a082019050613b956000830188612fdd565b613ba26020830187613ab3565b8181036040830152613bb48186613b22565b9050613bc36060830185613087565b613bd06080830184612fdd565b9695505050505050565b6000604082019050613bef6000830185612fdd565b8181036020830152613c018184613b22565b90509392505050565b600060c082019050613c1f6000830189613087565b613c2c6020830188612fdd565b613c396040830187613ab3565b613c466060830186613ab3565b613c536080830185613087565b613c6060a0830184612fdd565b979650505050505050565b600081519050613c7a81612e94565b92915050565b600080600060608486031215613c9957613c98612e27565b5b6000613ca786828701613c6b565b9350506020613cb886828701613c6b565b9250506040613cc986828701613c6b565b915050925092509256fea264697066735822122000fb434c88b1506dbc94b12a50cf6558af28dd762369727703e839876dff2d7a64736f6c634300080f0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000000000000000000000000000000000000000001e00000000000000000000000000000000000000000000000000000000000000220000000000000000000000000000000000000000000000000000000003b9aca000000000000000000000000000000000000000000000000000000000000000012000000000000000000000000940edb202f5b449d987afa4d8fd65910f40a42c6000000000000000000000000000000000000000000000000000000000000dead000000000000000000000000000000000000000000000000000000000000dead0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d000000000000000000000000e2c1470d8e3f8cafd7205de006987e7f8edef9ad000000000000000000000000000000000000000000000000000000000000dead000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004434841440000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044348414400000000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : name_ (string): CHAD
Arg [1] : symbol_ (string): CHAD
Arg [2] : totalSupply_ (uint256): 1000000000
Arg [3] : decimals_ (uint8): 18
Arg [4] : addr_ (address[6]): 0x940eDB202F5b449D987afA4d8fd65910F40A42c6,0x000000000000000000000000000000000000dEaD,0x000000000000000000000000000000000000dEaD,0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D,0xe2c1470D8E3f8cAFd7205DE006987E7F8EdeF9Ad,0x000000000000000000000000000000000000dEaD
Arg [5] : value_ (uint256[5]): 4,0,0,1,0
-----Encoded View---------------
19 Constructor Arguments found :
Arg [0] : 00000000000000000000000000000000000000000000000000000000000001e0
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000220
Arg [2] : 000000000000000000000000000000000000000000000000000000003b9aca00
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000012
Arg [4] : 000000000000000000000000940edb202f5b449d987afa4d8fd65910f40a42c6
Arg [5] : 000000000000000000000000000000000000000000000000000000000000dead
Arg [6] : 000000000000000000000000000000000000000000000000000000000000dead
Arg [7] : 0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d
Arg [8] : 000000000000000000000000e2c1470d8e3f8cafd7205de006987e7f8edef9ad
Arg [9] : 000000000000000000000000000000000000000000000000000000000000dead
Arg [10] : 0000000000000000000000000000000000000000000000000000000000000004
Arg [11] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [12] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [13] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [14] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [15] : 0000000000000000000000000000000000000000000000000000000000000004
Arg [16] : 4348414400000000000000000000000000000000000000000000000000000000
Arg [17] : 0000000000000000000000000000000000000000000000000000000000000004
Arg [18] : 4348414400000000000000000000000000000000000000000000000000000000
Deployed Bytecode Sourcemap
37122:14950:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17433:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19741:210;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43071:131;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38155:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18553:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42317:257;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37631:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20433:529;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37434:90;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41143:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21371:297;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37793:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43638:111;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37712:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38213:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38288:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41668:95;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43506:124;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41771:265;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42044;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18724:177;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14599:103;;;;;;;;;;;;;:::i;:::-;;38030:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37941:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13948:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42777:139;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17652:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41251:120;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22171:482;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37298:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19114:216;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41379:281;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37390:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37870:23;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43210:171;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37344:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42924:139;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19393:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43757:110;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43389:109;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51515:406;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42582:187;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14857:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17433:100;17487:13;17520:5;17513:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17433:100;:::o;19741:210::-;19860:4;19882:39;19891:12;:10;:12::i;:::-;19905:7;19914:6;19882:8;:39::i;:::-;19939:4;19932:11;;19741:210;;;;:::o;43071:131::-;14179:12;:10;:12::i;:::-;14168:23;;:7;:5;:7::i;:::-;:23;;;14160:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43178:15:::1;43153:14;;:41;;;;;;;;;;;;;;;;;;43071:131:::0;:::o;38155:51::-;;;:::o;18553:108::-;18614:7;18641:12;;18634:19;;18553:108;:::o;42317:257::-;14179:12;:10;:12::i;:::-;14168:23;;:7;:5;:7::i;:::-;:23;;;14160:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42405:11:::1;42391;:25;;;;42555:11;;42526:13;;42497;;42464:17;;:46;;;;:::i;:::-;:75;;;;:::i;:::-;:102;;;;:::i;:::-;42427:21;:139;;;;42317:257:::0;:::o;37631:28::-;;;;:::o;20433:529::-;20573:4;20590:36;20600:6;20608:9;20619:6;20590:9;:36::i;:::-;20639:24;20666:11;:19;20678:6;20666:19;;;;;;;;;;;;;;;:33;20686:12;:10;:12::i;:::-;20666:33;;;;;;;;;;;;;;;;20639:60;;20752:6;20732:16;:26;;20710:116;;;;;;;;;;;;:::i;:::-;;;;;;;;;20862:57;20871:6;20879:12;:10;:12::i;:::-;20912:6;20893:16;:25;20862:8;:57::i;:::-;20950:4;20943:11;;;20433:529;;;;;:::o;37434:90::-;;;:::o;41143:100::-;41201:5;41226:9;;;;;;;;;;;41219:16;;41143:100;:::o;21371:297::-;21486:4;21508:130;21531:12;:10;:12::i;:::-;21558:7;21617:10;21580:11;:25;21592:12;:10;:12::i;:::-;21580:25;;;;;;;;;;;;;;;:34;21606:7;21580:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;21508:8;:130::i;:::-;21656:4;21649:11;;21371:297;;;;:::o;37793:26::-;;;;:::o;43638:111::-;14179:12;:10;:12::i;:::-;14168:23;;:7;:5;:7::i;:::-;:23;;;14160:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43737:4:::1;43707:18;:27;43726:7;43707:27;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;43638:111:::0;:::o;37712:28::-;;;;:::o;38213:38::-;;;:::o;38288:40::-;;;;;;;;;;;;;:::o;41668:95::-;14179:12;:10;:12::i;:::-;14168:23;;:7;:5;:7::i;:::-;:23;;;14160:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41747:8:::1;41736;:19;;;;41668:95:::0;:::o;43506:124::-;43571:4;43595:18;:27;43614:7;43595:27;;;;;;;;;;;;;;;;;;;;;;;;;43588:34;;43506:124;;;:::o;41771:265::-;14179:12;:10;:12::i;:::-;14168:23;;:7;:5;:7::i;:::-;:23;;;14160:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41865:13:::1;41849;:29;;;;42017:11;;41988:13;;41959;;41926:17;;:46;;;;:::i;:::-;:75;;;;:::i;:::-;:102;;;;:::i;:::-;41889:21;:139;;;;41771:265:::0;:::o;42044:::-;14179:12;:10;:12::i;:::-;14168:23;;:7;:5;:7::i;:::-;:23;;;14160:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42138:13:::1;42122;:29;;;;42290:11;;42261:13;;42232;;42199:17;;:46;;;;:::i;:::-;:75;;;;:::i;:::-;:102;;;;:::i;:::-;42162:21;:139;;;;42044:265:::0;:::o;18724:177::-;18843:7;18875:9;:18;18885:7;18875:18;;;;;;;;;;;;;;;;18868:25;;18724:177;;;:::o;14599:103::-;14179:12;:10;:12::i;:::-;14168:23;;:7;:5;:7::i;:::-;:23;;;14160:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14664:30:::1;14691:1;14664:18;:30::i;:::-;14599:103::o:0;38030:27::-;;;;:::o;37941:32::-;;;;:::o;13948:87::-;13994:7;14021:6;;;;;;;;;;;14014:13;;13948:87;:::o;42777:139::-;14179:12;:10;:12::i;:::-;14168:23;;:7;:5;:7::i;:::-;:23;;;14160:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42890:17:::1;42863:16;;:45;;;;;;;;;;;;;;;;;;42777:139:::0;:::o;17652:104::-;17708:13;17741:7;17734:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17652:104;:::o;41251:120::-;41313:7;41340:23;;41333:30;;41251:120;:::o;22171:482::-;22291:4;22313:24;22340:11;:25;22352:12;:10;:12::i;:::-;22340:25;;;;;;;;;;;;;;;:34;22366:7;22340:34;;;;;;;;;;;;;;;;22313:61;;22427:15;22407:16;:35;;22385:122;;;;;;;;;;;;:::i;:::-;;;;;;;;;22543:67;22552:12;:10;:12::i;:::-;22566:7;22594:15;22575:16;:34;22543:8;:67::i;:::-;22641:4;22634:11;;;22171:482;;;;:::o;37298:39::-;;;;;;;;;;;;;:::o;19114:216::-;19236:4;19258:42;19268:12;:10;:12::i;:::-;19282:9;19293:6;19258:9;:42::i;:::-;19318:4;19311:11;;19114:216;;;;:::o;41379:281::-;14179:12;:10;:12::i;:::-;14168:23;;:7;:5;:7::i;:::-;:23;;;14160:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41485:17:::1;41465;:37;;;;41641:11;;41612:13;;41583;;41550:17;;:46;;;;:::i;:::-;:75;;;;:::i;:::-;:102;;;;:::i;:::-;41513:21;:139;;;;41379:281:::0;:::o;37390:37::-;;;;;;;;;;;;;:::o;37870:23::-;;;;:::o;43210:171::-;14179:12;:10;:12::i;:::-;14168:23;;:7;:5;:7::i;:::-;:23;;;14160:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43311:8:::1;43287:21;;:32;;;;;;;;;;;;;;;;;;43335:38;43364:8;43335:38;;;;;;:::i;:::-;;;;;;;;43210:171:::0;:::o;37344:39::-;;;;;;;;;;;;;:::o;42924:139::-;14179:12;:10;:12::i;:::-;14168:23;;:7;:5;:7::i;:::-;:23;;;14160:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43037:17:::1;43010:16;;:45;;;;;;;;;;;;;;;;;;42924:139:::0;:::o;19393:201::-;19527:7;19559:11;:18;19571:5;19559:18;;;;;;;;;;;;;;;:27;19578:7;19559:27;;;;;;;;;;;;;;;;19552:34;;19393:201;;;;:::o;43757:110::-;14179:12;:10;:12::i;:::-;14168:23;;:7;:5;:7::i;:::-;:23;;;14160:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43854:5:::1;43824:18;:27;43843:7;43824:27;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;43757:110:::0;:::o;43389:109::-;14179:12;:10;:12::i;:::-;14168:23;;:7;:5;:7::i;:::-;:23;;;14160:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43479:11:::1;43464:12;:26;;;;43389:109:::0;:::o;51515:406::-;14179:12;:10;:12::i;:::-;14168:23;;:7;:5;:7::i;:::-;:23;;;14160:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51581:8:::1;51577:337;;;51606:31;51631:5;51606:24;:31::i;:::-;51652:14;:12;:14::i;:::-;51704:12;;51681:20;:35;;;;51746:13;:11;:13::i;:::-;51731:12;:28;;;;51577:337;;;51792:30;51817:4;51792:24;:30::i;:::-;51837:15;:13;:15::i;:::-;51882:20;;51867:12;:35;;;;51577:337;51515:406:::0;:::o;42582:187::-;14179:12;:10;:12::i;:::-;14168:23;;:7;:5;:7::i;:::-;:23;;;14160:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42737:24:::1;42711:23;:50;;;;42582:187:::0;:::o;14857:238::-;14179:12;:10;:12::i;:::-;14168:23;;:7;:5;:7::i;:::-;:23;;;14160:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14980:1:::1;14960:22;;:8;:22;;::::0;14938:110:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;15059:28;15078:8;15059:18;:28::i;:::-;14857:238:::0;:::o;12790:98::-;12843:7;12870:10;12863:17;;12790:98;:::o;25961:380::-;26114:1;26097:19;;:5;:19;;;26089:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;26195:1;26176:21;;:7;:21;;;26168:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;26279:6;26249:11;:18;26261:5;26249:18;;;;;;;;;;;;;;;:27;26268:7;26249:27;;;;;;;;;;;;;;;:36;;;;26317:7;26301:32;;26310:5;26301:32;;;26326:6;26301:32;;;;;;:::i;:::-;;;;;;;;25961:380;;;:::o;43875:1529::-;44042:1;44024:20;;:6;:20;;;44016:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;44126:1;44105:23;;:9;:23;;;44097:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;44196:1;44187:6;:10;44179:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;44254:21;44278:17;44288:6;44278:9;:17::i;:::-;44254:41;;44345:6;44328:13;:23;;44306:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;44442:7;:5;:7::i;:::-;44432:17;;:6;:17;;;;:41;;;;;44466:7;:5;:7::i;:::-;44453:20;;:9;:20;;;;44432:41;44428:198;;;44526:12;;44516:6;:22;;44490:124;;;;;;;;;;;;:::i;:::-;;;;;;;;;44428:198;44638:47;44659:6;44667:9;44678:6;44638:20;:47::i;:::-;44698:28;44729:24;44747:4;44729:9;:24::i;:::-;44698:55;;44764:28;44832:23;;44795:20;:60;;44764:91;;44887:16;;;;;;;;;;;44886:17;:55;;;;;44920:21;;;;;;;;;;;44886:55;:98;;;;;44971:13;44958:26;;:9;:26;;;44886:98;44868:315;;;45015:23;45011:161;;;45082:23;;45059:46;;45124:32;45135:20;45124:10;:32::i;:::-;45011:161;44868:315;45195:12;45210:4;45195:19;;45231:18;:26;45250:6;45231:26;;;;;;;;;;;;;;;;;;;;;;;;;:59;;;;45261:18;:29;45280:9;45261:29;;;;;;;;;;;;;;;;;;;;;;;;;45231:59;45227:107;;;45317:5;45307:15;;45227:107;45346:50;45361:6;45369:9;45380:6;45388:7;45346:14;:50::i;:::-;44005:1399;;;;43875:1529;;;:::o;15255:191::-;15329:16;15348:6;;;;;;;;;;;15329:25;;15374:8;15365:6;;:17;;;;;;;;;;;;;;;;;;15429:8;15398:40;;15419:8;15398:40;;;;;;;;;;;;15318:128;15255:191;:::o;50579:581::-;50651:1;50626:21;;:26;:43;;;;;50668:1;50656:8;;:13;50626:43;50671:7;50622:56;50722:21;;50690:29;:53;;;;50778:13;;50754:21;:37;;;;50826:13;;50802:21;:37;;;;50872:11;;50850:19;:33;;;;50913:8;;50894:16;:27;;;;50960:17;;50932:25;:45;;;;51014:1;50990:21;:25;;;;51042:1;51026:13;:17;;;;51070:1;51054:13;:17;;;;51096:1;51082:11;:15;;;;51119:1;51108:8;:12;;;;51151:1;51131:17;:21;;;;50579:581;:::o;51168:339::-;51236:29;;51212:21;:53;;;;51292:21;;51276:13;:37;;;;51340:21;;51324:13;:37;;;;51386:19;;51372:11;:33;;;;51427:16;;51416:8;:27;;;;51474:25;;51454:17;:45;;;;51168:339::o;26941:125::-;;;;:::o;47235:1548::-;38768:4;38749:16;;:23;;;;;;;;;;;;;;;;;;47316:22:::1;47341:21;47316:46;;47373:22;47456:21;;47422:17;;47399:20;:40;;;;:::i;:::-;47398:79;;;;:::i;:::-;47373:104;;47490:21;47531:1;47514:14;:18;;;;:::i;:::-;47490:42;;47543:26;47589:13;47572:14;:30;;;;:::i;:::-;47543:59;;47613;47653:18;47630:20;:41;;;;:::i;:::-;47613:16;:59::i;:::-;47685:26;47738:14;47714:21;:38;;;;:::i;:::-;47685:67;;47765:203;47800:16;;;;;;;;;;;47954:1;47948:2;47928:17;;:22;;;;:::i;:::-;47927:28;;;;:::i;:::-;47921:2;47897:21:::0;::::1;:26;;;;:::i;:::-;:59;;;;:::i;:::-;47872:2;47856:13;;:18;;;;:::i;:::-;47833;47832:43;;;;:::i;:::-;47831:126;;;;:::i;:::-;47765:20;:203::i;:::-;47979;48014:16;;;;;;;;;;;48168:1;48162:2;48142:17;;:22;;;;:::i;:::-;48141:28;;;;:::i;:::-;48135:2;48111:21:::0;::::1;:26;;;;:::i;:::-;:59;;;;:::i;:::-;48086:2;48070:13;;:18;;;;:::i;:::-;48047;48046:43;;;;:::i;:::-;48045:126;;;;:::i;:::-;47979:20;:203::i;:::-;48193:199;48228:14;;;;;;;;;;;48378:1;48372:2;48352:17;;:22;;;;:::i;:::-;48351:28;;;;:::i;:::-;48345:2;48321:21:::0;::::1;:26;;;;:::i;:::-;:59;;;;:::i;:::-;48296:2;48282:11;;:16;;;;:::i;:::-;48259:18;48258:41;;;;:::i;:::-;48257:124;;;;:::i;:::-;48193:20;:199::i;:::-;48405:24;48574:1;48568:2;48548:17;;:22;;;;:::i;:::-;48547:28;;;;:::i;:::-;48540:2;48516:21:::0;::::1;:26;;;;:::i;:::-;48515:61;;;;:::i;:::-;48495:1;48489:2;48469:17;;:22;;;;:::i;:::-;48468:28;;;;:::i;:::-;48433:18;:64;;;;:::i;:::-;48432:145;;;;:::i;:::-;48405:172;;48590:50;48603:18;48623:16;48590:12;:50::i;:::-;48658:117;48687:13;48715:16;48746:18;48658:117;;;;;;;;:::i;:::-;;;;;;;;47305:1478;;;;;;38814:5:::0;38795:16;;:24;;;;;;;;;;;;;;;;;;47235:1548;:::o;45412:318::-;45558:7;45553:55;;45582:14;:12;:14::i;:::-;45553:55;45620:34;45638:4;45644:2;45648:5;45620:17;:34::i;:::-;45672:7;45667:56;;45696:15;:13;:15::i;:::-;45667:56;45412:318;;;;:::o;48791:658::-;48917:21;48955:1;48941:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48917:40;;48986:4;48968;48973:1;48968:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;49012:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;49002:4;49007:1;49002:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;49047:62;49064:4;49079:15;49097:11;49047:8;:62::i;:::-;49148:15;:66;;;49229:11;49255:1;49299:4;49326;49362:15;49148:240;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49406:35;49423:11;49436:4;49406:35;;;;;;;:::i;:::-;;;;;;;;48846:603;48791:658;:::o;51929:140::-;52035:9;:18;;:26;52054:6;52035:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;51929:140;;:::o;50058:513::-;50206:62;50223:4;50238:15;50256:11;50206:8;:62::i;:::-;50311:15;:31;;;50350:9;50383:4;50403:11;50429:1;50472;50515:7;:5;:7::i;:::-;50537:15;50311:252;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;50058:513;;:::o;45738:426::-;45860:22;45885:26;45904:6;45885:18;:26::i;:::-;45860:51;;45960:6;45942:9;:15;45952:4;45942:15;;;;;;;;;;;;;;;;:24;;;;:::i;:::-;45924:9;:15;45934:4;45924:15;;;;;;;;;;;;;;;:42;;;;46009:14;45993:9;:13;46003:2;45993:13;;;;;;;;;;;;;;;;:30;;;;:::i;:::-;45977:9;:13;45987:2;45977:13;;;;;;;;;;;;;;;:46;;;;46036:29;46052:4;46058:6;46036:15;:29::i;:::-;46076:28;46091:4;46097:6;46076:14;:28::i;:::-;46137:2;46122:34;;46131:4;46122:34;;;46141:14;46122:34;;;;;;:::i;:::-;;;;;;;;45849:315;45738:426;;;:::o;46172:226::-;46238:7;46258:16;46277:28;46298:6;46277:20;:28::i;:::-;46258:47;;46316:22;46350:8;46341:6;:17;;;;:::i;:::-;46316:42;;46376:14;46369:21;;;;46172:226;;;:::o;46674:275::-;46750:15;46790:3;46778:8;;46769:6;:17;;;;:::i;:::-;46768:25;;;;:::i;:::-;46750:43;;46818:1;46808:7;:11;46804:138;;;46866:7;46851:12;;:22;;;;:::i;:::-;46836:12;:37;;;;46918:1;46893:37;;46902:6;46893:37;;;46922:7;46893:37;;;;;;:::i;:::-;;;;;;;;46804:138;46739:210;46674:275;;:::o;46957:270::-;47032:17;47087:3;47062:21;;47053:6;:30;;;;:::i;:::-;47052:38;;;;:::i;:::-;47032:58;;47155:9;47128;:24;47146:4;47128:24;;;;;;;;;;;;;;;;:36;;;;:::i;:::-;47101:9;:24;47119:4;47101:24;;;;;;;;;;;;;;;:63;;;;47205:4;47180:39;;47189:6;47180:39;;;47212:6;47180:39;;;;;;:::i;:::-;;;;;;;;47021:206;46957:270;;:::o;46406:260::-;46501:7;46526:16;46569:8;;46545:21;;:32;;;;:::i;:::-;46526:51;;46588:16;46629:3;46617:8;46608:6;:17;;;;:::i;:::-;46607:25;;;;:::i;:::-;46588:44;;46650:8;46643:15;;;;46406:260;;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:307::-;355:1;365:113;379:6;376:1;373:13;365:113;;;464:1;459:3;455:11;449:18;445:1;440:3;436:11;429:39;401:2;398:1;394:10;389:15;;365:113;;;496:6;493:1;490:13;487:101;;;576:1;567:6;562:3;558:16;551:27;487:101;336:258;287:307;;;:::o;600:102::-;641:6;692:2;688:7;683:2;676:5;672:14;668:28;658:38;;600:102;;;:::o;708:364::-;796:3;824:39;857:5;824:39;:::i;:::-;879:71;943:6;938:3;879:71;:::i;:::-;872:78;;959:52;1004:6;999:3;992:4;985:5;981:16;959:52;:::i;:::-;1036:29;1058:6;1036:29;:::i;:::-;1031:3;1027:39;1020:46;;800:272;708:364;;;;:::o;1078:313::-;1191:4;1229:2;1218:9;1214:18;1206:26;;1278:9;1272:4;1268:20;1264:1;1253:9;1249:17;1242:47;1306:78;1379:4;1370:6;1306:78;:::i;:::-;1298:86;;1078:313;;;;:::o;1478:117::-;1587:1;1584;1577:12;1724:126;1761:7;1801:42;1794:5;1790:54;1779:65;;1724:126;;;:::o;1856:96::-;1893:7;1922:24;1940:5;1922:24;:::i;:::-;1911:35;;1856:96;;;:::o;1958:122::-;2031:24;2049:5;2031:24;:::i;:::-;2024:5;2021:35;2011:63;;2070:1;2067;2060:12;2011:63;1958:122;:::o;2086:139::-;2132:5;2170:6;2157:20;2148:29;;2186:33;2213:5;2186:33;:::i;:::-;2086:139;;;;:::o;2231:77::-;2268:7;2297:5;2286:16;;2231:77;;;:::o;2314:122::-;2387:24;2405:5;2387:24;:::i;:::-;2380:5;2377:35;2367:63;;2426:1;2423;2416:12;2367:63;2314:122;:::o;2442:139::-;2488:5;2526:6;2513:20;2504:29;;2542:33;2569:5;2542:33;:::i;:::-;2442:139;;;;:::o;2587:474::-;2655:6;2663;2712:2;2700:9;2691:7;2687:23;2683:32;2680:119;;;2718:79;;:::i;:::-;2680:119;2838:1;2863:53;2908:7;2899:6;2888:9;2884:22;2863:53;:::i;:::-;2853:63;;2809:117;2965:2;2991:53;3036:7;3027:6;3016:9;3012:22;2991:53;:::i;:::-;2981:63;;2936:118;2587:474;;;;;:::o;3067:90::-;3101:7;3144:5;3137:13;3130:21;3119:32;;3067:90;;;:::o;3163:109::-;3244:21;3259:5;3244:21;:::i;:::-;3239:3;3232:34;3163:109;;:::o;3278:210::-;3365:4;3403:2;3392:9;3388:18;3380:26;;3416:65;3478:1;3467:9;3463:17;3454:6;3416:65;:::i;:::-;3278:210;;;;:::o;3494:329::-;3553:6;3602:2;3590:9;3581:7;3577:23;3573:32;3570:119;;;3608:79;;:::i;:::-;3570:119;3728:1;3753:53;3798:7;3789:6;3778:9;3774:22;3753:53;:::i;:::-;3743:63;;3699:117;3494:329;;;;:::o;3829:60::-;3857:3;3878:5;3871:12;;3829:60;;;:::o;3895:142::-;3945:9;3978:53;3996:34;4005:24;4023:5;4005:24;:::i;:::-;3996:34;:::i;:::-;3978:53;:::i;:::-;3965:66;;3895:142;;;:::o;4043:126::-;4093:9;4126:37;4157:5;4126:37;:::i;:::-;4113:50;;4043:126;;;:::o;4175:153::-;4252:9;4285:37;4316:5;4285:37;:::i;:::-;4272:50;;4175:153;;;:::o;4334:185::-;4448:64;4506:5;4448:64;:::i;:::-;4443:3;4436:77;4334:185;;:::o;4525:276::-;4645:4;4683:2;4672:9;4668:18;4660:26;;4696:98;4791:1;4780:9;4776:17;4767:6;4696:98;:::i;:::-;4525:276;;;;:::o;4807:118::-;4894:24;4912:5;4894:24;:::i;:::-;4889:3;4882:37;4807:118;;:::o;4931:222::-;5024:4;5062:2;5051:9;5047:18;5039:26;;5075:71;5143:1;5132:9;5128:17;5119:6;5075:71;:::i;:::-;4931:222;;;;:::o;5159:329::-;5218:6;5267:2;5255:9;5246:7;5242:23;5238:32;5235:119;;;5273:79;;:::i;:::-;5235:119;5393:1;5418:53;5463:7;5454:6;5443:9;5439:22;5418:53;:::i;:::-;5408:63;;5364:117;5159:329;;;;:::o;5494:619::-;5571:6;5579;5587;5636:2;5624:9;5615:7;5611:23;5607:32;5604:119;;;5642:79;;:::i;:::-;5604:119;5762:1;5787:53;5832:7;5823:6;5812:9;5808:22;5787:53;:::i;:::-;5777:63;;5733:117;5889:2;5915:53;5960:7;5951:6;5940:9;5936:22;5915:53;:::i;:::-;5905:63;;5860:118;6017:2;6043:53;6088:7;6079:6;6068:9;6064:22;6043:53;:::i;:::-;6033:63;;5988:118;5494:619;;;;;:::o;6119:118::-;6206:24;6224:5;6206:24;:::i;:::-;6201:3;6194:37;6119:118;;:::o;6243:222::-;6336:4;6374:2;6363:9;6359:18;6351:26;;6387:71;6455:1;6444:9;6440:17;6431:6;6387:71;:::i;:::-;6243:222;;;;:::o;6471:86::-;6506:7;6546:4;6539:5;6535:16;6524:27;;6471:86;;;:::o;6563:112::-;6646:22;6662:5;6646:22;:::i;:::-;6641:3;6634:35;6563:112;;:::o;6681:214::-;6770:4;6808:2;6797:9;6793:18;6785:26;;6821:67;6885:1;6874:9;6870:17;6861:6;6821:67;:::i;:::-;6681:214;;;;:::o;6901:104::-;6946:7;6975:24;6993:5;6975:24;:::i;:::-;6964:35;;6901:104;;;:::o;7011:142::-;7114:32;7140:5;7114:32;:::i;:::-;7109:3;7102:45;7011:142;;:::o;7159:254::-;7268:4;7306:2;7295:9;7291:18;7283:26;;7319:87;7403:1;7392:9;7388:17;7379:6;7319:87;:::i;:::-;7159:254;;;;:::o;7419:116::-;7489:21;7504:5;7489:21;:::i;:::-;7482:5;7479:32;7469:60;;7525:1;7522;7515:12;7469:60;7419:116;:::o;7541:133::-;7584:5;7622:6;7609:20;7600:29;;7638:30;7662:5;7638:30;:::i;:::-;7541:133;;;;:::o;7680:323::-;7736:6;7785:2;7773:9;7764:7;7760:23;7756:32;7753:119;;;7791:79;;:::i;:::-;7753:119;7911:1;7936:50;7978:7;7969:6;7958:9;7954:22;7936:50;:::i;:::-;7926:60;;7882:114;7680:323;;;;:::o;8009:474::-;8077:6;8085;8134:2;8122:9;8113:7;8109:23;8105:32;8102:119;;;8140:79;;:::i;:::-;8102:119;8260:1;8285:53;8330:7;8321:6;8310:9;8306:22;8285:53;:::i;:::-;8275:63;;8231:117;8387:2;8413:53;8458:7;8449:6;8438:9;8434:22;8413:53;:::i;:::-;8403:63;;8358:118;8009:474;;;;;:::o;8489:180::-;8537:77;8534:1;8527:88;8634:4;8631:1;8624:15;8658:4;8655:1;8648:15;8675:320;8719:6;8756:1;8750:4;8746:12;8736:22;;8803:1;8797:4;8793:12;8824:18;8814:81;;8880:4;8872:6;8868:17;8858:27;;8814:81;8942:2;8934:6;8931:14;8911:18;8908:38;8905:84;;8961:18;;:::i;:::-;8905:84;8726:269;8675:320;;;:::o;9001:182::-;9141:34;9137:1;9129:6;9125:14;9118:58;9001:182;:::o;9189:366::-;9331:3;9352:67;9416:2;9411:3;9352:67;:::i;:::-;9345:74;;9428:93;9517:3;9428:93;:::i;:::-;9546:2;9541:3;9537:12;9530:19;;9189:366;;;:::o;9561:419::-;9727:4;9765:2;9754:9;9750:18;9742:26;;9814:9;9808:4;9804:20;9800:1;9789:9;9785:17;9778:47;9842:131;9968:4;9842:131;:::i;:::-;9834:139;;9561:419;;;:::o;9986:180::-;10034:77;10031:1;10024:88;10131:4;10128:1;10121:15;10155:4;10152:1;10145:15;10172:305;10212:3;10231:20;10249:1;10231:20;:::i;:::-;10226:25;;10265:20;10283:1;10265:20;:::i;:::-;10260:25;;10419:1;10351:66;10347:74;10344:1;10341:81;10338:107;;;10425:18;;:::i;:::-;10338:107;10469:1;10466;10462:9;10455:16;;10172:305;;;;:::o;10483:227::-;10623:34;10619:1;10611:6;10607:14;10600:58;10692:10;10687:2;10679:6;10675:15;10668:35;10483:227;:::o;10716:366::-;10858:3;10879:67;10943:2;10938:3;10879:67;:::i;:::-;10872:74;;10955:93;11044:3;10955:93;:::i;:::-;11073:2;11068:3;11064:12;11057:19;;10716:366;;;:::o;11088:419::-;11254:4;11292:2;11281:9;11277:18;11269:26;;11341:9;11335:4;11331:20;11327:1;11316:9;11312:17;11305:47;11369:131;11495:4;11369:131;:::i;:::-;11361:139;;11088:419;;;:::o;11513:224::-;11653:34;11649:1;11641:6;11637:14;11630:58;11722:7;11717:2;11709:6;11705:15;11698:32;11513:224;:::o;11743:366::-;11885:3;11906:67;11970:2;11965:3;11906:67;:::i;:::-;11899:74;;11982:93;12071:3;11982:93;:::i;:::-;12100:2;12095:3;12091:12;12084:19;;11743:366;;;:::o;12115:419::-;12281:4;12319:2;12308:9;12304:18;12296:26;;12368:9;12362:4;12358:20;12354:1;12343:9;12339:17;12332:47;12396:131;12522:4;12396:131;:::i;:::-;12388:139;;12115:419;;;:::o;12540:225::-;12680:34;12676:1;12668:6;12664:14;12657:58;12749:8;12744:2;12736:6;12732:15;12725:33;12540:225;:::o;12771:366::-;12913:3;12934:67;12998:2;12993:3;12934:67;:::i;:::-;12927:74;;13010:93;13099:3;13010:93;:::i;:::-;13128:2;13123:3;13119:12;13112:19;;12771:366;;;:::o;13143:419::-;13309:4;13347:2;13336:9;13332:18;13324:26;;13396:9;13390:4;13386:20;13382:1;13371:9;13367:17;13360:47;13424:131;13550:4;13424:131;:::i;:::-;13416:139;;13143:419;;;:::o;13568:223::-;13708:34;13704:1;13696:6;13692:14;13685:58;13777:6;13772:2;13764:6;13760:15;13753:31;13568:223;:::o;13797:366::-;13939:3;13960:67;14024:2;14019:3;13960:67;:::i;:::-;13953:74;;14036:93;14125:3;14036:93;:::i;:::-;14154:2;14149:3;14145:12;14138:19;;13797:366;;;:::o;14169:419::-;14335:4;14373:2;14362:9;14358:18;14350:26;;14422:9;14416:4;14412:20;14408:1;14397:9;14393:17;14386:47;14450:131;14576:4;14450:131;:::i;:::-;14442:139;;14169:419;;;:::o;14594:221::-;14734:34;14730:1;14722:6;14718:14;14711:58;14803:4;14798:2;14790:6;14786:15;14779:29;14594:221;:::o;14821:366::-;14963:3;14984:67;15048:2;15043:3;14984:67;:::i;:::-;14977:74;;15060:93;15149:3;15060:93;:::i;:::-;15178:2;15173:3;15169:12;15162:19;;14821:366;;;:::o;15193:419::-;15359:4;15397:2;15386:9;15382:18;15374:26;;15446:9;15440:4;15436:20;15432:1;15421:9;15417:17;15410:47;15474:131;15600:4;15474:131;:::i;:::-;15466:139;;15193:419;;;:::o;15618:224::-;15758:34;15754:1;15746:6;15742:14;15735:58;15827:7;15822:2;15814:6;15810:15;15803:32;15618:224;:::o;15848:366::-;15990:3;16011:67;16075:2;16070:3;16011:67;:::i;:::-;16004:74;;16087:93;16176:3;16087:93;:::i;:::-;16205:2;16200:3;16196:12;16189:19;;15848:366;;;:::o;16220:419::-;16386:4;16424:2;16413:9;16409:18;16401:26;;16473:9;16467:4;16463:20;16459:1;16448:9;16444:17;16437:47;16501:131;16627:4;16501:131;:::i;:::-;16493:139;;16220:419;;;:::o;16645:222::-;16785:34;16781:1;16773:6;16769:14;16762:58;16854:5;16849:2;16841:6;16837:15;16830:30;16645:222;:::o;16873:366::-;17015:3;17036:67;17100:2;17095:3;17036:67;:::i;:::-;17029:74;;17112:93;17201:3;17112:93;:::i;:::-;17230:2;17225:3;17221:12;17214:19;;16873:366;;;:::o;17245:419::-;17411:4;17449:2;17438:9;17434:18;17426:26;;17498:9;17492:4;17488:20;17484:1;17473:9;17469:17;17462:47;17526:131;17652:4;17526:131;:::i;:::-;17518:139;;17245:419;;;:::o;17670:228::-;17810:34;17806:1;17798:6;17794:14;17787:58;17879:11;17874:2;17866:6;17862:15;17855:36;17670:228;:::o;17904:366::-;18046:3;18067:67;18131:2;18126:3;18067:67;:::i;:::-;18060:74;;18143:93;18232:3;18143:93;:::i;:::-;18261:2;18256:3;18252:12;18245:19;;17904:366;;;:::o;18276:419::-;18442:4;18480:2;18469:9;18465:18;18457:26;;18529:9;18523:4;18519:20;18515:1;18504:9;18500:17;18493:47;18557:131;18683:4;18557:131;:::i;:::-;18549:139;;18276:419;;;:::o;18701:225::-;18841:34;18837:1;18829:6;18825:14;18818:58;18910:8;18905:2;18897:6;18893:15;18886:33;18701:225;:::o;18932:366::-;19074:3;19095:67;19159:2;19154:3;19095:67;:::i;:::-;19088:74;;19171:93;19260:3;19171:93;:::i;:::-;19289:2;19284:3;19280:12;19273:19;;18932:366;;;:::o;19304:419::-;19470:4;19508:2;19497:9;19493:18;19485:26;;19557:9;19551:4;19547:20;19543:1;19532:9;19528:17;19521:47;19585:131;19711:4;19585:131;:::i;:::-;19577:139;;19304:419;;;:::o;19729:227::-;19869:34;19865:1;19857:6;19853:14;19846:58;19938:10;19933:2;19925:6;19921:15;19914:35;19729:227;:::o;19962:366::-;20104:3;20125:67;20189:2;20184:3;20125:67;:::i;:::-;20118:74;;20201:93;20290:3;20201:93;:::i;:::-;20319:2;20314:3;20310:12;20303:19;;19962:366;;;:::o;20334:419::-;20500:4;20538:2;20527:9;20523:18;20515:26;;20587:9;20581:4;20577:20;20573:1;20562:9;20558:17;20551:47;20615:131;20741:4;20615:131;:::i;:::-;20607:139;;20334:419;;;:::o;20759:348::-;20799:7;20822:20;20840:1;20822:20;:::i;:::-;20817:25;;20856:20;20874:1;20856:20;:::i;:::-;20851:25;;21044:1;20976:66;20972:74;20969:1;20966:81;20961:1;20954:9;20947:17;20943:105;20940:131;;;21051:18;;:::i;:::-;20940:131;21099:1;21096;21092:9;21081:20;;20759:348;;;;:::o;21113:180::-;21161:77;21158:1;21151:88;21258:4;21255:1;21248:15;21282:4;21279:1;21272:15;21299:185;21339:1;21356:20;21374:1;21356:20;:::i;:::-;21351:25;;21390:20;21408:1;21390:20;:::i;:::-;21385:25;;21429:1;21419:35;;21434:18;;:::i;:::-;21419:35;21476:1;21473;21469:9;21464:14;;21299:185;;;;:::o;21490:191::-;21530:4;21550:20;21568:1;21550:20;:::i;:::-;21545:25;;21584:20;21602:1;21584:20;:::i;:::-;21579:25;;21623:1;21620;21617:8;21614:34;;;21628:18;;:::i;:::-;21614:34;21673:1;21670;21666:9;21658:17;;21490:191;;;;:::o;21687:442::-;21836:4;21874:2;21863:9;21859:18;21851:26;;21887:71;21955:1;21944:9;21940:17;21931:6;21887:71;:::i;:::-;21968:72;22036:2;22025:9;22021:18;22012:6;21968:72;:::i;:::-;22050;22118:2;22107:9;22103:18;22094:6;22050:72;:::i;:::-;21687:442;;;;;;:::o;22135:180::-;22183:77;22180:1;22173:88;22280:4;22277:1;22270:15;22304:4;22301:1;22294:15;22321:180;22369:77;22366:1;22359:88;22466:4;22463:1;22456:15;22490:4;22487:1;22480:15;22507:143;22564:5;22595:6;22589:13;22580:22;;22611:33;22638:5;22611:33;:::i;:::-;22507:143;;;;:::o;22656:351::-;22726:6;22775:2;22763:9;22754:7;22750:23;22746:32;22743:119;;;22781:79;;:::i;:::-;22743:119;22901:1;22926:64;22982:7;22973:6;22962:9;22958:22;22926:64;:::i;:::-;22916:74;;22872:128;22656:351;;;;:::o;23013:85::-;23058:7;23087:5;23076:16;;23013:85;;;:::o;23104:158::-;23162:9;23195:61;23213:42;23222:32;23248:5;23222:32;:::i;:::-;23213:42;:::i;:::-;23195:61;:::i;:::-;23182:74;;23104:158;;;:::o;23268:147::-;23363:45;23402:5;23363:45;:::i;:::-;23358:3;23351:58;23268:147;;:::o;23421:114::-;23488:6;23522:5;23516:12;23506:22;;23421:114;;;:::o;23541:184::-;23640:11;23674:6;23669:3;23662:19;23714:4;23709:3;23705:14;23690:29;;23541:184;;;;:::o;23731:132::-;23798:4;23821:3;23813:11;;23851:4;23846:3;23842:14;23834:22;;23731:132;;;:::o;23869:108::-;23946:24;23964:5;23946:24;:::i;:::-;23941:3;23934:37;23869:108;;:::o;23983:179::-;24052:10;24073:46;24115:3;24107:6;24073:46;:::i;:::-;24151:4;24146:3;24142:14;24128:28;;23983:179;;;;:::o;24168:113::-;24238:4;24270;24265:3;24261:14;24253:22;;24168:113;;;:::o;24317:732::-;24436:3;24465:54;24513:5;24465:54;:::i;:::-;24535:86;24614:6;24609:3;24535:86;:::i;:::-;24528:93;;24645:56;24695:5;24645:56;:::i;:::-;24724:7;24755:1;24740:284;24765:6;24762:1;24759:13;24740:284;;;24841:6;24835:13;24868:63;24927:3;24912:13;24868:63;:::i;:::-;24861:70;;24954:60;25007:6;24954:60;:::i;:::-;24944:70;;24800:224;24787:1;24784;24780:9;24775:14;;24740:284;;;24744:14;25040:3;25033:10;;24441:608;;;24317:732;;;;:::o;25055:831::-;25318:4;25356:3;25345:9;25341:19;25333:27;;25370:71;25438:1;25427:9;25423:17;25414:6;25370:71;:::i;:::-;25451:80;25527:2;25516:9;25512:18;25503:6;25451:80;:::i;:::-;25578:9;25572:4;25568:20;25563:2;25552:9;25548:18;25541:48;25606:108;25709:4;25700:6;25606:108;:::i;:::-;25598:116;;25724:72;25792:2;25781:9;25777:18;25768:6;25724:72;:::i;:::-;25806:73;25874:3;25863:9;25859:19;25850:6;25806:73;:::i;:::-;25055:831;;;;;;;;:::o;25892:483::-;26063:4;26101:2;26090:9;26086:18;26078:26;;26114:71;26182:1;26171:9;26167:17;26158:6;26114:71;:::i;:::-;26232:9;26226:4;26222:20;26217:2;26206:9;26202:18;26195:48;26260:108;26363:4;26354:6;26260:108;:::i;:::-;26252:116;;25892:483;;;;;:::o;26381:807::-;26630:4;26668:3;26657:9;26653:19;26645:27;;26682:71;26750:1;26739:9;26735:17;26726:6;26682:71;:::i;:::-;26763:72;26831:2;26820:9;26816:18;26807:6;26763:72;:::i;:::-;26845:80;26921:2;26910:9;26906:18;26897:6;26845:80;:::i;:::-;26935;27011:2;27000:9;26996:18;26987:6;26935:80;:::i;:::-;27025:73;27093:3;27082:9;27078:19;27069:6;27025:73;:::i;:::-;27108;27176:3;27165:9;27161:19;27152:6;27108:73;:::i;:::-;26381:807;;;;;;;;;:::o;27194:143::-;27251:5;27282:6;27276:13;27267:22;;27298:33;27325:5;27298:33;:::i;:::-;27194:143;;;;:::o;27343:663::-;27431:6;27439;27447;27496:2;27484:9;27475:7;27471:23;27467:32;27464:119;;;27502:79;;:::i;:::-;27464:119;27622:1;27647:64;27703:7;27694:6;27683:9;27679:22;27647:64;:::i;:::-;27637:74;;27593:128;27760:2;27786:64;27842:7;27833:6;27822:9;27818:22;27786:64;:::i;:::-;27776:74;;27731:129;27899:2;27925:64;27981:7;27972:6;27961:9;27957:22;27925:64;:::i;:::-;27915:74;;27870:129;27343:663;;;;;:::o
Swarm Source
ipfs://00fb434c88b1506dbc94b12a50cf6558af28dd762369727703e839876dff2d7a
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.