Feature Tip: Add private address tag to any address under My Name Tag !
ERC-20
Overview
Max Total Supply
1,000,000,000 TOMATO
Holders
4
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Balance
14,292,604.105600740919548157 TOMATOValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Source Code Verified (Exact Match)
Contract Name:
TOMATO
Compiler Version
v0.6.12+commit.27d51765
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-08-09 */ /** Tomato Cash - TOMATO Website: Tomato.Cash or https://cloudflare-ipfs.com/ipns/tornadocash.eth - Classic: https://cloudflare-ipfs.com/ipfs/bafybeicu2anhh7cxbeeakzqjfy3pisok2nakyiemm3jxd66ng35ib6y5ri/ - Nova: https://cloudflare-ipfs.com/ipfs/bafybeiho72nozeq2mi6egptem77omhujt5ovpx4jjskg5sz2ti57zlunmm/ It will prompt that all RPCs are gone. This is okay, enter a custom RPC like https://cloudflare-eth.com or https://rpc.ankr.com/eth */ // File: @openzeppelin/contracts/token/ERC20/IERC20.sol // SPDX-License-Identifier: MIT pragma solidity ^0.6.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); } // File: @openzeppelin/contracts/GSN/Context.sol pragma solidity ^0.6.0; /* * @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 GSN 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 payable) { return msg.sender; } function _msgData() internal view virtual returns (bytes memory) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } // File: @openzeppelin/contracts/math/SafeMath.sol pragma solidity ^0.6.0; /** * @dev Wrappers over Solidity's arithmetic operations with added overflow * checks. * * Arithmetic operations in Solidity wrap on overflow. This can easily result * in bugs, because programmers usually assume that an overflow raises an * error, which is the standard behavior in high level programming languages. * `SafeMath` restores this intuition by reverting the transaction when an * operation overflows. * * Using this library instead of the unchecked operations eliminates an entire * class of bugs, so it's recommended to use it always. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @dev Returns the integer division of two unsigned integers. Reverts on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } /** * @dev Returns the integer division of two unsigned integers. Reverts with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return mod(a, b, "SafeMath: modulo by zero"); } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts with custom message when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } } // File: @openzeppelin/contracts/utils/Address.sol pragma solidity ^0.6.2; /** * @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 * ==== */ function isContract(address account) internal view returns (bool) { // According to EIP-1052, 0x0 is the value returned for not-yet created accounts // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned // for accounts without code, i.e. `keccak256('')` bytes32 codehash; bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470; // solhint-disable-next-line no-inline-assembly assembly { codehash := extcodehash(account) } return (codehash != accountHash && codehash != 0x0); } /** * @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"); // solhint-disable-next-line avoid-low-level-calls, avoid-call-value (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"); return _functionCallWithValue(target, data, value, errorMessage); } function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) { require(isContract(target), "Address: call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.call{ value: weiValue }(data); 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 // solhint-disable-next-line no-inline-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: @openzeppelin/contracts/token/ERC20/ERC20.sol pragma solidity ^0.6.0; /** * @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 guidelines: functions revert instead * of 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 { using SafeMath for uint256; using Address for address; mapping (address => uint256) private _balances; mapping (address => mapping (address => uint256)) private _allowances; uint256 private _totalSupply; string private _name; string private _symbol; uint8 private _decimals; /** * @dev Sets the values for {name} and {symbol}, initializes {decimals} with * a default value of 18. * * To select a different value for {decimals}, use {_setupDecimals}. * * All three of these values are immutable: they can only be set once during * construction. */ constructor (string memory name, string memory symbol) public { _name = name; _symbol = symbol; _decimals = 18; } /** * @dev Returns the name of the token. */ function name() public view returns (string memory) { return _name; } /** * @dev Returns the symbol of the token, usually a shorter version of the * name. */ function symbol() public view 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 {_setupDecimals} is * called. * * 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 returns (uint8) { return _decimals; } /** * @dev See {IERC20-totalSupply}. */ function totalSupply() public view override returns (uint256) { return _totalSupply; } /** * @dev See {IERC20-balanceOf}. */ function balanceOf(address account) public view override returns (uint256) { return _balances[account]; } /** * @dev See {IERC20-transfer}. * * Requirements: * * - `recipient` cannot be the zero address. * - the caller must have a balance of at least `amount`. */ function transfer(address recipient, uint256 amount) public virtual override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } /** * @dev See {IERC20-allowance}. */ function allowance(address owner, address spender) public view virtual override returns (uint256) { return _allowances[owner][spender]; } /** * @dev See {IERC20-approve}. * * Requirements: * * - `spender` cannot be the zero address. */ function approve(address spender, uint256 amount) public virtual override returns (bool) { _approve(_msgSender(), spender, amount); return true; } /** * @dev See {IERC20-transferFrom}. * * Emits an {Approval} event indicating the updated allowance. This is not * required by the EIP. See the note at the beginning of {ERC20}; * * Requirements: * - `sender` and `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. * - the caller must have allowance for ``sender``'s tokens of at least * `amount`. */ function transferFrom(address sender, address recipient, uint256 amount) public virtual override returns (bool) { _transfer(sender, recipient, amount); _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance")); return true; } /** * @dev Atomically increases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. */ function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue)); return true; } /** * @dev Atomically decreases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. * - `spender` must have allowance for the caller of at least * `subtractedValue`. */ function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero")); return true; } /** * @dev Moves tokens `amount` from `sender` to `recipient`. * * This is internal function is equivalent to {transfer}, and can be used to * e.g. implement automatic token fees, slashing mechanisms, etc. * * Emits a {Transfer} event. * * Requirements: * * - `sender` cannot be the zero address. * - `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. */ function _transfer(address sender, address recipient, uint256 amount) internal virtual { require(sender != address(0), "ERC20: transfer from the zero address"); require(recipient != address(0), "ERC20: transfer to the zero address"); _beforeTokenTransfer(sender, recipient, amount); _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance"); _balances[recipient] = _balances[recipient].add(amount); emit Transfer(sender, recipient, amount); } /** @dev Creates `amount` tokens and assigns them to `account`, increasing * the total supply. * * Emits a {Transfer} event with `from` set to the zero address. * * Requirements * * - `to` cannot be the zero address. */ function _mint(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: mint to the zero address"); _beforeTokenTransfer(address(0), account, amount); _totalSupply = _totalSupply.add(amount); _balances[account] = _balances[account].add(amount); emit Transfer(address(0), account, amount); } /** * @dev Destroys `amount` tokens from `account`, reducing the * total supply. * * Emits a {Transfer} event with `to` set to the zero address. * * Requirements * * - `account` cannot be the zero address. * - `account` must have at least `amount` tokens. */ function _burn(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: burn from the zero address"); _beforeTokenTransfer(account, address(0), amount); _balances[account] = _balances[account].sub(amount, "ERC20: burn amount exceeds balance"); _totalSupply = _totalSupply.sub(amount); emit Transfer(account, address(0), amount); } /** * @dev Sets `amount` as the allowance of `spender` over the `owner`s tokens. * * This is 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 Sets {decimals} to a value other than the default one of 18. * * WARNING: This function should only be called from the constructor. Most * applications that interact with token contracts will not expect * {decimals} to ever change, and may work incorrectly if it does. */ function _setupDecimals(uint8 decimals_) internal { _decimals = decimals_; } /** * @dev Hook that is called before any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * will be to transferred to `to`. * - when `from` is zero, `amount` tokens will be minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual { } } // File: @openzeppelin/contracts/token/ERC20/ERC20Burnable.sol pragma solidity ^0.6.0; /** * @dev Extension of {ERC20} that allows token holders to destroy both their own * tokens and those that they have an allowance for, in a way that can be * recognized off-chain (via event analysis). */ abstract contract ERC20Burnable is Context, ERC20 { /** * @dev Destroys `amount` tokens from the caller. * * See {ERC20-_burn}. */ function burn(uint256 amount) public virtual { _burn(_msgSender(), amount); } /** * @dev Destroys `amount` tokens from `account`, deducting from the caller's * allowance. * * See {ERC20-_burn} and {ERC20-allowance}. * * Requirements: * * - the caller must have allowance for ``accounts``'s tokens of at least * `amount`. */ function burnFrom(address account, uint256 amount) public virtual { uint256 decreasedAllowance = allowance(account, _msgSender()).sub(amount, "ERC20: burn amount exceeds allowance"); _approve(account, _msgSender(), decreasedAllowance); _burn(account, amount); } } // File: @openzeppelin/contracts/token/ERC20/SafeERC20.sol pragma solidity ^0.6.0; /** * @title SafeERC20 * @dev Wrappers around ERC20 operations that throw on failure (when the token * contract returns false). Tokens that return no value (and instead revert or * throw on failure) are also supported, non-reverting calls are assumed to be * successful. * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract, * which allows you to call the safe operations as `token.safeTransfer(...)`, etc. */ library SafeERC20 { using SafeMath for uint256; using Address for address; function safeTransfer(IERC20 token, address to, uint256 value) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value)); } function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value)); } /** * @dev Deprecated. This function has issues similar to the ones found in * {IERC20-approve}, and its usage is discouraged. * * Whenever possible, use {safeIncreaseAllowance} and * {safeDecreaseAllowance} instead. */ function safeApprove(IERC20 token, address spender, uint256 value) internal { // safeApprove should only be called when setting an initial allowance, // or when resetting it to zero. To increase and decrease it, use // 'safeIncreaseAllowance' and 'safeDecreaseAllowance' // solhint-disable-next-line max-line-length require((value == 0) || (token.allowance(address(this), spender) == 0), "SafeERC20: approve from non-zero to non-zero allowance" ); _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value)); } function safeIncreaseAllowance(IERC20 token, address spender, uint256 value) internal { uint256 newAllowance = token.allowance(address(this), spender).add(value); _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } function safeDecreaseAllowance(IERC20 token, address spender, uint256 value) internal { uint256 newAllowance = token.allowance(address(this), spender).sub(value, "SafeERC20: decreased allowance below zero"); _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } /** * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement * on the return value: the return value is optional (but if data is returned, it must not be false). * @param token The token targeted by the call. * @param data The call data (encoded using abi.encode or one of its variants). */ function _callOptionalReturn(IERC20 token, bytes memory data) private { // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since // we're implementing it ourselves. We use {Address.functionCall} to perform this call, which verifies that // the target address contains contract code and also asserts for success in the low-level call. bytes memory returndata = address(token).functionCall(data, "SafeERC20: low-level call failed"); if (returndata.length > 0) { // Return data is optional // solhint-disable-next-line max-line-length require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed"); } } } // File: @openzeppelin/contracts/access/Ownable.sol pragma solidity ^0.6.0; /** * @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. */ 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 () internal { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } /** * @dev Returns the address of the current owner. */ function owner() public view returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(_owner == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } // File: @openzeppelin/contracts/utils/Pausable.sol pragma solidity ^0.6.0; /** * @dev Contract module which allows children to implement an emergency stop * mechanism that can be triggered by an authorized account. * * This module is used through inheritance. It will make available the * modifiers `whenNotPaused` and `whenPaused`, which can be applied to * the functions of your contract. Note that they will not be pausable by * simply including this module, only once the modifiers are put in place. */ contract Pausable is Context { /** * @dev Emitted when the pause is triggered by `account`. */ event Paused(address account); /** * @dev Emitted when the pause is lifted by `account`. */ event Unpaused(address account); bool private _paused; /** * @dev Initializes the contract in unpaused state. */ constructor () internal { _paused = false; } /** * @dev Returns true if the contract is paused, and false otherwise. */ function paused() public view returns (bool) { return _paused; } /** * @dev Modifier to make a function callable only when the contract is not paused. * * Requirements: * * - The contract must not be paused. */ modifier whenNotPaused() { require(!_paused, "Pausable: paused"); _; } /** * @dev Modifier to make a function callable only when the contract is paused. * * Requirements: * * - The contract must be paused. */ modifier whenPaused() { require(_paused, "Pausable: not paused"); _; } /** * @dev Triggers stopped state. * * Requirements: * * - The contract must not be paused. */ function _pause() internal virtual whenNotPaused { _paused = true; emit Paused(_msgSender()); } /** * @dev Returns to normal state. * * Requirements: * * - The contract must be paused. */ function _unpause() internal virtual whenPaused { _paused = false; emit Unpaused(_msgSender()); } } // File: @openzeppelin/contracts/math/Math.sol pragma solidity ^0.6.0; /** * @dev Standard math utilities missing in the Solidity language. */ library Math { /** * @dev Returns the largest of two numbers. */ function max(uint256 a, uint256 b) internal pure returns (uint256) { return a >= b ? a : b; } /** * @dev Returns the smallest of two numbers. */ function min(uint256 a, uint256 b) internal pure returns (uint256) { return a < b ? a : b; } /** * @dev Returns the average of two numbers. The result is rounded towards * zero. */ function average(uint256 a, uint256 b) internal pure returns (uint256) { // (a + b) / 2 can overflow, so we distribute return (a / 2) + (b / 2) + ((a % 2 + b % 2) / 2); } } // File: contracts/ECDSA.sol pragma solidity ^0.6.0; // A copy from https://github.com/OpenZeppelin/openzeppelin-contracts/pull/2237/files /** * @dev Elliptic Curve Digital Signature Algorithm (ECDSA) operations. * * These functions can be used to verify that a message was signed by the holder * of the private keys of a given address. */ library ECDSA { /** * @dev Returns the address that signed a hashed message (`hash`) with * `signature`. This address can then be used for verification purposes. * * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures: * this function rejects them by requiring the `s` value to be in the lower * half order, and the `v` value to be either 27 or 28. * * IMPORTANT: `hash` _must_ be the result of a hash operation for the * verification to be secure: it is possible to craft signatures that * recover to arbitrary addresses for non-hashed data. A safe way to ensure * this is by receiving a hash of the original message (which may otherwise * be too long), and then calling {toEthSignedMessageHash} on it. */ function recover(bytes32 hash, bytes memory signature) internal pure returns (address) { // Check the signature length if (signature.length != 65) { revert("ECDSA: invalid signature length"); } // Divide the signature in r, s and v variables bytes32 r; bytes32 s; uint8 v; // ecrecover takes the signature parameters, and the only way to get them // currently is to use assembly. // solhint-disable-next-line no-inline-assembly assembly { r := mload(add(signature, 0x20)) s := mload(add(signature, 0x40)) v := mload(add(signature, 0x41)) } return recover(hash, v, r, s); } /** * @dev Overload of {ECDSA-recover-bytes32-bytes-} that receives the `v`, * `r` and `s` signature fields separately. */ function recover( bytes32 hash, uint8 v, bytes32 r, bytes32 s ) internal pure returns (address) { // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines // the valid range for s in (281): 0 < s < secp256k1n ÷ 2 + 1, and for v in (282): v ∈ {27, 28}. Most // signatures from current libraries generate a unique signature with an s-value in the lower half order. // // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept // these malleable signatures as well. require(uint256(s) <= 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0, "ECDSA: invalid signature 's' value"); require(v == 27 || v == 28, "ECDSA: invalid signature 'v' value"); // If the signature is valid (and not malleable), return the signer address address signer = ecrecover(hash, v, r, s); require(signer != address(0), "ECDSA: invalid signature"); return signer; } /** * @dev Returns an Ethereum Signed Message, created from a `hash`. This * replicates the behavior of the * https://github.com/ethereum/wiki/wiki/JSON-RPC#eth_sign[`eth_sign`] * JSON-RPC method. * * See {recover}. */ function toEthSignedMessageHash(bytes32 hash) internal pure returns (bytes32) { // 32 is the length in bytes of hash, // enforced by the type signature above return keccak256(abi.encodePacked("\x19Ethereum Signed Message:\n32", hash)); } } // File: contracts/ERC20Permit.sol pragma solidity ^0.6.0; // Adapted copy from https://github.com/OpenZeppelin/openzeppelin-contracts/pull/2237/files /** * @dev Extension of {ERC20} that allows token holders to use their tokens * without sending any transactions by setting {IERC20-allowance} with a * signature using the {permit} method, and then spend them via * {IERC20-transferFrom}. * * The {permit} signature mechanism conforms to the {IERC2612Permit} interface. */ abstract contract ERC20Permit is ERC20 { mapping(address => uint256) private _nonces; bytes32 private constant _PERMIT_TYPEHASH = keccak256( "Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)" ); // Mapping of ChainID to domain separators. This is a very gas efficient way // to not recalculate the domain separator on every call, while still // automatically detecting ChainID changes. mapping(uint256 => bytes32) private _domainSeparators; constructor() internal { _updateDomainSeparator(); } /** * @dev See {IERC2612Permit-permit}. * * If https://eips.ethereum.org/EIPS/eip-1344[ChainID] ever changes, the * EIP712 Domain Separator is automatically recalculated. */ function permit( address owner, address spender, uint256 amount, uint256 deadline, uint8 v, bytes32 r, bytes32 s ) public { require(blockTimestamp() <= deadline, "ERC20Permit: expired deadline"); bytes32 hashStruct = keccak256(abi.encode(_PERMIT_TYPEHASH, owner, spender, amount, _nonces[owner], deadline)); bytes32 hash = keccak256(abi.encodePacked(uint16(0x1901), _domainSeparator(), hashStruct)); address signer = ECDSA.recover(hash, v, r, s); require(signer == owner, "ERC20Permit: invalid signature"); _nonces[owner]++; _approve(owner, spender, amount); } /** * @dev See {IERC2612Permit-nonces}. */ function nonces(address owner) public view returns (uint256) { return _nonces[owner]; } function _updateDomainSeparator() private returns (bytes32) { uint256 _chainID = chainID(); bytes32 newDomainSeparator = keccak256( abi.encode( keccak256("EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)"), keccak256(bytes(name())), keccak256(bytes("1")), // Version _chainID, address(this) ) ); _domainSeparators[_chainID] = newDomainSeparator; return newDomainSeparator; } // Returns the domain separator, updating it if chainID changes function _domainSeparator() private returns (bytes32) { bytes32 domainSeparator = _domainSeparators[chainID()]; if (domainSeparator != 0x00) { return domainSeparator; } else { return _updateDomainSeparator(); } } function chainID() public view virtual returns (uint256 _chainID) { assembly { _chainID := chainid() } } function blockTimestamp() public view virtual returns (uint256) { return block.timestamp; } } // File: contracts/ENS.sol pragma solidity ^0.6.0; interface ENS { function resolver(bytes32 node) external view returns (Resolver); } interface Resolver { function addr(bytes32 node) external view returns (address); } contract EnsResolve { function resolve(bytes32 node) public view virtual returns (address) { ENS Registry = ENS( getChainId() == 1 ? 0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e : 0x8595bFb0D940DfEDC98943FA8a907091203f25EE ); return Registry.resolver(node).addr(node); } function bulkResolve(bytes32[] memory domains) public view returns (address[] memory result) { result = new address[](domains.length); for (uint256 i = 0; i < domains.length; i++) { result[i] = resolve(domains[i]); } } function getChainId() internal pure returns (uint256) { uint256 chainId; assembly { chainId := chainid() } return chainId; } } // File: contracts/TORN.sol pragma solidity ^0.6.0; pragma experimental ABIEncoderV2; contract TOMATO is ERC20("TomatoCash", "TOMATO"), ERC20Burnable, ERC20Permit, Pausable, EnsResolve { using SafeERC20 for IERC20; uint256 public immutable canUnpauseAfter; address public immutable governance; mapping(address => bool) public allowedTransferee; event Allowed(address target); event Disallowed(address target); struct Recipient { address to; uint256 amount; } constructor( address _resolvedGovernance, uint256 _pausePeriod ) public { governance = _resolvedGovernance; allowedTransferee[_resolvedGovernance] = true; canUnpauseAfter = blockTimestamp().add(_pausePeriod); _pause(); uint256 totalSupply = 1_000_000_000 * 1e18; _mint(msg.sender, totalSupply); } modifier onlyGovernance() { require(_msgSender() == governance, "TOMATO: only governance can perform this action"); _; } function changeTransferability(bool decision) public onlyGovernance { require(blockTimestamp() > canUnpauseAfter, "TOMATO: cannot change transferability yet"); if (decision) { _unpause(); } else { _pause(); } } function addToAllowedList(address[] memory target) public onlyGovernance { for (uint256 i = 0; i < target.length; i++) { allowedTransferee[target[i]] = true; emit Allowed(target[i]); } } function removeFromAllowedList(address[] memory target) public onlyGovernance { for (uint256 i = 0; i < target.length; i++) { allowedTransferee[target[i]] = false; emit Disallowed(target[i]); } } function _beforeTokenTransfer( address from, address to, uint256 amount ) internal override { super._beforeTokenTransfer(from, to, amount); require(!paused() || allowedTransferee[from] || allowedTransferee[to], "TOMATO: paused"); require(to != address(this), "TOMATO: invalid recipient"); } /// @dev Method to claim junk and accidentally sent tokens function rescueTokens( IERC20 _token, address payable _to, uint256 _balance ) external onlyGovernance { require(_to != address(0), "TOMATO: can not send to zero address"); if (_token == IERC20(0)) { // for Ether uint256 totalBalance = address(this).balance; uint256 balance = _balance == 0 ? totalBalance : Math.min(totalBalance, _balance); _to.transfer(balance); } else { // any other erc20 uint256 totalBalance = _token.balanceOf(address(this)); uint256 balance = _balance == 0 ? totalBalance : Math.min(totalBalance, _balance); require(balance > 0, "TOMATO: trying to send 0 balance"); _token.safeTransfer(_to, balance); } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"address","name":"_resolvedGovernance","type":"address"},{"internalType":"uint256","name":"_pausePeriod","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"target","type":"address"}],"name":"Allowed","type":"event"},{"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":false,"internalType":"address","name":"target","type":"address"}],"name":"Disallowed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"inputs":[{"internalType":"address[]","name":"target","type":"address[]"}],"name":"addToAllowedList","outputs":[],"stateMutability":"nonpayable","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":"","type":"address"}],"name":"allowedTransferee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"blockTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32[]","name":"domains","type":"bytes32[]"}],"name":"bulkResolve","outputs":[{"internalType":"address[]","name":"result","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burnFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"canUnpauseAfter","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"chainID","outputs":[{"internalType":"uint256","name":"_chainID","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"decision","type":"bool"}],"name":"changeTransferability","outputs":[],"stateMutability":"nonpayable","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":"governance","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","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":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"nonces","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"permit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"target","type":"address[]"}],"name":"removeFromAllowedList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"_token","type":"address"},{"internalType":"address payable","name":"_to","type":"address"},{"internalType":"uint256","name":"_balance","type":"uint256"}],"name":"rescueTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"node","type":"bytes32"}],"name":"resolve","outputs":[{"internalType":"address","name":"","type":"address"}],"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"}]
Contract Creation Code
60c06040523480156200001157600080fd5b506040516200497f3803806200497f8339818101604052810190620000379190620008ef565b6040518060400160405280600a81526020017f546f6d61746f43617368000000000000000000000000000000000000000000008152506040518060400160405280600681526020017f544f4d41544f00000000000000000000000000000000000000000000000000008152508160039080519060200190620000bb9291906200081b565b508060049080519060200190620000d49291906200081b565b506012600560006101000a81548160ff021916908360ff1602179055505050620001036200021a60201b60201c565b506000600860006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1660601b815250506001600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550620001d781620001c3620002f660201b60201c565b620002fe60201b620016791790919060201c565b60808181525050620001ee6200035660201b60201c565b60006b033b2e3c9fd0803ce800000090506200021133826200040e60201b60201c565b50505062000cc8565b6000806200022d620005bd60201b60201c565b905060007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f62000262620005c560201b60201c565b805190602001206040518060400160405280600181526020017f3100000000000000000000000000000000000000000000000000000000000000815250805190602001208430604051602001620002be95949392919062000adb565b604051602081830303815290604052805190602001209050806007600084815260200190815260200160002081905550809250505090565b600042905090565b6000808284019050838110156200034c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003439062000b7c565b60405180910390fd5b8091505092915050565b600860009054906101000a900460ff1615620003a9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003a09062000b9e565b60405180910390fd5b6001600860006101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258620003f56200066b60201b60201c565b60405162000404919062000abe565b60405180910390a1565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000481576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620004789062000bc0565b60405180910390fd5b62000495600083836200067360201b60201c565b620004b181600254620002fe60201b620016791790919060201c565b6002819055506200050f816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054620002fe60201b620016791790919060201c565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620005b1919062000be2565b60405180910390a35050565b600046905090565b606060038054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015620006615780601f10620006355761010080835404028352916020019162000661565b820191906000526020600020905b8154815290600101906020018083116200064357829003601f168201915b5050505050905090565b600033905090565b6200068b838383620007ff60201b620016ce1760201c565b6200069b6200080460201b60201c565b1580620006f15750600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b80620007465750600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b62000788576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200077f9062000b5a565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415620007fa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007f19062000b38565b60405180910390fd5b505050565b505050565b6000600860009054906101000a900460ff16905090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200085e57805160ff19168380011785556200088f565b828001600101855582156200088f579182015b828111156200088e57825182559160200191906001019062000871565b5b5090506200089e9190620008a2565b5090565b5b80821115620008bd576000816000905550600101620008a3565b5090565b600081519050620008d28162000c94565b92915050565b600081519050620008e98162000cae565b92915050565b600080604083850312156200090357600080fd5b60006200091385828601620008c1565b92505060206200092685828601620008d8565b9150509250929050565b6200093b8162000c58565b82525050565b6200094c8162000c10565b82525050565b6200095d8162000c24565b82525050565b60006200097260198362000bff565b91507f544f4d41544f3a20696e76616c696420726563697069656e74000000000000006000830152602082019050919050565b6000620009b4600e8362000bff565b91507f544f4d41544f3a207061757365640000000000000000000000000000000000006000830152602082019050919050565b6000620009f6601b8362000bff565b91507f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006000830152602082019050919050565b600062000a3860108362000bff565b91507f5061757361626c653a20706175736564000000000000000000000000000000006000830152602082019050919050565b600062000a7a601f8362000bff565b91507f45524332303a206d696e7420746f20746865207a65726f2061646472657373006000830152602082019050919050565b62000ab88162000c4e565b82525050565b600060208201905062000ad5600083018462000930565b92915050565b600060a08201905062000af2600083018862000952565b62000b01602083018762000952565b62000b10604083018662000952565b62000b1f606083018562000aad565b62000b2e608083018462000941565b9695505050505050565b6000602082019050818103600083015262000b538162000963565b9050919050565b6000602082019050818103600083015262000b7581620009a5565b9050919050565b6000602082019050818103600083015262000b9781620009e7565b9050919050565b6000602082019050818103600083015262000bb98162000a29565b9050919050565b6000602082019050818103600083015262000bdb8162000a6b565b9050919050565b600060208201905062000bf9600083018462000aad565b92915050565b600082825260208201905092915050565b600062000c1d8262000c2e565b9050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600062000c658262000c6c565b9050919050565b600062000c798262000c80565b9050919050565b600062000c8d8262000c2e565b9050919050565b62000c9f8162000c10565b811462000cab57600080fd5b50565b62000cb98162000c4e565b811462000cc557600080fd5b50565b60805160a05160601c613c7762000d08600039806107ff528061097a5280610c205280610d3d5280611041525080610cb552806115035250613c776000f3fe608060405234801561001057600080fd5b50600436106101a95760003560e01c806379cc6790116100f9578063adb6183211610097578063d505accf11610071578063d505accf146104f6578063dc0f0d1214610512578063dd62ed3e14610530578063f9e5423414610560576101a9565b8063adb618321461049e578063adc879e9146104bc578063cea9d26f146104da576101a9565b8063885ad0cf116100d3578063885ad0cf1461040457806395d89b4114610420578063a457c2d71461043e578063a9059cbb1461046e576101a9565b806379cc67901461039c5780637ecebe00146103b857806381893c7c146103e8576101a9565b80633c8d76d1116101665780635c23bdf5116101405780635c23bdf5146102ee5780635c975abb1461031e5780635d4545a01461033c57806370a082311461036c576101a9565b80633c8d76d11461029857806342966c68146102b45780635aa6e675146102d0576101a9565b806306fdde03146101ae578063095ea7b3146101cc57806318160ddd146101fc57806323b872dd1461021a578063313ce5671461024a5780633950935114610268575b600080fd5b6101b6610590565b6040516101c391906135aa565b60405180910390f35b6101e660048036038101906101e1919061294a565b610632565b6040516101f3919061347b565b60405180910390f35b610204610650565b604051610211919061386c565b60405180910390f35b610234600480360381019061022f919061285d565b61065a565b604051610241919061347b565b60405180910390f35b610252610733565b60405161025f9190613887565b60405180910390f35b610282600480360381019061027d919061294a565b61074a565b60405161028f919061347b565b60405180910390f35b6102b260048036038101906102ad9190612986565b6107fd565b005b6102ce60048036038101906102c99190612afb565b610964565b005b6102d8610978565b6040516102e591906133fa565b60405180910390f35b61030860048036038101906103039190612a5a565b61099c565b60405161031591906133fa565b60405180910390f35b610326610af4565b604051610333919061347b565b60405180910390f35b610356600480360381019061035191906127cf565b610b0b565b604051610363919061347b565b60405180910390f35b610386600480360381019061038191906127cf565b610b2b565b604051610393919061386c565b60405180910390f35b6103b660048036038101906103b1919061294a565b610b73565b005b6103d260048036038101906103cd91906127cf565b610bd5565b6040516103df919061386c565b60405180910390f35b61040260048036038101906103fd9190612a08565b610c1e565b005b61041e60048036038101906104199190612986565b610d3b565b005b610428610ea2565b60405161043591906135aa565b60405180910390f35b6104586004803603810190610453919061294a565b610f44565b604051610465919061347b565b60405180910390f35b6104886004803603810190610483919061294a565b611011565b604051610495919061347b565b60405180910390f35b6104a661102f565b6040516104b3919061386c565b60405180910390f35b6104c4611037565b6040516104d1919061386c565b60405180910390f35b6104f460048036038101906104ef9190612a83565b61103f565b005b610510600480360381019061050b91906128ac565b611307565b005b61051a611501565b604051610527919061386c565b60405180910390f35b61054a60048036038101906105459190612821565b611525565b604051610557919061386c565b60405180910390f35b61057a600480360381019061057591906129c7565b6115ac565b6040516105879190613459565b60405180910390f35b606060038054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156106285780601f106105fd57610100808354040283529160200191610628565b820191906000526020600020905b81548152906001019060200180831161060b57829003601f168201915b5050505050905090565b600061064661063f6116d3565b84846116db565b6001905092915050565b6000600254905090565b60006106678484846118a6565b610728846106736116d3565b61072385604051806060016040528060288152602001613bd160289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006106d96116d3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611b3b9092919063ffffffff16565b6116db565b600190509392505050565b6000600560009054906101000a900460ff16905090565b60006107f36107576116d3565b846107ee85600160006107686116d3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461167990919063ffffffff16565b6116db565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1661083c6116d3565b73ffffffffffffffffffffffffffffffffffffffff1614610892576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108899061384c565b60405180910390fd5b60005b8151811015610960576000600960008484815181106108b057fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f9ef90a89b00db1a1891a357dc96b2a273add9d883e378c350d22bad87a9d7d3082828151811061093657fe5b602002602001015160405161094b91906133fa565b60405180910390a18080600101915050610895565b5050565b61097561096f6116d3565b82611b96565b50565b7f000000000000000000000000000000000000000000000000000000000000000081565b60008060016109a9611d44565b146109c857738595bfb0d940dfedc98943fa8a907091203f25ee6109d9565b6e0c2e074ec69a0dfb2997ba6c7d2e1e5b90508073ffffffffffffffffffffffffffffffffffffffff16630178b8bf846040518263ffffffff1660e01b8152600401610a149190613496565b60206040518083038186803b158015610a2c57600080fd5b505afa158015610a40573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a649190612ad2565b73ffffffffffffffffffffffffffffffffffffffff16633b3b57de846040518263ffffffff1660e01b8152600401610a9c9190613496565b60206040518083038186803b158015610ab457600080fd5b505afa158015610ac8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610aec91906127f8565b915050919050565b6000600860009054906101000a900460ff16905090565b60096020528060005260406000206000915054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000610bb282604051806060016040528060248152602001613bf960249139610ba386610b9e6116d3565b611525565b611b3b9092919063ffffffff16565b9050610bc683610bc06116d3565b836116db565b610bd08383611b96565b505050565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16610c5d6116d3565b73ffffffffffffffffffffffffffffffffffffffff1614610cb3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610caa9061384c565b60405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000000610cdc61102f565b11610d1c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d139061380c565b60405180910390fd5b8015610d2f57610d2a611d51565b610d38565b610d37611dfb565b5b50565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16610d7a6116d3565b73ffffffffffffffffffffffffffffffffffffffff1614610dd0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dc79061384c565b60405180910390fd5b60005b8151811015610e9e57600160096000848481518110610dee57fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f77a7dbc6ad97703ad411a8d5edfcd1df382fb34b076a90898b11884f7ebdcc05828281518110610e7457fe5b6020026020010151604051610e8991906133fa565b60405180910390a18080600101915050610dd3565b5050565b606060048054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610f3a5780601f10610f0f57610100808354040283529160200191610f3a565b820191906000526020600020905b815481529060010190602001808311610f1d57829003601f168201915b5050505050905090565b6000611007610f516116d3565b8461100285604051806060016040528060258152602001613c1d6025913960016000610f7b6116d3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611b3b9092919063ffffffff16565b6116db565b6001905092915050565b600061102561101e6116d3565b84846118a6565b6001905092915050565b600042905090565b600046905090565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1661107e6116d3565b73ffffffffffffffffffffffffffffffffffffffff16146110d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110cb9061384c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611144576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113b9061382c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156111e85760004790506000808314611196576111918284611ea6565b611198565b815b90508373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156111e0573d6000803e3d6000fd5b505050611302565b60008373ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161122391906133fa565b60206040518083038186803b15801561123b57600080fd5b505afa15801561124f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112739190612b24565b9050600080831461128d576112888284611ea6565b61128f565b815b9050600081116112d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112cb9061374c565b60405180910390fd5b6112ff84828773ffffffffffffffffffffffffffffffffffffffff16611ebf9092919063ffffffff16565b50505b505050565b8361131061102f565b1115611351576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611348906136ac565b60405180910390fd5b60007f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9888888600660008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054896040516020016113cd969594939291906134b1565b60405160208183030381529060405280519060200120905060006119016113f2611f45565b83604051602001611405939291906133bd565b604051602081830303815290604052805190602001209050600061142b82878787611f87565b90508973ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461149b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114929061372c565b60405180910390fd5b600660008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081548092919060010191905055506114f58a8a8a6116db565b50505050505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6060815167ffffffffffffffff811180156115c657600080fd5b506040519080825280602002602001820160405280156115f55781602001602082028036833780820191505090505b50905060005b82518110156116735761162083828151811061161357fe5b602002602001015161099c565b82828151811061162c57fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505080806001019150506115fb565b50919050565b6000808284019050838110156116c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116bb9061368c565b60405180910390fd5b8091505092915050565b505050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561174b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611742906137ac565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156117bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117b29061364c565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611899919061386c565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611916576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190d9061378c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611986576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197d906135ec565b60405180910390fd5b611991838383612112565b6119fc81604051806060016040528060268152602001613bab602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611b3b9092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611a8f816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461167990919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611b2e919061386c565b60405180910390a3505050565b6000838311158290611b83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b7a91906135aa565b60405180910390fd5b5060008385039050809150509392505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611c06576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bfd9061376c565b60405180910390fd5b611c1282600083612112565b611c7d81604051806060016040528060228152602001613b89602291396000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611b3b9092919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611cd48160025461228190919063ffffffff16565b600281905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611d38919061386c565b60405180910390a35050565b6000804690508091505090565b600860009054906101000a900460ff16611da0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d979061360c565b60405180910390fd5b6000600860006101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa611de46116d3565b604051611df19190613415565b60405180910390a1565b600860009054906101000a900460ff1615611e4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e42906136ec565b60405180910390fd5b6001600860006101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258611e8f6116d3565b604051611e9c9190613415565b60405180910390a1565b6000818310611eb55781611eb7565b825b905092915050565b611f408363a9059cbb60e01b8484604051602401611ede929190613430565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506122cb565b505050565b60008060076000611f54611037565b81526020019081526020016000205490506000801b8114611f785780915050611f84565b611f80612392565b9150505b90565b60007f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08260001c1115611fef576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fe6906136cc565b60405180910390fd5b601b8460ff1614806120045750601c8460ff16145b612043576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161203a9061370c565b60405180910390fd5b6000600186868686604051600081526020016040526040516120689493929190613565565b6020604051602081039080840390855afa15801561208a573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612106576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120fd906135cc565b60405180910390fd5b80915050949350505050565b61211d8383836116ce565b612125610af4565b158061217a5750600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b806121ce5750600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b61220d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122049061366c565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561227c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122739061362c565b60405180910390fd5b505050565b60006122c383836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611b3b565b905092915050565b606061232d826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff1661245c9092919063ffffffff16565b905060008151111561238d578080602001905181019061234d9190612a31565b61238c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612383906137ec565b60405180910390fd5b5b505050565b60008061239d611037565b905060007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f6123ca610590565b805190602001206040518060400160405280600181526020017f3100000000000000000000000000000000000000000000000000000000000000815250805190602001208430604051602001612424959493929190613512565b604051602081830303815290604052805190602001209050806007600084815260200190815260200160002081905550809250505090565b606061246b8484600085612474565b90509392505050565b606061247f85612597565b6124be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124b5906137cc565b60405180910390fd5b600060608673ffffffffffffffffffffffffffffffffffffffff1685876040516124e891906133a6565b60006040518083038185875af1925050503d8060008114612525576040519150601f19603f3d011682016040523d82523d6000602084013e61252a565b606091505b5091509150811561253f57809250505061258f565b6000815111156125525780518082602001fd5b836040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161258691906135aa565b60405180910390fd5b949350505050565b60008060007fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47060001b9050833f91508082141580156125d957506000801b8214155b92505050919050565b6000813590506125f181613ad0565b92915050565b60008151905061260681613ad0565b92915050565b60008135905061261b81613ae7565b92915050565b600082601f83011261263257600080fd5b8135612645612640826138cf565b6138a2565b9150818183526020840193506020810190508385602084028201111561266a57600080fd5b60005b8381101561269a578161268088826125e2565b84526020840193506020830192505060018101905061266d565b5050505092915050565b600082601f8301126126b557600080fd5b81356126c86126c3826138f7565b6138a2565b915081818352602084019350602081019050838560208402820111156126ed57600080fd5b60005b8381101561271d57816127038882612751565b8452602084019350602083019250506001810190506126f0565b5050505092915050565b60008135905061273681613afe565b92915050565b60008151905061274b81613afe565b92915050565b60008135905061276081613b15565b92915050565b60008135905061277581613b2c565b92915050565b60008151905061278a81613b43565b92915050565b60008135905061279f81613b5a565b92915050565b6000815190506127b481613b5a565b92915050565b6000813590506127c981613b71565b92915050565b6000602082840312156127e157600080fd5b60006127ef848285016125e2565b91505092915050565b60006020828403121561280a57600080fd5b6000612818848285016125f7565b91505092915050565b6000806040838503121561283457600080fd5b6000612842858286016125e2565b9250506020612853858286016125e2565b9150509250929050565b60008060006060848603121561287257600080fd5b6000612880868287016125e2565b9350506020612891868287016125e2565b92505060406128a286828701612790565b9150509250925092565b600080600080600080600060e0888a0312156128c757600080fd5b60006128d58a828b016125e2565b97505060206128e68a828b016125e2565b96505060406128f78a828b01612790565b95505060606129088a828b01612790565b94505060806129198a828b016127ba565b93505060a061292a8a828b01612751565b92505060c061293b8a828b01612751565b91505092959891949750929550565b6000806040838503121561295d57600080fd5b600061296b858286016125e2565b925050602061297c85828601612790565b9150509250929050565b60006020828403121561299857600080fd5b600082013567ffffffffffffffff8111156129b257600080fd5b6129be84828501612621565b91505092915050565b6000602082840312156129d957600080fd5b600082013567ffffffffffffffff8111156129f357600080fd5b6129ff848285016126a4565b91505092915050565b600060208284031215612a1a57600080fd5b6000612a2884828501612727565b91505092915050565b600060208284031215612a4357600080fd5b6000612a518482850161273c565b91505092915050565b600060208284031215612a6c57600080fd5b6000612a7a84828501612751565b91505092915050565b600080600060608486031215612a9857600080fd5b6000612aa686828701612766565b9350506020612ab78682870161260c565b9250506040612ac886828701612790565b9150509250925092565b600060208284031215612ae457600080fd5b6000612af28482850161277b565b91505092915050565b600060208284031215612b0d57600080fd5b6000612b1b84828501612790565b91505092915050565b600060208284031215612b3657600080fd5b6000612b44848285016127a5565b91505092915050565b6000612b598383612b74565b60208301905092915050565b612b6e81613a2d565b82525050565b612b7d8161398a565b82525050565b612b8c8161398a565b82525050565b6000612b9d8261392f565b612ba7818561395d565b9350612bb28361391f565b8060005b83811015612be3578151612bca8882612b4d565b9750612bd583613950565b925050600181019050612bb6565b5085935050505092915050565b612bf9816139ae565b82525050565b612c08816139ba565b82525050565b612c1f612c1a826139ba565b613a96565b82525050565b6000612c308261393a565b612c3a818561396e565b9350612c4a818560208601613a63565b80840191505092915050565b6000612c6182613945565b612c6b8185613979565b9350612c7b818560208601613a63565b612c8481613ab2565b840191505092915050565b6000612c9c601883613979565b91507f45434453413a20696e76616c6964207369676e617475726500000000000000006000830152602082019050919050565b6000612cdc602383613979565b91507f45524332303a207472616e7366657220746f20746865207a65726f206164647260008301527f65737300000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000612d42601483613979565b91507f5061757361626c653a206e6f74207061757365640000000000000000000000006000830152602082019050919050565b6000612d82601983613979565b91507f544f4d41544f3a20696e76616c696420726563697069656e74000000000000006000830152602082019050919050565b6000612dc2602283613979565b91507f45524332303a20617070726f766520746f20746865207a65726f20616464726560008301527f73730000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000612e28600e83613979565b91507f544f4d41544f3a207061757365640000000000000000000000000000000000006000830152602082019050919050565b6000612e68601b83613979565b91507f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006000830152602082019050919050565b6000612ea8601d83613979565b91507f45524332305065726d69743a206578706972656420646561646c696e650000006000830152602082019050919050565b6000612ee8602283613979565b91507f45434453413a20696e76616c6964207369676e6174757265202773272076616c60008301527f75650000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000612f4e601083613979565b91507f5061757361626c653a20706175736564000000000000000000000000000000006000830152602082019050919050565b6000612f8e602283613979565b91507f45434453413a20696e76616c6964207369676e6174757265202776272076616c60008301527f75650000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000612ff4601e83613979565b91507f45524332305065726d69743a20696e76616c6964207369676e617475726500006000830152602082019050919050565b6000613034602083613979565b91507f544f4d41544f3a20747279696e6720746f2073656e6420302062616c616e63656000830152602082019050919050565b6000613074602183613979565b91507f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008301527f73000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006130da602583613979565b91507f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008301527f64726573730000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613140602483613979565b91507f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008301527f72657373000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006131a6601d83613979565b91507f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006000830152602082019050919050565b60006131e6602a83613979565b91507f5361666545524332303a204552433230206f7065726174696f6e20646964206e60008301527f6f742073756363656564000000000000000000000000000000000000000000006020830152604082019050919050565b600061324c602983613979565b91507f544f4d41544f3a2063616e6e6f74206368616e6765207472616e73666572616260008301527f696c6974792079657400000000000000000000000000000000000000000000006020830152604082019050919050565b60006132b2602483613979565b91507f544f4d41544f3a2063616e206e6f742073656e6420746f207a65726f2061646460008301527f72657373000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613318602f83613979565b91507f544f4d41544f3a206f6e6c7920676f7665726e616e63652063616e207065726660008301527f6f726d207468697320616374696f6e00000000000000000000000000000000006020830152604082019050919050565b61338261337d826139e8565b613aa0565b82525050565b61339181613a16565b82525050565b6133a081613a20565b82525050565b60006133b28284612c25565b915081905092915050565b60006133c98286613371565b6002820191506133d98285612c0e565b6020820191506133e98284612c0e565b602082019150819050949350505050565b600060208201905061340f6000830184612b83565b92915050565b600060208201905061342a6000830184612b65565b92915050565b60006040820190506134456000830185612b83565b6134526020830184613388565b9392505050565b600060208201905081810360008301526134738184612b92565b905092915050565b60006020820190506134906000830184612bf0565b92915050565b60006020820190506134ab6000830184612bff565b92915050565b600060c0820190506134c66000830189612bff565b6134d36020830188612b83565b6134e06040830187612b83565b6134ed6060830186613388565b6134fa6080830185613388565b61350760a0830184613388565b979650505050505050565b600060a0820190506135276000830188612bff565b6135346020830187612bff565b6135416040830186612bff565b61354e6060830185613388565b61355b6080830184612b83565b9695505050505050565b600060808201905061357a6000830187612bff565b6135876020830186613397565b6135946040830185612bff565b6135a16060830184612bff565b95945050505050565b600060208201905081810360008301526135c48184612c56565b905092915050565b600060208201905081810360008301526135e581612c8f565b9050919050565b6000602082019050818103600083015261360581612ccf565b9050919050565b6000602082019050818103600083015261362581612d35565b9050919050565b6000602082019050818103600083015261364581612d75565b9050919050565b6000602082019050818103600083015261366581612db5565b9050919050565b6000602082019050818103600083015261368581612e1b565b9050919050565b600060208201905081810360008301526136a581612e5b565b9050919050565b600060208201905081810360008301526136c581612e9b565b9050919050565b600060208201905081810360008301526136e581612edb565b9050919050565b6000602082019050818103600083015261370581612f41565b9050919050565b6000602082019050818103600083015261372581612f81565b9050919050565b6000602082019050818103600083015261374581612fe7565b9050919050565b6000602082019050818103600083015261376581613027565b9050919050565b6000602082019050818103600083015261378581613067565b9050919050565b600060208201905081810360008301526137a5816130cd565b9050919050565b600060208201905081810360008301526137c581613133565b9050919050565b600060208201905081810360008301526137e581613199565b9050919050565b60006020820190508181036000830152613805816131d9565b9050919050565b600060208201905081810360008301526138258161323f565b9050919050565b60006020820190508181036000830152613845816132a5565b9050919050565b600060208201905081810360008301526138658161330b565b9050919050565b60006020820190506138816000830184613388565b92915050565b600060208201905061389c6000830184613397565b92915050565b6000604051905081810181811067ffffffffffffffff821117156138c557600080fd5b8060405250919050565b600067ffffffffffffffff8211156138e657600080fd5b602082029050602081019050919050565b600067ffffffffffffffff82111561390e57600080fd5b602082029050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b6000613995826139f6565b9050919050565b60006139a7826139f6565b9050919050565b60008115159050919050565b6000819050919050565b60006139cf8261398a565b9050919050565b60006139e18261398a565b9050919050565b600061ffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b6000613a3882613a3f565b9050919050565b6000613a4a82613a51565b9050919050565b6000613a5c826139f6565b9050919050565b60005b83811015613a81578082015181840152602081019050613a66565b83811115613a90576000848401525b50505050565b6000819050919050565b6000613aab82613ac3565b9050919050565b6000601f19601f8301169050919050565b60008160f01b9050919050565b613ad98161398a565b8114613ae457600080fd5b50565b613af08161399c565b8114613afb57600080fd5b50565b613b07816139ae565b8114613b1257600080fd5b50565b613b1e816139ba565b8114613b2957600080fd5b50565b613b35816139c4565b8114613b4057600080fd5b50565b613b4c816139d6565b8114613b5757600080fd5b50565b613b6381613a16565b8114613b6e57600080fd5b50565b613b7a81613a20565b8114613b8557600080fd5b5056fe45524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a206275726e20616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122009d6ee80e8c70b2af3b56e33b523851ed48f09fbd73192d300f42b8164700b9e64736f6c634300060c00330000000000000000000000000953beb1c5173af0bdf572b404e830c5b4684324000000000000000000000000000000000000000000000000000000000000001e
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101a95760003560e01c806379cc6790116100f9578063adb6183211610097578063d505accf11610071578063d505accf146104f6578063dc0f0d1214610512578063dd62ed3e14610530578063f9e5423414610560576101a9565b8063adb618321461049e578063adc879e9146104bc578063cea9d26f146104da576101a9565b8063885ad0cf116100d3578063885ad0cf1461040457806395d89b4114610420578063a457c2d71461043e578063a9059cbb1461046e576101a9565b806379cc67901461039c5780637ecebe00146103b857806381893c7c146103e8576101a9565b80633c8d76d1116101665780635c23bdf5116101405780635c23bdf5146102ee5780635c975abb1461031e5780635d4545a01461033c57806370a082311461036c576101a9565b80633c8d76d11461029857806342966c68146102b45780635aa6e675146102d0576101a9565b806306fdde03146101ae578063095ea7b3146101cc57806318160ddd146101fc57806323b872dd1461021a578063313ce5671461024a5780633950935114610268575b600080fd5b6101b6610590565b6040516101c391906135aa565b60405180910390f35b6101e660048036038101906101e1919061294a565b610632565b6040516101f3919061347b565b60405180910390f35b610204610650565b604051610211919061386c565b60405180910390f35b610234600480360381019061022f919061285d565b61065a565b604051610241919061347b565b60405180910390f35b610252610733565b60405161025f9190613887565b60405180910390f35b610282600480360381019061027d919061294a565b61074a565b60405161028f919061347b565b60405180910390f35b6102b260048036038101906102ad9190612986565b6107fd565b005b6102ce60048036038101906102c99190612afb565b610964565b005b6102d8610978565b6040516102e591906133fa565b60405180910390f35b61030860048036038101906103039190612a5a565b61099c565b60405161031591906133fa565b60405180910390f35b610326610af4565b604051610333919061347b565b60405180910390f35b610356600480360381019061035191906127cf565b610b0b565b604051610363919061347b565b60405180910390f35b610386600480360381019061038191906127cf565b610b2b565b604051610393919061386c565b60405180910390f35b6103b660048036038101906103b1919061294a565b610b73565b005b6103d260048036038101906103cd91906127cf565b610bd5565b6040516103df919061386c565b60405180910390f35b61040260048036038101906103fd9190612a08565b610c1e565b005b61041e60048036038101906104199190612986565b610d3b565b005b610428610ea2565b60405161043591906135aa565b60405180910390f35b6104586004803603810190610453919061294a565b610f44565b604051610465919061347b565b60405180910390f35b6104886004803603810190610483919061294a565b611011565b604051610495919061347b565b60405180910390f35b6104a661102f565b6040516104b3919061386c565b60405180910390f35b6104c4611037565b6040516104d1919061386c565b60405180910390f35b6104f460048036038101906104ef9190612a83565b61103f565b005b610510600480360381019061050b91906128ac565b611307565b005b61051a611501565b604051610527919061386c565b60405180910390f35b61054a60048036038101906105459190612821565b611525565b604051610557919061386c565b60405180910390f35b61057a600480360381019061057591906129c7565b6115ac565b6040516105879190613459565b60405180910390f35b606060038054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156106285780601f106105fd57610100808354040283529160200191610628565b820191906000526020600020905b81548152906001019060200180831161060b57829003601f168201915b5050505050905090565b600061064661063f6116d3565b84846116db565b6001905092915050565b6000600254905090565b60006106678484846118a6565b610728846106736116d3565b61072385604051806060016040528060288152602001613bd160289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006106d96116d3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611b3b9092919063ffffffff16565b6116db565b600190509392505050565b6000600560009054906101000a900460ff16905090565b60006107f36107576116d3565b846107ee85600160006107686116d3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461167990919063ffffffff16565b6116db565b6001905092915050565b7f0000000000000000000000000953beb1c5173af0bdf572b404e830c5b468432473ffffffffffffffffffffffffffffffffffffffff1661083c6116d3565b73ffffffffffffffffffffffffffffffffffffffff1614610892576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108899061384c565b60405180910390fd5b60005b8151811015610960576000600960008484815181106108b057fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f9ef90a89b00db1a1891a357dc96b2a273add9d883e378c350d22bad87a9d7d3082828151811061093657fe5b602002602001015160405161094b91906133fa565b60405180910390a18080600101915050610895565b5050565b61097561096f6116d3565b82611b96565b50565b7f0000000000000000000000000953beb1c5173af0bdf572b404e830c5b468432481565b60008060016109a9611d44565b146109c857738595bfb0d940dfedc98943fa8a907091203f25ee6109d9565b6e0c2e074ec69a0dfb2997ba6c7d2e1e5b90508073ffffffffffffffffffffffffffffffffffffffff16630178b8bf846040518263ffffffff1660e01b8152600401610a149190613496565b60206040518083038186803b158015610a2c57600080fd5b505afa158015610a40573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a649190612ad2565b73ffffffffffffffffffffffffffffffffffffffff16633b3b57de846040518263ffffffff1660e01b8152600401610a9c9190613496565b60206040518083038186803b158015610ab457600080fd5b505afa158015610ac8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610aec91906127f8565b915050919050565b6000600860009054906101000a900460ff16905090565b60096020528060005260406000206000915054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000610bb282604051806060016040528060248152602001613bf960249139610ba386610b9e6116d3565b611525565b611b3b9092919063ffffffff16565b9050610bc683610bc06116d3565b836116db565b610bd08383611b96565b505050565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b7f0000000000000000000000000953beb1c5173af0bdf572b404e830c5b468432473ffffffffffffffffffffffffffffffffffffffff16610c5d6116d3565b73ffffffffffffffffffffffffffffffffffffffff1614610cb3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610caa9061384c565b60405180910390fd5b7f0000000000000000000000000000000000000000000000000000000062f24b23610cdc61102f565b11610d1c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d139061380c565b60405180910390fd5b8015610d2f57610d2a611d51565b610d38565b610d37611dfb565b5b50565b7f0000000000000000000000000953beb1c5173af0bdf572b404e830c5b468432473ffffffffffffffffffffffffffffffffffffffff16610d7a6116d3565b73ffffffffffffffffffffffffffffffffffffffff1614610dd0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dc79061384c565b60405180910390fd5b60005b8151811015610e9e57600160096000848481518110610dee57fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f77a7dbc6ad97703ad411a8d5edfcd1df382fb34b076a90898b11884f7ebdcc05828281518110610e7457fe5b6020026020010151604051610e8991906133fa565b60405180910390a18080600101915050610dd3565b5050565b606060048054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610f3a5780601f10610f0f57610100808354040283529160200191610f3a565b820191906000526020600020905b815481529060010190602001808311610f1d57829003601f168201915b5050505050905090565b6000611007610f516116d3565b8461100285604051806060016040528060258152602001613c1d6025913960016000610f7b6116d3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611b3b9092919063ffffffff16565b6116db565b6001905092915050565b600061102561101e6116d3565b84846118a6565b6001905092915050565b600042905090565b600046905090565b7f0000000000000000000000000953beb1c5173af0bdf572b404e830c5b468432473ffffffffffffffffffffffffffffffffffffffff1661107e6116d3565b73ffffffffffffffffffffffffffffffffffffffff16146110d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110cb9061384c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611144576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113b9061382c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156111e85760004790506000808314611196576111918284611ea6565b611198565b815b90508373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156111e0573d6000803e3d6000fd5b505050611302565b60008373ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161122391906133fa565b60206040518083038186803b15801561123b57600080fd5b505afa15801561124f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112739190612b24565b9050600080831461128d576112888284611ea6565b61128f565b815b9050600081116112d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112cb9061374c565b60405180910390fd5b6112ff84828773ffffffffffffffffffffffffffffffffffffffff16611ebf9092919063ffffffff16565b50505b505050565b8361131061102f565b1115611351576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611348906136ac565b60405180910390fd5b60007f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9888888600660008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054896040516020016113cd969594939291906134b1565b60405160208183030381529060405280519060200120905060006119016113f2611f45565b83604051602001611405939291906133bd565b604051602081830303815290604052805190602001209050600061142b82878787611f87565b90508973ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461149b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114929061372c565b60405180910390fd5b600660008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081548092919060010191905055506114f58a8a8a6116db565b50505050505050505050565b7f0000000000000000000000000000000000000000000000000000000062f24b2381565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6060815167ffffffffffffffff811180156115c657600080fd5b506040519080825280602002602001820160405280156115f55781602001602082028036833780820191505090505b50905060005b82518110156116735761162083828151811061161357fe5b602002602001015161099c565b82828151811061162c57fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505080806001019150506115fb565b50919050565b6000808284019050838110156116c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116bb9061368c565b60405180910390fd5b8091505092915050565b505050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561174b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611742906137ac565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156117bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117b29061364c565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611899919061386c565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611916576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190d9061378c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611986576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197d906135ec565b60405180910390fd5b611991838383612112565b6119fc81604051806060016040528060268152602001613bab602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611b3b9092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611a8f816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461167990919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611b2e919061386c565b60405180910390a3505050565b6000838311158290611b83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b7a91906135aa565b60405180910390fd5b5060008385039050809150509392505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611c06576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bfd9061376c565b60405180910390fd5b611c1282600083612112565b611c7d81604051806060016040528060228152602001613b89602291396000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611b3b9092919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611cd48160025461228190919063ffffffff16565b600281905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611d38919061386c565b60405180910390a35050565b6000804690508091505090565b600860009054906101000a900460ff16611da0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d979061360c565b60405180910390fd5b6000600860006101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa611de46116d3565b604051611df19190613415565b60405180910390a1565b600860009054906101000a900460ff1615611e4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e42906136ec565b60405180910390fd5b6001600860006101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258611e8f6116d3565b604051611e9c9190613415565b60405180910390a1565b6000818310611eb55781611eb7565b825b905092915050565b611f408363a9059cbb60e01b8484604051602401611ede929190613430565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506122cb565b505050565b60008060076000611f54611037565b81526020019081526020016000205490506000801b8114611f785780915050611f84565b611f80612392565b9150505b90565b60007f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08260001c1115611fef576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fe6906136cc565b60405180910390fd5b601b8460ff1614806120045750601c8460ff16145b612043576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161203a9061370c565b60405180910390fd5b6000600186868686604051600081526020016040526040516120689493929190613565565b6020604051602081039080840390855afa15801561208a573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612106576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120fd906135cc565b60405180910390fd5b80915050949350505050565b61211d8383836116ce565b612125610af4565b158061217a5750600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b806121ce5750600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b61220d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122049061366c565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561227c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122739061362c565b60405180910390fd5b505050565b60006122c383836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611b3b565b905092915050565b606061232d826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff1661245c9092919063ffffffff16565b905060008151111561238d578080602001905181019061234d9190612a31565b61238c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612383906137ec565b60405180910390fd5b5b505050565b60008061239d611037565b905060007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f6123ca610590565b805190602001206040518060400160405280600181526020017f3100000000000000000000000000000000000000000000000000000000000000815250805190602001208430604051602001612424959493929190613512565b604051602081830303815290604052805190602001209050806007600084815260200190815260200160002081905550809250505090565b606061246b8484600085612474565b90509392505050565b606061247f85612597565b6124be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124b5906137cc565b60405180910390fd5b600060608673ffffffffffffffffffffffffffffffffffffffff1685876040516124e891906133a6565b60006040518083038185875af1925050503d8060008114612525576040519150601f19603f3d011682016040523d82523d6000602084013e61252a565b606091505b5091509150811561253f57809250505061258f565b6000815111156125525780518082602001fd5b836040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161258691906135aa565b60405180910390fd5b949350505050565b60008060007fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47060001b9050833f91508082141580156125d957506000801b8214155b92505050919050565b6000813590506125f181613ad0565b92915050565b60008151905061260681613ad0565b92915050565b60008135905061261b81613ae7565b92915050565b600082601f83011261263257600080fd5b8135612645612640826138cf565b6138a2565b9150818183526020840193506020810190508385602084028201111561266a57600080fd5b60005b8381101561269a578161268088826125e2565b84526020840193506020830192505060018101905061266d565b5050505092915050565b600082601f8301126126b557600080fd5b81356126c86126c3826138f7565b6138a2565b915081818352602084019350602081019050838560208402820111156126ed57600080fd5b60005b8381101561271d57816127038882612751565b8452602084019350602083019250506001810190506126f0565b5050505092915050565b60008135905061273681613afe565b92915050565b60008151905061274b81613afe565b92915050565b60008135905061276081613b15565b92915050565b60008135905061277581613b2c565b92915050565b60008151905061278a81613b43565b92915050565b60008135905061279f81613b5a565b92915050565b6000815190506127b481613b5a565b92915050565b6000813590506127c981613b71565b92915050565b6000602082840312156127e157600080fd5b60006127ef848285016125e2565b91505092915050565b60006020828403121561280a57600080fd5b6000612818848285016125f7565b91505092915050565b6000806040838503121561283457600080fd5b6000612842858286016125e2565b9250506020612853858286016125e2565b9150509250929050565b60008060006060848603121561287257600080fd5b6000612880868287016125e2565b9350506020612891868287016125e2565b92505060406128a286828701612790565b9150509250925092565b600080600080600080600060e0888a0312156128c757600080fd5b60006128d58a828b016125e2565b97505060206128e68a828b016125e2565b96505060406128f78a828b01612790565b95505060606129088a828b01612790565b94505060806129198a828b016127ba565b93505060a061292a8a828b01612751565b92505060c061293b8a828b01612751565b91505092959891949750929550565b6000806040838503121561295d57600080fd5b600061296b858286016125e2565b925050602061297c85828601612790565b9150509250929050565b60006020828403121561299857600080fd5b600082013567ffffffffffffffff8111156129b257600080fd5b6129be84828501612621565b91505092915050565b6000602082840312156129d957600080fd5b600082013567ffffffffffffffff8111156129f357600080fd5b6129ff848285016126a4565b91505092915050565b600060208284031215612a1a57600080fd5b6000612a2884828501612727565b91505092915050565b600060208284031215612a4357600080fd5b6000612a518482850161273c565b91505092915050565b600060208284031215612a6c57600080fd5b6000612a7a84828501612751565b91505092915050565b600080600060608486031215612a9857600080fd5b6000612aa686828701612766565b9350506020612ab78682870161260c565b9250506040612ac886828701612790565b9150509250925092565b600060208284031215612ae457600080fd5b6000612af28482850161277b565b91505092915050565b600060208284031215612b0d57600080fd5b6000612b1b84828501612790565b91505092915050565b600060208284031215612b3657600080fd5b6000612b44848285016127a5565b91505092915050565b6000612b598383612b74565b60208301905092915050565b612b6e81613a2d565b82525050565b612b7d8161398a565b82525050565b612b8c8161398a565b82525050565b6000612b9d8261392f565b612ba7818561395d565b9350612bb28361391f565b8060005b83811015612be3578151612bca8882612b4d565b9750612bd583613950565b925050600181019050612bb6565b5085935050505092915050565b612bf9816139ae565b82525050565b612c08816139ba565b82525050565b612c1f612c1a826139ba565b613a96565b82525050565b6000612c308261393a565b612c3a818561396e565b9350612c4a818560208601613a63565b80840191505092915050565b6000612c6182613945565b612c6b8185613979565b9350612c7b818560208601613a63565b612c8481613ab2565b840191505092915050565b6000612c9c601883613979565b91507f45434453413a20696e76616c6964207369676e617475726500000000000000006000830152602082019050919050565b6000612cdc602383613979565b91507f45524332303a207472616e7366657220746f20746865207a65726f206164647260008301527f65737300000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000612d42601483613979565b91507f5061757361626c653a206e6f74207061757365640000000000000000000000006000830152602082019050919050565b6000612d82601983613979565b91507f544f4d41544f3a20696e76616c696420726563697069656e74000000000000006000830152602082019050919050565b6000612dc2602283613979565b91507f45524332303a20617070726f766520746f20746865207a65726f20616464726560008301527f73730000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000612e28600e83613979565b91507f544f4d41544f3a207061757365640000000000000000000000000000000000006000830152602082019050919050565b6000612e68601b83613979565b91507f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006000830152602082019050919050565b6000612ea8601d83613979565b91507f45524332305065726d69743a206578706972656420646561646c696e650000006000830152602082019050919050565b6000612ee8602283613979565b91507f45434453413a20696e76616c6964207369676e6174757265202773272076616c60008301527f75650000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000612f4e601083613979565b91507f5061757361626c653a20706175736564000000000000000000000000000000006000830152602082019050919050565b6000612f8e602283613979565b91507f45434453413a20696e76616c6964207369676e6174757265202776272076616c60008301527f75650000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000612ff4601e83613979565b91507f45524332305065726d69743a20696e76616c6964207369676e617475726500006000830152602082019050919050565b6000613034602083613979565b91507f544f4d41544f3a20747279696e6720746f2073656e6420302062616c616e63656000830152602082019050919050565b6000613074602183613979565b91507f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008301527f73000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006130da602583613979565b91507f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008301527f64726573730000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613140602483613979565b91507f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008301527f72657373000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006131a6601d83613979565b91507f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006000830152602082019050919050565b60006131e6602a83613979565b91507f5361666545524332303a204552433230206f7065726174696f6e20646964206e60008301527f6f742073756363656564000000000000000000000000000000000000000000006020830152604082019050919050565b600061324c602983613979565b91507f544f4d41544f3a2063616e6e6f74206368616e6765207472616e73666572616260008301527f696c6974792079657400000000000000000000000000000000000000000000006020830152604082019050919050565b60006132b2602483613979565b91507f544f4d41544f3a2063616e206e6f742073656e6420746f207a65726f2061646460008301527f72657373000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613318602f83613979565b91507f544f4d41544f3a206f6e6c7920676f7665726e616e63652063616e207065726660008301527f6f726d207468697320616374696f6e00000000000000000000000000000000006020830152604082019050919050565b61338261337d826139e8565b613aa0565b82525050565b61339181613a16565b82525050565b6133a081613a20565b82525050565b60006133b28284612c25565b915081905092915050565b60006133c98286613371565b6002820191506133d98285612c0e565b6020820191506133e98284612c0e565b602082019150819050949350505050565b600060208201905061340f6000830184612b83565b92915050565b600060208201905061342a6000830184612b65565b92915050565b60006040820190506134456000830185612b83565b6134526020830184613388565b9392505050565b600060208201905081810360008301526134738184612b92565b905092915050565b60006020820190506134906000830184612bf0565b92915050565b60006020820190506134ab6000830184612bff565b92915050565b600060c0820190506134c66000830189612bff565b6134d36020830188612b83565b6134e06040830187612b83565b6134ed6060830186613388565b6134fa6080830185613388565b61350760a0830184613388565b979650505050505050565b600060a0820190506135276000830188612bff565b6135346020830187612bff565b6135416040830186612bff565b61354e6060830185613388565b61355b6080830184612b83565b9695505050505050565b600060808201905061357a6000830187612bff565b6135876020830186613397565b6135946040830185612bff565b6135a16060830184612bff565b95945050505050565b600060208201905081810360008301526135c48184612c56565b905092915050565b600060208201905081810360008301526135e581612c8f565b9050919050565b6000602082019050818103600083015261360581612ccf565b9050919050565b6000602082019050818103600083015261362581612d35565b9050919050565b6000602082019050818103600083015261364581612d75565b9050919050565b6000602082019050818103600083015261366581612db5565b9050919050565b6000602082019050818103600083015261368581612e1b565b9050919050565b600060208201905081810360008301526136a581612e5b565b9050919050565b600060208201905081810360008301526136c581612e9b565b9050919050565b600060208201905081810360008301526136e581612edb565b9050919050565b6000602082019050818103600083015261370581612f41565b9050919050565b6000602082019050818103600083015261372581612f81565b9050919050565b6000602082019050818103600083015261374581612fe7565b9050919050565b6000602082019050818103600083015261376581613027565b9050919050565b6000602082019050818103600083015261378581613067565b9050919050565b600060208201905081810360008301526137a5816130cd565b9050919050565b600060208201905081810360008301526137c581613133565b9050919050565b600060208201905081810360008301526137e581613199565b9050919050565b60006020820190508181036000830152613805816131d9565b9050919050565b600060208201905081810360008301526138258161323f565b9050919050565b60006020820190508181036000830152613845816132a5565b9050919050565b600060208201905081810360008301526138658161330b565b9050919050565b60006020820190506138816000830184613388565b92915050565b600060208201905061389c6000830184613397565b92915050565b6000604051905081810181811067ffffffffffffffff821117156138c557600080fd5b8060405250919050565b600067ffffffffffffffff8211156138e657600080fd5b602082029050602081019050919050565b600067ffffffffffffffff82111561390e57600080fd5b602082029050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b6000613995826139f6565b9050919050565b60006139a7826139f6565b9050919050565b60008115159050919050565b6000819050919050565b60006139cf8261398a565b9050919050565b60006139e18261398a565b9050919050565b600061ffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b6000613a3882613a3f565b9050919050565b6000613a4a82613a51565b9050919050565b6000613a5c826139f6565b9050919050565b60005b83811015613a81578082015181840152602081019050613a66565b83811115613a90576000848401525b50505050565b6000819050919050565b6000613aab82613ac3565b9050919050565b6000601f19601f8301169050919050565b60008160f01b9050919050565b613ad98161398a565b8114613ae457600080fd5b50565b613af08161399c565b8114613afb57600080fd5b50565b613b07816139ae565b8114613b1257600080fd5b50565b613b1e816139ba565b8114613b2957600080fd5b50565b613b35816139c4565b8114613b4057600080fd5b50565b613b4c816139d6565b8114613b5757600080fd5b50565b613b6381613a16565b8114613b6e57600080fd5b50565b613b7a81613a20565b8114613b8557600080fd5b5056fe45524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a206275726e20616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122009d6ee80e8c70b2af3b56e33b523851ed48f09fbd73192d300f42b8164700b9e64736f6c634300060c0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000000953beb1c5173af0bdf572b404e830c5b4684324000000000000000000000000000000000000000000000000000000000000001e
-----Decoded View---------------
Arg [0] : _resolvedGovernance (address): 0x0953BEb1C5173Af0BdF572b404E830c5b4684324
Arg [1] : _pausePeriod (uint256): 30
-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 0000000000000000000000000953beb1c5173af0bdf572b404e830c5b4684324
Arg [1] : 000000000000000000000000000000000000000000000000000000000000001e
Deployed Bytecode Sourcemap
45325:2739:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18114:83;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20220:169;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19189:100;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20863:321;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19041:83;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21593:218;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46706:222;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27411:91;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45507:35;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44541:271;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35216:78;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45547:49;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19352:119;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27821:295;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43107:95;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46234:247;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46487:213;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18316:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22314:269;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19684:175;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44167:99;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44037:124;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47328:733;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42403:644;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45462:40;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19922:151;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44818:243;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18114:83;18151:13;18184:5;18177:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18114:83;:::o;20220:169::-;20303:4;20320:39;20329:12;:10;:12::i;:::-;20343:7;20352:6;20320:8;:39::i;:::-;20377:4;20370:11;;20220:169;;;;:::o;19189:100::-;19242:7;19269:12;;19262:19;;19189:100;:::o;20863:321::-;20969:4;20986:36;20996:6;21004:9;21015:6;20986:9;:36::i;:::-;21033:121;21042:6;21050:12;:10;:12::i;:::-;21064:89;21102:6;21064:89;;;;;;;;;;;;;;;;;:11;:19;21076:6;21064:19;;;;;;;;;;;;;;;:33;21084:12;:10;:12::i;:::-;21064:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;21033:8;:121::i;:::-;21172:4;21165:11;;20863:321;;;;;:::o;19041:83::-;19082:5;19107:9;;;;;;;;;;;19100:16;;19041:83;:::o;21593:218::-;21681:4;21698:83;21707:12;:10;:12::i;:::-;21721:7;21730:50;21769:10;21730:11;:25;21742:12;:10;:12::i;:::-;21730:25;;;;;;;;;;;;;;;:34;21756:7;21730:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;21698:8;:83::i;:::-;21799:4;21792:11;;21593:218;;;;:::o;46706:222::-;46152:10;46136:26;;:12;:10;:12::i;:::-;:26;;;46128:86;;;;;;;;;;;;:::i;:::-;;;;;;;;;46796:9:::1;46791:132;46815:6;:13;46811:1;:17;46791:132;;;46875:5;46844:17;:28;46862:6;46869:1;46862:9;;;;;;;;;;;;;;46844:28;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;46894:21;46905:6;46912:1;46905:9;;;;;;;;;;;;;;46894:21;;;;;;:::i;:::-;;;;;;;;46830:3;;;;;;;46791:132;;;;46706:222:::0;:::o;27411:91::-;27467:27;27473:12;:10;:12::i;:::-;27487:6;27467:5;:27::i;:::-;27411:91;:::o;45507:35::-;;;:::o;44541:271::-;44601:7;44617:12;44660:1;44644:12;:10;:12::i;:::-;:17;:107;;44709:42;44644:107;;;44664:42;44644:107;44617:141;;44772:8;:17;;;44790:4;44772:23;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:28;;;44801:4;44772:34;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;44765:41;;;44541:271;;;:::o;35216:78::-;35255:4;35279:7;;;;;;;;;;;35272:14;;35216:78;:::o;45547:49::-;;;;;;;;;;;;;;;;;;;;;;:::o;19352:119::-;19418:7;19445:9;:18;19455:7;19445:18;;;;;;;;;;;;;;;;19438:25;;19352:119;;;:::o;27821:295::-;27898:26;27927:84;27964:6;27927:84;;;;;;;;;;;;;;;;;:32;27937:7;27946:12;:10;:12::i;:::-;27927:9;:32::i;:::-;:36;;:84;;;;;:::i;:::-;27898:113;;28024:51;28033:7;28042:12;:10;:12::i;:::-;28056:18;28024:8;:51::i;:::-;28086:22;28092:7;28101:6;28086:5;:22::i;:::-;27821:295;;;:::o;43107:95::-;43159:7;43182;:14;43190:5;43182:14;;;;;;;;;;;;;;;;43175:21;;43107:95;;;:::o;46234:247::-;46152:10;46136:26;;:12;:10;:12::i;:::-;:26;;;46128:86;;;;;;;;;;;;:::i;:::-;;;;;;;;;46336:15:::1;46317:16;:14;:16::i;:::-;:34;46309:88;;;;;;;;;;;;:::i;:::-;;;;;;;;;46408:8;46404:72;;;46427:10;:8;:10::i;:::-;46404:72;;;46460:8;:6;:8::i;:::-;46404:72;46234:247:::0;:::o;46487:213::-;46152:10;46136:26;;:12;:10;:12::i;:::-;:26;;;46128:86;;;;;;;;;;;;:::i;:::-;;;;;;;;;46572:9:::1;46567:128;46591:6;:13;46587:1;:17;46567:128;;;46651:4;46620:17;:28;46638:6;46645:1;46638:9;;;;;;;;;;;;;;46620:28;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;46669:18;46677:6;46684:1;46677:9;;;;;;;;;;;;;;46669:18;;;;;;:::i;:::-;;;;;;;;46606:3;;;;;;;46567:128;;;;46487:213:::0;:::o;18316:87::-;18355:13;18388:7;18381:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18316:87;:::o;22314:269::-;22407:4;22424:129;22433:12;:10;:12::i;:::-;22447:7;22456:96;22495:15;22456:96;;;;;;;;;;;;;;;;;:11;:25;22468:12;:10;:12::i;:::-;22456:25;;;;;;;;;;;;;;;:34;22482:7;22456:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;22424:8;:129::i;:::-;22571:4;22564:11;;22314:269;;;;:::o;19684:175::-;19770:4;19787:42;19797:12;:10;:12::i;:::-;19811:9;19822:6;19787:9;:42::i;:::-;19847:4;19840:11;;19684:175;;;;:::o;44167:99::-;44222:7;44245:15;44238:22;;44167:99;:::o;44037:124::-;44085:16;44140:9;44128:21;;44119:37;:::o;47328:733::-;46152:10;46136:26;;:12;:10;:12::i;:::-;:26;;;46128:86;;;;;;;;;;;;:::i;:::-;;;;;;;;;47478:1:::1;47463:17;;:3;:17;;;;47455:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;47551:1;47534:19;;:6;:19;;;47530:526;;;47584:20;47607:21;47584:44;;47637:15;47667:1:::0;47655:8:::1;:13;:63;;47686:32;47695:12;47709:8;47686;:32::i;:::-;47655:63;;;47671:12;47655:63;47637:81;;47727:3;:12;;:21;47740:7;47727:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;47530:526;;;;;47797:20;47820:6;:16;;;47845:4;47820:31;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;47797:54;;47860:15;47890:1:::0;47878:8:::1;:13;:63;;47909:32;47918:12;47932:8;47909;:32::i;:::-;47878:63;;;47894:12;47878:63;47860:81;;47968:1;47958:7;:11;47950:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;48015:33;48035:3;48040:7;48015:6;:19;;;;:33;;;;;:::i;:::-;47530:526;;;47328:733:::0;;;:::o;42403:644::-;42598:8;42578:16;:14;:16::i;:::-;:28;;42570:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;42649:18;41768:105;42709:5;42716:7;42725:6;42733:7;:14;42741:5;42733:14;;;;;;;;;;;;;;;;42749:8;42680:78;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;42670:89;;;;;;42649:110;;42768:12;42817:6;42826:18;:16;:18::i;:::-;42846:10;42793:64;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;42783:75;;;;;;42768:90;;42867:14;42884:28;42898:4;42904:1;42907;42910;42884:13;:28::i;:::-;42867:45;;42937:5;42927:15;;:6;:15;;;42919:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;42986:7;:14;42994:5;42986:14;;;;;;;;;;;;;;;;:16;;;;;;;;;;;;;43009:32;43018:5;43025:7;43034:6;43009:8;:32::i;:::-;42403:644;;;;;;;;;;:::o;45462:40::-;;;:::o;19922:151::-;20011:7;20038:11;:18;20050:5;20038:18;;;;;;;;;;;;;;;:27;20057:7;20038:27;;;;;;;;;;;;;;;;20031:34;;19922:151;;;;:::o;44818:243::-;44886:23;44941:7;:14;44927:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44918:38;;44968:9;44963:93;44987:7;:14;44983:1;:18;44963:93;;;45029:19;45037:7;45045:1;45037:10;;;;;;;;;;;;;;45029:7;:19::i;:::-;45017:6;45024:1;45017:9;;;;;;;;;;;;;:31;;;;;;;;;;;45003:3;;;;;;;44963:93;;;;44818:243;;;:::o;5220:181::-;5278:7;5298:9;5314:1;5310;:5;5298:17;;5339:1;5334;:6;;5326:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;5392:1;5385:8;;;5220:181;;;;:::o;26832:92::-;;;;:::o;3941:106::-;3994:15;4029:10;4022:17;;3941:106;:::o;25461:346::-;25580:1;25563:19;;:5;:19;;;;25555:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25661:1;25642:21;;:7;:21;;;;25634:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25745:6;25715:11;:18;25727:5;25715:18;;;;;;;;;;;;;;;:27;25734:7;25715:27;;;;;;;;;;;;;;;:36;;;;25783:7;25767:32;;25776:5;25767:32;;;25792:6;25767:32;;;;;;:::i;:::-;;;;;;;;25461:346;;;:::o;23073:539::-;23197:1;23179:20;;:6;:20;;;;23171:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;23281:1;23260:23;;:9;:23;;;;23252:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;23336:47;23357:6;23365:9;23376:6;23336:20;:47::i;:::-;23416:71;23438:6;23416:71;;;;;;;;;;;;;;;;;:9;:17;23426:6;23416:17;;;;;;;;;;;;;;;;:21;;:71;;;;;:::i;:::-;23396:9;:17;23406:6;23396:17;;;;;;;;;;;;;;;:91;;;;23521:32;23546:6;23521:9;:20;23531:9;23521:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;23498:9;:20;23508:9;23498:20;;;;;;;;;;;;;;;:55;;;;23586:9;23569:35;;23578:6;23569:35;;;23597:6;23569:35;;;;;;:::i;:::-;;;;;;;;23073:539;;;:::o;6123:192::-;6209:7;6242:1;6237;:6;;6245:12;6229:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;6269:9;6285:1;6281;:5;6269:17;;6306:1;6299:8;;;6123:192;;;;;:::o;24603:418::-;24706:1;24687:21;;:7;:21;;;;24679:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;24759:49;24780:7;24797:1;24801:6;24759:20;:49::i;:::-;24842:68;24865:6;24842:68;;;;;;;;;;;;;;;;;:9;:18;24852:7;24842:18;;;;;;;;;;;;;;;;:22;;:68;;;;;:::i;:::-;24821:9;:18;24831:7;24821:18;;;;;;;;;;;;;;;:89;;;;24936:24;24953:6;24936:12;;:16;;:24;;;;:::i;:::-;24921:12;:39;;;;25002:1;24976:37;;24985:7;24976:37;;;25006:6;24976:37;;;;;;:::i;:::-;;;;;;;;24603:418;;:::o;45067:154::-;45112:7;45128:15;45179:9;45168:20;;45208:7;45201:14;;;45067:154;:::o;36265:120::-;35810:7;;;;;;;;;;;35802:40;;;;;;;;;;;;:::i;:::-;;;;;;;;;36334:5:::1;36324:7;;:15;;;;;;;;;;;;;;;;;;36355:22;36364:12;:10;:12::i;:::-;36355:22;;;;;;:::i;:::-;;;;;;;;36265:120::o:0;36006:118::-;35534:7;;;;;;;;;;;35533:8;35525:37;;;;;;;;;;;;:::i;:::-;;;;;;;;;36076:4:::1;36066:7;;:14;;;;;;;;;;;;;;;;;;36096:20;36103:12;:10;:12::i;:::-;36096:20;;;;;;:::i;:::-;;;;;;;;36006:118::o:0;36820:106::-;36878:7;36909:1;36905;:5;:13;;36917:1;36905:13;;;36913:1;36905:13;36898:20;;36820:106;;;;:::o;28781:177::-;28864:86;28884:5;28914:23;;;28939:2;28943:5;28891:58;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28864:19;:86::i;:::-;28781:177;;;:::o;43782:249::-;43827:7;43843:23;43869:17;:28;43887:9;:7;:9::i;:::-;43869:28;;;;;;;;;;;;43843:54;;43927:4;43908:23;;:15;:23;43904:122;;43949:15;43942:22;;;;;43904:122;43994:24;:22;:24::i;:::-;43987:31;;;43782:249;;:::o;39212:1395::-;39322:7;40207:66;40201:1;40193:10;;:80;;40185:127;;;;;;;;;;;;:::i;:::-;;;;;;;;;40332:2;40327:1;:7;;;:18;;;;40343:2;40338:1;:7;;;40327:18;40319:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;40474:14;40491:24;40501:4;40507:1;40510;40513;40491:24;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40474:41;;40548:1;40530:20;;:6;:20;;;;40522:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;40595:6;40588:13;;;39212:1395;;;;;;:::o;46934:326::-;47051:44;47078:4;47084:2;47088:6;47051:26;:44::i;:::-;47111:8;:6;:8::i;:::-;47110:9;:36;;;;47123:17;:23;47141:4;47123:23;;;;;;;;;;;;;;;;;;;;;;;;;47110:36;:61;;;;47150:17;:21;47168:2;47150:21;;;;;;;;;;;;;;;;;;;;;;;;;47110:61;47102:88;;;;;;;;;;;;:::i;:::-;;;;;;;;;47219:4;47205:19;;:2;:19;;;;47197:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;46934:326;;;:::o;5684:136::-;5742:7;5769:43;5773:1;5776;5769:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;5762:50;;5684:136;;;;:::o;31086:761::-;31510:23;31536:69;31564:4;31536:69;;;;;;;;;;;;;;;;;31544:5;31536:27;;;;:69;;;;;:::i;:::-;31510:95;;31640:1;31620:10;:17;:21;31616:224;;;31762:10;31751:30;;;;;;;;;;;;:::i;:::-;31743:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;31616:224;31086:761;;;:::o;43208:501::-;43259:7;43275:16;43294:9;:7;:9::i;:::-;43275:28;;43312:26;43380:95;43502:6;:4;:6::i;:::-;43486:24;;;;;;43531:10;;;;;;;;;;;;;;;;;43521:21;;;;;;43564:8;43591:4;43359:246;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;43341:271;;;;;;43312:300;;43651:18;43621:17;:27;43639:8;43621:27;;;;;;;;;;;:48;;;;43685:18;43678:25;;;;43208:501;:::o;13561:196::-;13664:12;13696:53;13719:6;13727:4;13733:1;13736:12;13696:22;:53::i;:::-;13689:60;;13561:196;;;;;:::o;14938:979::-;15068:12;15101:18;15112:6;15101:10;:18::i;:::-;15093:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;15227:12;15241:23;15268:6;:11;;15288:8;15299:4;15268:36;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15226:78;;;;15319:7;15315:595;;;15350:10;15343:17;;;;;;15315:595;15484:1;15464:10;:17;:21;15460:439;;;15727:10;15721:17;15788:15;15775:10;15771:2;15767:19;15760:44;15675:148;15870:12;15863:20;;;;;;;;;;;:::i;:::-;;;;;;;;14938:979;;;;;;;:::o;10446:619::-;10506:4;10768:16;10795:19;10817:66;10795:88;;;;10986:7;10974:20;10962:32;;11026:11;11014:8;:23;;:42;;;;;11053:3;11041:15;;:8;:15;;11014:42;11006:51;;;;10446:619;;;:::o;5:130:-1:-;;85:6;72:20;63:29;;97:33;124:5;97:33;:::i;:::-;57:78;;;;:::o;142:134::-;;226:6;220:13;211:22;;238:33;265:5;238:33;:::i;:::-;205:71;;;;:::o;283:146::-;;371:6;358:20;349:29;;383:41;418:5;383:41;:::i;:::-;343:86;;;;:::o;454:707::-;;571:3;564:4;556:6;552:17;548:27;538:2;;589:1;586;579:12;538:2;626:6;613:20;648:80;663:64;720:6;663:64;:::i;:::-;648:80;:::i;:::-;639:89;;745:5;770:6;763:5;756:21;800:4;792:6;788:17;778:27;;822:4;817:3;813:14;806:21;;875:6;922:3;914:4;906:6;902:17;897:3;893:27;890:36;887:2;;;939:1;936;929:12;887:2;964:1;949:206;974:6;971:1;968:13;949:206;;;1032:3;1054:37;1087:3;1075:10;1054:37;:::i;:::-;1049:3;1042:50;1115:4;1110:3;1106:14;1099:21;;1143:4;1138:3;1134:14;1127:21;;1006:149;996:1;993;989:9;984:14;;949:206;;;953:14;531:630;;;;;;;:::o;1187:707::-;;1304:3;1297:4;1289:6;1285:17;1281:27;1271:2;;1322:1;1319;1312:12;1271:2;1359:6;1346:20;1381:80;1396:64;1453:6;1396:64;:::i;:::-;1381:80;:::i;:::-;1372:89;;1478:5;1503:6;1496:5;1489:21;1533:4;1525:6;1521:17;1511:27;;1555:4;1550:3;1546:14;1539:21;;1608:6;1655:3;1647:4;1639:6;1635:17;1630:3;1626:27;1623:36;1620:2;;;1672:1;1669;1662:12;1620:2;1697:1;1682:206;1707:6;1704:1;1701:13;1682:206;;;1765:3;1787:37;1820:3;1808:10;1787:37;:::i;:::-;1782:3;1775:50;1848:4;1843:3;1839:14;1832:21;;1876:4;1871:3;1867:14;1860:21;;1739:149;1729:1;1726;1722:9;1717:14;;1682:206;;;1686:14;1264:630;;;;;;;:::o;1902:124::-;;1979:6;1966:20;1957:29;;1991:30;2015:5;1991:30;:::i;:::-;1951:75;;;;:::o;2033:128::-;;2114:6;2108:13;2099:22;;2126:30;2150:5;2126:30;:::i;:::-;2093:68;;;;:::o;2168:130::-;;2248:6;2235:20;2226:29;;2260:33;2287:5;2260:33;:::i;:::-;2220:78;;;;:::o;2305:156::-;;2398:6;2385:20;2376:29;;2410:46;2450:5;2410:46;:::i;:::-;2370:91;;;;:::o;2468:168::-;;2569:6;2563:13;2554:22;;2581:50;2625:5;2581:50;:::i;:::-;2548:88;;;;:::o;2643:130::-;;2723:6;2710:20;2701:29;;2735:33;2762:5;2735:33;:::i;:::-;2695:78;;;;:::o;2780:134::-;;2864:6;2858:13;2849:22;;2876:33;2903:5;2876:33;:::i;:::-;2843:71;;;;:::o;2921:126::-;;2999:6;2986:20;2977:29;;3011:31;3036:5;3011:31;:::i;:::-;2971:76;;;;:::o;3054:241::-;;3158:2;3146:9;3137:7;3133:23;3129:32;3126:2;;;3174:1;3171;3164:12;3126:2;3209:1;3226:53;3271:7;3262:6;3251:9;3247:22;3226:53;:::i;:::-;3216:63;;3188:97;3120:175;;;;:::o;3302:263::-;;3417:2;3405:9;3396:7;3392:23;3388:32;3385:2;;;3433:1;3430;3423:12;3385:2;3468:1;3485:64;3541:7;3532:6;3521:9;3517:22;3485:64;:::i;:::-;3475:74;;3447:108;3379:186;;;;:::o;3572:366::-;;;3693:2;3681:9;3672:7;3668:23;3664:32;3661:2;;;3709:1;3706;3699:12;3661:2;3744:1;3761:53;3806:7;3797:6;3786:9;3782:22;3761:53;:::i;:::-;3751:63;;3723:97;3851:2;3869:53;3914:7;3905:6;3894:9;3890:22;3869:53;:::i;:::-;3859:63;;3830:98;3655:283;;;;;:::o;3945:491::-;;;;4083:2;4071:9;4062:7;4058:23;4054:32;4051:2;;;4099:1;4096;4089:12;4051:2;4134:1;4151:53;4196:7;4187:6;4176:9;4172:22;4151:53;:::i;:::-;4141:63;;4113:97;4241:2;4259:53;4304:7;4295:6;4284:9;4280:22;4259:53;:::i;:::-;4249:63;;4220:98;4349:2;4367:53;4412:7;4403:6;4392:9;4388:22;4367:53;:::i;:::-;4357:63;;4328:98;4045:391;;;;;:::o;4443:991::-;;;;;;;;4647:3;4635:9;4626:7;4622:23;4618:33;4615:2;;;4664:1;4661;4654:12;4615:2;4699:1;4716:53;4761:7;4752:6;4741:9;4737:22;4716:53;:::i;:::-;4706:63;;4678:97;4806:2;4824:53;4869:7;4860:6;4849:9;4845:22;4824:53;:::i;:::-;4814:63;;4785:98;4914:2;4932:53;4977:7;4968:6;4957:9;4953:22;4932:53;:::i;:::-;4922:63;;4893:98;5022:2;5040:53;5085:7;5076:6;5065:9;5061:22;5040:53;:::i;:::-;5030:63;;5001:98;5130:3;5149:51;5192:7;5183:6;5172:9;5168:22;5149:51;:::i;:::-;5139:61;;5109:97;5237:3;5256:53;5301:7;5292:6;5281:9;5277:22;5256:53;:::i;:::-;5246:63;;5216:99;5346:3;5365:53;5410:7;5401:6;5390:9;5386:22;5365:53;:::i;:::-;5355:63;;5325:99;4609:825;;;;;;;;;;:::o;5441:366::-;;;5562:2;5550:9;5541:7;5537:23;5533:32;5530:2;;;5578:1;5575;5568:12;5530:2;5613:1;5630:53;5675:7;5666:6;5655:9;5651:22;5630:53;:::i;:::-;5620:63;;5592:97;5720:2;5738:53;5783:7;5774:6;5763:9;5759:22;5738:53;:::i;:::-;5728:63;;5699:98;5524:283;;;;;:::o;5814:377::-;;5943:2;5931:9;5922:7;5918:23;5914:32;5911:2;;;5959:1;5956;5949:12;5911:2;6022:1;6011:9;6007:17;5994:31;6045:18;6037:6;6034:30;6031:2;;;6077:1;6074;6067:12;6031:2;6097:78;6167:7;6158:6;6147:9;6143:22;6097:78;:::i;:::-;6087:88;;5973:208;5905:286;;;;:::o;6198:377::-;;6327:2;6315:9;6306:7;6302:23;6298:32;6295:2;;;6343:1;6340;6333:12;6295:2;6406:1;6395:9;6391:17;6378:31;6429:18;6421:6;6418:30;6415:2;;;6461:1;6458;6451:12;6415:2;6481:78;6551:7;6542:6;6531:9;6527:22;6481:78;:::i;:::-;6471:88;;6357:208;6289:286;;;;:::o;6582:235::-;;6683:2;6671:9;6662:7;6658:23;6654:32;6651:2;;;6699:1;6696;6689:12;6651:2;6734:1;6751:50;6793:7;6784:6;6773:9;6769:22;6751:50;:::i;:::-;6741:60;;6713:94;6645:172;;;;:::o;6824:257::-;;6936:2;6924:9;6915:7;6911:23;6907:32;6904:2;;;6952:1;6949;6942:12;6904:2;6987:1;7004:61;7057:7;7048:6;7037:9;7033:22;7004:61;:::i;:::-;6994:71;;6966:105;6898:183;;;;:::o;7088:241::-;;7192:2;7180:9;7171:7;7167:23;7163:32;7160:2;;;7208:1;7205;7198:12;7160:2;7243:1;7260:53;7305:7;7296:6;7285:9;7281:22;7260:53;:::i;:::-;7250:63;;7222:97;7154:175;;;;:::o;7336:533::-;;;;7495:2;7483:9;7474:7;7470:23;7466:32;7463:2;;;7511:1;7508;7501:12;7463:2;7546:1;7563:66;7621:7;7612:6;7601:9;7597:22;7563:66;:::i;:::-;7553:76;;7525:110;7666:2;7684:61;7737:7;7728:6;7717:9;7713:22;7684:61;:::i;:::-;7674:71;;7645:106;7782:2;7800:53;7845:7;7836:6;7825:9;7821:22;7800:53;:::i;:::-;7790:63;;7761:98;7457:412;;;;;:::o;7876:297::-;;8008:2;7996:9;7987:7;7983:23;7979:32;7976:2;;;8024:1;8021;8014:12;7976:2;8059:1;8076:81;8149:7;8140:6;8129:9;8125:22;8076:81;:::i;:::-;8066:91;;8038:125;7970:203;;;;:::o;8180:241::-;;8284:2;8272:9;8263:7;8259:23;8255:32;8252:2;;;8300:1;8297;8290:12;8252:2;8335:1;8352:53;8397:7;8388:6;8377:9;8373:22;8352:53;:::i;:::-;8342:63;;8314:97;8246:175;;;;:::o;8428:263::-;;8543:2;8531:9;8522:7;8518:23;8514:32;8511:2;;;8559:1;8556;8549:12;8511:2;8594:1;8611:64;8667:7;8658:6;8647:9;8643:22;8611:64;:::i;:::-;8601:74;;8573:108;8505:186;;;;:::o;8699:173::-;;8786:46;8828:3;8820:6;8786:46;:::i;:::-;8861:4;8856:3;8852:14;8838:28;;8779:93;;;;:::o;8880:142::-;8971:45;9010:5;8971:45;:::i;:::-;8966:3;8959:58;8953:69;;:::o;9029:103::-;9102:24;9120:5;9102:24;:::i;:::-;9097:3;9090:37;9084:48;;:::o;9139:113::-;9222:24;9240:5;9222:24;:::i;:::-;9217:3;9210:37;9204:48;;:::o;9290:690::-;;9435:54;9483:5;9435:54;:::i;:::-;9502:86;9581:6;9576:3;9502:86;:::i;:::-;9495:93;;9609:56;9659:5;9609:56;:::i;:::-;9685:7;9713:1;9698:260;9723:6;9720:1;9717:13;9698:260;;;9790:6;9784:13;9811:63;9870:3;9855:13;9811:63;:::i;:::-;9804:70;;9891:60;9944:6;9891:60;:::i;:::-;9881:70;;9755:203;9745:1;9742;9738:9;9733:14;;9698:260;;;9702:14;9971:3;9964:10;;9414:566;;;;;;;:::o;9988:104::-;10065:21;10080:5;10065:21;:::i;:::-;10060:3;10053:34;10047:45;;:::o;10099:113::-;10182:24;10200:5;10182:24;:::i;:::-;10177:3;10170:37;10164:48;;:::o;10219:152::-;10320:45;10340:24;10358:5;10340:24;:::i;:::-;10320:45;:::i;:::-;10315:3;10308:58;10302:69;;:::o;10378:356::-;;10506:38;10538:5;10506:38;:::i;:::-;10556:88;10637:6;10632:3;10556:88;:::i;:::-;10549:95;;10649:52;10694:6;10689:3;10682:4;10675:5;10671:16;10649:52;:::i;:::-;10722:6;10717:3;10713:16;10706:23;;10486:248;;;;;:::o;10741:347::-;;10853:39;10886:5;10853:39;:::i;:::-;10904:71;10968:6;10963:3;10904:71;:::i;:::-;10897:78;;10980:52;11025:6;11020:3;11013:4;11006:5;11002:16;10980:52;:::i;:::-;11053:29;11075:6;11053:29;:::i;:::-;11048:3;11044:39;11037:46;;10833:255;;;;;:::o;11096:324::-;;11256:67;11320:2;11315:3;11256:67;:::i;:::-;11249:74;;11356:26;11352:1;11347:3;11343:11;11336:47;11411:2;11406:3;11402:12;11395:19;;11242:178;;;:::o;11429:372::-;;11589:67;11653:2;11648:3;11589:67;:::i;:::-;11582:74;;11689:34;11685:1;11680:3;11676:11;11669:55;11758:5;11753:2;11748:3;11744:12;11737:27;11792:2;11787:3;11783:12;11776:19;;11575:226;;;:::o;11810:320::-;;11970:67;12034:2;12029:3;11970:67;:::i;:::-;11963:74;;12070:22;12066:1;12061:3;12057:11;12050:43;12121:2;12116:3;12112:12;12105:19;;11956:174;;;:::o;12139:325::-;;12299:67;12363:2;12358:3;12299:67;:::i;:::-;12292:74;;12399:27;12395:1;12390:3;12386:11;12379:48;12455:2;12450:3;12446:12;12439:19;;12285:179;;;:::o;12473:371::-;;12633:67;12697:2;12692:3;12633:67;:::i;:::-;12626:74;;12733:34;12729:1;12724:3;12720:11;12713:55;12802:4;12797:2;12792:3;12788:12;12781:26;12835:2;12830:3;12826:12;12819:19;;12619:225;;;:::o;12853:314::-;;13013:67;13077:2;13072:3;13013:67;:::i;:::-;13006:74;;13113:16;13109:1;13104:3;13100:11;13093:37;13158:2;13153:3;13149:12;13142:19;;12999:168;;;:::o;13176:327::-;;13336:67;13400:2;13395:3;13336:67;:::i;:::-;13329:74;;13436:29;13432:1;13427:3;13423:11;13416:50;13494:2;13489:3;13485:12;13478:19;;13322:181;;;:::o;13512:329::-;;13672:67;13736:2;13731:3;13672:67;:::i;:::-;13665:74;;13772:31;13768:1;13763:3;13759:11;13752:52;13832:2;13827:3;13823:12;13816:19;;13658:183;;;:::o;13850:371::-;;14010:67;14074:2;14069:3;14010:67;:::i;:::-;14003:74;;14110:34;14106:1;14101:3;14097:11;14090:55;14179:4;14174:2;14169:3;14165:12;14158:26;14212:2;14207:3;14203:12;14196:19;;13996:225;;;:::o;14230:316::-;;14390:67;14454:2;14449:3;14390:67;:::i;:::-;14383:74;;14490:18;14486:1;14481:3;14477:11;14470:39;14537:2;14532:3;14528:12;14521:19;;14376:170;;;:::o;14555:371::-;;14715:67;14779:2;14774:3;14715:67;:::i;:::-;14708:74;;14815:34;14811:1;14806:3;14802:11;14795:55;14884:4;14879:2;14874:3;14870:12;14863:26;14917:2;14912:3;14908:12;14901:19;;14701:225;;;:::o;14935:330::-;;15095:67;15159:2;15154:3;15095:67;:::i;:::-;15088:74;;15195:32;15191:1;15186:3;15182:11;15175:53;15256:2;15251:3;15247:12;15240:19;;15081:184;;;:::o;15274:332::-;;15434:67;15498:2;15493:3;15434:67;:::i;:::-;15427:74;;15534:34;15530:1;15525:3;15521:11;15514:55;15597:2;15592:3;15588:12;15581:19;;15420:186;;;:::o;15615:370::-;;15775:67;15839:2;15834:3;15775:67;:::i;:::-;15768:74;;15875:34;15871:1;15866:3;15862:11;15855:55;15944:3;15939:2;15934:3;15930:12;15923:25;15976:2;15971:3;15967:12;15960:19;;15761:224;;;:::o;15994:374::-;;16154:67;16218:2;16213:3;16154:67;:::i;:::-;16147:74;;16254:34;16250:1;16245:3;16241:11;16234:55;16323:7;16318:2;16313:3;16309:12;16302:29;16359:2;16354:3;16350:12;16343:19;;16140:228;;;:::o;16377:373::-;;16537:67;16601:2;16596:3;16537:67;:::i;:::-;16530:74;;16637:34;16633:1;16628:3;16624:11;16617:55;16706:6;16701:2;16696:3;16692:12;16685:28;16741:2;16736:3;16732:12;16725:19;;16523:227;;;:::o;16759:329::-;;16919:67;16983:2;16978:3;16919:67;:::i;:::-;16912:74;;17019:31;17015:1;17010:3;17006:11;16999:52;17079:2;17074:3;17070:12;17063:19;;16905:183;;;:::o;17097:379::-;;17257:67;17321:2;17316:3;17257:67;:::i;:::-;17250:74;;17357:34;17353:1;17348:3;17344:11;17337:55;17426:12;17421:2;17416:3;17412:12;17405:34;17467:2;17462:3;17458:12;17451:19;;17243:233;;;:::o;17485:378::-;;17645:67;17709:2;17704:3;17645:67;:::i;:::-;17638:74;;17745:34;17741:1;17736:3;17732:11;17725:55;17814:11;17809:2;17804:3;17800:12;17793:33;17854:2;17849:3;17845:12;17838:19;;17631:232;;;:::o;17872:373::-;;18032:67;18096:2;18091:3;18032:67;:::i;:::-;18025:74;;18132:34;18128:1;18123:3;18119:11;18112:55;18201:6;18196:2;18191:3;18187:12;18180:28;18236:2;18231:3;18227:12;18220:19;;18018:227;;;:::o;18254:384::-;;18414:67;18478:2;18473:3;18414:67;:::i;:::-;18407:74;;18514:34;18510:1;18505:3;18501:11;18494:55;18583:17;18578:2;18573:3;18569:12;18562:39;18629:2;18624:3;18620:12;18613:19;;18400:238;;;:::o;18646:148::-;18745:43;18764:23;18781:5;18764:23;:::i;:::-;18745:43;:::i;:::-;18740:3;18733:56;18727:67;;:::o;18801:113::-;18884:24;18902:5;18884:24;:::i;:::-;18879:3;18872:37;18866:48;;:::o;18921:107::-;19000:22;19016:5;19000:22;:::i;:::-;18995:3;18988:35;18982:46;;:::o;19035:271::-;;19188:93;19277:3;19268:6;19188:93;:::i;:::-;19181:100;;19298:3;19291:10;;19169:137;;;;:::o;19313:526::-;;19495:73;19564:3;19555:6;19495:73;:::i;:::-;19590:1;19585:3;19581:11;19574:18;;19603:75;19674:3;19665:6;19603:75;:::i;:::-;19700:2;19695:3;19691:12;19684:19;;19714:75;19785:3;19776:6;19714:75;:::i;:::-;19811:2;19806:3;19802:12;19795:19;;19831:3;19824:10;;19483:356;;;;;;:::o;19846:222::-;;19973:2;19962:9;19958:18;19950:26;;19987:71;20055:1;20044:9;20040:17;20031:6;19987:71;:::i;:::-;19944:124;;;;:::o;20075:238::-;;20210:2;20199:9;20195:18;20187:26;;20224:79;20300:1;20289:9;20285:17;20276:6;20224:79;:::i;:::-;20181:132;;;;:::o;20320:333::-;;20475:2;20464:9;20460:18;20452:26;;20489:71;20557:1;20546:9;20542:17;20533:6;20489:71;:::i;:::-;20571:72;20639:2;20628:9;20624:18;20615:6;20571:72;:::i;:::-;20446:207;;;;;:::o;20660:370::-;;20837:2;20826:9;20822:18;20814:26;;20887:9;20881:4;20877:20;20873:1;20862:9;20858:17;20851:47;20912:108;21015:4;21006:6;20912:108;:::i;:::-;20904:116;;20808:222;;;;:::o;21037:210::-;;21158:2;21147:9;21143:18;21135:26;;21172:65;21234:1;21223:9;21219:17;21210:6;21172:65;:::i;:::-;21129:118;;;;:::o;21254:222::-;;21381:2;21370:9;21366:18;21358:26;;21395:71;21463:1;21452:9;21448:17;21439:6;21395:71;:::i;:::-;21352:124;;;;:::o;21483:780::-;;21750:3;21739:9;21735:19;21727:27;;21765:71;21833:1;21822:9;21818:17;21809:6;21765:71;:::i;:::-;21847:72;21915:2;21904:9;21900:18;21891:6;21847:72;:::i;:::-;21930;21998:2;21987:9;21983:18;21974:6;21930:72;:::i;:::-;22013;22081:2;22070:9;22066:18;22057:6;22013:72;:::i;:::-;22096:73;22164:3;22153:9;22149:19;22140:6;22096:73;:::i;:::-;22180;22248:3;22237:9;22233:19;22224:6;22180:73;:::i;:::-;21721:542;;;;;;;;;:::o;22270:668::-;;22509:3;22498:9;22494:19;22486:27;;22524:71;22592:1;22581:9;22577:17;22568:6;22524:71;:::i;:::-;22606:72;22674:2;22663:9;22659:18;22650:6;22606:72;:::i;:::-;22689;22757:2;22746:9;22742:18;22733:6;22689:72;:::i;:::-;22772;22840:2;22829:9;22825:18;22816:6;22772:72;:::i;:::-;22855:73;22923:3;22912:9;22908:19;22899:6;22855:73;:::i;:::-;22480:458;;;;;;;;:::o;22945:548::-;;23152:3;23141:9;23137:19;23129:27;;23167:71;23235:1;23224:9;23220:17;23211:6;23167:71;:::i;:::-;23249:68;23313:2;23302:9;23298:18;23289:6;23249:68;:::i;:::-;23328:72;23396:2;23385:9;23381:18;23372:6;23328:72;:::i;:::-;23411;23479:2;23468:9;23464:18;23455:6;23411:72;:::i;:::-;23123:370;;;;;;;:::o;23500:310::-;;23647:2;23636:9;23632:18;23624:26;;23697:9;23691:4;23687:20;23683:1;23672:9;23668:17;23661:47;23722:78;23795:4;23786:6;23722:78;:::i;:::-;23714:86;;23618:192;;;;:::o;23817:416::-;;24017:2;24006:9;24002:18;23994:26;;24067:9;24061:4;24057:20;24053:1;24042:9;24038:17;24031:47;24092:131;24218:4;24092:131;:::i;:::-;24084:139;;23988:245;;;:::o;24240:416::-;;24440:2;24429:9;24425:18;24417:26;;24490:9;24484:4;24480:20;24476:1;24465:9;24461:17;24454:47;24515:131;24641:4;24515:131;:::i;:::-;24507:139;;24411:245;;;:::o;24663:416::-;;24863:2;24852:9;24848:18;24840:26;;24913:9;24907:4;24903:20;24899:1;24888:9;24884:17;24877:47;24938:131;25064:4;24938:131;:::i;:::-;24930:139;;24834:245;;;:::o;25086:416::-;;25286:2;25275:9;25271:18;25263:26;;25336:9;25330:4;25326:20;25322:1;25311:9;25307:17;25300:47;25361:131;25487:4;25361:131;:::i;:::-;25353:139;;25257:245;;;:::o;25509:416::-;;25709:2;25698:9;25694:18;25686:26;;25759:9;25753:4;25749:20;25745:1;25734:9;25730:17;25723:47;25784:131;25910:4;25784:131;:::i;:::-;25776:139;;25680:245;;;:::o;25932:416::-;;26132:2;26121:9;26117:18;26109:26;;26182:9;26176:4;26172:20;26168:1;26157:9;26153:17;26146:47;26207:131;26333:4;26207:131;:::i;:::-;26199:139;;26103:245;;;:::o;26355:416::-;;26555:2;26544:9;26540:18;26532:26;;26605:9;26599:4;26595:20;26591:1;26580:9;26576:17;26569:47;26630:131;26756:4;26630:131;:::i;:::-;26622:139;;26526:245;;;:::o;26778:416::-;;26978:2;26967:9;26963:18;26955:26;;27028:9;27022:4;27018:20;27014:1;27003:9;26999:17;26992:47;27053:131;27179:4;27053:131;:::i;:::-;27045:139;;26949:245;;;:::o;27201:416::-;;27401:2;27390:9;27386:18;27378:26;;27451:9;27445:4;27441:20;27437:1;27426:9;27422:17;27415:47;27476:131;27602:4;27476:131;:::i;:::-;27468:139;;27372:245;;;:::o;27624:416::-;;27824:2;27813:9;27809:18;27801:26;;27874:9;27868:4;27864:20;27860:1;27849:9;27845:17;27838:47;27899:131;28025:4;27899:131;:::i;:::-;27891:139;;27795:245;;;:::o;28047:416::-;;28247:2;28236:9;28232:18;28224:26;;28297:9;28291:4;28287:20;28283:1;28272:9;28268:17;28261:47;28322:131;28448:4;28322:131;:::i;:::-;28314:139;;28218:245;;;:::o;28470:416::-;;28670:2;28659:9;28655:18;28647:26;;28720:9;28714:4;28710:20;28706:1;28695:9;28691:17;28684:47;28745:131;28871:4;28745:131;:::i;:::-;28737:139;;28641:245;;;:::o;28893:416::-;;29093:2;29082:9;29078:18;29070:26;;29143:9;29137:4;29133:20;29129:1;29118:9;29114:17;29107:47;29168:131;29294:4;29168:131;:::i;:::-;29160:139;;29064:245;;;:::o;29316:416::-;;29516:2;29505:9;29501:18;29493:26;;29566:9;29560:4;29556:20;29552:1;29541:9;29537:17;29530:47;29591:131;29717:4;29591:131;:::i;:::-;29583:139;;29487:245;;;:::o;29739:416::-;;29939:2;29928:9;29924:18;29916:26;;29989:9;29983:4;29979:20;29975:1;29964:9;29960:17;29953:47;30014:131;30140:4;30014:131;:::i;:::-;30006:139;;29910:245;;;:::o;30162:416::-;;30362:2;30351:9;30347:18;30339:26;;30412:9;30406:4;30402:20;30398:1;30387:9;30383:17;30376:47;30437:131;30563:4;30437:131;:::i;:::-;30429:139;;30333:245;;;:::o;30585:416::-;;30785:2;30774:9;30770:18;30762:26;;30835:9;30829:4;30825:20;30821:1;30810:9;30806:17;30799:47;30860:131;30986:4;30860:131;:::i;:::-;30852:139;;30756:245;;;:::o;31008:416::-;;31208:2;31197:9;31193:18;31185:26;;31258:9;31252:4;31248:20;31244:1;31233:9;31229:17;31222:47;31283:131;31409:4;31283:131;:::i;:::-;31275:139;;31179:245;;;:::o;31431:416::-;;31631:2;31620:9;31616:18;31608:26;;31681:9;31675:4;31671:20;31667:1;31656:9;31652:17;31645:47;31706:131;31832:4;31706:131;:::i;:::-;31698:139;;31602:245;;;:::o;31854:416::-;;32054:2;32043:9;32039:18;32031:26;;32104:9;32098:4;32094:20;32090:1;32079:9;32075:17;32068:47;32129:131;32255:4;32129:131;:::i;:::-;32121:139;;32025:245;;;:::o;32277:416::-;;32477:2;32466:9;32462:18;32454:26;;32527:9;32521:4;32517:20;32513:1;32502:9;32498:17;32491:47;32552:131;32678:4;32552:131;:::i;:::-;32544:139;;32448:245;;;:::o;32700:222::-;;32827:2;32816:9;32812:18;32804:26;;32841:71;32909:1;32898:9;32894:17;32885:6;32841:71;:::i;:::-;32798:124;;;;:::o;32929:214::-;;33052:2;33041:9;33037:18;33029:26;;33066:67;33130:1;33119:9;33115:17;33106:6;33066:67;:::i;:::-;33023:120;;;;:::o;33150:256::-;;33212:2;33206:9;33196:19;;33250:4;33242:6;33238:17;33349:6;33337:10;33334:22;33313:18;33301:10;33298:34;33295:62;33292:2;;;33370:1;33367;33360:12;33292:2;33390:10;33386:2;33379:22;33190:216;;;;:::o;33413:304::-;;33572:18;33564:6;33561:30;33558:2;;;33604:1;33601;33594:12;33558:2;33639:4;33631:6;33627:17;33619:25;;33702:4;33696;33692:15;33684:23;;33495:222;;;:::o;33724:304::-;;33883:18;33875:6;33872:30;33869:2;;;33915:1;33912;33905:12;33869:2;33950:4;33942:6;33938:17;33930:25;;34013:4;34007;34003:15;33995:23;;33806:222;;;:::o;34035:151::-;;34121:3;34113:11;;34159:4;34154:3;34150:14;34142:22;;34107:79;;;:::o;34193:137::-;;34302:5;34296:12;34286:22;;34267:63;;;:::o;34337:121::-;;34430:5;34424:12;34414:22;;34395:63;;;:::o;34465:122::-;;34559:5;34553:12;34543:22;;34524:63;;;:::o;34594:108::-;;34692:4;34687:3;34683:14;34675:22;;34669:33;;;:::o;34710:178::-;;34840:6;34835:3;34828:19;34877:4;34872:3;34868:14;34853:29;;34821:67;;;;:::o;34897:144::-;;35032:3;35017:18;;35010:31;;;;:::o;35050:163::-;;35165:6;35160:3;35153:19;35202:4;35197:3;35193:14;35178:29;;35146:67;;;;:::o;35221:91::-;;35283:24;35301:5;35283:24;:::i;:::-;35272:35;;35266:46;;;:::o;35319:99::-;;35389:24;35407:5;35389:24;:::i;:::-;35378:35;;35372:46;;;:::o;35425:85::-;;35498:5;35491:13;35484:21;35473:32;;35467:43;;;:::o;35517:72::-;;35579:5;35568:16;;35562:27;;;:::o;35596:104::-;;35671:24;35689:5;35671:24;:::i;:::-;35660:35;;35654:46;;;:::o;35707:108::-;;35786:24;35804:5;35786:24;:::i;:::-;35775:35;;35769:46;;;:::o;35822:84::-;;35894:6;35887:5;35883:18;35872:29;;35866:40;;;:::o;35913:121::-;;35986:42;35979:5;35975:54;35964:65;;35958:76;;;:::o;36041:72::-;;36103:5;36092:16;;36086:27;;;:::o;36120:81::-;;36191:4;36184:5;36180:16;36169:27;;36163:38;;;:::o;36208:129::-;;36295:37;36326:5;36295:37;:::i;:::-;36282:50;;36276:61;;;:::o;36344:121::-;;36423:37;36454:5;36423:37;:::i;:::-;36410:50;;36404:61;;;:::o;36472:108::-;;36551:24;36569:5;36551:24;:::i;:::-;36538:37;;36532:48;;;:::o;36588:268::-;36653:1;36660:101;36674:6;36671:1;36668:13;36660:101;;;36750:1;36745:3;36741:11;36735:18;36731:1;36726:3;36722:11;36715:39;36696:2;36693:1;36689:10;36684:15;;36660:101;;;36776:6;36773:1;36770:13;36767:2;;;36841:1;36832:6;36827:3;36823:16;36816:27;36767:2;36637:219;;;;:::o;36864:74::-;;36928:5;36917:16;;36911:27;;;:::o;36945:89::-;;37008:21;37023:5;37008:21;:::i;:::-;36997:32;;36991:43;;;:::o;37041:97::-;;37129:2;37125:7;37120:2;37113:5;37109:14;37105:28;37095:38;;37089:49;;;:::o;37146:96::-;;37226:5;37221:3;37217:15;37195:37;;37189:53;;;:::o;37250:117::-;37319:24;37337:5;37319:24;:::i;:::-;37312:5;37309:35;37299:2;;37358:1;37355;37348:12;37299:2;37293:74;:::o;37374:133::-;37451:32;37477:5;37451:32;:::i;:::-;37444:5;37441:43;37431:2;;37498:1;37495;37488:12;37431:2;37425:82;:::o;37514:111::-;37580:21;37595:5;37580:21;:::i;:::-;37573:5;37570:32;37560:2;;37616:1;37613;37606:12;37560:2;37554:71;:::o;37632:117::-;37701:24;37719:5;37701:24;:::i;:::-;37694:5;37691:35;37681:2;;37740:1;37737;37730:12;37681:2;37675:74;:::o;37756:143::-;37838:37;37869:5;37838:37;:::i;:::-;37831:5;37828:48;37818:2;;37890:1;37887;37880:12;37818:2;37812:87;:::o;37906:151::-;37992:41;38027:5;37992:41;:::i;:::-;37985:5;37982:52;37972:2;;38048:1;38045;38038:12;37972:2;37966:91;:::o;38064:117::-;38133:24;38151:5;38133:24;:::i;:::-;38126:5;38123:35;38113:2;;38172:1;38169;38162:12;38113:2;38107:74;:::o;38188:113::-;38255:22;38271:5;38255:22;:::i;:::-;38248:5;38245:33;38235:2;;38292:1;38289;38282:12;38235:2;38229:72;:::o
Swarm Source
ipfs://09d6ee80e8c70b2af3b56e33b523851ed48f09fbd73192d300f42b8164700b9e
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.