ERC-20
Overview
Max Total Supply
55,000 VBASE
Holders
84
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 9 Decimals)
Balance
701.956280932 VBASEValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
ValueBase
Compiler Version
v0.6.10+commit.00c0fcaf
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2020-12-13 */ /** * ValueBase - new token with rebase function. * * countdown to first rebase: https://cutt.ly/nhPgbfn * telegram: https://t.me/valuebasefinance * website: https://valuebase.finance * tweeter: https://twitter.com/ValuebaseF * email: [email protected] * */ // SPDX-License-Identifier: MIT pragma solidity ^0.6.10; /** * @dev Wrappers over Solidity's uintXX casting operators with added overflow * checks. * * Downcasting from uint256 in Solidity does not revert on overflow. This can * easily result in undesired exploitation or bugs, since developers usually * assume that overflows raise errors. `SafeCast` restores this intuition by * reverting the transaction when such 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. * * Can be combined with {SafeMath} to extend it to smaller types, by performing * all math on `uint256` and then downcasting. */ library SafeCast { /** * @dev Returns the downcasted uint128 from uint256, reverting on * overflow (when the input is greater than largest uint128). * * Counterpart to Solidity's `uint128` operator. * * Requirements: * * - input must fit into 128 bits */ function toUint128(uint256 value) internal pure returns (uint128) { require(value < 2**128, "SafeCast: value doesn\'t fit in 128 bits"); return uint128(value); } /** * @dev Returns the downcasted uint64 from uint256, reverting on * overflow (when the input is greater than largest uint64). * * Counterpart to Solidity's `uint64` operator. * * Requirements: * * - input must fit into 64 bits */ function toUint64(uint256 value) internal pure returns (uint64) { require(value < 2**64, "SafeCast: value doesn\'t fit in 64 bits"); return uint64(value); } /** * @dev Returns the downcasted uint32 from uint256, reverting on * overflow (when the input is greater than largest uint32). * * Counterpart to Solidity's `uint32` operator. * * Requirements: * * - input must fit into 32 bits */ function toUint32(uint256 value) internal pure returns (uint32) { require(value < 2**32, "SafeCast: value doesn\'t fit in 32 bits"); return uint32(value); } /** * @dev Returns the downcasted uint16 from uint256, reverting on * overflow (when the input is greater than largest uint16). * * Counterpart to Solidity's `uint16` operator. * * Requirements: * * - input must fit into 16 bits */ function toUint16(uint256 value) internal pure returns (uint16) { require(value < 2**16, "SafeCast: value doesn\'t fit in 16 bits"); return uint16(value); } /** * @dev Returns the downcasted uint8 from uint256, reverting on * overflow (when the input is greater than largest uint8). * * Counterpart to Solidity's `uint8` operator. * * Requirements: * * - input must fit into 8 bits. */ function toUint8(uint256 value) internal pure returns (uint8) { require(value < 2**8, "SafeCast: value doesn\'t fit in 8 bits"); return uint8(value); } /** * @dev Converts a signed int256 into an unsigned uint256. * * Requirements: * * - input must be greater than or equal to 0. */ function toUint256(int256 value) internal pure returns (uint256) { require(value >= 0, "SafeCast: value must be positive"); return uint256(value); } /** * @dev Converts an unsigned uint256 into a signed int256. * * Requirements: * * - input must be less than or equal to maxInt256. */ function toInt256(uint256 value) internal pure returns (int256) { require(value < 2**255, "SafeCast: value doesn't fit in an int256"); return int256(value); } } pragma solidity >=0.4.24 <0.7.0; /** * @title Initializable * * @dev Helper contract to support initializer functions. To use it, replace * the constructor with a function that has the `initializer` modifier. * WARNING: Unlike constructors, initializer functions must be manually * invoked. This applies both to deploying an Initializable contract, as well * as extending an Initializable contract via inheritance. * WARNING: When used with inheritance, manual care must be taken to not invoke * a parent initializer twice, or ensure that all initializers are idempotent, * because this is not dealt with automatically as with constructors. */ contract Initializable { /** * @dev Indicates that the contract has been initialized. */ bool private initialized; /** * @dev Indicates that the contract is in the process of being initialized. */ bool private initializing; /** * @dev Modifier to use in the initializer function of a contract. */ modifier initializer() { require(initializing || isConstructor() || !initialized, "Contract instance has already been initialized"); bool isTopLevelCall = !initializing; if (isTopLevelCall) { initializing = true; initialized = true; } _; if (isTopLevelCall) { initializing = false; } } /// @dev Returns true if and only if the function is running in the constructor function isConstructor() private view returns (bool) { // extcodesize checks the size of the code stored in an address, and // address returns the current address. Since the code is still not // deployed when running a constructor, any checks on its code size will // yield zero, making it an effective way to detect if a contract is // under construction or not. address self = address(this); uint256 cs; assembly { cs := extcodesize(self) } return cs == 0; } // Reserved storage space to allow for layout changes in the future. uint256[50] private ______gap; } 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. */ contract ContextUpgradeSafe is Initializable { // Empty internal constructor, to prevent people from mistakenly deploying // an instance of this contract, which should be used via inheritance. function __Context_init() internal initializer { __Context_init_unchained(); } function __Context_init_unchained() internal initializer { } 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; } uint256[50] private __gap; } 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 OwnableUpgradeSafe is Initializable, ContextUpgradeSafe { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ function __Ownable_init() internal initializer { __Context_init_unchained(); __Ownable_init_unchained(); } function __Ownable_init_unchained() internal initializer { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } /** * @dev Returns the address of the current owner. */ function owner() internal 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 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; } uint256[49] private __gap; } 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); } 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) { // Solidity only automatically asserts when dividing by 0 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; } } 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"); } } 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 {ERC20MinterPauser}. * * 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 ERC20UpgradeSafe is Initializable, ContextUpgradeSafe, 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 9. * * To select a different value for {decimals}, use {_setupDecimals}. * * All three of these values are immutable: they can only be set once during * construction. */ function __ERC20_init(string memory name, string memory symbol) internal initializer { __Context_init_unchained(); __ERC20_init_unchained(name, symbol); } function __ERC20_init_unchained(string memory name, string memory symbol) internal initializer { _name = name; _symbol = symbol; _decimals = 9; } /** * @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 virtual override returns (uint256) { return _totalSupply; } /** * @dev See {IERC20-balanceOf}. */ function balanceOf(address account) public view virtual override returns (uint256) { return _balances[account]; } /** * @dev See {IERC20-transfer}. * * Requirements: * * - `recipient` cannot be the zero address. * - the caller must have a balance of at least `amount`. */ function transfer(address recipient, uint256 amount) public virtual override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } /** * @dev See {IERC20-allowance}. */ function allowance(address owner, address spender) public view virtual override returns (uint256) { return _allowances[owner][spender]; } /** * @dev See {IERC20-approve}. * * Requirements: * * - `spender` cannot be the zero address. */ function approve(address spender, uint256 amount) public virtual override returns (bool) { _approve(_msgSender(), spender, amount); return true; } /** * @dev See {IERC20-transferFrom}. * * Emits an {Approval} event indicating the updated allowance. This is not * required by the EIP. See the note at the beginning of {ERC20}; * * Requirements: * - `sender` and `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. * - the caller must have allowance for ``sender``'s tokens of at least * `amount`. */ function transferFrom(address sender, address recipient, uint256 amount) public virtual override returns (bool) { _transfer(sender, recipient, amount); _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance")); return true; } /** * @dev Atomically increases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. */ function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue)); return true; } /** * @dev Atomically decreases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. * - `spender` must have allowance for the caller of at least * `subtractedValue`. */ function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero")); return true; } /** * @dev Moves tokens `amount` from `sender` to `recipient`. * * This is internal function is equivalent to {transfer}, and can be used to * e.g. implement automatic token fees, slashing mechanisms, etc. * * Emits a {Transfer} event. * * Requirements: * * - `sender` cannot be the zero address. * - `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. */ function _transfer(address sender, address recipient, uint256 amount) internal virtual { require(sender != address(0), "ERC20: transfer from the zero address"); require(recipient != address(0), "ERC20: transfer to the zero address"); _beforeTokenTransfer(sender, recipient, amount); _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance"); _balances[recipient] = _balances[recipient].add(amount); emit Transfer(sender, recipient, amount); } /** * @dev 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 { } uint256[44] private __gap; } contract ValueBase is ERC20UpgradeSafe, OwnableUpgradeSafe { using SafeCast for int256; using SafeMath for uint256; using Address for address; struct Transaction { bool enabled; address destination; bytes data; } event TransactionFailed(address indexed destination, uint index, bytes data); // Stable ordering is not guaranteed. Transaction[] public transactions; uint256 private _epoch; event LogRebase(uint256 indexed epoch, uint256 totalSupply); mapping (address => uint256) private _vOwned; mapping (address => uint256) private _rOwned; mapping (address => uint256) private _tOwned; mapping (address => mapping (address => uint256)) private _allowances; mapping (address => bool) private _isExcluded; address private _rebaser; address[] private _excluded; uint256 private _totalSupply; uint256 private constant MAX = ~uint256(0); uint256 private _rTotal; uint256 private _tFeeTotal; uint256 private constant DECIMALS = 9; uint256 private constant RATE_PRECISION = 10 ** DECIMALS; uint256 private constant _feetokens = 986450 * 10 ** DECIMALS; uint256 public _tFeePercent; uint256 public _tFeeTimestamp; uint256 public _limitExpiresTimestamp; uint256 public _limitTransferAmount; uint256 public _limitMaxBalance; uint256 public _limitSellFeePercent; uint256 public _limitTimestamp; constructor() public{ initialize(55000000000000); } function initialize(uint256 initialSupply) public initializer { __ERC20_init("ValueBase.Finance", "VBASE"); _setupDecimals(uint8(DECIMALS)); __Ownable_init(); _totalSupply = initialSupply; _rTotal = (MAX - (MAX % _totalSupply)); _rebaser = _msgSender(); _tFeePercent = 50; //2.00% _tFeeTimestamp = now; _vOwned[_msgSender()] = initialSupply; emit Transfer(address(0), _msgSender(), _totalSupply); excludeAccount(_msgSender()); } function setRebaser(address rebaser) external onlyOwner() { _rebaser = rebaser; } function setTransferFeePercent(uint256 tFeePercent) external onlyOwner() { require(now >= (_tFeeTimestamp + 12 hours), "Transfer fee changes timelocked for 12 hours"); _tFeePercent = tFeePercent; _tFeeTimestamp = now; } function setLimit(uint256 expiresTimestamp, uint256 transferAmount, uint256 maxBalance, uint256 sellFeePercent) external onlyOwner() { require(_limitTimestamp == 0, "Limit changes not allowed"); _limitExpiresTimestamp = expiresTimestamp; _limitTransferAmount = transferAmount; _limitMaxBalance = maxBalance; _limitSellFeePercent = sellFeePercent; _limitTimestamp = now; } function totalSupply() public view override returns (uint256) { return _totalSupply; } function rebase(int256 supplyDelta) external returns (uint256) { require(_msgSender() == owner() || _msgSender() == _rebaser, "Sender not authorized"); _epoch = _epoch.add(1); if (supplyDelta == 0) { emit LogRebase(_epoch, _totalSupply); return _totalSupply; } uint256 uSupplyDelta = (supplyDelta < 0 ? -supplyDelta : supplyDelta).toUint256(); uint256 rate = uSupplyDelta.mul(RATE_PRECISION).div(_totalSupply); uint256 multiplier; if (supplyDelta < 0) { multiplier = RATE_PRECISION.sub(rate); } else { multiplier = RATE_PRECISION.add(rate); } if (supplyDelta < 0) { _totalSupply = _totalSupply.sub(uSupplyDelta); } else { _totalSupply = _totalSupply.add(uSupplyDelta); } if (_totalSupply > MAX) { _totalSupply = MAX; } for (uint256 i = 0; i < _excluded.length; i++) { if(_tOwned[_excluded[i]] > 0) { _tOwned[_excluded[i]] = _tOwned[_excluded[i]].mul(multiplier).div(RATE_PRECISION); } } emit LogRebase(_epoch, _totalSupply); for (uint i = 0; i < transactions.length; i++) { Transaction storage t = transactions[i]; if (t.enabled) { bool result = externalCall(t.destination, t.data); if (!result) { emit TransactionFailed(t.destination, i, t.data); revert("Transaction Failed"); } } } return _totalSupply; } /** * @notice Adds a transaction that gets called for a downstream receiver of rebases * @param destination Address of contract destination * @param data Transaction data payload */ function addTransaction(address destination, bytes memory data) external onlyOwner { transactions.push(Transaction({ enabled: true, destination: destination, data: data })); } /** * @param index Index of transaction to remove. * Transaction ordering may have changed since adding. */ function removeTransaction(uint index) external onlyOwner { require(index < transactions.length, "index out of bounds"); if (index < transactions.length - 1) { transactions[index] = transactions[transactions.length - 1]; } transactions.pop(); } /** * @param index Index of transaction. Transaction ordering may have changed since adding. * @param enabled True for enabled, false for disabled. */ function setTransactionEnabled(uint index, bool enabled) external onlyOwner { require(index < transactions.length, "index must be in range of stored tx list"); transactions[index].enabled = enabled; } /** * @dev wrapper to call the encoded transactions on downstream consumers. * @param destination Address of destination contract. * @param data The encoded data payload. * @return True on success */ function externalCall(address destination, bytes memory data) internal returns (bool) { bool result; assembly { // solhint-disable-line no-inline-assembly // "Allocate" memory for output // (0x40 is where "free memory" pointer is stored by convention) let outputAddress := mload(0x40) // First 32 bytes are the padded length of data, so exclude that let dataAddress := add(data, 32) result := call( // 34710 is the value that solidity is currently emitting // It includes callGas (700) + callVeryLow (3, to pay for SUB) // + callValueTransferGas (9000) + callNewAccountGas // (25000, in case the destination address does not exist and needs creating) sub(gas(), 34710), destination, 0, // transfer value in wei dataAddress, mload(data), // Size of the input, in bytes. Stored in position 0 of the array. outputAddress, 0 // Output is ignored, therefore the output size is zero ) } return result; } function balanceOf(address account) public view override returns (uint256) { return _vOwned[account]; } function transfer(address recipient, uint256 amount) public override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } function allowance(address owner, address spender) public view override returns (uint256) { return _allowances[owner][spender]; } function approve(address spender, uint256 amount) public override returns (bool) { _approve(_msgSender(), spender, amount); return true; } function renounceOwnership() public virtual onlyOwner { _vOwned[_msgSender()] = _vOwned[_msgSender()].add(_feetokens); } function transferFrom(address sender, address recipient, uint256 amount) public override returns (bool) { _transfer(sender, recipient, amount); _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance")); return true; } function increaseAllowance(address spender, uint256 addedValue) public virtual override returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue)); return true; } function decreaseAllowance(address spender, uint256 subtractedValue) public virtual override returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero")); return true; } function isExcluded(address account) public view returns (bool) { return _isExcluded[account]; } function totalFees() internal view returns (uint256) { return _tFeeTotal; } function refract(uint256 tAmount) public { address sender = _msgSender(); require(!_isExcluded[sender], "Excluded addresses cannot call this function"); (uint256 rAmount,,,,) = _getValues(tAmount, _tFeePercent); _rOwned[sender] = _rOwned[sender].sub(rAmount); _rTotal = _rTotal.sub(rAmount); _tFeeTotal = _tFeeTotal.add(tAmount); } function refractionFromToken(uint256 tAmount, bool deductTransferFee) public view returns(uint256) { require(tAmount <= _totalSupply, "Amount must be less than supply"); if (!deductTransferFee) { (uint256 rAmount,,,,) = _getValues(tAmount, _tFeePercent); return rAmount; } else { (,uint256 rTransferAmount,,,) = _getValues(tAmount, _tFeePercent); return rTransferAmount; } } function tokenFromRefraction(uint256 rAmount) public view returns(uint256) { require(rAmount <= _rTotal, "Amount must be less than total refractions"); uint256 currentRate = _getRate(); return rAmount.div(currentRate); } function excludeAccount(address account) public onlyOwner() { require(!_isExcluded[account], "Account is already excluded"); if(_rOwned[account] > 0) { _tOwned[account] = tokenFromRefraction(_rOwned[account]); } _isExcluded[account] = true; _excluded.push(account); } function includeAccount(address account) public onlyOwner() { require(_isExcluded[account], "Account is not excluded"); for (uint256 i = 0; i < _excluded.length; i++) { if (_excluded[i] == account) { _excluded[i] = _excluded[_excluded.length - 1]; _tOwned[account] = 0; _isExcluded[account] = false; _excluded.pop(); break; } } } function _approve(address owner, address spender, uint256 amount) internal override { 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); } function _transfer(address sender, address recipient, uint256 amount) internal override { require(sender != address(0), "ERC20: transfer from the zero address"); require(recipient != address(0), "ERC20: transfer to the zero address"); require(amount > 0, "Transfer amount must be greater than zero"); if(_isExcluded[sender] && !_isExcluded[recipient]) { _vOwned[sender] = _vOwned[sender].sub(amount, "ERC20: transfer amount exceeds balance"); _vOwned[recipient] = _vOwned[recipient].add(amount); } else { _beforeTokenTransfer(sender, recipient, amount); _vOwned[sender] = _vOwned[sender].sub(amount, "ERC20: transfer amount exceeds balance"); _vOwned[recipient] = _vOwned[recipient].add(amount); } emit Transfer(sender, recipient, amount); } function _transferStandard(address sender, address recipient, uint256 tAmount, uint256 tFeePercent) private { (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee) = _getValues(tAmount, tFeePercent); _rOwned[sender] = _rOwned[sender].sub(rAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _refractFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } function _transferToExcluded(address sender, address recipient, uint256 tAmount, uint256 tFeePercent) private { (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee) = _getValues(tAmount, tFeePercent); _rOwned[sender] = _rOwned[sender].sub(rAmount); _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _refractFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } function _transferFromExcluded(address sender, address recipient, uint256 tAmount, uint256 tFeePercent) private { (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee) = _getValues(tAmount, tFeePercent); _tOwned[sender] = _tOwned[sender].sub(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _refractFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } function _transferBothExcluded(address sender, address recipient, uint256 tAmount, uint256 tFeePercent) private { (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee) = _getValues(tAmount, tFeePercent); _tOwned[sender] = _tOwned[sender].sub(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _refractFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } function _refractFee(uint256 rFee, uint256 tFee) private { _rTotal = _rTotal.sub(rFee); _tFeeTotal = _tFeeTotal.add(tFee); } function _getValues(uint256 tAmount, uint256 tFeePercent) private view returns (uint256, uint256, uint256, uint256, uint256) { (uint256 tTransferAmount, uint256 tFee) = _getTValues(tAmount, tFeePercent); uint256 currentRate = _getRate(); (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues(tAmount, tFee, currentRate); return (rAmount, rTransferAmount, rFee, tTransferAmount, tFee); } function _getTValues(uint256 tAmount, uint256 tFeePercent) private pure returns (uint256, uint256) { uint256 tFee = tAmount.mul(tFeePercent).div(10000); uint256 tTransferAmount = tAmount.sub(tFee); return (tTransferAmount, tFee); } function _getRValues(uint256 tAmount, uint256 tFee, uint256 currentRate) private pure returns (uint256, uint256, uint256) { uint256 rAmount = tAmount.mul(currentRate); uint256 rFee = tFee.mul(currentRate); uint256 rTransferAmount = rAmount.sub(rFee); return (rAmount, rTransferAmount, rFee); } function _getRate() private view returns(uint256) { (uint256 rSupply, uint256 tSupply) = _getCurrentSupply(); return rSupply.div(tSupply); } function _getCurrentSupply() private view returns(uint256, uint256) { uint256 rSupply = _rTotal; uint256 tSupply = _totalSupply; for (uint256 i = 0; i < _excluded.length; i++) { if (_rOwned[_excluded[i]] > rSupply || _tOwned[_excluded[i]] > tSupply) return (_rTotal, _totalSupply); rSupply = rSupply.sub(_rOwned[_excluded[i]]); tSupply = tSupply.sub(_tOwned[_excluded[i]]); } if (rSupply < _rTotal.div(_totalSupply)) return (_rTotal, _totalSupply); return (rSupply, tSupply); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"epoch","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"totalSupply","type":"uint256"}],"name":"LogRebase","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"destination","type":"address"},{"indexed":false,"internalType":"uint256","name":"index","type":"uint256"},{"indexed":false,"internalType":"bytes","name":"data","type":"bytes"}],"name":"TransactionFailed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_limitExpiresTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_limitMaxBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_limitSellFeePercent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_limitTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_limitTransferAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_tFeePercent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_tFeeTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"destination","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"addTransaction","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":"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":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeAccount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeAccount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"initialSupply","type":"uint256"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcluded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"int256","name":"supplyDelta","type":"int256"}],"name":"rebase","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"}],"name":"refract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferFee","type":"bool"}],"name":"refractionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"removeTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"expiresTimestamp","type":"uint256"},{"internalType":"uint256","name":"transferAmount","type":"uint256"},{"internalType":"uint256","name":"maxBalance","type":"uint256"},{"internalType":"uint256","name":"sellFeePercent","type":"uint256"}],"name":"setLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"rebaser","type":"address"}],"name":"setRebaser","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setTransactionEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tFeePercent","type":"uint256"}],"name":"setTransferFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromRefraction","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"transactions","outputs":[{"internalType":"bool","name":"enabled","type":"bool"},{"internalType":"address","name":"destination","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040523480156200001157600080fd5b5062000029653205af7670006200002f60201b60201c565b6200139b565b600060019054906101000a900460ff1680620000575750620000566200034460201b60201c565b5b806200006f57506000809054906101000a900460ff16155b620000c6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e81526020018062006043602e913960400191505060405180910390fd5b60008060019054906101000a900460ff16159050801562000117576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b620001936040518060400160405280601181526020017f56616c7565426173652e46696e616e63650000000000000000000000000000008152506040518060400160405280600581526020017f56424153450000000000000000000000000000000000000000000000000000008152506200035b60201b60201c565b620001a560096200048c60201b60201c565b620001b5620004aa60201b60201c565b8160d28190555060d25460001981620001ca57fe5b066000190360d381905550620001e5620005d760201b60201c565b60d060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550603260d5819055504260d6819055508160cb600062000249620005d760201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555062000297620005d760201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60d2546040518082815260200191505060405180910390a36200031e62000312620005d760201b60201c565b620005df60201b60201c565b8015620003405760008060016101000a81548160ff0219169083151502179055505b5050565b6000803090506000813b9050600081149250505090565b600060019054906101000a900460ff1680620003835750620003826200034460201b60201c565b5b806200039b57506000809054906101000a900460ff16155b620003f2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e81526020018062006043602e913960400191505060405180910390fd5b60008060019054906101000a900460ff16159050801562000443576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b620004536200090e60201b60201c565b62000465838362000a1b60201b60201c565b8015620004875760008060016101000a81548160ff0219169083151502179055505b505050565b80606a60006101000a81548160ff021916908360ff16021790555050565b600060019054906101000a900460ff1680620004d25750620004d16200034460201b60201c565b5b80620004ea57506000809054906101000a900460ff16155b62000541576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e81526020018062006043602e913960400191505060405180910390fd5b60008060019054906101000a900460ff16159050801562000592576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b620005a26200090e60201b60201c565b620005b262000b7860201b60201c565b8015620005d45760008060016101000a81548160ff0219169083151502179055505b50565b600033905090565b620005ef620005d760201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16609760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614620006b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60cf60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161562000773576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f4163636f756e7420697320616c7265616479206578636c75646564000000000081525060200191505060405180910390fd5b600060cc60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054111562000850576200080c60cc60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205462000d3660201b60201c565b60cd60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b600160cf60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060d1819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600060019054906101000a900460ff1680620009365750620009356200034460201b60201c565b5b806200094e57506000809054906101000a900460ff16155b620009a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e81526020018062006043602e913960400191505060405180910390fd5b60008060019054906101000a900460ff161590508015620009f6576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b801562000a185760008060016101000a81548160ff0219169083151502179055505b50565b600060019054906101000a900460ff168062000a43575062000a426200034460201b60201c565b5b8062000a5b57506000809054906101000a900460ff16155b62000ab2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e81526020018062006043602e913960400191505060405180910390fd5b60008060019054906101000a900460ff16159050801562000b03576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b826068908051906020019062000b1b929190620012ec565b50816069908051906020019062000b34929190620012ec565b506009606a60006101000a81548160ff021916908360ff160217905550801562000b735760008060016101000a81548160ff0219169083151502179055505b505050565b600060019054906101000a900460ff168062000ba0575062000b9f6200034460201b60201c565b5b8062000bb857506000809054906101000a900460ff16155b62000c0f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e81526020018062006043602e913960400191505060405180910390fd5b60008060019054906101000a900460ff16159050801562000c60576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b600062000c72620005d760201b60201c565b905080609760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350801562000d335760008060016101000a81548160ff0219169083151502179055505b50565b600060d35482111562000d95576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a81526020018062006071602a913960400191505060405180910390fd5b600062000da762000dcb60201b60201c565b905062000dc3818462000e0560201b620033041790919060201c565b915050919050565b600080600062000de062000e5760201b60201c565b9150915062000dfe818362000e0560201b620033041790919060201c565b9250505090565b600062000e4f83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506200110b60201b60201c565b905092915050565b600080600060d3549050600060d254905060008090505b60d180549050811015620010c5578260cc600060d1848154811062000e8f57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054118062000f7857508160cd600060d1848154811062000f1057fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b1562000f915760d35460d2549450945050505062001107565b6200102260cc600060d1848154811062000fa757fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205484620011d660201b6200334e1790919060201c565b9250620010b560cd600060d184815481106200103a57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483620011d660201b6200334e1790919060201c565b9150808060010191505062000e6e565b50620010e460d25460d35462000e0560201b620033041790919060201c565b821015620010fe5760d35460d25493509350505062001107565b81819350935050505b9091565b60008083118290620011bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156200117f57808201518184015260208101905062001162565b50505050905090810190601f168015620011ad5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506000838581620011c857fe5b049050809150509392505050565b60006200122083836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506200122860201b60201c565b905092915050565b6000838311158290620012d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156200129d57808201518184015260208101905062001280565b50505050905090810190601f168015620012cb5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200132f57805160ff191683800117855562001360565b8280016001018555821562001360579182015b828111156200135f57825182559160200191906001019062001342565b5b5090506200136f919062001373565b5090565b6200139891905b80821115620013945760008160009055506001016200137a565b5090565b90565b614c9880620013ab6000396000f3fe608060405234801561001057600080fd5b50600436106102115760003560e01c80635c1eca8411610125578063a9059cbb116100ad578063e46adf621161007c578063e46adf6214610b26578063f2cc0c1814610b6a578063f2fde38b14610bae578063f84354f114610bf2578063fe4b84df14610c3657610211565b8063a9059cbb146109ce578063aef7f99e14610a34578063cba0e99614610a52578063dd62ed3e14610aae57610211565b80637d449789116100f45780637d4497891461079457806395d89b41146107b257806397d0677b146108355780639ace38c214610883578063a457c2d71461096857610211565b80635c1eca84146106ac5780636e9dde99146106f857806370a0823114610732578063715018a61461078a57610211565b806323b872dd116101a8578063313ce56711610177578063313ce567146105b857806338a9ad1d146105dc57806339509351146105fa578063456e0a5d1461066057806346c3bd1f1461067e57610211565b806323b872dd146104b45780632ae427dc1461053a5780632bc1281e14610558578063303bb0b61461057657610211565b8063126e19be116101e4578063126e19be1461035f57806314f43f7e1461043a57806318160ddd146104685780631f36d9251461048657610211565b806306fdde031461021657806308d1dd8a14610299578063095ea7b3146102b75780630ab114f91461031d575b600080fd5b61021e610c64565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561025e578082015181840152602081019050610243565b50505050905090810190601f16801561028b5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102a1610d06565b6040518082815260200191505060405180910390f35b610303600480360360408110156102cd57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610d0c565b604051808215151515815260200191505060405180910390f35b6103496004803603602081101561033357600080fd5b8101908080359060200190929190505050610d2a565b6040518082815260200191505060405180910390f35b6104386004803603604081101561037557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001906401000000008111156103b257600080fd5b8201836020820111156103c457600080fd5b803590602001918460018302840111640100000000831117156103e657600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929050505061142e565b005b6104666004803603602081101561045057600080fd5b81019080803590602001909291905050506115e1565b005b610470611774565b6040518082815260200191505060405180910390f35b6104b26004803603602081101561049c57600080fd5b810190808035906020019092919050505061177e565b005b610520600480360360608110156104ca57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506118b8565b604051808215151515815260200191505060405180910390f35b610542611991565b6040518082815260200191505060405180910390f35b610560611997565b6040518082815260200191505060405180910390f35b6105a26004803603602081101561058c57600080fd5b810190808035906020019092919050505061199d565b6040518082815260200191505060405180910390f35b6105c0611a21565b604051808260ff1660ff16815260200191505060405180910390f35b6105e4611a38565b6040518082815260200191505060405180910390f35b6106466004803603604081101561061057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611a3e565b604051808215151515815260200191505060405180910390f35b610668611af1565b6040518082815260200191505060405180910390f35b6106aa6004803603602081101561069457600080fd5b8101908080359060200190929190505050611af7565b005b6106f6600480360360808110156106c257600080fd5b8101908080359060200190929190803590602001909291908035906020019092919080359060200190929190505050611dbb565b005b6107306004803603604081101561070e57600080fd5b8101908080359060200190929190803515159060200190929190505050611f26565b005b6107746004803603602081101561074857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612087565b6040518082815260200191505060405180910390f35b6107926120d0565b005b61079c612248565b6040518082815260200191505060405180910390f35b6107ba61224e565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156107fa5780820151818401526020810190506107df565b50505050905090810190601f1680156108275780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61086d6004803603604081101561084b57600080fd5b81019080803590602001909291908035151590602001909291905050506122f0565b6040518082815260200191505060405180910390f35b6108af6004803603602081101561089957600080fd5b81019080803590602001909291905050506123ab565b60405180841515151581526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561092b578082015181840152602081019050610910565b50505050905090810190601f1680156109585780820380516001836020036101000a031916815260200191505b5094505050505060405180910390f35b6109b46004803603604081101561097e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506124a7565b604051808215151515815260200191505060405180910390f35b610a1a600480360360408110156109e457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612574565b604051808215151515815260200191505060405180910390f35b610a3c612592565b6040518082815260200191505060405180910390f35b610a9460048036036020811015610a6857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612598565b604051808215151515815260200191505060405180910390f35b610b1060048036036040811015610ac457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506125ee565b6040518082815260200191505060405180910390f35b610b6860048036036020811015610b3c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612675565b005b610bac60048036036020811015610b8057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612783565b005b610bf060048036036020811015610bc457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612a9f565b005b610c3460048036036020811015610c0857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612caf565b005b610c6260048036036020811015610c4c57600080fd5b810190808035906020019092919050505061303e565b005b606060688054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610cfc5780601f10610cd157610100808354040283529160200191610cfc565b820191906000526020600020905b815481529060010190602001808311610cdf57829003601f168201915b5050505050905090565b60db5481565b6000610d20610d19613398565b84846133a0565b6001905092915050565b6000610d34613597565b73ffffffffffffffffffffffffffffffffffffffff16610d52613398565b73ffffffffffffffffffffffffffffffffffffffff161480610dc8575060d060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16610db0613398565b73ffffffffffffffffffffffffffffffffffffffff16145b610e3a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f53656e646572206e6f7420617574686f72697a6564000000000000000000000081525060200191505060405180910390fd5b610e50600160ca546135c190919063ffffffff16565b60ca819055506000821415610ea55760ca547f72725a3b1e5bd622d6bcd1339bb31279c351abe8f541ac7fd320f24e1b1641f260d2546040518082815260200191505060405180910390a260d2549050611429565b6000610ec260008412610eb85783610ebd565b836000035b613649565b90506000610ef160d254610ee36009600a0a856136c990919063ffffffff16565b61330490919063ffffffff16565b9050600080851215610f1b57610f14826009600a0a61334e90919063ffffffff16565b9050610f35565b610f32826009600a0a6135c190919063ffffffff16565b90505b6000851215610f5e57610f538360d25461334e90919063ffffffff16565b60d281905550610f7a565b610f738360d2546135c190919063ffffffff16565b60d2819055505b60001960d2541115610f905760001960d2819055505b60008090505b60d18054905081101561114957600060cd600060d18481548110610fb657fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054111561113c576110c16009600a0a6110b38460cd600060d1878154811061103f57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546136c990919063ffffffff16565b61330490919063ffffffff16565b60cd600060d184815481106110d257fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b8080600101915050610f96565b5060ca547f72725a3b1e5bd622d6bcd1339bb31279c351abe8f541ac7fd320f24e1b1641f260d2546040518082815260200191505060405180910390a260008090505b60c98054905081101561141f57600060c982815481106111a857fe5b906000526020600020906002020190508060000160009054906101000a900460ff161561141157600061129b8260000160019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836001018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156112915780601f1061126657610100808354040283529160200191611291565b820191906000526020600020905b81548152906001019060200180831161127457829003601f168201915b505050505061374f565b90508061140f578160000160019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8091ecaaa54ebb82e02d36c2c336528e0fcb9b3430fc1291ac88295032b9c263848460010160405180838152602001806020018281038252838181546001816001161561010002031660029004815260200191508054600181600116156101000203166002900480156113925780601f1061136757610100808354040283529160200191611392565b820191906000526020600020905b81548152906001019060200180831161137557829003601f168201915b5050935050505060405180910390a26040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f5472616e73616374696f6e204661696c6564000000000000000000000000000081525060200191505060405180910390fd5b505b50808060010191505061118c565b5060d25493505050505b919050565b611436613398565b73ffffffffffffffffffffffffffffffffffffffff16609760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146114f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60c960405180606001604052806001151581526020018473ffffffffffffffffffffffffffffffffffffffff16815260200183815250908060018154018082558091505060019003906000526020600020906002020160009091909190915060008201518160000160006101000a81548160ff02191690831515021790555060208201518160000160016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060408201518160010190805190602001906115da929190614825565b5050505050565b60006115eb613398565b905060cf60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611690576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c815260200180614c12602c913960400191505060405180910390fd5b600061169e8360d554613776565b5050505090506116f68160cc60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461334e90919063ffffffff16565b60cc60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061174e8160d35461334e90919063ffffffff16565b60d3819055506117698360d4546135c190919063ffffffff16565b60d481905550505050565b600060d254905090565b611786613398565b73ffffffffffffffffffffffffffffffffffffffff16609760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611848576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b61a8c060d654014210156118a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c815260200180614b1c602c913960400191505060405180910390fd5b8060d5819055504260d68190555050565b60006118c58484846137d0565b611986846118d1613398565b61198185604051806060016040528060288152602001614af46028913960ce60008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000611937613398565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613ce09092919063ffffffff16565b6133a0565b600190509392505050565b60d55481565b60d85481565b600060d3548211156119fa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180614b9f602a913960400191505060405180910390fd5b6000611a04613da0565b9050611a19818461330490919063ffffffff16565b915050919050565b6000606a60009054906101000a900460ff16905090565b60d75481565b6000611ae7611a4b613398565b84611ae28560ce6000611a5c613398565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546135c190919063ffffffff16565b6133a0565b6001905092915050565b60d95481565b611aff613398565b73ffffffffffffffffffffffffffffffffffffffff16609760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611bc1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60c9805490508110611c3b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f696e646578206f7574206f6620626f756e64730000000000000000000000000081525060200191505060405180910390fd5b600160c98054905003811015611d495760c9600160c9805490500381548110611c6057fe5b906000526020600020906002020160c98281548110611c7b57fe5b90600052602060002090600202016000820160009054906101000a900460ff168160000160006101000a81548160ff0219169083151502179055506000820160019054906101000a900473ffffffffffffffffffffffffffffffffffffffff168160000160016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060018201816001019080546001816001161561010002031660029004611d449291906148a5565b509050505b60c9805480611d5457fe5b6001900381819060005260206000209060020201600080820160006101000a81549060ff02191690556000820160016101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055600182016000611db4919061492c565b5050905550565b611dc3613398565b73ffffffffffffffffffffffffffffffffffffffff16609760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e85576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600060db5414611efd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f4c696d6974206368616e676573206e6f7420616c6c6f7765640000000000000081525060200191505060405180910390fd5b8360d7819055508260d8819055508160d9819055508060da819055504260db8190555050505050565b611f2e613398565b73ffffffffffffffffffffffffffffffffffffffff16609760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ff0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60c980549050821061204d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526028815260200180614a856028913960400191505060405180910390fd5b8060c9838154811061205b57fe5b906000526020600020906002020160000160006101000a81548160ff0219169083151502179055505050565b600060cb60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6120d8613398565b73ffffffffffffffffffffffffffffffffffffffff16609760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461219a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6121fc6009600a0a620f0d520260cb60006121b3613398565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546135c190919063ffffffff16565b60cb6000612208613398565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550565b60da5481565b606060698054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156122e65780601f106122bb576101008083540402835291602001916122e6565b820191906000526020600020905b8154815290600101906020018083116122c957829003601f168201915b5050505050905090565b600060d25483111561236a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f416d6f756e74206d757374206265206c657373207468616e20737570706c790081525060200191505060405180910390fd5b8161238c57600061237d8460d554613776565b505050509050809150506123a5565b600061239a8460d554613776565b505050915050809150505b92915050565b60c981815481106123b857fe5b90600052602060002090600202016000915090508060000160009054906101000a900460ff16908060000160019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690806001018054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561249d5780601f106124725761010080835404028352916020019161249d565b820191906000526020600020905b81548152906001019060200180831161248057829003601f168201915b5050505050905083565b600061256a6124b4613398565b8461256585604051806060016040528060258152602001614c3e6025913960ce60006124de613398565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613ce09092919063ffffffff16565b6133a0565b6001905092915050565b6000612588612581613398565b84846137d0565b6001905092915050565b60d65481565b600060cf60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600060ce60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b61267d613398565b73ffffffffffffffffffffffffffffffffffffffff16609760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461273f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b8060d060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61278b613398565b73ffffffffffffffffffffffffffffffffffffffff16609760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461284d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60cf60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561290d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f4163636f756e7420697320616c7265616479206578636c75646564000000000081525060200191505060405180910390fd5b600060cc60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411156129e15761299d60cc60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461199d565b60cd60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b600160cf60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060d1819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b612aa7613398565b73ffffffffffffffffffffffffffffffffffffffff16609760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612b69576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612bef576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180614a3d6026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16609760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380609760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b612cb7613398565b73ffffffffffffffffffffffffffffffffffffffff16609760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612d79576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60cf60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612e38576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f4163636f756e74206973206e6f74206578636c7564656400000000000000000081525060200191505060405180910390fd5b60008090505b60d18054905081101561303a578173ffffffffffffffffffffffffffffffffffffffff1660d18281548110612e6f57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561302d5760d1600160d1805490500381548110612ecb57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660d18281548110612f0357fe5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600060cd60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600060cf60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060d1805480612ff357fe5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055905561303a565b8080600101915050612e3e565b5050565b600060019054906101000a900460ff168061305d575061305c613dcb565b5b8061307457506000809054906101000a900460ff16155b6130c9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180614b71602e913960400191505060405180910390fd5b60008060019054906101000a900460ff161590508015613119576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b61318d6040518060400160405280601181526020017f56616c7565426173652e46696e616e63650000000000000000000000000000008152506040518060400160405280600581526020017f5642415345000000000000000000000000000000000000000000000000000000815250613de2565b6131976009613ef5565b61319f613f13565b8160d28190555060d254600019816131b357fe5b066000190360d3819055506131c6613398565b60d060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550603260d5819055504260d6819055508160cb6000613222613398565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613268613398565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60d2546040518082815260200191505060405180910390a36132df6132da613398565b612783565b80156133005760008060016101000a81548160ff0219169083151502179055505b5050565b600061334683836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250614022565b905092915050565b600061339083836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613ce0565b905092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613426576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526024815260200180614bee6024913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156134ac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180614a636022913960400191505060405180910390fd5b8060ce60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505050565b6000609760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60008082840190508381101561363f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b6000808212156136c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f53616665436173743a2076616c7565206d75737420626520706f73697469766581525060200191505060405180910390fd5b819050919050565b6000808314156136dc5760009050613749565b60008284029050828482816136ed57fe5b0414613744576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180614ad36021913960400191505060405180910390fd5b809150505b92915050565b6000806040516020840160008286518360008a6187965a03f1925050508091505092915050565b600080600080600080600061378b89896140e8565b915091506000613799613da0565b905060008060006137ab8d868661413c565b92509250925082828288889a509a509a509a509a505050505050509295509295909350565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613856576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526025815260200180614bc96025913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156138dc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526023815260200180614a1a6023913960400191505060405180910390fd5b60008111613935576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526029815260200180614b486029913960400191505060405180910390fd5b60cf60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156139d8575060cf60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613b2657613a4981604051806060016040528060268152602001614aad6026913960cb60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613ce09092919063ffffffff16565b60cb60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613ade8160cb60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546135c190919063ffffffff16565b60cb60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613c76565b613b3183838361419a565b613b9d81604051806060016040528060268152602001614aad6026913960cb60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613ce09092919063ffffffff16565b60cb60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613c328160cb60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546135c190919063ffffffff16565b60cb60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a3505050565b6000838311158290613d8d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015613d52578082015181840152602081019050613d37565b50505050905090810190601f168015613d7f5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b6000806000613dad61419f565b91509150613dc4818361330490919063ffffffff16565b9250505090565b6000803090506000813b9050600081149250505090565b600060019054906101000a900460ff1680613e015750613e00613dcb565b5b80613e1857506000809054906101000a900460ff16155b613e6d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180614b71602e913960400191505060405180910390fd5b60008060019054906101000a900460ff161590508015613ebd576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b613ec5614433565b613ecf8383614532565b8015613ef05760008060016101000a81548160ff0219169083151502179055505b505050565b80606a60006101000a81548160ff021916908360ff16021790555050565b600060019054906101000a900460ff1680613f325750613f31613dcb565b5b80613f4957506000809054906101000a900460ff16155b613f9e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180614b71602e913960400191505060405180910390fd5b60008060019054906101000a900460ff161590508015613fee576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b613ff6614433565b613ffe61467d565b801561401f5760008060016101000a81548160ff0219169083151502179055505b50565b600080831182906140ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015614093578082015181840152602081019050614078565b50505050905090810190601f1680156140c05780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385816140da57fe5b049050809150509392505050565b600080600061411461271061410686886136c990919063ffffffff16565b61330490919063ffffffff16565b9050600061412b828761334e90919063ffffffff16565b905080829350935050509250929050565b60008060008061415585886136c990919063ffffffff16565b9050600061416c86886136c990919063ffffffff16565b90506000614183828461334e90919063ffffffff16565b905082818395509550955050505093509350939050565b505050565b600080600060d3549050600060d254905060008090505b60d1805490508110156143f6578260cc600060d184815481106141d557fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411806142bc57508160cd600060d1848154811061425457fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b156142d35760d35460d2549450945050505061442f565b61435c60cc600060d184815481106142e757fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548461334e90919063ffffffff16565b92506143e760cd600060d1848154811061437257fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548361334e90919063ffffffff16565b915080806001019150506141b6565b5061440e60d25460d35461330490919063ffffffff16565b8210156144265760d35460d25493509350505061442f565b81819350935050505b9091565b600060019054906101000a900460ff16806144525750614451613dcb565b5b8061446957506000809054906101000a900460ff16155b6144be576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180614b71602e913960400191505060405180910390fd5b60008060019054906101000a900460ff16159050801561450e576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b801561452f5760008060016101000a81548160ff0219169083151502179055505b50565b600060019054906101000a900460ff16806145515750614550613dcb565b5b8061456857506000809054906101000a900460ff16155b6145bd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180614b71602e913960400191505060405180910390fd5b60008060019054906101000a900460ff16159050801561460d576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b8260689080519060200190614623929190614974565b50816069908051906020019061463a929190614974565b506009606a60006101000a81548160ff021916908360ff16021790555080156146785760008060016101000a81548160ff0219169083151502179055505b505050565b600060019054906101000a900460ff168061469c575061469b613dcb565b5b806146b357506000809054906101000a900460ff16155b614708576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180614b71602e913960400191505060405180910390fd5b60008060019054906101000a900460ff161590508015614758576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b6000614762613398565b905080609760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35080156148225760008060016101000a81548160ff0219169083151502179055505b50565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061486657805160ff1916838001178555614894565b82800160010185558215614894579182015b82811115614893578251825591602001919060010190614878565b5b5090506148a191906149f4565b5090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106148de578054855561491b565b8280016001018555821561491b57600052602060002091601f016020900482015b8281111561491a5782548255916001019190600101906148ff565b5b50905061492891906149f4565b5090565b50805460018160011615610100020316600290046000825580601f106149525750614971565b601f01602090049060005260206000209081019061497091906149f4565b5b50565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106149b557805160ff19168380011785556149e3565b828001600101855582156149e3579182015b828111156149e25782518255916020019190600101906149c7565b5b5090506149f091906149f4565b5090565b614a1691905b80821115614a125760008160009055506001016149fa565b5090565b9056fe45524332303a207472616e7366657220746f20746865207a65726f20616464726573734f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f2061646472657373696e646578206d75737420626520696e2072616e6765206f662073746f726564207478206c69737445524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e6365536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63655472616e7366657220666565206368616e6765732074696d656c6f636b656420666f7220313220686f7572735472616e7366657220616d6f756e74206d7573742062652067726561746572207468616e207a65726f436f6e747261637420696e7374616e63652068617320616c7265616479206265656e20696e697469616c697a6564416d6f756e74206d757374206265206c657373207468616e20746f74616c2072656672616374696f6e7345524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f20616464726573734578636c75646564206164647265737365732063616e6e6f742063616c6c20746869732066756e6374696f6e45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220f12418828bb4ac3d454d55356bcfc890bd1567feec185080bac5f56c2ebf51a064736f6c634300060a0033436f6e747261637420696e7374616e63652068617320616c7265616479206265656e20696e697469616c697a6564416d6f756e74206d757374206265206c657373207468616e20746f74616c2072656672616374696f6e73
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106102115760003560e01c80635c1eca8411610125578063a9059cbb116100ad578063e46adf621161007c578063e46adf6214610b26578063f2cc0c1814610b6a578063f2fde38b14610bae578063f84354f114610bf2578063fe4b84df14610c3657610211565b8063a9059cbb146109ce578063aef7f99e14610a34578063cba0e99614610a52578063dd62ed3e14610aae57610211565b80637d449789116100f45780637d4497891461079457806395d89b41146107b257806397d0677b146108355780639ace38c214610883578063a457c2d71461096857610211565b80635c1eca84146106ac5780636e9dde99146106f857806370a0823114610732578063715018a61461078a57610211565b806323b872dd116101a8578063313ce56711610177578063313ce567146105b857806338a9ad1d146105dc57806339509351146105fa578063456e0a5d1461066057806346c3bd1f1461067e57610211565b806323b872dd146104b45780632ae427dc1461053a5780632bc1281e14610558578063303bb0b61461057657610211565b8063126e19be116101e4578063126e19be1461035f57806314f43f7e1461043a57806318160ddd146104685780631f36d9251461048657610211565b806306fdde031461021657806308d1dd8a14610299578063095ea7b3146102b75780630ab114f91461031d575b600080fd5b61021e610c64565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561025e578082015181840152602081019050610243565b50505050905090810190601f16801561028b5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102a1610d06565b6040518082815260200191505060405180910390f35b610303600480360360408110156102cd57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610d0c565b604051808215151515815260200191505060405180910390f35b6103496004803603602081101561033357600080fd5b8101908080359060200190929190505050610d2a565b6040518082815260200191505060405180910390f35b6104386004803603604081101561037557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001906401000000008111156103b257600080fd5b8201836020820111156103c457600080fd5b803590602001918460018302840111640100000000831117156103e657600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929050505061142e565b005b6104666004803603602081101561045057600080fd5b81019080803590602001909291905050506115e1565b005b610470611774565b6040518082815260200191505060405180910390f35b6104b26004803603602081101561049c57600080fd5b810190808035906020019092919050505061177e565b005b610520600480360360608110156104ca57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506118b8565b604051808215151515815260200191505060405180910390f35b610542611991565b6040518082815260200191505060405180910390f35b610560611997565b6040518082815260200191505060405180910390f35b6105a26004803603602081101561058c57600080fd5b810190808035906020019092919050505061199d565b6040518082815260200191505060405180910390f35b6105c0611a21565b604051808260ff1660ff16815260200191505060405180910390f35b6105e4611a38565b6040518082815260200191505060405180910390f35b6106466004803603604081101561061057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611a3e565b604051808215151515815260200191505060405180910390f35b610668611af1565b6040518082815260200191505060405180910390f35b6106aa6004803603602081101561069457600080fd5b8101908080359060200190929190505050611af7565b005b6106f6600480360360808110156106c257600080fd5b8101908080359060200190929190803590602001909291908035906020019092919080359060200190929190505050611dbb565b005b6107306004803603604081101561070e57600080fd5b8101908080359060200190929190803515159060200190929190505050611f26565b005b6107746004803603602081101561074857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612087565b6040518082815260200191505060405180910390f35b6107926120d0565b005b61079c612248565b6040518082815260200191505060405180910390f35b6107ba61224e565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156107fa5780820151818401526020810190506107df565b50505050905090810190601f1680156108275780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61086d6004803603604081101561084b57600080fd5b81019080803590602001909291908035151590602001909291905050506122f0565b6040518082815260200191505060405180910390f35b6108af6004803603602081101561089957600080fd5b81019080803590602001909291905050506123ab565b60405180841515151581526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561092b578082015181840152602081019050610910565b50505050905090810190601f1680156109585780820380516001836020036101000a031916815260200191505b5094505050505060405180910390f35b6109b46004803603604081101561097e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506124a7565b604051808215151515815260200191505060405180910390f35b610a1a600480360360408110156109e457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612574565b604051808215151515815260200191505060405180910390f35b610a3c612592565b6040518082815260200191505060405180910390f35b610a9460048036036020811015610a6857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612598565b604051808215151515815260200191505060405180910390f35b610b1060048036036040811015610ac457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506125ee565b6040518082815260200191505060405180910390f35b610b6860048036036020811015610b3c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612675565b005b610bac60048036036020811015610b8057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612783565b005b610bf060048036036020811015610bc457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612a9f565b005b610c3460048036036020811015610c0857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612caf565b005b610c6260048036036020811015610c4c57600080fd5b810190808035906020019092919050505061303e565b005b606060688054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610cfc5780601f10610cd157610100808354040283529160200191610cfc565b820191906000526020600020905b815481529060010190602001808311610cdf57829003601f168201915b5050505050905090565b60db5481565b6000610d20610d19613398565b84846133a0565b6001905092915050565b6000610d34613597565b73ffffffffffffffffffffffffffffffffffffffff16610d52613398565b73ffffffffffffffffffffffffffffffffffffffff161480610dc8575060d060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16610db0613398565b73ffffffffffffffffffffffffffffffffffffffff16145b610e3a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f53656e646572206e6f7420617574686f72697a6564000000000000000000000081525060200191505060405180910390fd5b610e50600160ca546135c190919063ffffffff16565b60ca819055506000821415610ea55760ca547f72725a3b1e5bd622d6bcd1339bb31279c351abe8f541ac7fd320f24e1b1641f260d2546040518082815260200191505060405180910390a260d2549050611429565b6000610ec260008412610eb85783610ebd565b836000035b613649565b90506000610ef160d254610ee36009600a0a856136c990919063ffffffff16565b61330490919063ffffffff16565b9050600080851215610f1b57610f14826009600a0a61334e90919063ffffffff16565b9050610f35565b610f32826009600a0a6135c190919063ffffffff16565b90505b6000851215610f5e57610f538360d25461334e90919063ffffffff16565b60d281905550610f7a565b610f738360d2546135c190919063ffffffff16565b60d2819055505b60001960d2541115610f905760001960d2819055505b60008090505b60d18054905081101561114957600060cd600060d18481548110610fb657fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054111561113c576110c16009600a0a6110b38460cd600060d1878154811061103f57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546136c990919063ffffffff16565b61330490919063ffffffff16565b60cd600060d184815481106110d257fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b8080600101915050610f96565b5060ca547f72725a3b1e5bd622d6bcd1339bb31279c351abe8f541ac7fd320f24e1b1641f260d2546040518082815260200191505060405180910390a260008090505b60c98054905081101561141f57600060c982815481106111a857fe5b906000526020600020906002020190508060000160009054906101000a900460ff161561141157600061129b8260000160019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836001018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156112915780601f1061126657610100808354040283529160200191611291565b820191906000526020600020905b81548152906001019060200180831161127457829003601f168201915b505050505061374f565b90508061140f578160000160019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8091ecaaa54ebb82e02d36c2c336528e0fcb9b3430fc1291ac88295032b9c263848460010160405180838152602001806020018281038252838181546001816001161561010002031660029004815260200191508054600181600116156101000203166002900480156113925780601f1061136757610100808354040283529160200191611392565b820191906000526020600020905b81548152906001019060200180831161137557829003601f168201915b5050935050505060405180910390a26040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f5472616e73616374696f6e204661696c6564000000000000000000000000000081525060200191505060405180910390fd5b505b50808060010191505061118c565b5060d25493505050505b919050565b611436613398565b73ffffffffffffffffffffffffffffffffffffffff16609760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146114f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60c960405180606001604052806001151581526020018473ffffffffffffffffffffffffffffffffffffffff16815260200183815250908060018154018082558091505060019003906000526020600020906002020160009091909190915060008201518160000160006101000a81548160ff02191690831515021790555060208201518160000160016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060408201518160010190805190602001906115da929190614825565b5050505050565b60006115eb613398565b905060cf60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611690576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c815260200180614c12602c913960400191505060405180910390fd5b600061169e8360d554613776565b5050505090506116f68160cc60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461334e90919063ffffffff16565b60cc60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061174e8160d35461334e90919063ffffffff16565b60d3819055506117698360d4546135c190919063ffffffff16565b60d481905550505050565b600060d254905090565b611786613398565b73ffffffffffffffffffffffffffffffffffffffff16609760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611848576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b61a8c060d654014210156118a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c815260200180614b1c602c913960400191505060405180910390fd5b8060d5819055504260d68190555050565b60006118c58484846137d0565b611986846118d1613398565b61198185604051806060016040528060288152602001614af46028913960ce60008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000611937613398565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613ce09092919063ffffffff16565b6133a0565b600190509392505050565b60d55481565b60d85481565b600060d3548211156119fa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180614b9f602a913960400191505060405180910390fd5b6000611a04613da0565b9050611a19818461330490919063ffffffff16565b915050919050565b6000606a60009054906101000a900460ff16905090565b60d75481565b6000611ae7611a4b613398565b84611ae28560ce6000611a5c613398565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546135c190919063ffffffff16565b6133a0565b6001905092915050565b60d95481565b611aff613398565b73ffffffffffffffffffffffffffffffffffffffff16609760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611bc1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60c9805490508110611c3b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f696e646578206f7574206f6620626f756e64730000000000000000000000000081525060200191505060405180910390fd5b600160c98054905003811015611d495760c9600160c9805490500381548110611c6057fe5b906000526020600020906002020160c98281548110611c7b57fe5b90600052602060002090600202016000820160009054906101000a900460ff168160000160006101000a81548160ff0219169083151502179055506000820160019054906101000a900473ffffffffffffffffffffffffffffffffffffffff168160000160016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060018201816001019080546001816001161561010002031660029004611d449291906148a5565b509050505b60c9805480611d5457fe5b6001900381819060005260206000209060020201600080820160006101000a81549060ff02191690556000820160016101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055600182016000611db4919061492c565b5050905550565b611dc3613398565b73ffffffffffffffffffffffffffffffffffffffff16609760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e85576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600060db5414611efd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f4c696d6974206368616e676573206e6f7420616c6c6f7765640000000000000081525060200191505060405180910390fd5b8360d7819055508260d8819055508160d9819055508060da819055504260db8190555050505050565b611f2e613398565b73ffffffffffffffffffffffffffffffffffffffff16609760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ff0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60c980549050821061204d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526028815260200180614a856028913960400191505060405180910390fd5b8060c9838154811061205b57fe5b906000526020600020906002020160000160006101000a81548160ff0219169083151502179055505050565b600060cb60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6120d8613398565b73ffffffffffffffffffffffffffffffffffffffff16609760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461219a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6121fc6009600a0a620f0d520260cb60006121b3613398565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546135c190919063ffffffff16565b60cb6000612208613398565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550565b60da5481565b606060698054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156122e65780601f106122bb576101008083540402835291602001916122e6565b820191906000526020600020905b8154815290600101906020018083116122c957829003601f168201915b5050505050905090565b600060d25483111561236a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f416d6f756e74206d757374206265206c657373207468616e20737570706c790081525060200191505060405180910390fd5b8161238c57600061237d8460d554613776565b505050509050809150506123a5565b600061239a8460d554613776565b505050915050809150505b92915050565b60c981815481106123b857fe5b90600052602060002090600202016000915090508060000160009054906101000a900460ff16908060000160019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690806001018054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561249d5780601f106124725761010080835404028352916020019161249d565b820191906000526020600020905b81548152906001019060200180831161248057829003601f168201915b5050505050905083565b600061256a6124b4613398565b8461256585604051806060016040528060258152602001614c3e6025913960ce60006124de613398565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613ce09092919063ffffffff16565b6133a0565b6001905092915050565b6000612588612581613398565b84846137d0565b6001905092915050565b60d65481565b600060cf60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600060ce60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b61267d613398565b73ffffffffffffffffffffffffffffffffffffffff16609760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461273f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b8060d060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61278b613398565b73ffffffffffffffffffffffffffffffffffffffff16609760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461284d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60cf60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561290d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f4163636f756e7420697320616c7265616479206578636c75646564000000000081525060200191505060405180910390fd5b600060cc60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411156129e15761299d60cc60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461199d565b60cd60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b600160cf60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060d1819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b612aa7613398565b73ffffffffffffffffffffffffffffffffffffffff16609760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612b69576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612bef576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180614a3d6026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16609760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380609760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b612cb7613398565b73ffffffffffffffffffffffffffffffffffffffff16609760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612d79576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60cf60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612e38576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f4163636f756e74206973206e6f74206578636c7564656400000000000000000081525060200191505060405180910390fd5b60008090505b60d18054905081101561303a578173ffffffffffffffffffffffffffffffffffffffff1660d18281548110612e6f57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561302d5760d1600160d1805490500381548110612ecb57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660d18281548110612f0357fe5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600060cd60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600060cf60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060d1805480612ff357fe5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055905561303a565b8080600101915050612e3e565b5050565b600060019054906101000a900460ff168061305d575061305c613dcb565b5b8061307457506000809054906101000a900460ff16155b6130c9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180614b71602e913960400191505060405180910390fd5b60008060019054906101000a900460ff161590508015613119576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b61318d6040518060400160405280601181526020017f56616c7565426173652e46696e616e63650000000000000000000000000000008152506040518060400160405280600581526020017f5642415345000000000000000000000000000000000000000000000000000000815250613de2565b6131976009613ef5565b61319f613f13565b8160d28190555060d254600019816131b357fe5b066000190360d3819055506131c6613398565b60d060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550603260d5819055504260d6819055508160cb6000613222613398565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613268613398565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60d2546040518082815260200191505060405180910390a36132df6132da613398565b612783565b80156133005760008060016101000a81548160ff0219169083151502179055505b5050565b600061334683836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250614022565b905092915050565b600061339083836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613ce0565b905092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613426576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526024815260200180614bee6024913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156134ac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180614a636022913960400191505060405180910390fd5b8060ce60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505050565b6000609760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60008082840190508381101561363f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b6000808212156136c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f53616665436173743a2076616c7565206d75737420626520706f73697469766581525060200191505060405180910390fd5b819050919050565b6000808314156136dc5760009050613749565b60008284029050828482816136ed57fe5b0414613744576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180614ad36021913960400191505060405180910390fd5b809150505b92915050565b6000806040516020840160008286518360008a6187965a03f1925050508091505092915050565b600080600080600080600061378b89896140e8565b915091506000613799613da0565b905060008060006137ab8d868661413c565b92509250925082828288889a509a509a509a509a505050505050509295509295909350565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613856576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526025815260200180614bc96025913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156138dc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526023815260200180614a1a6023913960400191505060405180910390fd5b60008111613935576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526029815260200180614b486029913960400191505060405180910390fd5b60cf60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156139d8575060cf60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613b2657613a4981604051806060016040528060268152602001614aad6026913960cb60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613ce09092919063ffffffff16565b60cb60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613ade8160cb60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546135c190919063ffffffff16565b60cb60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613c76565b613b3183838361419a565b613b9d81604051806060016040528060268152602001614aad6026913960cb60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613ce09092919063ffffffff16565b60cb60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613c328160cb60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546135c190919063ffffffff16565b60cb60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a3505050565b6000838311158290613d8d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015613d52578082015181840152602081019050613d37565b50505050905090810190601f168015613d7f5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b6000806000613dad61419f565b91509150613dc4818361330490919063ffffffff16565b9250505090565b6000803090506000813b9050600081149250505090565b600060019054906101000a900460ff1680613e015750613e00613dcb565b5b80613e1857506000809054906101000a900460ff16155b613e6d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180614b71602e913960400191505060405180910390fd5b60008060019054906101000a900460ff161590508015613ebd576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b613ec5614433565b613ecf8383614532565b8015613ef05760008060016101000a81548160ff0219169083151502179055505b505050565b80606a60006101000a81548160ff021916908360ff16021790555050565b600060019054906101000a900460ff1680613f325750613f31613dcb565b5b80613f4957506000809054906101000a900460ff16155b613f9e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180614b71602e913960400191505060405180910390fd5b60008060019054906101000a900460ff161590508015613fee576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b613ff6614433565b613ffe61467d565b801561401f5760008060016101000a81548160ff0219169083151502179055505b50565b600080831182906140ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015614093578082015181840152602081019050614078565b50505050905090810190601f1680156140c05780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385816140da57fe5b049050809150509392505050565b600080600061411461271061410686886136c990919063ffffffff16565b61330490919063ffffffff16565b9050600061412b828761334e90919063ffffffff16565b905080829350935050509250929050565b60008060008061415585886136c990919063ffffffff16565b9050600061416c86886136c990919063ffffffff16565b90506000614183828461334e90919063ffffffff16565b905082818395509550955050505093509350939050565b505050565b600080600060d3549050600060d254905060008090505b60d1805490508110156143f6578260cc600060d184815481106141d557fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411806142bc57508160cd600060d1848154811061425457fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b156142d35760d35460d2549450945050505061442f565b61435c60cc600060d184815481106142e757fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548461334e90919063ffffffff16565b92506143e760cd600060d1848154811061437257fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548361334e90919063ffffffff16565b915080806001019150506141b6565b5061440e60d25460d35461330490919063ffffffff16565b8210156144265760d35460d25493509350505061442f565b81819350935050505b9091565b600060019054906101000a900460ff16806144525750614451613dcb565b5b8061446957506000809054906101000a900460ff16155b6144be576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180614b71602e913960400191505060405180910390fd5b60008060019054906101000a900460ff16159050801561450e576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b801561452f5760008060016101000a81548160ff0219169083151502179055505b50565b600060019054906101000a900460ff16806145515750614550613dcb565b5b8061456857506000809054906101000a900460ff16155b6145bd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180614b71602e913960400191505060405180910390fd5b60008060019054906101000a900460ff16159050801561460d576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b8260689080519060200190614623929190614974565b50816069908051906020019061463a929190614974565b506009606a60006101000a81548160ff021916908360ff16021790555080156146785760008060016101000a81548160ff0219169083151502179055505b505050565b600060019054906101000a900460ff168061469c575061469b613dcb565b5b806146b357506000809054906101000a900460ff16155b614708576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180614b71602e913960400191505060405180910390fd5b60008060019054906101000a900460ff161590508015614758576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b6000614762613398565b905080609760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35080156148225760008060016101000a81548160ff0219169083151502179055505b50565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061486657805160ff1916838001178555614894565b82800160010185558215614894579182015b82811115614893578251825591602001919060010190614878565b5b5090506148a191906149f4565b5090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106148de578054855561491b565b8280016001018555821561491b57600052602060002091601f016020900482015b8281111561491a5782548255916001019190600101906148ff565b5b50905061492891906149f4565b5090565b50805460018160011615610100020316600290046000825580601f106149525750614971565b601f01602090049060005260206000209081019061497091906149f4565b5b50565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106149b557805160ff19168380011785556149e3565b828001600101855582156149e3579182015b828111156149e25782518255916020019190600101906149c7565b5b5090506149f091906149f4565b5090565b614a1691905b80821115614a125760008160009055506001016149fa565b5090565b9056fe45524332303a207472616e7366657220746f20746865207a65726f20616464726573734f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f2061646472657373696e646578206d75737420626520696e2072616e6765206f662073746f726564207478206c69737445524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e6365536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63655472616e7366657220666565206368616e6765732074696d656c6f636b656420666f7220313220686f7572735472616e7366657220616d6f756e74206d7573742062652067726561746572207468616e207a65726f436f6e747261637420696e7374616e63652068617320616c7265616479206265656e20696e697469616c697a6564416d6f756e74206d757374206265206c657373207468616e20746f74616c2072656672616374696f6e7345524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f20616464726573734578636c75646564206164647265737365732063616e6e6f742063616c6c20746869732066756e6374696f6e45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220f12418828bb4ac3d454d55356bcfc890bd1567feec185080bac5f56c2ebf51a064736f6c634300060a0033
Deployed Bytecode Sourcemap
30088:17031:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22628:83;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31574:30;;;:::i;:::-;;;;;;;;;;;;;;;;;;;38355:161;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;33251:1761;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;35238:260;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;39726:390;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;33139:100;;;:::i;:::-;;;;;;;;;;;;;;;;;;;32410:263;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;38669:313;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;31326:27;;;:::i;:::-;;;;;;;;;;;;;;;;;;;31446:35;;;:::i;:::-;;;;;;;;;;;;;;;;;;;40599:253;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;23555:83;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;31402:37;;;:::i;:::-;;;;;;;;;;;;;;;;;;;38990:227;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;31488:31;;;:::i;:::-;;;;;;;;;;;;;;;;;;;35650:325;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;32685:442;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;36157:246;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;37904:117;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;38527:134;;;:::i;:::-;;31526:35;;;:::i;:::-;;;;;;;;;;;;;;;;;;;22830:87;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40124:467;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;30500:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39225:278;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;38029:167;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;31360:29;;;:::i;:::-;;;;;;;;;;;;;;;;;;;39511:110;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;38204:143;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;32303:95;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;40860:330;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;9261:244;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;41198:472;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;31694:597;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;22628:83;22665:13;22698:5;22691:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22628:83;:::o;31574:30::-;;;;:::o;38355:161::-;38430:4;38447:39;38456:12;:10;:12::i;:::-;38470:7;38479:6;38447:8;:39::i;:::-;38504:4;38497:11;;38355:161;;;;:::o;33251:1761::-;33323:7;33372;:5;:7::i;:::-;33356:23;;:12;:10;:12::i;:::-;:23;;;:51;;;;33399:8;;;;;;;;;;;33383:24;;:12;:10;:12::i;:::-;:24;;;33356:51;33348:85;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33463:13;33474:1;33463:6;;:10;;:13;;;;:::i;:::-;33454:6;:22;;;;33510:1;33495:11;:16;33491:119;;;33543:6;;33533:31;33551:12;;33533:31;;;;;;;;;;;;;;;;;;33586:12;;33579:19;;;;33491:119;33630:20;33653:58;33668:1;33654:11;:15;:44;;33687:11;33654:44;;;33673:11;33672:12;;33654:44;33653:56;:58::i;:::-;33630:81;;33722:12;33737:50;33774:12;;33737:32;31181:1;31231:2;:14;33737:12;:16;;:32;;;;:::i;:::-;:36;;:50;;;;:::i;:::-;33722:65;;33798:18;33855:1;33841:11;:15;33837:155;;;33886:24;33905:4;31181:1;31231:2;:14;33886:18;;:24;;;;:::i;:::-;33873:37;;33837:155;;;33956:24;33975:4;31181:1;31231:2;:14;33956:18;;:24;;;;:::i;:::-;33943:37;;33837:155;34030:1;34016:11;:15;34012:171;;;34063:30;34080:12;34063;;:16;;:30;;;;:::i;:::-;34048:12;:45;;;;34012:171;;;34141:30;34158:12;34141;;:16;;:30;;;;:::i;:::-;34126:12;:45;;;;34012:171;31067:1;31058:11;34207:12;;:18;34203:69;;;31067:1;31058:11;34242:12;:18;;;;34203:69;34297:9;34309:1;34297:13;;34292:219;34316:9;:16;;;;34312:1;:20;34292:219;;;34381:1;34357:7;:21;34365:9;34375:1;34365:12;;;;;;;;;;;;;;;;;;;;;;;;;34357:21;;;;;;;;;;;;;;;;:25;34354:146;;;34427:57;31181:1;31231:2;:14;34427:37;34453:10;34427:7;:21;34435:9;34445:1;34435:12;;;;;;;;;;;;;;;;;;;;;;;;;34427:21;;;;;;;;;;;;;;;;:25;;:37;;;;:::i;:::-;:41;;:57;;;;:::i;:::-;34403:7;:21;34411:9;34421:1;34411:12;;;;;;;;;;;;;;;;;;;;;;;;;34403:21;;;;;;;;;;;;;;;:81;;;;34354:146;34334:3;;;;;;;34292:219;;;;34546:6;;34536:31;34554:12;;34536:31;;;;;;;;;;;;;;;;;;34579:6;34588:1;34579:10;;34574:399;34595:12;:19;;;;34591:1;:23;34574:399;;;34636:21;34660:12;34673:1;34660:15;;;;;;;;;;;;;;;;;;34636:39;;34694:1;:9;;;;;;;;;;;;34690:272;;;34724:11;34738:35;34751:1;:13;;;;;;;;;;;;34766:1;:6;;34738:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:12;:35::i;:::-;34724:49;;34797:6;34792:155;;34851:1;:13;;;;;;;;;;;;34833:43;;;34866:1;34869;:6;;34833:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34899:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34792:155;34690:272;;34574:399;34616:3;;;;;;;34574:399;;;;34992:12;;34985:19;;;;;33251:1761;;;;:::o;35238:260::-;9037:12;:10;:12::i;:::-;9027:22;;:6;;;;;;;;;;;:22;;;9019:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35355:12:::1;35373:116;;;;;;;;35409:4;35373:116;;;;;;35441:11;35373:116;;;;;;35473:4;35373:116;;::::0;35355:135:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;35238:260:::0;;:::o;39726:390::-;39778:14;39795:12;:10;:12::i;:::-;39778:29;;39827:11;:19;39839:6;39827:19;;;;;;;;;;;;;;;;;;;;;;;;;39826:20;39818:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39907:15;39930:33;39941:7;39950:12;;39930:10;:33::i;:::-;39906:57;;;;;;39992:28;40012:7;39992;:15;40000:6;39992:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;39974:7;:15;39982:6;39974:15;;;;;;;;;;;;;;;:46;;;;40041:20;40053:7;40041;;:11;;:20;;;;:::i;:::-;40031:7;:30;;;;40085:23;40100:7;40085:10;;:14;;:23;;;;:::i;:::-;40072:10;:36;;;;39726:390;;;:::o;33139:100::-;33192:7;33219:12;;33212:19;;33139:100;:::o;32410:263::-;9037:12;:10;:12::i;:::-;9027:22;;:6;;;;;;;;;;;:22;;;9019:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32527:8:::1;32510:14;;:25;32502:3;:34;;32494:91;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32613:11;32598:12;:26;;;;32662:3;32645:14;:20;;;;32410:263:::0;:::o;38669:313::-;38767:4;38784:36;38794:6;38802:9;38813:6;38784:9;:36::i;:::-;38831:121;38840:6;38848:12;:10;:12::i;:::-;38862:89;38900:6;38862:89;;;;;;;;;;;;;;;;;:11;:19;38874:6;38862:19;;;;;;;;;;;;;;;:33;38882:12;:10;:12::i;:::-;38862:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;38831:8;:121::i;:::-;38970:4;38963:11;;38669:313;;;;;:::o;31326:27::-;;;;:::o;31446:35::-;;;;:::o;40599:253::-;40665:7;40704;;40693;:18;;40685:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40769:19;40792:10;:8;:10::i;:::-;40769:33;;40820:24;40832:11;40820:7;:11;;:24;;;;:::i;:::-;40813:31;;;40599:253;;;:::o;23555:83::-;23596:5;23621:9;;;;;;;;;;;23614:16;;23555:83;:::o;31402:37::-;;;;:::o;38990:227::-;39087:4;39104:83;39113:12;:10;:12::i;:::-;39127:7;39136:50;39175:10;39136:11;:25;39148:12;:10;:12::i;:::-;39136:25;;;;;;;;;;;;;;;:34;39162:7;39136:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;39104:8;:83::i;:::-;39205:4;39198:11;;38990:227;;;;:::o;31488:31::-;;;;:::o;35650:325::-;9037:12;:10;:12::i;:::-;9027:22;;:6;;;;;;;;;;;:22;;;9019:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35758:12:::1;:19;;;;35750:5;:27;35742:59;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;35848:1;35826:12;:19;;;;:23;35818:5;:31;35814:123;;;35888:12;35923:1;35901:12;:19;;;;:23;35888:37;;;;;;;;;;;;;;;;;;35866:12;35879:5;35866:19;;;;;;;;;;;;;;;;;;:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;35814:123;35949:12;:18;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;35650:325:::0;:::o;32685:442::-;9037:12;:10;:12::i;:::-;9027:22;;:6;;;;;;;;;;;:22;;;9019:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32856:1:::1;32837:15;;:20;32829:58;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;32933:16;32908:22;:41;;;;32983:14;32960:20;:37;;;;33027:10;33008:16;:29;;;;33071:14;33048:20;:37;;;;33116:3;33098:15;:21;;;;32685:442:::0;;;;:::o;36157:246::-;9037:12;:10;:12::i;:::-;9027:22;;:6;;;;;;;;;;;:22;;;9019:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36283:12:::1;:19;;;;36275:5;:27;36267:80;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36388:7;36358:12;36371:5;36358:19;;;;;;;;;;;;;;;;;;:27;;;:37;;;;;;;;;;;;;;;;;;36157:246:::0;;:::o;37904:117::-;37970:7;37997;:16;38005:7;37997:16;;;;;;;;;;;;;;;;37990:23;;37904:117;;;:::o;38527:134::-;9037:12;:10;:12::i;:::-;9027:22;;:6;;;;;;;;;;;:22;;;9019:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38616:37:::1;31181:1;31299:2;:14;31290:6;:23;38616:7;:21;38624:12;:10;:12::i;:::-;38616:21;;;;;;;;;;;;;;;;:25;;:37;;;;:::i;:::-;38592:7;:21;38600:12;:10;:12::i;:::-;38592:21;;;;;;;;;;;;;;;:61;;;;38527:134::o:0;31526:35::-;;;;:::o;22830:87::-;22869:13;22902:7;22895:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22830:87;:::o;40124:467::-;40214:7;40253:12;;40242:7;:23;;40234:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40317:17;40312:272;;40352:15;40375:33;40386:7;40395:12;;40375:10;:33::i;:::-;40351:57;;;;;;40430:7;40423:14;;;;;40312:272;40472:23;40502:33;40513:7;40522:12;;40502:10;:33::i;:::-;40470:65;;;;;;40557:15;40550:22;;;40124:467;;;;;:::o;30500:33::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;39225:278::-;39327:4;39344:129;39353:12;:10;:12::i;:::-;39367:7;39376:96;39415:15;39376:96;;;;;;;;;;;;;;;;;:11;:25;39388:12;:10;:12::i;:::-;39376:25;;;;;;;;;;;;;;;:34;39402:7;39376:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;39344:8;:129::i;:::-;39491:4;39484:11;;39225:278;;;;:::o;38029:167::-;38107:4;38124:42;38134:12;:10;:12::i;:::-;38148:9;38159:6;38124:9;:42::i;:::-;38184:4;38177:11;;38029:167;;;;:::o;31360:29::-;;;;:::o;39511:110::-;39569:4;39593:11;:20;39605:7;39593:20;;;;;;;;;;;;;;;;;;;;;;;;;39586:27;;39511:110;;;:::o;38204:143::-;38285:7;38312:11;:18;38324:5;38312:18;;;;;;;;;;;;;;;:27;38331:7;38312:27;;;;;;;;;;;;;;;;38305:34;;38204:143;;;;:::o;32303:95::-;9037:12;:10;:12::i;:::-;9027:22;;:6;;;;;;;;;;;:22;;;9019:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32383:7:::1;32372:8;;:18;;;;;;;;;;;;;;;;;;32303:95:::0;:::o;40860:330::-;9037:12;:10;:12::i;:::-;9027:22;;:6;;;;;;;;;;;:22;;;9019:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40940:11:::1;:20;40952:7;40940:20;;;;;;;;;;;;;;;;;;;;;;;;;40939:21;40931:61;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;41025:1;41006:7;:16;41014:7;41006:16;;;;;;;;;;;;;;;;:20;41003:108;;;41062:37;41082:7;:16;41090:7;41082:16;;;;;;;;;;;;;;;;41062:19;:37::i;:::-;41043:7;:16;41051:7;41043:16;;;;;;;;;;;;;;;:56;;;;41003:108;41144:4;41121:11;:20;41133:7;41121:20;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;41159:9;41174:7;41159:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40860:330:::0;:::o;9261:244::-;9037:12;:10;:12::i;:::-;9027:22;;:6;;;;;;;;;;;:22;;;9019:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9370:1:::1;9350:22;;:8;:22;;;;9342:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9460:8;9431:38;;9452:6;;;;;;;;;;;9431:38;;;;;;;;;;;;9489:8;9480:6;;:17;;;;;;;;;;;;;;;;;;9261:244:::0;:::o;41198:472::-;9037:12;:10;:12::i;:::-;9027:22;;:6;;;;;;;;;;;:22;;;9019:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41277:11:::1;:20;41289:7;41277:20;;;;;;;;;;;;;;;;;;;;;;;;;41269:56;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;41341:9;41353:1:::0;41341:13:::1;;41336:327;41360:9;:16;;;;41356:1;:20;41336:327;;;41418:7;41402:23;;:9;41412:1;41402:12;;;;;;;;;;;;;;;;;;;;;;;;;:23;;;41398:254;;;41461:9;41490:1;41471:9;:16;;;;:20;41461:31;;;;;;;;;;;;;;;;;;;;;;;;;41446:9;41456:1;41446:12;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;41530:1;41511:7;:16;41519:7;41511:16;;;;;;;;;;;;;;;:20;;;;41573:5;41550:11;:20;41562:7;41550:20;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;41597:9;:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41631:5;;41398:254;41378:3;;;;;;;41336:327;;;;41198:472:::0;:::o;31694:597::-;5217:12;;;;;;;;;;;:31;;;;5233:15;:13;:15::i;:::-;5217:31;:47;;;;5253:11;;;;;;;;;;;5252:12;5217:47;5209:106;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5324:19;5347:12;;;;;;;;;;;5346:13;5324:35;;5370:14;5366:83;;;5410:4;5395:12;;:19;;;;;;;;;;;;;;;;;;5437:4;5423:11;;:18;;;;;;;;;;;;;;;;;;5366:83;31790:42:::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;::::0;:12:::1;:42::i;:::-;31843:31;31181:1;31843:14;:31::i;:::-;31885:16;:14;:16::i;:::-;31937:13;31922:12;:28;;;;31985:12;;31067:1;31058:11;31979:18;;;;;;31067:1;31058:11;31972:26;31961:7;:38;;;;32031:12;:10;:12::i;:::-;32020:8;;:23;;;;;;;;;;;;;;;;;;32079:2;32064:12;:17;;;;32117:3;32100:14;:20;;;;32157:13;32133:7;:21;32141:12;:10;:12::i;:::-;32133:21;;;;;;;;;;;;;;;:37;;;;32207:12;:10;:12::i;:::-;32186:48;;32203:1;32186:48;;;32221:12;;32186:48;;;;;;;;;;;;;;;;;;32255:28;32270:12;:10;:12::i;:::-;32255:14;:28::i;:::-;5471:14:::0;5467:57;;;5511:5;5496:12;;:20;;;;;;;;;;;;;;;;;;5467:57;31694:597;;:::o;15414:132::-;15472:7;15499:39;15503:1;15506;15499:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;15492:46;;15414:132;;;;:::o;13601:136::-;13659:7;13686:43;13690:1;13693;13686:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;13679:50;;13601:136;;;;:::o;7167:106::-;7220:15;7255:10;7248:17;;7167:106;:::o;41678:345::-;41798:1;41781:19;;:5;:19;;;;41773:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41879:1;41860:21;;:7;:21;;;;41852:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41961:6;41931:11;:18;41943:5;41931:18;;;;;;;;;;;;;;;:27;41950:7;41931:27;;;;;;;;;;;;;;;:36;;;;41999:7;41983:32;;41992:5;41983:32;;;42008:6;41983:32;;;;;;;;;;;;;;;;;;41678:345;;;:::o;8813:81::-;8853:7;8880:6;;;;;;;;;;;8873:13;;8813:81;:::o;13145:181::-;13203:7;13223:9;13239:1;13235;:5;13223:17;;13264:1;13259;:6;;13251:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13317:1;13310:8;;;13145:181;;;;:::o;3620:171::-;3676:7;3713:1;3704:5;:10;;3696:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3777:5;3762:21;;3620:171;;;:::o;14475:471::-;14533:7;14783:1;14778;:6;14774:47;;;14808:1;14801:8;;;;14774:47;14833:9;14849:1;14845;:5;14833:17;;14878:1;14873;14869;:5;;;;;;:10;14861:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14937:1;14930:8;;;14475:471;;;;;:::o;36646:1250::-;36744:4;36766:11;37006:4;37000:11;37134:2;37128:4;37124:13;37781:1;37749:13;37657:4;37651:11;37621;37576:1;37546:11;37517:5;37510;37506:17;37163:691;37153:701;;36797:1068;;37882:6;37875:13;;;36646:1250;;;;:::o;45298:445::-;45378:7;45387;45396;45405;45414;45435:23;45460:12;45476:33;45488:7;45497:11;45476;:33::i;:::-;45434:75;;;;45520:19;45543:10;:8;:10::i;:::-;45520:33;;45565:15;45582:23;45607:12;45623:39;45635:7;45644:4;45650:11;45623;:39::i;:::-;45564:98;;;;;;45681:7;45690:15;45707:4;45713:15;45730:4;45673:62;;;;;;;;;;;;;;;;45298:445;;;;;;;;:::o;42031:857::-;42156:1;42138:20;;:6;:20;;;;42130:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42240:1;42219:23;;:9;:23;;;;42211:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42310:1;42301:6;:10;42293:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42372:11;:19;42384:6;42372:19;;;;;;;;;;;;;;;;;;;;;;;;;:46;;;;;42396:11;:22;42408:9;42396:22;;;;;;;;;;;;;;;;;;;;;;;;;42395:23;42372:46;42369:461;;;42449:69;42469:6;42449:69;;;;;;;;;;;;;;;;;:7;:15;42457:6;42449:15;;;;;;;;;;;;;;;;:19;;:69;;;;;:::i;:::-;42431:7;:15;42439:6;42431:15;;;;;;;;;;;;;;;:87;;;;42550:30;42573:6;42550:7;:18;42558:9;42550:18;;;;;;;;;;;;;;;;:22;;:30;;;;:::i;:::-;42529:7;:18;42537:9;42529:18;;;;;;;;;;;;;;;:51;;;;42369:461;;;42610:47;42631:6;42639:9;42650:6;42610:20;:47::i;:::-;42686:69;42706:6;42686:69;;;;;;;;;;;;;;;;;:7;:15;42694:6;42686:15;;;;;;;;;;;;;;;;:19;;:69;;;;;:::i;:::-;42668:7;:15;42676:6;42668:15;;;;;;;;;;;;;;;:87;;;;42787:30;42810:6;42787:7;:18;42795:9;42787:18;;;;;;;;;;;;;;;;:22;;:30;;;;:::i;:::-;42766:7;:18;42774:9;42766:18;;;;;;;;;;;;;;;:51;;;;42369:461;42862:9;42845:35;;42854:6;42845:35;;;42873:6;42845:35;;;;;;;;;;;;;;;;;;42031:857;;;:::o;14032:192::-;14118:7;14151:1;14146;:6;;14154:12;14138:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14178:9;14194:1;14190;:5;14178:17;;14215:1;14208:8;;;14032:192;;;;;:::o;46364:163::-;46405:7;46426:15;46443;46462:19;:17;:19::i;:::-;46425:56;;;;46499:20;46511:7;46499;:11;;:20;;;;:::i;:::-;46492:27;;;;46364:163;:::o;5618:508::-;5665:4;6012:12;6035:4;6012:28;;6047:10;6093:4;6081:17;6075:23;;6119:1;6113:2;:7;6106:14;;;;5618:508;:::o;22194:177::-;5217:12;;;;;;;;;;;:31;;;;5233:15;:13;:15::i;:::-;5217:31;:47;;;;5253:11;;;;;;;;;;;5252:12;5217:47;5209:106;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5324:19;5347:12;;;;;;;;;;;5346:13;5324:35;;5370:14;5366:83;;;5410:4;5395:12;;:19;;;;;;;;;;;;;;;;;;5437:4;5423:11;;:18;;;;;;;;;;;;;;;;;;5366:83;22290:26:::1;:24;:26::i;:::-;22327:36;22350:4;22356:6;22327:22;:36::i;:::-;5471:14:::0;5467:57;;;5511:5;5496:12;;:20;;;;;;;;;;;;;;;;;;5467:57;22194:177;;;:::o;29260:90::-;29333:9;29321;;:21;;;;;;;;;;;;;;;;;;29260:90;:::o;8391:129::-;5217:12;;;;;;;;;;;:31;;;;5233:15;:13;:15::i;:::-;5217:31;:47;;;;5253:11;;;;;;;;;;;5252:12;5217:47;5209:106;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5324:19;5347:12;;;;;;;;;;;5346:13;5324:35;;5370:14;5366:83;;;5410:4;5395:12;;:19;;;;;;;;;;;;;;;;;;5437:4;5423:11;;:18;;;;;;;;;;;;;;;;;;5366:83;8449:26:::1;:24;:26::i;:::-;8486;:24;:26::i;:::-;5471:14:::0;5467:57;;;5511:5;5496:12;;:20;;;;;;;;;;;;;;;;;;5467:57;8391:129;:::o;16034:345::-;16120:7;16219:1;16215;:5;16222:12;16207:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16246:9;16262:1;16258;:5;;;;;;16246:17;;16370:1;16363:8;;;16034:345;;;;;:::o;45751:263::-;45832:7;45841;45861:12;45876:35;45905:5;45876:24;45888:11;45876:7;:11;;:24;;;;:::i;:::-;:28;;:35;;;;:::i;:::-;45861:50;;45922:23;45948:17;45960:4;45948:7;:11;;:17;;;;:::i;:::-;45922:43;;45984:15;46001:4;45976:30;;;;;;45751:263;;;;;:::o;46022:334::-;46117:7;46126;46135;46155:15;46173:24;46185:11;46173:7;:11;;:24;;;;:::i;:::-;46155:42;;46208:12;46223:21;46232:11;46223:4;:8;;:21;;;;:::i;:::-;46208:36;;46255:23;46281:17;46293:4;46281:7;:11;;:17;;;;:::i;:::-;46255:43;;46317:7;46326:15;46343:4;46309:39;;;;;;;;;46022:334;;;;;;;:::o;29953:92::-;;;;:::o;46535:581::-;46585:7;46594;46614:15;46632:7;;46614:25;;46650:15;46668:12;;46650:30;;46702:9;46714:1;46702:13;;46697:294;46721:9;:16;;;;46717:1;:20;46697:294;;;46787:7;46763;:21;46771:9;46781:1;46771:12;;;;;;;;;;;;;;;;;;;;;;;;;46763:21;;;;;;;;;;;;;;;;:31;:66;;;;46822:7;46798;:21;46806:9;46816:1;46806:12;;;;;;;;;;;;;;;;;;;;;;;;;46798:21;;;;;;;;;;;;;;;;:31;46763:66;46759:102;;;46839:7;;46848:12;;46831:30;;;;;;;;;46759:102;46886:34;46898:7;:21;46906:9;46916:1;46906:12;;;;;;;;;;;;;;;;;;;;;;;;;46898:21;;;;;;;;;;;;;;;;46886:7;:11;;:34;;;;:::i;:::-;46876:44;;46945:34;46957:7;:21;46965:9;46975:1;46965:12;;;;;;;;;;;;;;;;;;;;;;;;;46957:21;;;;;;;;;;;;;;;;46945:7;:11;;:34;;;;:::i;:::-;46935:44;;46739:3;;;;;;;46697:294;;;;47015:25;47027:12;;47015:7;;:11;;:25;;;;:::i;:::-;47005:7;:35;47001:71;;;47050:7;;47059:12;;47042:30;;;;;;;;47001:71;47091:7;47100;47083:25;;;;;;46535:581;;;:::o;7088:69::-;5217:12;;;;;;;;;;;:31;;;;5233:15;:13;:15::i;:::-;5217:31;:47;;;;5253:11;;;;;;;;;;;5252:12;5217:47;5209:106;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5324:19;5347:12;;;;;;;;;;;5346:13;5324:35;;5370:14;5366:83;;;5410:4;5395:12;;:19;;;;;;;;;;;;;;;;;;5437:4;5423:11;;:18;;;;;;;;;;;;;;;;;;5366:83;5471:14;5467:57;;;5511:5;5496:12;;:20;;;;;;;;;;;;;;;;;;5467:57;7088:69;:::o;22379:179::-;5217:12;;;;;;;;;;;:31;;;;5233:15;:13;:15::i;:::-;5217:31;:47;;;;5253:11;;;;;;;;;;;5252:12;5217:47;5209:106;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5324:19;5347:12;;;;;;;;;;;5346:13;5324:35;;5370:14;5366:83;;;5410:4;5395:12;;:19;;;;;;;;;;;;;;;;;;5437:4;5423:11;;:18;;;;;;;;;;;;;;;;;;5366:83;22495:4:::1;22487:5;:12;;;;;;;;;;;;:::i;:::-;;22520:6;22510:7;:16;;;;;;;;;;;;:::i;:::-;;22549:1;22537:9;;:13;;;;;;;;;;;;;;;;;;5471:14:::0;5467:57;;;5511:5;5496:12;;:20;;;;;;;;;;;;;;;;;;5467:57;22379:179;;;:::o;8528:202::-;5217:12;;;;;;;;;;;:31;;;;5233:15;:13;:15::i;:::-;5217:31;:47;;;;5253:11;;;;;;;;;;;5252:12;5217:47;5209:106;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5324:19;5347:12;;;;;;;;;;;5346:13;5324:35;;5370:14;5366:83;;;5410:4;5395:12;;:19;;;;;;;;;;;;;;;;;;5437:4;5423:11;;:18;;;;;;;;;;;;;;;;;;5366:83;8600:17:::1;8620:12;:10;:12::i;:::-;8600:32;;8652:9;8643:6;;:18;;;;;;;;;;;;;;;;;;8710:9;8677:43;;8706:1;8677:43;;;;;;;;;;;;5457:1;5471:14:::0;5467:57;;;5511:5;5496:12;;:20;;;;;;;;;;;;;;;;;;5467:57;8528:202;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o
Swarm Source
ipfs://f12418828bb4ac3d454d55356bcfc890bd1567feec185080bac5f56c2ebf51a0
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.