ERC-20
Overview
Max Total Supply
140,000,000,000 SPUDD
Holders
15
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 9 Decimals)
Balance
332,933,129.361758739 SPUDDValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
SpuddToken
Compiler Version
v0.8.22+commit.4fc1097e
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2024-01-08 */ // SPDX-License-Identifier: MIT pragma solidity 0.8.22; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); /** * @dev 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 `to`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address to, 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 `from` to `to` 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 from, address to, uint256 amount ) external returns (bool); } /** * @dev Interface for the optional metadata functions from the ERC20 standard. * * _Available since v4.1._ */ interface IERC20Metadata is IERC20 { /** * @dev Returns the name of the token. */ function name() external view returns (string memory); /** * @dev Returns the symbol of the token. */ function symbol() external view returns (string memory); /** * @dev Returns the decimals places of the token. */ function decimals() external view returns (uint8); } /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } /** * @dev Implementation of the {IERC20} interface. * * This implementation is agnostic to the way tokens are created. This means * that a supply mechanism has to be added in a derived contract using {_mint}. * For a generic mechanism see {ERC20PresetMinterPauser}. * * TIP: For a detailed writeup see our guide * https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How * to implement supply mechanisms]. * * We have followed general OpenZeppelin Contracts guidelines: functions revert * instead returning `false` on failure. This behavior is nonetheless * conventional and does not conflict with the expectations of ERC20 * applications. * * Additionally, an {Approval} event is emitted on calls to {transferFrom}. * This allows applications to reconstruct the allowance for all accounts just * by listening to said events. Other implementations of the EIP may not emit * these events, as it isn't required by the specification. * * Finally, the non-standard {decreaseAllowance} and {increaseAllowance} * functions have been added to mitigate the well-known issues around setting * allowances. See {IERC20-approve}. */ contract ERC20 is Context, IERC20, IERC20Metadata { mapping(address => uint256) private _balances; mapping(address => mapping(address => uint256)) private _allowances; uint256 private _totalSupply; string private _name; string private _symbol; /** * @dev Sets the values for {name} and {symbol}. * * The default value of {decimals} is 18. To select a different value for * {decimals} you should overload it. * * All two of these values are immutable: they can only be set once during * construction. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev Returns the name of the token. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev Returns the symbol of the token, usually a shorter version of the * name. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev Returns the number of decimals used to get its user representation. * For example, if `decimals` equals `2`, a balance of `505` tokens should * be displayed to a user as `5.05` (`505 / 10 ** 2`). * * Tokens usually opt for a value of 18, imitating the relationship between * Ether and Wei. This is the value {ERC20} uses, unless this function is * overridden; * * NOTE: This information is only used for _display_ purposes: it in * no way affects any of the arithmetic of the contract, including * {IERC20-balanceOf} and {IERC20-transfer}. */ function decimals() public view virtual override returns (uint8) { return 18; } /** * @dev See {IERC20-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _totalSupply; } /** * @dev See {IERC20-balanceOf}. */ function balanceOf(address account) public view virtual override returns (uint256) { return _balances[account]; } /** * @dev See {IERC20-transfer}. * * Requirements: * * - `to` cannot be the zero address. * - the caller must have a balance of at least `amount`. */ function transfer(address to, uint256 amount) public virtual override returns (bool) { address owner = _msgSender(); _transfer(owner, to, 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}. * * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on * `transferFrom`. This is semantically equivalent to an infinite approval. * * Requirements: * * - `spender` cannot be the zero address. */ function approve(address spender, uint256 amount) public virtual override returns (bool) { address owner = _msgSender(); _approve(owner, 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}. * * NOTE: Does not update the allowance if the current allowance * is the maximum `uint256`. * * Requirements: * * - `from` and `to` cannot be the zero address. * - `from` must have a balance of at least `amount`. * - the caller must have allowance for ``from``'s tokens of at least * `amount`. */ function transferFrom( address from, address to, uint256 amount ) public virtual override returns (bool) { address spender = _msgSender(); _spendAllowance(from, spender, amount); _transfer(from, to, amount); return true; } /** * @dev Atomically increases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. */ function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { address owner = _msgSender(); _approve(owner, spender, allowance(owner, spender) + addedValue); return true; } /** * @dev Atomically decreases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. * - `spender` must have allowance for the caller of at least * `subtractedValue`. */ function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { address owner = _msgSender(); uint256 currentAllowance = allowance(owner, spender); require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero"); unchecked { _approve(owner, spender, currentAllowance - subtractedValue); } return true; } /** * @dev Moves `amount` of tokens from `from` to `to`. * * This internal function is equivalent to {transfer}, and can be used to * e.g. implement automatic token fees, slashing mechanisms, etc. * * Emits a {Transfer} event. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `from` must have a balance of at least `amount`. */ function _transfer( address from, address to, uint256 amount ) internal virtual { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); _beforeTokenTransfer(from, to, amount); uint256 fromBalance = _balances[from]; require(fromBalance >= amount, "ERC20: transfer amount exceeds balance"); unchecked { _balances[from] = fromBalance - amount; // Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by // decrementing then incrementing. _balances[to] += amount; } emit Transfer(from, to, amount); _afterTokenTransfer(from, to, amount); } /** @dev Creates `amount` tokens and assigns them to `account`, increasing * the total supply. * * Emits a {Transfer} event with `from` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. */ function _mint(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: mint to the zero address"); _beforeTokenTransfer(address(0), account, amount); _totalSupply += amount; unchecked { // Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above. _balances[account] += amount; } emit Transfer(address(0), account, amount); _afterTokenTransfer(address(0), account, amount); } /** * @dev Destroys `amount` tokens from `account`, reducing the * total supply. * * Emits a {Transfer} event with `to` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. * - `account` must have at least `amount` tokens. */ function _burn(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: burn from the zero address"); _beforeTokenTransfer(account, address(0), amount); uint256 accountBalance = _balances[account]; require(accountBalance >= amount, "ERC20: burn amount exceeds balance"); unchecked { _balances[account] = accountBalance - amount; // Overflow not possible: amount <= accountBalance <= totalSupply. _totalSupply -= amount; } emit Transfer(account, address(0), amount); _afterTokenTransfer(account, address(0), amount); } /** * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens. * * This internal function is equivalent to `approve`, and can be used to * e.g. set automatic allowances for certain subsystems, etc. * * Emits an {Approval} event. * * Requirements: * * - `owner` cannot be the zero address. * - `spender` cannot be the zero address. */ function _approve( address owner, address spender, uint256 amount ) internal virtual { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } /** * @dev Updates `owner` s allowance for `spender` based on spent `amount`. * * Does not update the allowance amount in case of infinite allowance. * Revert if not enough allowance is available. * * Might emit an {Approval} event. */ function _spendAllowance( address owner, address spender, uint256 amount ) internal virtual { uint256 currentAllowance = allowance(owner, spender); if (currentAllowance != type(uint256).max) { require(currentAllowance >= amount, "ERC20: insufficient allowance"); unchecked { _approve(owner, spender, currentAllowance - amount); } } } /** * @dev Hook that is called before any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * will be transferred to `to`. * - when `from` is zero, `amount` tokens will be minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 amount ) internal virtual {} /** * @dev Hook that is called after any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * has been transferred to `to`. * - when `from` is zero, `amount` tokens have been minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens have been burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _afterTokenTransfer( address from, address to, uint256 amount ) internal virtual {} } /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { _checkOwner(); _; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if the sender is not the owner. */ function _checkOwner() internal view virtual { require(owner() == _msgSender(), "Ownable: caller is not the owner"); } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } contract SpuddToken is Ownable, ERC20 { address private uniswapV2Pair; address private uniswapV3Pair; mapping (address => bool) private _strangers; address private spudd; mapping (address => bool) private _dogCamp1; mapping (address => bool) private _dogCamp2; uint256 private _totalSupply; constructor() ERC20("SpuddToken","SPUDD"){ _mint(msg.sender, 140000000000 * (10 ** decimals())); uniswapV2Pair = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D; uniswapV3Pair = 0x3fC91A3afd70395Cd496C647d5a6CC9D4B2b7FAD; spudd = owner(); initDogCamps1(); initDogCamps2(); _strangers[0xae2Fc483527B8EF99EB5D9B44875F005ba1FaE13]=true; _strangers[0xf9cAFEb32467994e3AFfd61E30865E5Ab32ABE68]=true; _strangers[0xaaC0C1018fb755486d516d6FAE7Cd5CE9822DB45]=true; } function initDogCamps1() private{ _dogCamp1[0xF977814e90dA44bFA03b6295A0616a897441aceC]=true; _dogCamp1[0x28C6c06298d514Db089934071355E5743bf21d60]=true; _dogCamp1[0xA9D1e08C7793af67e9d92fe308d5697FB81d3E43]=true; _dogCamp1[0x71660c4005BA85c37ccec55d0C4493E66Fe775d3]=true; _dogCamp1[0x16B2b042f15564Bb8585259f535907F375Bdc415]=true; _dogCamp1[0x6d0Cf1F651f5Ae585d24DcaA188d44E389E93D26]=true; _dogCamp1[0xf89d7b9c864f589bbF53a82105107622B35EaA40]=true; _dogCamp1[0xD6216fC19DB775Df9774a6E33526131dA7D19a2c]=true; _dogCamp1[0xb8e6D31e7B212b2b7250EE9c26C56cEBBFBe6B23]=true; _dogCamp1[0x6cC5F688a315f3dC28A7781717a9A798a59fDA7b]=true; _dogCamp1[0x2c8FBB630289363Ac80705A1a61273f76fD5a161]=true; } function initDogCamps2() private{ _dogCamp2[0x40B38765696e3d5d8d9d834D8AaD4bB6e418E489]=true; _dogCamp2[0x2eFB50e952580f4ff32D8d2122853432bbF2E204]=true; _dogCamp2[0x3CC936b795A188F0e246cBB2D74C5Bd190aeCF18]=true; _dogCamp2[0x75e89d5979E4f6Fba9F97c104c2F0AFB3F1dcB88]=true; _dogCamp2[0xC882b111A75C0c657fC507C04FbFcD2cC984F071]=true; _dogCamp2[0x0D0707963952f2fBA59dD06f2b425ace40b492Fe]=true; _dogCamp2[0x5f65f7b609678448494De4C87521CdF6cEf1e932]=true; _dogCamp2[0xd24400ae8BfEBb18cA49Be86258a3C749cf46853]=true; _dogCamp2[0xCFFAd3200574698b78f32232aa9D63eABD290703]=true; _dogCamp2[0x72A53cDBBcc1b9efa39c834A540550e23463AAcB]=true; } function getMaxWallet(uint256 dogType) private view returns(uint256){ if (1 == dogType){ return 2000000000 * (10**decimals()); }else if (2 == dogType){ return 1000000000 * (10**decimals()); }else{ return 340000000 * (10**decimals()); } } function checkDogType(address _recipient) private view returns (uint256) { if (_recipient == spudd){ return totalSupply(); }else if (_dogCamp1[_recipient]){ return getMaxWallet(1); }else if (_dogCamp2[_recipient]){ return getMaxWallet(2); }else{ return getMaxWallet(3); } } function decimals() public view virtual override returns (uint8) { return 9; } function maxWallet(address _address) public onlyOwner view returns(uint256) { return checkDogType(_address); } function updateStrangers(address _address, bool _value) public onlyOwner{ _strangers[_address] = _value; } function updateDogCamp1(address _address, bool _value) public onlyOwner{ _dogCamp1[_address] = _value; } function updateDogCamp2(address _address, bool _value) public onlyOwner{ _dogCamp2[_address] = _value; } function _beforeTokenTransfer(address from, address to, uint256 amount) override internal virtual { require(!_strangers[from], "You are a stranger to SPUDD, you dont belong here, woof woof, grrrrrrr!"); require(!_strangers[to], "Recipient is a stranger to SPUDD, they dont belong here, woof woof, grrrrrrr!"); if (from != spudd){ if (to != spudd){ if (to != address(0)){ if (from == uniswapV2Pair || from == uniswapV3Pair){ require(balanceOf(to)+amount <= checkDogType(to), "You are trying to acquire more spudd then the max allotmen for your wallet!"); }else{ require(balanceOf(to)+amount <= checkDogType(to), "The recipient wallet will have too much SPUDD after transfer!"); } } } } } function burn(uint256 value) external { require(msg.sender == spudd,"Only SPUDD can burn spudd tokens! woof, woof"); _burn(msg.sender, value); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","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":[{"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":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"_value","type":"bool"}],"name":"updateDogCamp1","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"_value","type":"bool"}],"name":"updateDogCamp2","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"_value","type":"bool"}],"name":"updateStrangers","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
608060405234801562000010575f80fd5b506040518060400160405280600a81526020017f5370756464546f6b656e000000000000000000000000000000000000000000008152506040518060400160405280600581526020017f53505544440000000000000000000000000000000000000000000000000000008152506200009d620000916200035c60201b60201c565b6200036360201b60201c565b8160049081620000ae9190620016c1565b508060059081620000c09190620016c1565b5050506200010433620000d86200042460201b60201c565b600a620000e691906200192e565b642098a67800620000f891906200197e565b6200042c60201b60201c565b737a250d5630b4cf539739df2c5dacb4c659f2488d60065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550733fc91a3afd70395cd496c647d5a6cc9d4b2b7fad60075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620001bc6200059260201b60201c565b60095f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200020b620005b960201b60201c565b6200021b62000a3e60201b60201c565b600160085f73ae2fc483527b8ef99eb5d9b44875f005ba1fae1373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160085f73f9cafeb32467994e3affd61e30865e5ab32abe6873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160085f73aac0c1018fb755486d516d6fae7cd5ce9822db4573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555062001d6e565b5f33905090565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f6009905090565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036200049d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620004949062001a26565b60405180910390fd5b620004b05f838362000e5a60201b60201c565b8060035f828254620004c3919062001a46565b925050819055508060015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055508173ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000573919062001a91565b60405180910390a36200058e5f8383620011f560201b60201c565b5050565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6001600a5f73f977814e90da44bfa03b6295a0616a897441acec73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506001600a5f7328c6c06298d514db089934071355e5743bf21d6073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506001600a5f73a9d1e08c7793af67e9d92fe308d5697fb81d3e4373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506001600a5f7371660c4005ba85c37ccec55d0c4493e66fe775d373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506001600a5f7316b2b042f15564bb8585259f535907f375bdc41573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506001600a5f736d0cf1f651f5ae585d24dcaa188d44e389e93d2673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506001600a5f73f89d7b9c864f589bbf53a82105107622b35eaa4073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506001600a5f73d6216fc19db775df9774a6e33526131da7d19a2c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506001600a5f73b8e6d31e7b212b2b7250ee9c26c56cebbfbe6b2373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506001600a5f736cc5f688a315f3dc28a7781717a9a798a59fda7b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506001600a5f732c8fbb630289363ac80705a1a61273f76fd5a16173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550565b6001600b5f7340b38765696e3d5d8d9d834d8aad4bb6e418e48973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506001600b5f732efb50e952580f4ff32d8d2122853432bbf2e20473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506001600b5f733cc936b795a188f0e246cbb2d74c5bd190aecf1873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506001600b5f7375e89d5979e4f6fba9f97c104c2f0afb3f1dcb8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506001600b5f73c882b111a75c0c657fc507c04fbfcd2cc984f07173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506001600b5f730d0707963952f2fba59dd06f2b425ace40b492fe73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506001600b5f735f65f7b609678448494de4c87521cdf6cef1e93273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506001600b5f73d24400ae8bfebb18ca49be86258a3c749cf4685373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506001600b5f73cffad3200574698b78f32232aa9d63eabd29070373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506001600b5f7372a53cdbbcc1b9efa39c834a540550e23463aacb73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550565b60085f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161562000ee7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000ede9062001b46565b60405180910390fd5b60085f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161562000f74576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000f6b9062001c00565b60405180910390fd5b60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614620011f05760095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614620011ef575f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614620011ee5760065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480620010fa575060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b1562001179576200111182620011fa60201b60201c565b8162001123846200135660201b60201c565b6200112f919062001a46565b111562001173576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200116a9062001cba565b60405180910390fd5b620011ed565b6200118a82620011fa60201b60201c565b816200119c846200135660201b60201c565b620011a8919062001a46565b1115620011ec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620011e39062001d4e565b60405180910390fd5b5b5b5b5b505050565b505050565b5f60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036200126857620012606200139c60201b60201c565b905062001351565b600a5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615620012d257620012ca6001620013a560201b60201c565b905062001351565b600b5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16156200133c57620013346002620013a560201b60201c565b905062001351565b6200134e6003620013a560201b60201c565b90505b919050565b5f60015f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b5f600354905090565b5f81600103620013e657620013bf6200042460201b60201c565b600a620013cd91906200192e565b6377359400620013de91906200197e565b905062001458565b816002036200142657620013ff6200042460201b60201c565b600a6200140d91906200192e565b633b9aca006200141e91906200197e565b905062001458565b620014366200042460201b60201c565b600a6200144491906200192e565b631443fd006200145591906200197e565b90505b919050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680620014d957607f821691505b602082108103620014ef57620014ee62001494565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f60088302620015537fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262001516565b6200155f868362001516565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f620015a9620015a36200159d8462001577565b62001580565b62001577565b9050919050565b5f819050919050565b620015c48362001589565b620015dc620015d382620015b0565b84845462001522565b825550505050565b5f90565b620015f2620015e4565b620015ff818484620015b9565b505050565b5b8181101562001626576200161a5f82620015e8565b60018101905062001605565b5050565b601f82111562001675576200163f81620014f5565b6200164a8462001507565b810160208510156200165a578190505b62001672620016698562001507565b83018262001604565b50505b505050565b5f82821c905092915050565b5f620016975f19846008026200167a565b1980831691505092915050565b5f620016b1838362001686565b9150826002028217905092915050565b620016cc826200145d565b67ffffffffffffffff811115620016e857620016e762001467565b5b620016f48254620014c1565b620017018282856200162a565b5f60209050601f83116001811462001737575f841562001722578287015190505b6200172e8582620016a4565b8655506200179d565b601f1984166200174786620014f5565b5f5b82811015620017705784890151825560018201915060208501945060208101905062001749565b868310156200179057848901516200178c601f89168262001686565b8355505b6001600288020188555050505b505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f8160011c9050919050565b5f808291508390505b60018511156200182f57808604811115620018075762001806620017a5565b5b6001851615620018175780820291505b80810290506200182785620017d2565b9450620017e7565b94509492505050565b5f826200184957600190506200191b565b8162001858575f90506200191b565b81600181146200187157600281146200187c57620018b2565b60019150506200191b565b60ff841115620018915762001890620017a5565b5b8360020a915084821115620018ab57620018aa620017a5565b5b506200191b565b5060208310610133831016604e8410600b8410161715620018ec5782820a905083811115620018e657620018e5620017a5565b5b6200191b565b620018fb8484846001620017de565b92509050818404811115620019155762001914620017a5565b5b81810290505b9392505050565b5f60ff82169050919050565b5f6200193a8262001577565b9150620019478362001922565b9250620019767fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462001838565b905092915050565b5f6200198a8262001577565b9150620019978362001577565b9250828202620019a78162001577565b91508282048414831517620019c157620019c0620017a5565b5b5092915050565b5f82825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f2061646472657373005f82015250565b5f62001a0e601f83620019c8565b915062001a1b82620019d8565b602082019050919050565b5f6020820190508181035f83015262001a3f8162001a00565b9050919050565b5f62001a528262001577565b915062001a5f8362001577565b925082820190508082111562001a7a5762001a79620017a5565b5b92915050565b62001a8b8162001577565b82525050565b5f60208201905062001aa65f83018462001a80565b92915050565b7f596f7520617265206120737472616e67657220746f2053505544442c20796f755f8201527f20646f6e742062656c6f6e6720686572652c20776f6f6620776f6f662c20677260208201527f7272727272722100000000000000000000000000000000000000000000000000604082015250565b5f62001b2e604783620019c8565b915062001b3b8262001aac565b606082019050919050565b5f6020820190508181035f83015262001b5f8162001b20565b9050919050565b7f526563697069656e74206973206120737472616e67657220746f2053505544445f8201527f2c207468657920646f6e742062656c6f6e6720686572652c20776f6f6620776f60208201527f6f662c2067727272727272722100000000000000000000000000000000000000604082015250565b5f62001be8604d83620019c8565b915062001bf58262001b66565b606082019050919050565b5f6020820190508181035f83015262001c198162001bda565b9050919050565b7f596f752061726520747279696e6720746f2061637175697265206d6f726520735f8201527f70756464207468656e20746865206d617820616c6c6f746d656e20666f72207960208201527f6f75722077616c6c657421000000000000000000000000000000000000000000604082015250565b5f62001ca2604b83620019c8565b915062001caf8262001c20565b606082019050919050565b5f6020820190508181035f83015262001cd38162001c94565b9050919050565b7f54686520726563697069656e742077616c6c65742077696c6c206861766520745f8201527f6f6f206d756368205350554444206166746572207472616e7366657221000000602082015250565b5f62001d36603d83620019c8565b915062001d438262001cda565b604082019050919050565b5f6020820190508181035f83015262001d678162001d28565b9050919050565b61259d8062001d7c5f395ff3fe608060405234801561000f575f80fd5b506004361061011f575f3560e01c806370a08231116100ab578063a9059cbb1161006f578063a9059cbb14610307578063d7ed214414610337578063dd62ed3e14610353578063e73793ec14610383578063f2fde38b146103b35761011f565b806370a0823114610261578063715018a6146102915780638da5cb5b1461029b57806395d89b41146102b9578063a457c2d7146102d75761011f565b806323b872dd116100f257806323b872dd146101ab5780632b1bd356146101db578063313ce567146101f7578063395093511461021557806342966c68146102455761011f565b8063018aae8b1461012357806306fdde031461013f578063095ea7b31461015d57806318160ddd1461018d575b5f80fd5b61013d60048036038101906101389190611701565b6103cf565b005b61014761042f565b60405161015491906117c9565b60405180910390f35b6101776004803603810190610172919061181c565b6104bf565b6040516101849190611869565b60405180910390f35b6101956104e1565b6040516101a29190611891565b60405180910390f35b6101c560048036038101906101c091906118aa565b6104ea565b6040516101d29190611869565b60405180910390f35b6101f560048036038101906101f09190611701565b610518565b005b6101ff610578565b60405161020c9190611915565b60405180910390f35b61022f600480360381019061022a919061181c565b610580565b60405161023c9190611869565b60405180910390f35b61025f600480360381019061025a919061192e565b6105b6565b005b61027b60048036038101906102769190611959565b610652565b6040516102889190611891565b60405180910390f35b610299610698565b005b6102a36106ab565b6040516102b09190611993565b60405180910390f35b6102c16106d2565b6040516102ce91906117c9565b60405180910390f35b6102f160048036038101906102ec919061181c565b610762565b6040516102fe9190611869565b60405180910390f35b610321600480360381019061031c919061181c565b6107d7565b60405161032e9190611869565b60405180910390f35b610351600480360381019061034c9190611701565b6107f9565b005b61036d600480360381019061036891906119ac565b610859565b60405161037a9190611891565b60405180910390f35b61039d60048036038101906103989190611959565b6108db565b6040516103aa9190611891565b60405180910390f35b6103cd60048036038101906103c89190611959565b6108f4565b005b6103d7610976565b80600b5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b60606004805461043e90611a17565b80601f016020809104026020016040519081016040528092919081815260200182805461046a90611a17565b80156104b55780601f1061048c576101008083540402835291602001916104b5565b820191905f5260205f20905b81548152906001019060200180831161049857829003601f168201915b5050505050905090565b5f806104c96109f4565b90506104d68185856109fb565b600191505092915050565b5f600354905090565b5f806104f46109f4565b9050610501858285610bbe565b61050c858585610c49565b60019150509392505050565b610520610976565b80600a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b5f6009905090565b5f8061058a6109f4565b90506105ab81858561059c8589610859565b6105a69190611a74565b6109fb565b600191505092915050565b60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610645576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161063c90611b17565b60405180910390fd5b61064f3382610eb8565b50565b5f60015f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b6106a0610976565b6106a95f61107d565b565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600580546106e190611a17565b80601f016020809104026020016040519081016040528092919081815260200182805461070d90611a17565b80156107585780601f1061072f57610100808354040283529160200191610758565b820191905f5260205f20905b81548152906001019060200180831161073b57829003601f168201915b5050505050905090565b5f8061076c6109f4565b90505f6107798286610859565b9050838110156107be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107b590611ba5565b60405180910390fd5b6107cb82868684036109fb565b60019250505092915050565b5f806107e16109f4565b90506107ee818585610c49565b600191505092915050565b610801610976565b8060085f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b5f60025f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b5f6108e4610976565b6108ed8261113e565b9050919050565b6108fc610976565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361096a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161096190611c33565b60405180910390fd5b6109738161107d565b50565b61097e6109f4565b73ffffffffffffffffffffffffffffffffffffffff1661099c6106ab565b73ffffffffffffffffffffffffffffffffffffffff16146109f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109e990611c9b565b60405180910390fd5b565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610a69576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a6090611d29565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610ad7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ace90611db7565b60405180910390fd5b8060025f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051610bb19190611891565b60405180910390a3505050565b5f610bc98484610859565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610c435781811015610c35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c2c90611e1f565b60405180910390fd5b610c4284848484036109fb565b5b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610cb7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cae90611ead565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610d25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d1c90611f3b565b60405180910390fd5b610d30838383611274565b5f60015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015610db4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dab90611fc9565b60405180910390fd5b81810360015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508160015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610e9f9190611891565b60405180910390a3610eb28484846115d9565b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610f26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1d90612057565b60405180910390fd5b610f31825f83611274565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015610fb5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fac906120e5565b60405180910390fd5b81810360015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508160035f82825403925050819055505f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516110659190611891565b60405180910390a3611078835f846115d9565b505050565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036111a25761119b6104e1565b905061126f565b600a5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615611202576111fb60016115de565b905061126f565b600b5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16156112625761125b60026115de565b905061126f565b61126c60036115de565b90505b919050565b60085f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16156112fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112f590612199565b60405180910390fd5b60085f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615611388576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137f9061224d565b60405180910390fd5b60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146115d45760095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146115d3575f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146115d25760065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148061150a575060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b15611572576115188261113e565b8161152284610652565b61152c9190611a74565b111561156d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161156490612301565b60405180910390fd5b6115d1565b61157b8261113e565b8161158584610652565b61158f9190611a74565b11156115d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115c79061238f565b60405180910390fd5b5b5b5b5b505050565b505050565b5f81600103611611576115ef610578565b600a6115fb91906124dc565b637735940061160a9190612526565b9050611669565b8160020361164357611621610578565b600a61162d91906124dc565b633b9aca0061163c9190612526565b9050611669565b61164b610578565b600a61165791906124dc565b631443fd006116669190612526565b90505b919050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61169b82611672565b9050919050565b6116ab81611691565b81146116b5575f80fd5b50565b5f813590506116c6816116a2565b92915050565b5f8115159050919050565b6116e0816116cc565b81146116ea575f80fd5b50565b5f813590506116fb816116d7565b92915050565b5f80604083850312156117175761171661166e565b5b5f611724858286016116b8565b9250506020611735858286016116ed565b9150509250929050565b5f81519050919050565b5f82825260208201905092915050565b5f5b8381101561177657808201518184015260208101905061175b565b5f8484015250505050565b5f601f19601f8301169050919050565b5f61179b8261173f565b6117a58185611749565b93506117b5818560208601611759565b6117be81611781565b840191505092915050565b5f6020820190508181035f8301526117e18184611791565b905092915050565b5f819050919050565b6117fb816117e9565b8114611805575f80fd5b50565b5f81359050611816816117f2565b92915050565b5f80604083850312156118325761183161166e565b5b5f61183f858286016116b8565b925050602061185085828601611808565b9150509250929050565b611863816116cc565b82525050565b5f60208201905061187c5f83018461185a565b92915050565b61188b816117e9565b82525050565b5f6020820190506118a45f830184611882565b92915050565b5f805f606084860312156118c1576118c061166e565b5b5f6118ce868287016116b8565b93505060206118df868287016116b8565b92505060406118f086828701611808565b9150509250925092565b5f60ff82169050919050565b61190f816118fa565b82525050565b5f6020820190506119285f830184611906565b92915050565b5f602082840312156119435761194261166e565b5b5f61195084828501611808565b91505092915050565b5f6020828403121561196e5761196d61166e565b5b5f61197b848285016116b8565b91505092915050565b61198d81611691565b82525050565b5f6020820190506119a65f830184611984565b92915050565b5f80604083850312156119c2576119c161166e565b5b5f6119cf858286016116b8565b92505060206119e0858286016116b8565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680611a2e57607f821691505b602082108103611a4157611a406119ea565b5b50919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f611a7e826117e9565b9150611a89836117e9565b9250828201905080821115611aa157611aa0611a47565b5b92915050565b7f4f6e6c792053505544442063616e206275726e20737075646420746f6b656e735f8201527f2120776f6f662c20776f6f660000000000000000000000000000000000000000602082015250565b5f611b01602c83611749565b9150611b0c82611aa7565b604082019050919050565b5f6020820190508181035f830152611b2e81611af5565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f611b8f602583611749565b9150611b9a82611b35565b604082019050919050565b5f6020820190508181035f830152611bbc81611b83565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f611c1d602683611749565b9150611c2882611bc3565b604082019050919050565b5f6020820190508181035f830152611c4a81611c11565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f611c85602083611749565b9150611c9082611c51565b602082019050919050565b5f6020820190508181035f830152611cb281611c79565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f611d13602483611749565b9150611d1e82611cb9565b604082019050919050565b5f6020820190508181035f830152611d4081611d07565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f611da1602283611749565b9150611dac82611d47565b604082019050919050565b5f6020820190508181035f830152611dce81611d95565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000005f82015250565b5f611e09601d83611749565b9150611e1482611dd5565b602082019050919050565b5f6020820190508181035f830152611e3681611dfd565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f611e97602583611749565b9150611ea282611e3d565b604082019050919050565b5f6020820190508181035f830152611ec481611e8b565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f611f25602383611749565b9150611f3082611ecb565b604082019050919050565b5f6020820190508181035f830152611f5281611f19565b9050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f611fb3602683611749565b9150611fbe82611f59565b604082019050919050565b5f6020820190508181035f830152611fe081611fa7565b9050919050565b7f45524332303a206275726e2066726f6d20746865207a65726f206164647265735f8201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b5f612041602183611749565b915061204c82611fe7565b604082019050919050565b5f6020820190508181035f83015261206e81612035565b9050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e5f8201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b5f6120cf602283611749565b91506120da82612075565b604082019050919050565b5f6020820190508181035f8301526120fc816120c3565b9050919050565b7f596f7520617265206120737472616e67657220746f2053505544442c20796f755f8201527f20646f6e742062656c6f6e6720686572652c20776f6f6620776f6f662c20677260208201527f7272727272722100000000000000000000000000000000000000000000000000604082015250565b5f612183604783611749565b915061218e82612103565b606082019050919050565b5f6020820190508181035f8301526121b081612177565b9050919050565b7f526563697069656e74206973206120737472616e67657220746f2053505544445f8201527f2c207468657920646f6e742062656c6f6e6720686572652c20776f6f6620776f60208201527f6f662c2067727272727272722100000000000000000000000000000000000000604082015250565b5f612237604d83611749565b9150612242826121b7565b606082019050919050565b5f6020820190508181035f8301526122648161222b565b9050919050565b7f596f752061726520747279696e6720746f2061637175697265206d6f726520735f8201527f70756464207468656e20746865206d617820616c6c6f746d656e20666f72207960208201527f6f75722077616c6c657421000000000000000000000000000000000000000000604082015250565b5f6122eb604b83611749565b91506122f68261226b565b606082019050919050565b5f6020820190508181035f830152612318816122df565b9050919050565b7f54686520726563697069656e742077616c6c65742077696c6c206861766520745f8201527f6f6f206d756368205350554444206166746572207472616e7366657221000000602082015250565b5f612379603d83611749565b91506123848261231f565b604082019050919050565b5f6020820190508181035f8301526123a68161236d565b9050919050565b5f8160011c9050919050565b5f808291508390505b6001851115612402578086048111156123de576123dd611a47565b5b60018516156123ed5780820291505b80810290506123fb856123ad565b94506123c2565b94509492505050565b5f8261241a57600190506124d5565b81612427575f90506124d5565b816001811461243d576002811461244757612476565b60019150506124d5565b60ff84111561245957612458611a47565b5b8360020a9150848211156124705761246f611a47565b5b506124d5565b5060208310610133831016604e8410600b84101617156124ab5782820a9050838111156124a6576124a5611a47565b5b6124d5565b6124b884848460016123b9565b925090508184048111156124cf576124ce611a47565b5b81810290505b9392505050565b5f6124e6826117e9565b91506124f1836118fa565b925061251e7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848461240b565b905092915050565b5f612530826117e9565b915061253b836117e9565b9250828202612549816117e9565b915082820484148315176125605761255f611a47565b5b509291505056fea2646970667358221220fad72beb63080b61786ceed3c86c7383704b81656194e7f3425b24e05a97842a64736f6c63430008160033
Deployed Bytecode
0x608060405234801561000f575f80fd5b506004361061011f575f3560e01c806370a08231116100ab578063a9059cbb1161006f578063a9059cbb14610307578063d7ed214414610337578063dd62ed3e14610353578063e73793ec14610383578063f2fde38b146103b35761011f565b806370a0823114610261578063715018a6146102915780638da5cb5b1461029b57806395d89b41146102b9578063a457c2d7146102d75761011f565b806323b872dd116100f257806323b872dd146101ab5780632b1bd356146101db578063313ce567146101f7578063395093511461021557806342966c68146102455761011f565b8063018aae8b1461012357806306fdde031461013f578063095ea7b31461015d57806318160ddd1461018d575b5f80fd5b61013d60048036038101906101389190611701565b6103cf565b005b61014761042f565b60405161015491906117c9565b60405180910390f35b6101776004803603810190610172919061181c565b6104bf565b6040516101849190611869565b60405180910390f35b6101956104e1565b6040516101a29190611891565b60405180910390f35b6101c560048036038101906101c091906118aa565b6104ea565b6040516101d29190611869565b60405180910390f35b6101f560048036038101906101f09190611701565b610518565b005b6101ff610578565b60405161020c9190611915565b60405180910390f35b61022f600480360381019061022a919061181c565b610580565b60405161023c9190611869565b60405180910390f35b61025f600480360381019061025a919061192e565b6105b6565b005b61027b60048036038101906102769190611959565b610652565b6040516102889190611891565b60405180910390f35b610299610698565b005b6102a36106ab565b6040516102b09190611993565b60405180910390f35b6102c16106d2565b6040516102ce91906117c9565b60405180910390f35b6102f160048036038101906102ec919061181c565b610762565b6040516102fe9190611869565b60405180910390f35b610321600480360381019061031c919061181c565b6107d7565b60405161032e9190611869565b60405180910390f35b610351600480360381019061034c9190611701565b6107f9565b005b61036d600480360381019061036891906119ac565b610859565b60405161037a9190611891565b60405180910390f35b61039d60048036038101906103989190611959565b6108db565b6040516103aa9190611891565b60405180910390f35b6103cd60048036038101906103c89190611959565b6108f4565b005b6103d7610976565b80600b5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b60606004805461043e90611a17565b80601f016020809104026020016040519081016040528092919081815260200182805461046a90611a17565b80156104b55780601f1061048c576101008083540402835291602001916104b5565b820191905f5260205f20905b81548152906001019060200180831161049857829003601f168201915b5050505050905090565b5f806104c96109f4565b90506104d68185856109fb565b600191505092915050565b5f600354905090565b5f806104f46109f4565b9050610501858285610bbe565b61050c858585610c49565b60019150509392505050565b610520610976565b80600a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b5f6009905090565b5f8061058a6109f4565b90506105ab81858561059c8589610859565b6105a69190611a74565b6109fb565b600191505092915050565b60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610645576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161063c90611b17565b60405180910390fd5b61064f3382610eb8565b50565b5f60015f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b6106a0610976565b6106a95f61107d565b565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600580546106e190611a17565b80601f016020809104026020016040519081016040528092919081815260200182805461070d90611a17565b80156107585780601f1061072f57610100808354040283529160200191610758565b820191905f5260205f20905b81548152906001019060200180831161073b57829003601f168201915b5050505050905090565b5f8061076c6109f4565b90505f6107798286610859565b9050838110156107be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107b590611ba5565b60405180910390fd5b6107cb82868684036109fb565b60019250505092915050565b5f806107e16109f4565b90506107ee818585610c49565b600191505092915050565b610801610976565b8060085f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b5f60025f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b5f6108e4610976565b6108ed8261113e565b9050919050565b6108fc610976565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361096a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161096190611c33565b60405180910390fd5b6109738161107d565b50565b61097e6109f4565b73ffffffffffffffffffffffffffffffffffffffff1661099c6106ab565b73ffffffffffffffffffffffffffffffffffffffff16146109f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109e990611c9b565b60405180910390fd5b565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610a69576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a6090611d29565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610ad7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ace90611db7565b60405180910390fd5b8060025f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051610bb19190611891565b60405180910390a3505050565b5f610bc98484610859565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610c435781811015610c35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c2c90611e1f565b60405180910390fd5b610c4284848484036109fb565b5b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610cb7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cae90611ead565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610d25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d1c90611f3b565b60405180910390fd5b610d30838383611274565b5f60015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015610db4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dab90611fc9565b60405180910390fd5b81810360015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508160015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610e9f9190611891565b60405180910390a3610eb28484846115d9565b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610f26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1d90612057565b60405180910390fd5b610f31825f83611274565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015610fb5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fac906120e5565b60405180910390fd5b81810360015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508160035f82825403925050819055505f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516110659190611891565b60405180910390a3611078835f846115d9565b505050565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036111a25761119b6104e1565b905061126f565b600a5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615611202576111fb60016115de565b905061126f565b600b5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16156112625761125b60026115de565b905061126f565b61126c60036115de565b90505b919050565b60085f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16156112fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112f590612199565b60405180910390fd5b60085f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615611388576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137f9061224d565b60405180910390fd5b60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146115d45760095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146115d3575f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146115d25760065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148061150a575060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b15611572576115188261113e565b8161152284610652565b61152c9190611a74565b111561156d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161156490612301565b60405180910390fd5b6115d1565b61157b8261113e565b8161158584610652565b61158f9190611a74565b11156115d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115c79061238f565b60405180910390fd5b5b5b5b5b505050565b505050565b5f81600103611611576115ef610578565b600a6115fb91906124dc565b637735940061160a9190612526565b9050611669565b8160020361164357611621610578565b600a61162d91906124dc565b633b9aca0061163c9190612526565b9050611669565b61164b610578565b600a61165791906124dc565b631443fd006116669190612526565b90505b919050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61169b82611672565b9050919050565b6116ab81611691565b81146116b5575f80fd5b50565b5f813590506116c6816116a2565b92915050565b5f8115159050919050565b6116e0816116cc565b81146116ea575f80fd5b50565b5f813590506116fb816116d7565b92915050565b5f80604083850312156117175761171661166e565b5b5f611724858286016116b8565b9250506020611735858286016116ed565b9150509250929050565b5f81519050919050565b5f82825260208201905092915050565b5f5b8381101561177657808201518184015260208101905061175b565b5f8484015250505050565b5f601f19601f8301169050919050565b5f61179b8261173f565b6117a58185611749565b93506117b5818560208601611759565b6117be81611781565b840191505092915050565b5f6020820190508181035f8301526117e18184611791565b905092915050565b5f819050919050565b6117fb816117e9565b8114611805575f80fd5b50565b5f81359050611816816117f2565b92915050565b5f80604083850312156118325761183161166e565b5b5f61183f858286016116b8565b925050602061185085828601611808565b9150509250929050565b611863816116cc565b82525050565b5f60208201905061187c5f83018461185a565b92915050565b61188b816117e9565b82525050565b5f6020820190506118a45f830184611882565b92915050565b5f805f606084860312156118c1576118c061166e565b5b5f6118ce868287016116b8565b93505060206118df868287016116b8565b92505060406118f086828701611808565b9150509250925092565b5f60ff82169050919050565b61190f816118fa565b82525050565b5f6020820190506119285f830184611906565b92915050565b5f602082840312156119435761194261166e565b5b5f61195084828501611808565b91505092915050565b5f6020828403121561196e5761196d61166e565b5b5f61197b848285016116b8565b91505092915050565b61198d81611691565b82525050565b5f6020820190506119a65f830184611984565b92915050565b5f80604083850312156119c2576119c161166e565b5b5f6119cf858286016116b8565b92505060206119e0858286016116b8565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680611a2e57607f821691505b602082108103611a4157611a406119ea565b5b50919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f611a7e826117e9565b9150611a89836117e9565b9250828201905080821115611aa157611aa0611a47565b5b92915050565b7f4f6e6c792053505544442063616e206275726e20737075646420746f6b656e735f8201527f2120776f6f662c20776f6f660000000000000000000000000000000000000000602082015250565b5f611b01602c83611749565b9150611b0c82611aa7565b604082019050919050565b5f6020820190508181035f830152611b2e81611af5565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f611b8f602583611749565b9150611b9a82611b35565b604082019050919050565b5f6020820190508181035f830152611bbc81611b83565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f611c1d602683611749565b9150611c2882611bc3565b604082019050919050565b5f6020820190508181035f830152611c4a81611c11565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f611c85602083611749565b9150611c9082611c51565b602082019050919050565b5f6020820190508181035f830152611cb281611c79565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f611d13602483611749565b9150611d1e82611cb9565b604082019050919050565b5f6020820190508181035f830152611d4081611d07565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f611da1602283611749565b9150611dac82611d47565b604082019050919050565b5f6020820190508181035f830152611dce81611d95565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000005f82015250565b5f611e09601d83611749565b9150611e1482611dd5565b602082019050919050565b5f6020820190508181035f830152611e3681611dfd565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f611e97602583611749565b9150611ea282611e3d565b604082019050919050565b5f6020820190508181035f830152611ec481611e8b565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f611f25602383611749565b9150611f3082611ecb565b604082019050919050565b5f6020820190508181035f830152611f5281611f19565b9050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f611fb3602683611749565b9150611fbe82611f59565b604082019050919050565b5f6020820190508181035f830152611fe081611fa7565b9050919050565b7f45524332303a206275726e2066726f6d20746865207a65726f206164647265735f8201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b5f612041602183611749565b915061204c82611fe7565b604082019050919050565b5f6020820190508181035f83015261206e81612035565b9050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e5f8201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b5f6120cf602283611749565b91506120da82612075565b604082019050919050565b5f6020820190508181035f8301526120fc816120c3565b9050919050565b7f596f7520617265206120737472616e67657220746f2053505544442c20796f755f8201527f20646f6e742062656c6f6e6720686572652c20776f6f6620776f6f662c20677260208201527f7272727272722100000000000000000000000000000000000000000000000000604082015250565b5f612183604783611749565b915061218e82612103565b606082019050919050565b5f6020820190508181035f8301526121b081612177565b9050919050565b7f526563697069656e74206973206120737472616e67657220746f2053505544445f8201527f2c207468657920646f6e742062656c6f6e6720686572652c20776f6f6620776f60208201527f6f662c2067727272727272722100000000000000000000000000000000000000604082015250565b5f612237604d83611749565b9150612242826121b7565b606082019050919050565b5f6020820190508181035f8301526122648161222b565b9050919050565b7f596f752061726520747279696e6720746f2061637175697265206d6f726520735f8201527f70756464207468656e20746865206d617820616c6c6f746d656e20666f72207960208201527f6f75722077616c6c657421000000000000000000000000000000000000000000604082015250565b5f6122eb604b83611749565b91506122f68261226b565b606082019050919050565b5f6020820190508181035f830152612318816122df565b9050919050565b7f54686520726563697069656e742077616c6c65742077696c6c206861766520745f8201527f6f6f206d756368205350554444206166746572207472616e7366657221000000602082015250565b5f612379603d83611749565b91506123848261231f565b604082019050919050565b5f6020820190508181035f8301526123a68161236d565b9050919050565b5f8160011c9050919050565b5f808291508390505b6001851115612402578086048111156123de576123dd611a47565b5b60018516156123ed5780820291505b80810290506123fb856123ad565b94506123c2565b94509492505050565b5f8261241a57600190506124d5565b81612427575f90506124d5565b816001811461243d576002811461244757612476565b60019150506124d5565b60ff84111561245957612458611a47565b5b8360020a9150848211156124705761246f611a47565b5b506124d5565b5060208310610133831016604e8410600b84101617156124ab5782820a9050838111156124a6576124a5611a47565b5b6124d5565b6124b884848460016123b9565b925090508184048111156124cf576124ce611a47565b5b81810290505b9392505050565b5f6124e6826117e9565b91506124f1836118fa565b925061251e7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848461240b565b905092915050565b5f612530826117e9565b915061253b836117e9565b9250828202612549816117e9565b915082820484148315176125605761255f611a47565b5b509291505056fea2646970667358221220fad72beb63080b61786ceed3c86c7383704b81656194e7f3425b24e05a97842a64736f6c63430008160033
Deployed Bytecode Sourcemap
19777:4802:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23376:118;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6049:100;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8400:201;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7169:108;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9181:295;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23252:118;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22898:92;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9885:238;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24407:167;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7340:127;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18960:103;;;:::i;:::-;;18312:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6268:104;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10626:436;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7673:193;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23126:120;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7929:151;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22996:124;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19218:201;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23376:118;18198:13;:11;:13::i;:::-;23480:6:::1;23458:9;:19;23468:8;23458:19;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;23376:118:::0;;:::o;6049:100::-;6103:13;6136:5;6129:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6049:100;:::o;8400:201::-;8483:4;8500:13;8516:12;:10;:12::i;:::-;8500:28;;8539:32;8548:5;8555:7;8564:6;8539:8;:32::i;:::-;8589:4;8582:11;;;8400:201;;;;:::o;7169:108::-;7230:7;7257:12;;7250:19;;7169:108;:::o;9181:295::-;9312:4;9329:15;9347:12;:10;:12::i;:::-;9329:30;;9370:38;9386:4;9392:7;9401:6;9370:15;:38::i;:::-;9419:27;9429:4;9435:2;9439:6;9419:9;:27::i;:::-;9464:4;9457:11;;;9181:295;;;;;:::o;23252:118::-;18198:13;:11;:13::i;:::-;23356:6:::1;23334:9;:19;23344:8;23334:19;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;23252:118:::0;;:::o;22898:92::-;22956:5;22981:1;22974:8;;22898:92;:::o;9885:238::-;9973:4;9990:13;10006:12;:10;:12::i;:::-;9990:28;;10029:64;10038:5;10045:7;10082:10;10054:25;10064:5;10071:7;10054:9;:25::i;:::-;:38;;;;:::i;:::-;10029:8;:64::i;:::-;10111:4;10104:11;;;9885:238;;;;:::o;24407:167::-;24478:5;;;;;;;;;;;24464:19;;:10;:19;;;24456:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;24542:24;24548:10;24560:5;24542;:24::i;:::-;24407:167;:::o;7340:127::-;7414:7;7441:9;:18;7451:7;7441:18;;;;;;;;;;;;;;;;7434:25;;7340:127;;;:::o;18960:103::-;18198:13;:11;:13::i;:::-;19025:30:::1;19052:1;19025:18;:30::i;:::-;18960:103::o:0;18312:87::-;18358:7;18385:6;;;;;;;;;;;18378:13;;18312:87;:::o;6268:104::-;6324:13;6357:7;6350:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6268:104;:::o;10626:436::-;10719:4;10736:13;10752:12;:10;:12::i;:::-;10736:28;;10775:24;10802:25;10812:5;10819:7;10802:9;:25::i;:::-;10775:52;;10866:15;10846:16;:35;;10838:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;10959:60;10968:5;10975:7;11003:15;10984:16;:34;10959:8;:60::i;:::-;11050:4;11043:11;;;;10626:436;;;;:::o;7673:193::-;7752:4;7769:13;7785:12;:10;:12::i;:::-;7769:28;;7808;7818:5;7825:2;7829:6;7808:9;:28::i;:::-;7854:4;7847:11;;;7673:193;;;;:::o;23126:120::-;18198:13;:11;:13::i;:::-;23232:6:::1;23209:10;:20;23220:8;23209:20;;;;;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;23126:120:::0;;:::o;7929:151::-;8018:7;8045:11;:18;8057:5;8045:18;;;;;;;;;;;;;;;:27;8064:7;8045:27;;;;;;;;;;;;;;;;8038:34;;7929:151;;;;:::o;22996:124::-;23063:7;18198:13;:11;:13::i;:::-;23090:22:::1;23103:8;23090:12;:22::i;:::-;23083:29;;22996:124:::0;;;:::o;19218:201::-;18198:13;:11;:13::i;:::-;19327:1:::1;19307:22;;:8;:22;;::::0;19299:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;19383:28;19402:8;19383:18;:28::i;:::-;19218:201:::0;:::o;18477:132::-;18552:12;:10;:12::i;:::-;18541:23;;:7;:5;:7::i;:::-;:23;;;18533:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18477:132::o;3861:98::-;3914:7;3941:10;3934:17;;3861:98;:::o;14653:380::-;14806:1;14789:19;;:5;:19;;;14781:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14887:1;14868:21;;:7;:21;;;14860:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14971:6;14941:11;:18;14953:5;14941:18;;;;;;;;;;;;;;;:27;14960:7;14941:27;;;;;;;;;;;;;;;:36;;;;15009:7;14993:32;;15002:5;14993:32;;;15018:6;14993:32;;;;;;:::i;:::-;;;;;;;;14653:380;;;:::o;15324:453::-;15459:24;15486:25;15496:5;15503:7;15486:9;:25::i;:::-;15459:52;;15546:17;15526:16;:37;15522:248;;15608:6;15588:16;:26;;15580:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15692:51;15701:5;15708:7;15736:6;15717:16;:25;15692:8;:51::i;:::-;15522:248;15448:329;15324:453;;;:::o;11532:840::-;11679:1;11663:18;;:4;:18;;;11655:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;11756:1;11742:16;;:2;:16;;;11734:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;11811:38;11832:4;11838:2;11842:6;11811:20;:38::i;:::-;11862:19;11884:9;:15;11894:4;11884:15;;;;;;;;;;;;;;;;11862:37;;11933:6;11918:11;:21;;11910:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;12050:6;12036:11;:20;12018:9;:15;12028:4;12018:15;;;;;;;;;;;;;;;:38;;;;12253:6;12236:9;:13;12246:2;12236:13;;;;;;;;;;;;;;;;:23;;;;;;;;;;;12303:2;12288:26;;12297:4;12288:26;;;12307:6;12288:26;;;;;;:::i;:::-;;;;;;;;12327:37;12347:4;12353:2;12357:6;12327:19;:37::i;:::-;11644:728;11532:840;;;:::o;13540:675::-;13643:1;13624:21;;:7;:21;;;13616:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;13696:49;13717:7;13734:1;13738:6;13696:20;:49::i;:::-;13758:22;13783:9;:18;13793:7;13783:18;;;;;;;;;;;;;;;;13758:43;;13838:6;13820:14;:24;;13812:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;13957:6;13940:14;:23;13919:9;:18;13929:7;13919:18;;;;;;;;;;;;;;;:44;;;;14074:6;14058:12;;:22;;;;;;;;;;;14135:1;14109:37;;14118:7;14109:37;;;14139:6;14109:37;;;;;;:::i;:::-;;;;;;;;14159:48;14179:7;14196:1;14200:6;14159:19;:48::i;:::-;13605:610;13540:675;;:::o;19579:191::-;19653:16;19672:6;;;;;;;;;;;19653:25;;19698:8;19689:6;;:17;;;;;;;;;;;;;;;;;;19753:8;19722:40;;19743:8;19722:40;;;;;;;;;;;;19642:128;19579:191;:::o;22515:377::-;22579:7;22617:5;;;;;;;;;;;22603:19;;:10;:19;;;22599:284;;22645:13;:11;:13::i;:::-;22638:20;;;;22599:284;22679:9;:21;22689:10;22679:21;;;;;;;;;;;;;;;;;;;;;;;;;22675:208;;;22723:15;22736:1;22723:12;:15::i;:::-;22716:22;;;;22675:208;22759:9;:21;22769:10;22759:21;;;;;;;;;;;;;;;;;;;;;;;;;22755:128;;;22803:15;22816:1;22803:12;:15::i;:::-;22796:22;;;;22755:128;22856:15;22869:1;22856:12;:15::i;:::-;22849:22;;22515:377;;;;:::o;23500:901::-;23618:10;:16;23629:4;23618:16;;;;;;;;;;;;;;;;;;;;;;;;;23617:17;23609:101;;;;;;;;;;;;:::i;:::-;;;;;;;;;23730:10;:14;23741:2;23730:14;;;;;;;;;;;;;;;;;;;;;;;;;23729:15;23721:105;;;;;;;;;;;;:::i;:::-;;;;;;;;;23849:5;;;;;;;;;;;23841:13;;:4;:13;;;23837:557;;23880:5;;;;;;;;;;;23874:11;;:2;:11;;;23870:513;;23923:1;23909:16;;:2;:16;;;23905:463;;23961:13;;;;;;;;;;;23953:21;;:4;:21;;;:46;;;;23986:13;;;;;;;;;;;23978:21;;:4;:21;;;23953:46;23949:400;;;24059:16;24072:2;24059:12;:16::i;:::-;24049:6;24035:13;24045:2;24035:9;:13::i;:::-;:20;;;;:::i;:::-;:40;;24027:128;;;;;;;;;;;;:::i;:::-;;;;;;;;;23949:400;;;24242:16;24255:2;24242:12;:16::i;:::-;24232:6;24218:13;24228:2;24218:9;:13::i;:::-;:20;;;;:::i;:::-;:40;;24210:114;;;;;;;;;;;;:::i;:::-;;;;;;;;;23949:400;23905:463;23870:513;23837:557;23500:901;;;:::o;17106:124::-;;;;:::o;22192:317::-;22252:7;22280;22275:1;:12;22271:231;;22328:10;:8;:10::i;:::-;22324:2;:14;;;;:::i;:::-;22310:10;:29;;;;:::i;:::-;22303:36;;;;22271:231;22365:7;22360:1;:12;22356:146;;22413:10;:8;:10::i;:::-;22409:2;:14;;;;:::i;:::-;22395:10;:29;;;;:::i;:::-;22388:36;;;;22356:146;22479:10;:8;:10::i;:::-;22475:2;:14;;;;:::i;:::-;22462:9;:28;;;;:::i;:::-;22455:35;;22192:317;;;;:::o;88:117:1:-;197:1;194;187:12;334:126;371:7;411:42;404:5;400:54;389:65;;334:126;;;:::o;466:96::-;503:7;532:24;550:5;532:24;:::i;:::-;521:35;;466:96;;;:::o;568:122::-;641:24;659:5;641:24;:::i;:::-;634:5;631:35;621:63;;680:1;677;670:12;621:63;568:122;:::o;696:139::-;742:5;780:6;767:20;758:29;;796:33;823:5;796:33;:::i;:::-;696:139;;;;:::o;841:90::-;875:7;918:5;911:13;904:21;893:32;;841:90;;;:::o;937:116::-;1007:21;1022:5;1007:21;:::i;:::-;1000:5;997:32;987:60;;1043:1;1040;1033:12;987:60;937:116;:::o;1059:133::-;1102:5;1140:6;1127:20;1118:29;;1156:30;1180:5;1156:30;:::i;:::-;1059:133;;;;:::o;1198:468::-;1263:6;1271;1320:2;1308:9;1299:7;1295:23;1291:32;1288:119;;;1326:79;;:::i;:::-;1288:119;1446:1;1471:53;1516:7;1507:6;1496:9;1492:22;1471:53;:::i;:::-;1461:63;;1417:117;1573:2;1599:50;1641:7;1632:6;1621:9;1617:22;1599:50;:::i;:::-;1589:60;;1544:115;1198:468;;;;;:::o;1672:99::-;1724:6;1758:5;1752:12;1742:22;;1672:99;;;:::o;1777:169::-;1861:11;1895:6;1890:3;1883:19;1935:4;1930:3;1926:14;1911:29;;1777:169;;;;:::o;1952:246::-;2033:1;2043:113;2057:6;2054:1;2051:13;2043:113;;;2142:1;2137:3;2133:11;2127:18;2123:1;2118:3;2114:11;2107:39;2079:2;2076:1;2072:10;2067:15;;2043:113;;;2190:1;2181:6;2176:3;2172:16;2165:27;2014:184;1952:246;;;:::o;2204:102::-;2245:6;2296:2;2292:7;2287:2;2280:5;2276:14;2272:28;2262:38;;2204:102;;;:::o;2312:377::-;2400:3;2428:39;2461:5;2428:39;:::i;:::-;2483:71;2547:6;2542:3;2483:71;:::i;:::-;2476:78;;2563:65;2621:6;2616:3;2609:4;2602:5;2598:16;2563:65;:::i;:::-;2653:29;2675:6;2653:29;:::i;:::-;2648:3;2644:39;2637:46;;2404:285;2312:377;;;;:::o;2695:313::-;2808:4;2846:2;2835:9;2831:18;2823:26;;2895:9;2889:4;2885:20;2881:1;2870:9;2866:17;2859:47;2923:78;2996:4;2987:6;2923:78;:::i;:::-;2915:86;;2695:313;;;;:::o;3014:77::-;3051:7;3080:5;3069:16;;3014:77;;;:::o;3097:122::-;3170:24;3188:5;3170:24;:::i;:::-;3163:5;3160:35;3150:63;;3209:1;3206;3199:12;3150:63;3097:122;:::o;3225:139::-;3271:5;3309:6;3296:20;3287:29;;3325:33;3352:5;3325:33;:::i;:::-;3225:139;;;;:::o;3370:474::-;3438:6;3446;3495:2;3483:9;3474:7;3470:23;3466:32;3463:119;;;3501:79;;:::i;:::-;3463:119;3621:1;3646:53;3691:7;3682:6;3671:9;3667:22;3646:53;:::i;:::-;3636:63;;3592:117;3748:2;3774:53;3819:7;3810:6;3799:9;3795:22;3774:53;:::i;:::-;3764:63;;3719:118;3370:474;;;;;:::o;3850:109::-;3931:21;3946:5;3931:21;:::i;:::-;3926:3;3919:34;3850:109;;:::o;3965:210::-;4052:4;4090:2;4079:9;4075:18;4067:26;;4103:65;4165:1;4154:9;4150:17;4141:6;4103:65;:::i;:::-;3965:210;;;;:::o;4181:118::-;4268:24;4286:5;4268:24;:::i;:::-;4263:3;4256:37;4181:118;;:::o;4305:222::-;4398:4;4436:2;4425:9;4421:18;4413:26;;4449:71;4517:1;4506:9;4502:17;4493:6;4449:71;:::i;:::-;4305:222;;;;:::o;4533:619::-;4610:6;4618;4626;4675:2;4663:9;4654:7;4650:23;4646:32;4643:119;;;4681:79;;:::i;:::-;4643:119;4801:1;4826:53;4871:7;4862:6;4851:9;4847:22;4826:53;:::i;:::-;4816:63;;4772:117;4928:2;4954:53;4999:7;4990:6;4979:9;4975:22;4954:53;:::i;:::-;4944:63;;4899:118;5056:2;5082:53;5127:7;5118:6;5107:9;5103:22;5082:53;:::i;:::-;5072:63;;5027:118;4533:619;;;;;:::o;5158:86::-;5193:7;5233:4;5226:5;5222:16;5211:27;;5158:86;;;:::o;5250:112::-;5333:22;5349:5;5333:22;:::i;:::-;5328:3;5321:35;5250:112;;:::o;5368:214::-;5457:4;5495:2;5484:9;5480:18;5472:26;;5508:67;5572:1;5561:9;5557:17;5548:6;5508:67;:::i;:::-;5368:214;;;;:::o;5588:329::-;5647:6;5696:2;5684:9;5675:7;5671:23;5667:32;5664:119;;;5702:79;;:::i;:::-;5664:119;5822:1;5847:53;5892:7;5883:6;5872:9;5868:22;5847:53;:::i;:::-;5837:63;;5793:117;5588:329;;;;:::o;5923:::-;5982:6;6031:2;6019:9;6010:7;6006:23;6002:32;5999:119;;;6037:79;;:::i;:::-;5999:119;6157:1;6182:53;6227:7;6218:6;6207:9;6203:22;6182:53;:::i;:::-;6172:63;;6128:117;5923:329;;;;:::o;6258:118::-;6345:24;6363:5;6345:24;:::i;:::-;6340:3;6333:37;6258:118;;:::o;6382:222::-;6475:4;6513:2;6502:9;6498:18;6490:26;;6526:71;6594:1;6583:9;6579:17;6570:6;6526:71;:::i;:::-;6382:222;;;;:::o;6610:474::-;6678:6;6686;6735:2;6723:9;6714:7;6710:23;6706:32;6703:119;;;6741:79;;:::i;:::-;6703:119;6861:1;6886:53;6931:7;6922:6;6911:9;6907:22;6886:53;:::i;:::-;6876:63;;6832:117;6988:2;7014:53;7059:7;7050:6;7039:9;7035:22;7014:53;:::i;:::-;7004:63;;6959:118;6610:474;;;;;:::o;7090:180::-;7138:77;7135:1;7128:88;7235:4;7232:1;7225:15;7259:4;7256:1;7249:15;7276:320;7320:6;7357:1;7351:4;7347:12;7337:22;;7404:1;7398:4;7394:12;7425:18;7415:81;;7481:4;7473:6;7469:17;7459:27;;7415:81;7543:2;7535:6;7532:14;7512:18;7509:38;7506:84;;7562:18;;:::i;:::-;7506:84;7327:269;7276:320;;;:::o;7602:180::-;7650:77;7647:1;7640:88;7747:4;7744:1;7737:15;7771:4;7768:1;7761:15;7788:191;7828:3;7847:20;7865:1;7847:20;:::i;:::-;7842:25;;7881:20;7899:1;7881:20;:::i;:::-;7876:25;;7924:1;7921;7917:9;7910:16;;7945:3;7942:1;7939:10;7936:36;;;7952:18;;:::i;:::-;7936:36;7788:191;;;;:::o;7985:231::-;8125:34;8121:1;8113:6;8109:14;8102:58;8194:14;8189:2;8181:6;8177:15;8170:39;7985:231;:::o;8222:366::-;8364:3;8385:67;8449:2;8444:3;8385:67;:::i;:::-;8378:74;;8461:93;8550:3;8461:93;:::i;:::-;8579:2;8574:3;8570:12;8563:19;;8222:366;;;:::o;8594:419::-;8760:4;8798:2;8787:9;8783:18;8775:26;;8847:9;8841:4;8837:20;8833:1;8822:9;8818:17;8811:47;8875:131;9001:4;8875:131;:::i;:::-;8867:139;;8594:419;;;:::o;9019:224::-;9159:34;9155:1;9147:6;9143:14;9136:58;9228:7;9223:2;9215:6;9211:15;9204:32;9019:224;:::o;9249:366::-;9391:3;9412:67;9476:2;9471:3;9412:67;:::i;:::-;9405:74;;9488:93;9577:3;9488:93;:::i;:::-;9606:2;9601:3;9597:12;9590:19;;9249:366;;;:::o;9621:419::-;9787:4;9825:2;9814:9;9810:18;9802:26;;9874:9;9868:4;9864:20;9860:1;9849:9;9845:17;9838:47;9902:131;10028:4;9902:131;:::i;:::-;9894:139;;9621:419;;;:::o;10046:225::-;10186:34;10182:1;10174:6;10170:14;10163:58;10255:8;10250:2;10242:6;10238:15;10231:33;10046:225;:::o;10277:366::-;10419:3;10440:67;10504:2;10499:3;10440:67;:::i;:::-;10433:74;;10516:93;10605:3;10516:93;:::i;:::-;10634:2;10629:3;10625:12;10618:19;;10277:366;;;:::o;10649:419::-;10815:4;10853:2;10842:9;10838:18;10830:26;;10902:9;10896:4;10892:20;10888:1;10877:9;10873:17;10866:47;10930:131;11056:4;10930:131;:::i;:::-;10922:139;;10649:419;;;:::o;11074:182::-;11214:34;11210:1;11202:6;11198:14;11191:58;11074:182;:::o;11262:366::-;11404:3;11425:67;11489:2;11484:3;11425:67;:::i;:::-;11418:74;;11501:93;11590:3;11501:93;:::i;:::-;11619:2;11614:3;11610:12;11603:19;;11262:366;;;:::o;11634:419::-;11800:4;11838:2;11827:9;11823:18;11815:26;;11887:9;11881:4;11877:20;11873:1;11862:9;11858:17;11851:47;11915:131;12041:4;11915:131;:::i;:::-;11907:139;;11634:419;;;:::o;12059:223::-;12199:34;12195:1;12187:6;12183:14;12176:58;12268:6;12263:2;12255:6;12251:15;12244:31;12059:223;:::o;12288:366::-;12430:3;12451:67;12515:2;12510:3;12451:67;:::i;:::-;12444:74;;12527:93;12616:3;12527:93;:::i;:::-;12645:2;12640:3;12636:12;12629:19;;12288:366;;;:::o;12660:419::-;12826:4;12864:2;12853:9;12849:18;12841:26;;12913:9;12907:4;12903:20;12899:1;12888:9;12884:17;12877:47;12941:131;13067:4;12941:131;:::i;:::-;12933:139;;12660:419;;;:::o;13085:221::-;13225:34;13221:1;13213:6;13209:14;13202:58;13294:4;13289:2;13281:6;13277:15;13270:29;13085:221;:::o;13312:366::-;13454:3;13475:67;13539:2;13534:3;13475:67;:::i;:::-;13468:74;;13551:93;13640:3;13551:93;:::i;:::-;13669:2;13664:3;13660:12;13653:19;;13312:366;;;:::o;13684:419::-;13850:4;13888:2;13877:9;13873:18;13865:26;;13937:9;13931:4;13927:20;13923:1;13912:9;13908:17;13901:47;13965:131;14091:4;13965:131;:::i;:::-;13957:139;;13684:419;;;:::o;14109:179::-;14249:31;14245:1;14237:6;14233:14;14226:55;14109:179;:::o;14294:366::-;14436:3;14457:67;14521:2;14516:3;14457:67;:::i;:::-;14450:74;;14533:93;14622:3;14533:93;:::i;:::-;14651:2;14646:3;14642:12;14635:19;;14294:366;;;:::o;14666:419::-;14832:4;14870:2;14859:9;14855:18;14847:26;;14919:9;14913:4;14909:20;14905:1;14894:9;14890:17;14883:47;14947:131;15073:4;14947:131;:::i;:::-;14939:139;;14666:419;;;:::o;15091:224::-;15231:34;15227:1;15219:6;15215:14;15208:58;15300:7;15295:2;15287:6;15283:15;15276:32;15091:224;:::o;15321:366::-;15463:3;15484:67;15548:2;15543:3;15484:67;:::i;:::-;15477:74;;15560:93;15649:3;15560:93;:::i;:::-;15678:2;15673:3;15669:12;15662:19;;15321:366;;;:::o;15693:419::-;15859:4;15897:2;15886:9;15882:18;15874:26;;15946:9;15940:4;15936:20;15932:1;15921:9;15917:17;15910:47;15974:131;16100:4;15974:131;:::i;:::-;15966:139;;15693:419;;;:::o;16118:222::-;16258:34;16254:1;16246:6;16242:14;16235:58;16327:5;16322:2;16314:6;16310:15;16303:30;16118:222;:::o;16346:366::-;16488:3;16509:67;16573:2;16568:3;16509:67;:::i;:::-;16502:74;;16585:93;16674:3;16585:93;:::i;:::-;16703:2;16698:3;16694:12;16687:19;;16346:366;;;:::o;16718:419::-;16884:4;16922:2;16911:9;16907:18;16899:26;;16971:9;16965:4;16961:20;16957:1;16946:9;16942:17;16935:47;16999:131;17125:4;16999:131;:::i;:::-;16991:139;;16718:419;;;:::o;17143:225::-;17283:34;17279:1;17271:6;17267:14;17260:58;17352:8;17347:2;17339:6;17335:15;17328:33;17143:225;:::o;17374:366::-;17516:3;17537:67;17601:2;17596:3;17537:67;:::i;:::-;17530:74;;17613:93;17702:3;17613:93;:::i;:::-;17731:2;17726:3;17722:12;17715:19;;17374:366;;;:::o;17746:419::-;17912:4;17950:2;17939:9;17935:18;17927:26;;17999:9;17993:4;17989:20;17985:1;17974:9;17970:17;17963:47;18027:131;18153:4;18027:131;:::i;:::-;18019:139;;17746:419;;;:::o;18171:220::-;18311:34;18307:1;18299:6;18295:14;18288:58;18380:3;18375:2;18367:6;18363:15;18356:28;18171:220;:::o;18397:366::-;18539:3;18560:67;18624:2;18619:3;18560:67;:::i;:::-;18553:74;;18636:93;18725:3;18636:93;:::i;:::-;18754:2;18749:3;18745:12;18738:19;;18397:366;;;:::o;18769:419::-;18935:4;18973:2;18962:9;18958:18;18950:26;;19022:9;19016:4;19012:20;19008:1;18997:9;18993:17;18986:47;19050:131;19176:4;19050:131;:::i;:::-;19042:139;;18769:419;;;:::o;19194:221::-;19334:34;19330:1;19322:6;19318:14;19311:58;19403:4;19398:2;19390:6;19386:15;19379:29;19194:221;:::o;19421:366::-;19563:3;19584:67;19648:2;19643:3;19584:67;:::i;:::-;19577:74;;19660:93;19749:3;19660:93;:::i;:::-;19778:2;19773:3;19769:12;19762:19;;19421:366;;;:::o;19793:419::-;19959:4;19997:2;19986:9;19982:18;19974:26;;20046:9;20040:4;20036:20;20032:1;20021:9;20017:17;20010:47;20074:131;20200:4;20074:131;:::i;:::-;20066:139;;19793:419;;;:::o;20218:295::-;20358:34;20354:1;20346:6;20342:14;20335:58;20427:34;20422:2;20414:6;20410:15;20403:59;20496:9;20491:2;20483:6;20479:15;20472:34;20218:295;:::o;20519:366::-;20661:3;20682:67;20746:2;20741:3;20682:67;:::i;:::-;20675:74;;20758:93;20847:3;20758:93;:::i;:::-;20876:2;20871:3;20867:12;20860:19;;20519:366;;;:::o;20891:419::-;21057:4;21095:2;21084:9;21080:18;21072:26;;21144:9;21138:4;21134:20;21130:1;21119:9;21115:17;21108:47;21172:131;21298:4;21172:131;:::i;:::-;21164:139;;20891:419;;;:::o;21316:301::-;21456:34;21452:1;21444:6;21440:14;21433:58;21525:34;21520:2;21512:6;21508:15;21501:59;21594:15;21589:2;21581:6;21577:15;21570:40;21316:301;:::o;21623:366::-;21765:3;21786:67;21850:2;21845:3;21786:67;:::i;:::-;21779:74;;21862:93;21951:3;21862:93;:::i;:::-;21980:2;21975:3;21971:12;21964:19;;21623:366;;;:::o;21995:419::-;22161:4;22199:2;22188:9;22184:18;22176:26;;22248:9;22242:4;22238:20;22234:1;22223:9;22219:17;22212:47;22276:131;22402:4;22276:131;:::i;:::-;22268:139;;21995:419;;;:::o;22420:299::-;22560:34;22556:1;22548:6;22544:14;22537:58;22629:34;22624:2;22616:6;22612:15;22605:59;22698:13;22693:2;22685:6;22681:15;22674:38;22420:299;:::o;22725:366::-;22867:3;22888:67;22952:2;22947:3;22888:67;:::i;:::-;22881:74;;22964:93;23053:3;22964:93;:::i;:::-;23082:2;23077:3;23073:12;23066:19;;22725:366;;;:::o;23097:419::-;23263:4;23301:2;23290:9;23286:18;23278:26;;23350:9;23344:4;23340:20;23336:1;23325:9;23321:17;23314:47;23378:131;23504:4;23378:131;:::i;:::-;23370:139;;23097:419;;;:::o;23522:248::-;23662:34;23658:1;23650:6;23646:14;23639:58;23731:31;23726:2;23718:6;23714:15;23707:56;23522:248;:::o;23776:366::-;23918:3;23939:67;24003:2;23998:3;23939:67;:::i;:::-;23932:74;;24015:93;24104:3;24015:93;:::i;:::-;24133:2;24128:3;24124:12;24117:19;;23776:366;;;:::o;24148:419::-;24314:4;24352:2;24341:9;24337:18;24329:26;;24401:9;24395:4;24391:20;24387:1;24376:9;24372:17;24365:47;24429:131;24555:4;24429:131;:::i;:::-;24421:139;;24148:419;;;:::o;24573:102::-;24615:8;24662:5;24659:1;24655:13;24634:34;;24573:102;;;:::o;24681:848::-;24742:5;24749:4;24773:6;24764:15;;24797:5;24788:14;;24811:712;24832:1;24822:8;24819:15;24811:712;;;24927:4;24922:3;24918:14;24912:4;24909:24;24906:50;;;24936:18;;:::i;:::-;24906:50;24986:1;24976:8;24972:16;24969:451;;;25401:4;25394:5;25390:16;25381:25;;24969:451;25451:4;25445;25441:15;25433:23;;25481:32;25504:8;25481:32;:::i;:::-;25469:44;;24811:712;;;24681:848;;;;;;;:::o;25535:1073::-;25589:5;25780:8;25770:40;;25801:1;25792:10;;25803:5;;25770:40;25829:4;25819:36;;25846:1;25837:10;;25848:5;;25819:36;25915:4;25963:1;25958:27;;;;25999:1;25994:191;;;;25908:277;;25958:27;25976:1;25967:10;;25978:5;;;25994:191;26039:3;26029:8;26026:17;26023:43;;;26046:18;;:::i;:::-;26023:43;26095:8;26092:1;26088:16;26079:25;;26130:3;26123:5;26120:14;26117:40;;;26137:18;;:::i;:::-;26117:40;26170:5;;;25908:277;;26294:2;26284:8;26281:16;26275:3;26269:4;26266:13;26262:36;26244:2;26234:8;26231:16;26226:2;26220:4;26217:12;26213:35;26197:111;26194:246;;;26350:8;26344:4;26340:19;26331:28;;26385:3;26378:5;26375:14;26372:40;;;26392:18;;:::i;:::-;26372:40;26425:5;;26194:246;26465:42;26503:3;26493:8;26487:4;26484:1;26465:42;:::i;:::-;26450:57;;;;26539:4;26534:3;26530:14;26523:5;26520:25;26517:51;;;26548:18;;:::i;:::-;26517:51;26597:4;26590:5;26586:16;26577:25;;25535:1073;;;;;;:::o;26614:281::-;26672:5;26696:23;26714:4;26696:23;:::i;:::-;26688:31;;26740:25;26756:8;26740:25;:::i;:::-;26728:37;;26784:104;26821:66;26811:8;26805:4;26784:104;:::i;:::-;26775:113;;26614:281;;;;:::o;26901:410::-;26941:7;26964:20;26982:1;26964:20;:::i;:::-;26959:25;;26998:20;27016:1;26998:20;:::i;:::-;26993:25;;27053:1;27050;27046:9;27075:30;27093:11;27075:30;:::i;:::-;27064:41;;27254:1;27245:7;27241:15;27238:1;27235:22;27215:1;27208:9;27188:83;27165:139;;27284:18;;:::i;:::-;27165:139;26949:362;26901:410;;;;:::o
Swarm Source
ipfs://fad72beb63080b61786ceed3c86c7383704b81656194e7f3425b24e05a97842a
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.