Contract 0x74b23882a30290451a17c44f4f05243b6b58c76d 6

Contract Overview

Wrapped Ether
Balance:
0 FTM

FTM Value:
$0.00

Token:
Txn Hash Method
Block
From
To
Value [Txn Fee]
0x24e936dc9d0f7011a2b219ea0b445a11e789a594bc74f829518fdc83e742e25cApprove243807972021-12-08 19:10:443 mins ago0xd636efd59906535f01257e5164e670e67a5e461c IN  Wrapped Ether0 FTM0.00658822
0x4c0fb7fc5438c5caeb4b63ca1f2030d5d37685aba0902b5451d5c4700bacd568Swapin243806232021-12-08 19:08:216 mins ago0xc564ee9f21ed8a2d8e7e76c085740d5e4c5fafbe IN  Wrapped Ether0 FTM0.011818384979
0x72ec84df78c716a39b6dc4edfbba74c26bd3fdcc65c399a63fa8a98422d48a54Approve243805952021-12-08 19:07:596 mins ago0xb01e1183563acc3d71d67376b154ba5bb7d8ec39 IN  Wrapped Ether0 FTM0.008919264
0xe44fdd3ad6e97d6e6b0f0b089cabddb27a499925f200d7960d49d9fab19eda37Approve243805242021-12-08 19:07:047 mins ago0xb69daaa71b9af35eba7dd1885dce9f31882645d0 IN  Wrapped Ether0 FTM0.008906355632
0x4774db32b28f2b09e3824bc250ed0bad398e2111cb8d6ffb854c52d53a03869bApprove243804922021-12-08 19:06:377 mins ago0x938675f5a608c6663eb896dbd92bff73370638a6 IN  Wrapped Ether0 FTM0.009007073614
0x89eb22a6125f4c2b233f5b27b1aa1c8fad7a91f86eefe58f125417d267058f3cApprove243804752021-12-08 19:06:238 mins ago0x4b845ec89db5bc34dab02a71c6fb1b5629d52960 IN  Wrapped Ether0 FTM0.008940105493
0xbf306c857054d9a731e7d4720e01240fb3a67b0000b124f6581a2b0ee04fecd3Approve243804242021-12-08 19:05:438 mins ago0x967049a18860a3eb3bd39f74eef33b4e2234f8f7 IN  Wrapped Ether0 FTM0.005095686551
0xb94ba8b88fbcfd816b9d46e1adbba089712caf38d3a480ff967d1fdd6d994a7fApprove243804112021-12-08 19:05:338 mins ago0x967049a18860a3eb3bd39f74eef33b4e2234f8f7 IN  Wrapped Ether0 FTM0.008889737111
0xcb999f4a985674ba0a41d436943442505dcd9daa97f3f6736a3a9a4c8c324306Approve243803872021-12-08 19:05:149 mins ago0xb1211ec52c214ed9265626a72b67433f462341fb IN  Wrapped Ether0 FTM0.008889737111
0xd8a66b2708841ade7649b1685a0cc1065dc2c511692721c49763c5229d4279faSwapin243803512021-12-08 19:04:429 mins ago0xc564ee9f21ed8a2d8e7e76c085740d5e4c5fafbe IN  Wrapped Ether0 FTM0.01225012294
0xd90da30120689777d054da7a6d3b03705b31b71cb4c76e60b5973ca194feea4cSwapin243803512021-12-08 19:04:429 mins ago0xc564ee9f21ed8a2d8e7e76c085740d5e4c5fafbe IN  Wrapped Ether0 FTM0.012245801328
0xd2d501dc936c1b377cb43ca2cee9d389c66ea0cb01470504dd72b14d3672db68Swapin243803512021-12-08 19:04:429 mins ago0xc564ee9f21ed8a2d8e7e76c085740d5e4c5fafbe IN  Wrapped Ether0 FTM0.009839664818
0x573e673dafd27cc1b58c6a34e4020a1913aa59dd5826b26b65951098aa1b6003Swapin243803322021-12-08 19:04:2110 mins ago0xc564ee9f21ed8a2d8e7e76c085740d5e4c5fafbe IN  Wrapped Ether0 FTM0.013650182797
0x595e52f4a9aac39a84bb1275e955c05f9df17a6eade58ebf754d3530f9dc57e5Approve243797392021-12-08 18:53:3520 mins ago0x3974818bb76036655540c989977f5230f6ab8380 IN  Wrapped Ether0 FTM0.006933270071
0x478c5224b5979ea8d98f22d74f4a39ad62aa37fa3e8a87c2e08535c0f3dc88b0Approve243794862021-12-08 18:49:4024 mins ago0xf64ea65b022cd2c11b7106ceee54ddafbd48453f IN  Wrapped Ether0 FTM0.005525167538
0xbbbeb51dfe2263ee7e344496a16e5fd47c90f3518d766326085c0ea8857d30f0Approve243792282021-12-08 18:46:0528 mins ago0x90ed35388526982bf3e5e3e30d5db23e58e7238b IN  Wrapped Ether0 FTM0.006045141666
0x35e4ebc655bcbcdf73386d64c2898e73984abb2f7d0944ab833b752833ffc6f0Swapout243791792021-12-08 18:45:1729 mins ago0xf4f4595b6371931ef2f94798fcc33866f1a460fa IN  Wrapped Ether0 FTM0.003128141493
0xa2f9295391b7c1ca97c77a1e6355d42fd2ee7ad99fe70ea289d1298942d0955bApprove243789532021-12-08 18:42:1332 mins ago0x33233ee3e79692ec6d198609da1277c2e4dc31d3 IN  Wrapped Ether0 FTM0.005719065668
0x93d02e2ec682cfa7652d08d554592fef14850937d3e50834ce5abd4b14aa2370Approve243786242021-12-08 18:37:4736 mins ago0xc5c08107950750c24861758671846959205b495b IN  Wrapped Ether0 FTM0.005927835001
0xee6633a137af2348e76bd46e9efac59863ade276ab772749ce2366c65f472803Approve243784552021-12-08 18:35:3438 mins ago0x74e68903fc5429aa00e9d439a30f4111a11f8a2d IN  Wrapped Ether0 FTM0.005949180834
0xfd5b167a4484a0e45dc51525d7ca041510f059e7f1a9220c975e75369e6e34faSwapin243784122021-12-08 18:34:5939 mins ago0xc564ee9f21ed8a2d8e7e76c085740d5e4c5fafbe IN  Wrapped Ether0 FTM0.008023858126
0x9c51ac809d1adb75cde8054a78b6a614b72a0c681fd2f03ae4bddbc17680f979Swapin243783722021-12-08 18:34:2840 mins ago0xc564ee9f21ed8a2d8e7e76c085740d5e4c5fafbe IN  Wrapped Ether0 FTM0.008022374873
0x25f6940ec09f80bd35425ea425723c8f24a4f5afac4fde7b3b66374bf03bee27Swapin243783502021-12-08 18:34:0940 mins ago0xc564ee9f21ed8a2d8e7e76c085740d5e4c5fafbe IN  Wrapped Ether0 FTM0.008052400119
0xec2259187aae27a1cb7e854ebacf1b21f55391d8c7723e199bab145fc156d31bApprove243783072021-12-08 18:33:3240 mins ago0xad9de6bbe543723608a8d256c238d2745a551fb3 IN  Wrapped Ether0 FTM0.00626214012
0x650ef9b38a6ff7378fa2503b527061e8a086f020a0ba3baa93674c5d489c5874Swapin243782052021-12-08 18:32:0942 mins ago0xc564ee9f21ed8a2d8e7e76c085740d5e4c5fafbe IN  Wrapped Ether0 FTM0.008274641819
[ Download CSV Export 

OVERVIEW

wETH is "wrapped ETH".

Latest 15 internal transactions
Parent Txn Hash Block From To Value
0x6641929b1d8d8e4d6ada50d72417d4a665e0ee49bcd6b619dddb953aa9d6baeb231166872021-11-25 19:28:5212 days 23 hrs ago 0x0a28e438f95c6842552e3087be1024a5e361b866 Wrapped Ether10 FTM
0x52a805e4afb2681a7728034420b8f519e5f613454f0c6295bedc900581537f94223308562021-11-17 15:46:5021 days 3 hrs ago 0x2972e2768a5d4c1ca935a516e1d140fb1163b333 Wrapped Ether0.0000001 FTM
0xc222e95b4c5c851f479ee3dba91c21a917feae7c3c9daa0e8951e66bbb50c069216636982021-11-10 19:00:2928 days 14 mins ago 0x2d216f6692a605e6248f892a34af2c383ed960a3 Wrapped Ether1 FTM
0x71a53c18d8910b78f11fbc3e98738b976c9fac0bea8177075349e2048725bebc216565922021-11-10 17:21:4828 days 1 hr ago 0x2d216f6692a605e6248f892a34af2c383ed960a3 Wrapped Ether2 FTM
0x1636aea495cf4211878e165607c828c519f89bd8a9127b90cf7e9c9cedfd9bcd216562292021-11-10 17:16:3028 days 1 hr ago 0x2d216f6692a605e6248f892a34af2c383ed960a3 Wrapped Ether1 FTM
0xc33909127e4558050dec84f7db2ebf330575eba6d1cca935f25134903c1124ca188485362021-10-11 17:48:3558 days 1 hr ago 0x8a18ebc15d33238beb00ab0ba6f68e81471b2ac3 Wrapped Ether20.9245325989672 FTM
0x1e2180aee50dc32835fa54b3d0f4f3c5a9e0541693f3819d7af619013c1e7cdb188484252021-10-11 17:47:0358 days 1 hr ago 0x8a18ebc15d33238beb00ab0ba6f68e81471b2ac3 Wrapped Ether20.9315104180672 FTM
0x8f9fb427f6778a8b3d45884db8bddc3022b83c20bffbf0dfd0cac6a3434b2ca4161681022021-09-02 16:25:4097 days 2 hrs ago 0x979c341edb41e42b3c7e1206df38fe27c0557a34 Wrapped Ether0.1 FTM
0x35ac7473fdb095e29d1d8d4464c320b1c101516a5cf1c7c1f0ef742c1a6bbafc160051122021-08-31 19:11:0399 days 3 mins ago 0xd2b26a8274c4fd08af20382ef10e1b79dcb4846e Wrapped Ether5 FTM
0x282149a5d27ce31fffee852563063152e47410546be2affd0cbed49ee7f5e87f159354652021-08-30 23:48:5399 days 19 hrs ago 0xd2b26a8274c4fd08af20382ef10e1b79dcb4846e Wrapped Ether6 FTM
0x8e7ea62d86fadb92ce0e626d55940fb0d47a4969a6adb8962a39727ca49f86f7159354032021-08-30 23:47:3199 days 19 hrs ago 0x393c2e032288b996c901ef207ccdf1431c3283d0 Wrapped Ether21.989432 FTM
0x3d60a90c9ebbb0203e85c51006950a571ca67615c77dafce0f1542f4332e2990159353082021-08-30 23:45:3499 days 19 hrs ago 0xe280c4dbc8ff3ccf553a20bc5dcce603d02e61ee Wrapped Ether3 FTM
0xe25cb5728cb4f3a76b70091d3bf8abbc032d8ddeace0efa6a1c529beee5143a6159352742021-08-30 23:45:0399 days 19 hrs ago 0xd2b26a8274c4fd08af20382ef10e1b79dcb4846e Wrapped Ether5 FTM
0xd981c8e39c7ffbc0f3e2c4fe6d2d2f3fb3532ab5e0c07b67e96da3b248cda8a3159352372021-08-30 23:44:2799 days 19 hrs ago 0xd2b26a8274c4fd08af20382ef10e1b79dcb4846e Wrapped Ether5.5 FTM
0xa2644fecc4a8b1115a4c2fb7d7aeb83dd00c84d79717b910b50fbe21351dcdee23009402021-02-19 18:16:23292 days 58 mins ago Fantom: Deployer  Contract Creation0 FTM
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
ETH

Compiler Version
v0.8.1+commit.df193b15

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at FtmScan.com on 2021-02-19
*/

// SPDX-License-Identifier: GPL-3.0-or-later

pragma solidity 0.8.1;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);

    /**
     * @dev Moves `amount` tokens from the caller's account to `recipient`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address recipient, uint256 amount) external returns (bool);

    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address owner, address spender) external view returns (uint256);

    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

    /**
     * @dev Moves `amount` tokens from `sender` to `recipient` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);

    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

/**
 * @dev Interface of the ERC2612 standard as defined in the EIP.
 *
 * Adds the {permit} method, which can be used to change one's
 * {IERC20-allowance} without having to send a transaction, by signing a
 * message. This allows users to spend tokens without having to hold Ether.
 *
 * See https://eips.ethereum.org/EIPS/eip-2612.
 */
interface IERC2612 {
    /**
     * @dev Sets `amount` as the allowance of `spender` over `owner`'s tokens,
     * given `owner`'s signed approval.
     *
     * IMPORTANT: The same issues {IERC20-approve} has related to transaction
     * ordering also apply here.
     *
     * Emits an {Approval} event.
     *
     * Requirements:
     *
     * - `owner` cannot be the zero address.
     * - `spender` cannot be the zero address.
     * - `deadline` must be a timestamp in the future.
     * - `v`, `r` and `s` must be a valid `secp256k1` signature from `owner`
     * over the EIP712-formatted function arguments.
     * - the signature must use ``owner``'s current nonce (see {nonces}).
     *
     * For more information on the signature format, see the
     * https://eips.ethereum.org/EIPS/eip-2612#specification[relevant EIP
     * section].
     */
    function permit(address owner, address spender, uint256 amount, uint256 deadline, uint8 v, bytes32 r, bytes32 s) external;

    /**
     * @dev Returns the current ERC2612 nonce for `owner`. This value must be
     * included whenever a signature is generated for {permit}.
     *
     * Every successful call to {permit} increases ``owner``'s nonce by one. This
     * prevents a signature from being used multiple times.
     */
    function nonces(address owner) external view returns (uint256);
}

/// @dev Wrapped ERC-20 v10 (WERC10) is an ERC-20 ERC-20 wrapper. You can `deposit` ERC-20 and obtain an WERC10 balance which can then be operated as an ERC-20 token. You can
/// `withdraw` ERC-20 from WERC10, which will then burn WERC10 token in your wallet. The amount of WERC10 token in any wallet is always identical to the
/// balance of ERC-20 deposited minus the ERC-20 withdrawn with that specific wallet.
interface IWERC10 is IERC20, IERC2612 {

    /// @dev Sets `value` as allowance of `spender` account over caller account's WERC10 token,
    /// after which a call is executed to an ERC677-compliant contract with the `data` parameter.
    /// Emits {Approval} event.
    /// Returns boolean value indicating whether operation succeeded.
    /// For more information on approveAndCall format, see https://github.com/ethereum/EIPs/issues/677.
    function approveAndCall(address spender, uint256 value, bytes calldata data) external returns (bool);

    /// @dev Moves `value` WERC10 token from caller's account to account (`to`), 
    /// after which a call is executed to an ERC677-compliant contract with the `data` parameter.
    /// A transfer to `address(0)` triggers an ERC-20 withdraw matching the sent WERC10 token in favor of caller.
    /// Emits {Transfer} event.
    /// Returns boolean value indicating whether operation succeeded.
    /// Requirements:
    ///   - caller account must have at least `value` WERC10 token.
    /// For more information on transferAndCall format, see https://github.com/ethereum/EIPs/issues/677.
    function transferAndCall(address to, uint value, bytes calldata data) external returns (bool);
}

interface ITransferReceiver {
    function onTokenTransfer(address, uint, bytes calldata) external returns (bool);
}

interface IApprovalReceiver {
    function onTokenApproval(address, uint, bytes calldata) external returns (bool);
}

library Address {
    function isContract(address account) internal view returns (bool) {
        bytes32 codehash;
        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
        // solhint-disable-next-line no-inline-assembly
        assembly { codehash := extcodehash(account) }
        return (codehash != 0x0 && codehash != accountHash);
    }
}

library SafeERC20 {
    using Address for address;

    function safeTransfer(IERC20 token, address to, uint value) internal {
        callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));
    }

    function safeTransferFrom(IERC20 token, address from, address to, uint value) internal {
        callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));
    }

    function safeApprove(IERC20 token, address spender, uint value) internal {
        require((value == 0) || (token.allowance(address(this), spender) == 0),
            "SafeERC20: approve from non-zero to non-zero allowance"
        );
        callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));
    }
    function callOptionalReturn(IERC20 token, bytes memory data) private {
        require(address(token).isContract(), "SafeERC20: call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = address(token).call(data);
        require(success, "SafeERC20: low-level call failed");

        if (returndata.length > 0) { // Return data is optional
            // solhint-disable-next-line max-line-length
            require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed");
        }
    }
}

/// @dev Wrapped Ether v10 (WERC10) is an Ether (ETH) ERC-20 wrapper. You can `deposit` ETH and obtain an WERC10 balance which can then be operated as an ERC-20 token. You can
/// `withdraw` ETH from WERC10, which will then burn WERC10 token in your wallet. The amount of WERC10 token in any wallet is always identical to the
/// balance of ETH deposited minus the ETH withdrawn with that specific wallet.
contract ETH is IWERC10 {
    using SafeERC20 for IERC20;
    string public name;
    string public symbol;
    uint8  public immutable decimals;

    bytes32 public constant PERMIT_TYPEHASH = keccak256("Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)");
    bytes32 public constant TRANSFER_TYPEHASH = keccak256("Transfer(address owner,address to,uint256 value,uint256 nonce,uint256 deadline)");
    bytes32 public immutable DOMAIN_SEPARATOR;

    /// @dev Records amount of WERC10 token owned by account.
    mapping (address => uint256) public override balanceOf;
    uint256 private _totalSupply;
    
    address private _oldOwner;
    address private _newOwner;
    uint256 private _newOwnerEffectiveTime;
    
    
    modifier onlyOwner() {
        require(msg.sender == owner(), "only owner");
        _;
    }
    
    function owner() public view returns (address) {
        if (block.timestamp >= _newOwnerEffectiveTime) {
            return _newOwner;
        }
        return _oldOwner;
    }
    
    
    function changeDCRMOwner(address newOwner) public onlyOwner returns (bool) {
        require(newOwner != address(0), "new owner is the zero address");
        _oldOwner = owner();
        _newOwner = newOwner;
        _newOwnerEffectiveTime = block.timestamp + 2*24*3600;
        emit LogChangeDCRMOwner(_oldOwner, _newOwner, _newOwnerEffectiveTime);
        return true;
    }

    function Swapin(bytes32 txhash, address account, uint256 amount) public onlyOwner returns (bool) {
        _mint(account, amount);
        emit LogSwapin(txhash, account, amount);
        return true;
    }

    function Swapout(uint256 amount, address bindaddr) public returns (bool) {
        require(bindaddr != address(0), "bind address is the zero address");
        _burn(msg.sender, amount);
        emit LogSwapout(msg.sender, bindaddr, amount);
        return true;
    }

    /// @dev Records current ERC2612 nonce for account. This value must be included whenever signature is generated for {permit}.
    /// Every successful call to {permit} increases account's nonce by one. This prevents signature from being used multiple times.
    mapping (address => uint256) public override nonces;

    /// @dev Records number of WERC10 token that account (second) will be allowed to spend on behalf of another account (first) through {transferFrom}.
    mapping (address => mapping (address => uint256)) public override allowance;
    
    event LogChangeDCRMOwner(address indexed oldOwner, address indexed newOwner, uint indexed effectiveTime);
    event LogSwapin(bytes32 indexed txhash, address indexed account, uint amount);
    event LogSwapout(address indexed account, address indexed bindaddr, uint amount);
    
    constructor(string memory _name, string memory _symbol, uint8 _decimals, address _owner) {
        name = _name;
        symbol = _symbol;
        decimals = _decimals;
        
        _newOwner = _owner;
        _newOwnerEffectiveTime = block.timestamp;
        
        uint256 chainId;
        assembly {chainId := chainid()}
        DOMAIN_SEPARATOR = keccak256(
            abi.encode(
                keccak256("EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)"),
                keccak256(bytes(name)),
                keccak256(bytes("1")),
                chainId,
                address(this)));
    }
    
    /// @dev Returns the total supply of WERC10 token as the ETH held in this contract.
    function totalSupply() external view override returns (uint256) {
        return _totalSupply;
    }
    
    /** @dev Creates `amount` tokens and assigns them to `account`, increasing
     * the total supply.
     *
     * Emits a {Transfer} event with `from` set to the zero address.
     *
     * Requirements
     *
     * - `to` cannot be the zero address.
     */
    function _mint(address account, uint256 amount) internal {
        require(account != address(0), "ERC20: mint to the zero address");

        _totalSupply += amount;
        balanceOf[account] += amount;
        emit Transfer(address(0), account, amount);
    }

    /**
     * @dev Destroys `amount` tokens from `account`, reducing the
     * total supply.
     *
     * Emits a {Transfer} event with `to` set to the zero address.
     *
     * Requirements
     *
     * - `account` cannot be the zero address.
     * - `account` must have at least `amount` tokens.
     */
    function _burn(address account, uint256 amount) internal {
        require(account != address(0), "ERC20: burn from the zero address");

        balanceOf[account] -= amount;
        _totalSupply -= amount;
        emit Transfer(account, address(0), amount);
    }
    
    /// @dev Sets `value` as allowance of `spender` account over caller account's WERC10 token.
    /// Emits {Approval} event.
    /// Returns boolean value indicating whether operation succeeded.
    function approve(address spender, uint256 value) external override returns (bool) {
        // _approve(msg.sender, spender, value);
        allowance[msg.sender][spender] = value;
        emit Approval(msg.sender, spender, value);

        return true;
    }

    /// @dev Sets `value` as allowance of `spender` account over caller account's WERC10 token,
    /// after which a call is executed to an ERC677-compliant contract with the `data` parameter.
    /// Emits {Approval} event.
    /// Returns boolean value indicating whether operation succeeded.
    /// For more information on approveAndCall format, see https://github.com/ethereum/EIPs/issues/677.
    function approveAndCall(address spender, uint256 value, bytes calldata data) external override returns (bool) {
        // _approve(msg.sender, spender, value);
        allowance[msg.sender][spender] = value;
        emit Approval(msg.sender, spender, value);
        
        return IApprovalReceiver(spender).onTokenApproval(msg.sender, value, data);
    }

    /// @dev Sets `value` as allowance of `spender` account over `owner` account's WERC10 token, given `owner` account's signed approval.
    /// Emits {Approval} event.
    /// Requirements:
    ///   - `deadline` must be timestamp in future.
    ///   - `v`, `r` and `s` must be valid `secp256k1` signature from `owner` account over EIP712-formatted function arguments.
    ///   - the signature must use `owner` account's current nonce (see {nonces}).
    ///   - the signer cannot be zero address and must be `owner` account.
    /// For more information on signature format, see https://eips.ethereum.org/EIPS/eip-2612#specification[relevant EIP section].
    /// WERC10 token implementation adapted from https://github.com/albertocuestacanada/ERC20Permit/blob/master/contracts/ERC20Permit.sol.
    function permit(address target, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s) external override {
        require(block.timestamp <= deadline, "WERC10: Expired permit");

        bytes32 hashStruct = keccak256(
            abi.encode(
                PERMIT_TYPEHASH,
                target,
                spender,
                value,
                nonces[target]++,
                deadline));

        require(verifyEIP712(target, hashStruct, v, r, s) || verifyPersonalSign(target, hashStruct, v, r, s));

        // _approve(owner, spender, value);
        allowance[target][spender] = value;
        emit Approval(target, spender, value);
    }

    function transferWithPermit(address target, address to, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s) external returns (bool) {
        require(block.timestamp <= deadline, "WERC10: Expired permit");

        bytes32 hashStruct = keccak256(
            abi.encode(
                TRANSFER_TYPEHASH,
                target,
                to,
                value,
                nonces[target]++,
                deadline));

        require(verifyEIP712(target, hashStruct, v, r, s) || verifyPersonalSign(target, hashStruct, v, r, s));

        require(to != address(0) || to != address(this));
        
        uint256 balance = balanceOf[target];
        require(balance >= value, "WERC10: transfer amount exceeds balance");

        balanceOf[target] = balance - value;
        balanceOf[to] += value;
        emit Transfer(target, to, value);
        
        return true;
    }
    
    function verifyEIP712(address target, bytes32 hashStruct, uint8 v, bytes32 r, bytes32 s) internal view returns (bool) {
        bytes32 hash = keccak256(
            abi.encodePacked(
                "\x19\x01",
                DOMAIN_SEPARATOR,
                hashStruct));
        address signer = ecrecover(hash, v, r, s);
        return (signer != address(0) && signer == target);
    }
    
    function verifyPersonalSign(address target, bytes32 hashStruct, uint8 v, bytes32 r, bytes32 s) internal pure returns (bool) {
        bytes32 hash = prefixed(hashStruct);
        address signer = ecrecover(hash, v, r, s);
        return (signer != address(0) && signer == target);
    }
    
    // Builds a prefixed hash to mimic the behavior of eth_sign.
    function prefixed(bytes32 hash) internal pure returns (bytes32) {
        return keccak256(abi.encodePacked("\x19Ethereum Signed Message:\n32", hash));
    }

    /// @dev Moves `value` WERC10 token from caller's account to account (`to`).
    /// A transfer to `address(0)` triggers an ETH withdraw matching the sent WERC10 token in favor of caller.
    /// Emits {Transfer} event.
    /// Returns boolean value indicating whether operation succeeded.
    /// Requirements:
    ///   - caller account must have at least `value` WERC10 token.
    function transfer(address to, uint256 value) external override returns (bool) {
        require(to != address(0) || to != address(this));
        uint256 balance = balanceOf[msg.sender];
        require(balance >= value, "WERC10: transfer amount exceeds balance");

        balanceOf[msg.sender] = balance - value;
        balanceOf[to] += value;
        emit Transfer(msg.sender, to, value);
        
        return true;
    }

    /// @dev Moves `value` WERC10 token from account (`from`) to account (`to`) using allowance mechanism.
    /// `value` is then deducted from caller account's allowance, unless set to `type(uint256).max`.
    /// A transfer to `address(0)` triggers an ETH withdraw matching the sent WERC10 token in favor of caller.
    /// Emits {Approval} event to reflect reduced allowance `value` for caller account to spend from account (`from`),
    /// unless allowance is set to `type(uint256).max`
    /// Emits {Transfer} event.
    /// Returns boolean value indicating whether operation succeeded.
    /// Requirements:
    ///   - `from` account must have at least `value` balance of WERC10 token.
    ///   - `from` account must have approved caller to spend at least `value` of WERC10 token, unless `from` and caller are the same account.
    function transferFrom(address from, address to, uint256 value) external override returns (bool) {
        require(to != address(0) || to != address(this));
        if (from != msg.sender) {
            // _decreaseAllowance(from, msg.sender, value);
            uint256 allowed = allowance[from][msg.sender];
            if (allowed != type(uint256).max) {
                require(allowed >= value, "WERC10: request exceeds allowance");
                uint256 reduced = allowed - value;
                allowance[from][msg.sender] = reduced;
                emit Approval(from, msg.sender, reduced);
            }
        }
        
        uint256 balance = balanceOf[from];
        require(balance >= value, "WERC10: transfer amount exceeds balance");

        balanceOf[from] = balance - value;
        balanceOf[to] += value;
        emit Transfer(from, to, value);
        
        return true;
    }

    /// @dev Moves `value` WERC10 token from caller's account to account (`to`), 
    /// after which a call is executed to an ERC677-compliant contract with the `data` parameter.
    /// A transfer to `address(0)` triggers an ETH withdraw matching the sent WERC10 token in favor of caller.
    /// Emits {Transfer} event.
    /// Returns boolean value indicating whether operation succeeded.
    /// Requirements:
    ///   - caller account must have at least `value` WERC10 token.
    /// For more information on transferAndCall format, see https://github.com/ethereum/EIPs/issues/677.
    function transferAndCall(address to, uint value, bytes calldata data) external override returns (bool) {
        require(to != address(0) || to != address(this));
        
        uint256 balance = balanceOf[msg.sender];
        require(balance >= value, "WERC10: transfer amount exceeds balance");

        balanceOf[msg.sender] = balance - value;
        balanceOf[to] += value;
        emit Transfer(msg.sender, to, value);

        return ITransferReceiver(to).onTokenTransfer(msg.sender, value, data);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"uint8","name":"_decimals","type":"uint8"},{"internalType":"address","name":"_owner","type":"address"}],"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":"oldOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"},{"indexed":true,"internalType":"uint256","name":"effectiveTime","type":"uint256"}],"name":"LogChangeDCRMOwner","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"txhash","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"LogSwapin","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"bindaddr","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"LogSwapout","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"DOMAIN_SEPARATOR","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PERMIT_TYPEHASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"txhash","type":"bytes32"},{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Swapin","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"bindaddr","type":"address"}],"name":"Swapout","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"TRANSFER_TYPEHASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"approveAndCall","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"changeDCRMOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"nonces","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"target","type":"address"},{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"permit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"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":"value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"transferAndCall","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":"value","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"target","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"transferWithPermit","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"}]

60c06040523480156200001157600080fd5b5060405162003471380380620034718339818101604052810190620000379190620002ce565b83600090805190602001906200004f9291906200017e565b508260019080519060200190620000689291906200017e565b508160ff1660808160ff1660f81b8152505080600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055504260068190555060004690507f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f6000604051620000f991906200042a565b60405180910390206040518060400160405280600181526020017f31000000000000000000000000000000000000000000000000000000000000008152508051906020012083306040516020016200015695949392919062000443565b6040516020818303038152906040528051906020012060a081815250505050505050620006b9565b8280546200018c90620005aa565b90600052602060002090601f016020900481019282620001b05760008555620001fc565b82601f10620001cb57805160ff1916838001178555620001fc565b82800160010185558215620001fc579182015b82811115620001fb578251825591602001919060010190620001de565b5b5090506200020b91906200020f565b5090565b5b808211156200022a57600081600090555060010162000210565b5090565b6000620002456200023f84620004c9565b620004a0565b9050828152602081018484840111156200025e57600080fd5b6200026b84828562000574565b509392505050565b600081519050620002848162000685565b92915050565b600082601f8301126200029c57600080fd5b8151620002ae8482602086016200022e565b91505092915050565b600081519050620002c8816200069f565b92915050565b60008060008060808587031215620002e557600080fd5b600085015167ffffffffffffffff8111156200030057600080fd5b6200030e878288016200028a565b945050602085015167ffffffffffffffff8111156200032c57600080fd5b6200033a878288016200028a565b93505060406200034d87828801620002b7565b9250506060620003608782880162000273565b91505092959194509250565b62000377816200051f565b82525050565b620003888162000533565b82525050565b600081546200039d81620005aa565b620003a9818662000514565b94506001821660008114620003c75760018114620003d95762000410565b60ff1983168652818601935062000410565b620003e485620004ff565b60005b838110156200040857815481890152600182019150602081019050620003e7565b838801955050505b50505092915050565b62000424816200055d565b82525050565b60006200043882846200038e565b915081905092915050565b600060a0820190506200045a60008301886200037d565b6200046960208301876200037d565b6200047860408301866200037d565b62000487606083018562000419565b6200049660808301846200036c565b9695505050505050565b6000620004ac620004bf565b9050620004ba8282620005e0565b919050565b6000604051905090565b600067ffffffffffffffff821115620004e757620004e662000645565b5b620004f28262000674565b9050602081019050919050565b60008190508160005260206000209050919050565b600081905092915050565b60006200052c826200053d565b9050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60005b838110156200059457808201518184015260208101905062000577565b83811115620005a4576000848401525b50505050565b60006002820490506001821680620005c357607f821691505b60208210811415620005da57620005d962000616565b5b50919050565b620005eb8262000674565b810181811067ffffffffffffffff821117156200060d576200060c62000645565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b62000690816200051f565b81146200069c57600080fd5b50565b620006aa8162000567565b8114620006b657600080fd5b50565b60805160f81c60a051612d88620006e960003960008181610aa60152611b6001526000610a820152612d886000f3fe608060405234801561001057600080fd5b50600436106101365760003560e01c8063628d6cba116100b8578063a9059cbb1161007c578063a9059cbb1461037b578063b524f3a5146103ab578063cae9ca51146103db578063d505accf1461040b578063dd62ed3e14610427578063ec126c771461045757610136565b8063628d6cba146102af57806370a08231146102df5780637ecebe001461030f5780638da5cb5b1461033f57806395d89b411461035d57610136565b806330adf81f116100ff57806330adf81f146101f5578063313ce567146102135780633644e515146102315780634000aea01461024f578063605629d61461027f57610136565b8062bf26f41461013b57806306fdde0314610159578063095ea7b31461017757806318160ddd146101a757806323b872dd146101c5575b600080fd5b610143610487565b6040516101509190612663565b60405180910390f35b6101616104ab565b60405161016e9190612724565b60405180910390f35b610191600480360381019061018c919061220e565b610539565b60405161019e9190612648565b60405180910390f35b6101af61062b565b6040516101bc9190612846565b60405180910390f35b6101df60048036038101906101da9190612121565b610635565b6040516101ec9190612648565b60405180910390f35b6101fd610a5c565b60405161020a9190612663565b60405180910390f35b61021b610a80565b6040516102289190612861565b60405180910390f35b610239610aa4565b6040516102469190612663565b60405180910390f35b6102696004803603810190610264919061224a565b610ac8565b6040516102769190612648565b60405180910390f35b61029960048036038101906102949190612170565b610d67565b6040516102a69190612648565b60405180910390f35b6102c960048036038101906102c4919061232e565b611091565b6040516102d69190612648565b60405180910390f35b6102f960048036038101906102f491906120bc565b61117b565b6040516103069190612846565b60405180910390f35b610329600480360381019061032491906120bc565b611193565b6040516103369190612846565b60405180910390f35b6103476111ab565b60405161035491906125ed565b60405180910390f35b610365611209565b6040516103729190612724565b60405180910390f35b6103956004803603810190610390919061220e565b611297565b6040516103a29190612648565b60405180910390f35b6103c560048036038101906103c091906120bc565b6114a5565b6040516103d29190612648565b60405180910390f35b6103f560048036038101906103f0919061224a565b6116d4565b6040516104029190612648565b60405180910390f35b61042560048036038101906104209190612170565b611856565b005b610441600480360381019061043c91906120e5565b611a5b565b60405161044e9190612846565b60405180910390f35b610471600480360381019061046c91906122df565b611a80565b60405161047e9190612648565b60405180910390f35b7f42ce63790c28229c123925d83266e77c04d28784552ab68b350a9003226cbd5981565b600080546104b8906129df565b80601f01602080910402602001604051908101604052809291908181526020018280546104e4906129df565b80156105315780601f1061050657610100808354040283529160200191610531565b820191906000526020600020905b81548152906001019060200180831161051457829003601f168201915b505050505081565b600081600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516106199190612846565b60405180910390a36001905092915050565b6000600354905090565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158061069e57503073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b6106a757600080fd5b3373ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16146108bf576000600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146108bd57828110156107c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107bc906127e6565b60405180910390fd5b600083826107d3919061290a565b905080600860008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503373ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516108b39190612846565b60405180910390a3505b505b6000600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610946576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161093d90612826565b60405180910390fd5b8281610952919061290a565b600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555082600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546109e491906128b4565b925050819055508373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051610a489190612846565b60405180910390a360019150509392505050565b7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b60008073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16141580610b3157503073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b610b3a57600080fd5b6000600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905084811015610bc1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bb890612826565b60405180910390fd5b8481610bcd919061290a565b600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555084600260008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610c5f91906128b4565b925050819055508573ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef87604051610cc39190612846565b60405180910390a38573ffffffffffffffffffffffffffffffffffffffff1663a4c0ed36338787876040518563ffffffff1660e01b8152600401610d0a9493929190612608565b602060405180830381600087803b158015610d2457600080fd5b505af1158015610d38573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d5c91906122b6565b915050949350505050565b600084421115610dac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610da390612766565b60405180910390fd5b60007f42ce63790c28229c123925d83266e77c04d28784552ab68b350a9003226cbd59898989600760008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815480929190610e2290612a11565b919050558a604051602001610e3c9695949392919061267e565b604051602081830303815290604052805190602001209050610e618982878787611b5b565b80610e755750610e748982878787611c71565b5b610e7e57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff16141580610ee657503073ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff1614155b610eef57600080fd5b6000600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905087811015610f76576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f6d90612826565b60405180910390fd5b8781610f82919061290a565b600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555087600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461101491906128b4565b925050819055508873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8a6040516110789190612846565b60405180910390a3600192505050979650505050505050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611102576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110f990612786565b60405180910390fd5b61110c3384611d47565b8173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f6b616089d04950dc06c45c6dd787d657980543f89651aec47924752c7d16c888856040516111699190612846565b60405180910390a36001905092915050565b60026020528060005260406000206000915090505481565b60076020528060005260406000206000915090505481565b600060065442106111e057600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050611206565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690505b90565b60018054611216906129df565b80601f0160208091040260200160405190810160405280929190818152602001828054611242906129df565b801561128f5780601f106112645761010080835404028352916020019161128f565b820191906000526020600020905b81548152906001019060200180831161127257829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158061130057503073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b61130957600080fd5b6000600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611390576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161138790612826565b60405180910390fd5b828161139c919061290a565b600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555082600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461142e91906128b4565b925050819055508373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516114929190612846565b60405180910390a3600191505092915050565b60006114af6111ab565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461151c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611513906127a6565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561158c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158390612746565b60405180910390fd5b6115946111ab565b600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506202a3004261162491906128b4565b600681905550600654600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fe1968d4263a733e2597ef67ea6ad267343bba5f8bf0f99d85190e06b05d824d960405160405180910390a460019050919050565b600083600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925866040516117b49190612846565b60405180910390a38473ffffffffffffffffffffffffffffffffffffffff1662ba451f338686866040518563ffffffff1660e01b81526004016117fa9493929190612608565b602060405180830381600087803b15801561181457600080fd5b505af1158015611828573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061184c91906122b6565b9050949350505050565b83421115611899576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161189090612766565b60405180910390fd5b60007f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9888888600760008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081548092919061190f90612a11565b91905055896040516020016119299695949392919061267e565b60405160208183030381529060405280519060200120905061194e8882868686611b5b565b8061196257506119618882868686611c71565b5b61196b57600080fd5b85600860008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92588604051611a499190612846565b60405180910390a35050505050505050565b6008602052816000526040600020602052806000526040600020600091509150505481565b6000611a8a6111ab565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611af7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aee906127a6565b60405180910390fd5b611b018383611e90565b8273ffffffffffffffffffffffffffffffffffffffff16847f05d0634fe981be85c22e2942a880821b70095d84e152c3ea3c17a4e4250d9d6184604051611b489190612846565b60405180910390a3600190509392505050565b6000807f000000000000000000000000000000000000000000000000000000000000000086604051602001611b919291906125b6565b604051602081830303815290604052805190602001209050600060018287878760405160008152602001604052604051611bce94939291906126df565b6020604051602081039080840390855afa158015611bf0573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614158015611c6457508773ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b9250505095945050505050565b600080611c7d86611fd9565b9050600060018287878760405160008152602001604052604051611ca494939291906126df565b6020604051602081039080840390855afa158015611cc6573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614158015611d3a57508773ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b9250505095945050505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611db7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dae906127c6565b60405180910390fd5b80600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611e06919061290a565b925050819055508060036000828254611e1f919061290a565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611e849190612846565b60405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611f00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ef790612806565b60405180910390fd5b8060036000828254611f1291906128b4565b9250508190555080600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611f6891906128b4565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611fcd9190612846565b60405180910390a35050565b600081604051602001611fec9190612590565b604051602081830303815290604052805190602001209050919050565b60008135905061201881612cdf565b92915050565b60008151905061202d81612cf6565b92915050565b60008135905061204281612d0d565b92915050565b60008083601f84011261205a57600080fd5b8235905067ffffffffffffffff81111561207357600080fd5b60208301915083600182028301111561208b57600080fd5b9250929050565b6000813590506120a181612d24565b92915050565b6000813590506120b681612d3b565b92915050565b6000602082840312156120ce57600080fd5b60006120dc84828501612009565b91505092915050565b600080604083850312156120f857600080fd5b600061210685828601612009565b925050602061211785828601612009565b9150509250929050565b60008060006060848603121561213657600080fd5b600061214486828701612009565b935050602061215586828701612009565b925050604061216686828701612092565b9150509250925092565b600080600080600080600060e0888a03121561218b57600080fd5b60006121998a828b01612009565b97505060206121aa8a828b01612009565b96505060406121bb8a828b01612092565b95505060606121cc8a828b01612092565b94505060806121dd8a828b016120a7565b93505060a06121ee8a828b01612033565b92505060c06121ff8a828b01612033565b91505092959891949750929550565b6000806040838503121561222157600080fd5b600061222f85828601612009565b925050602061224085828601612092565b9150509250929050565b6000806000806060858703121561226057600080fd5b600061226e87828801612009565b945050602061227f87828801612092565b935050604085013567ffffffffffffffff81111561229c57600080fd5b6122a887828801612048565b925092505092959194509250565b6000602082840312156122c857600080fd5b60006122d68482850161201e565b91505092915050565b6000806000606084860312156122f457600080fd5b600061230286828701612033565b935050602061231386828701612009565b925050604061232486828701612092565b9150509250925092565b6000806040838503121561234157600080fd5b600061234f85828601612092565b925050602061236085828601612009565b9150509250929050565b6123738161293e565b82525050565b61238281612950565b82525050565b6123918161295c565b82525050565b6123a86123a38261295c565b612a5a565b82525050565b60006123ba8385612887565b93506123c783858461299d565b6123d083612ac2565b840190509392505050565b60006123e68261287c565b6123f08185612898565b93506124008185602086016129ac565b61240981612ac2565b840191505092915050565b6000612421601c836128a9565b915061242c82612ad3565b601c82019050919050565b60006124446002836128a9565b915061244f82612afc565b600282019050919050565b6000612467601d83612898565b915061247282612b25565b602082019050919050565b600061248a601683612898565b915061249582612b4e565b602082019050919050565b60006124ad602083612898565b91506124b882612b77565b602082019050919050565b60006124d0600a83612898565b91506124db82612ba0565b602082019050919050565b60006124f3602183612898565b91506124fe82612bc9565b604082019050919050565b6000612516602183612898565b915061252182612c18565b604082019050919050565b6000612539601f83612898565b915061254482612c67565b602082019050919050565b600061255c602783612898565b915061256782612c90565b604082019050919050565b61257b81612986565b82525050565b61258a81612990565b82525050565b600061259b82612414565b91506125a78284612397565b60208201915081905092915050565b60006125c182612437565b91506125cd8285612397565b6020820191506125dd8284612397565b6020820191508190509392505050565b6000602082019050612602600083018461236a565b92915050565b600060608201905061261d600083018761236a565b61262a6020830186612572565b818103604083015261263d8184866123ae565b905095945050505050565b600060208201905061265d6000830184612379565b92915050565b60006020820190506126786000830184612388565b92915050565b600060c0820190506126936000830189612388565b6126a0602083018861236a565b6126ad604083018761236a565b6126ba6060830186612572565b6126c76080830185612572565b6126d460a0830184612572565b979650505050505050565b60006080820190506126f46000830187612388565b6127016020830186612581565b61270e6040830185612388565b61271b6060830184612388565b95945050505050565b6000602082019050818103600083015261273e81846123db565b905092915050565b6000602082019050818103600083015261275f8161245a565b9050919050565b6000602082019050818103600083015261277f8161247d565b9050919050565b6000602082019050818103600083015261279f816124a0565b9050919050565b600060208201905081810360008301526127bf816124c3565b9050919050565b600060208201905081810360008301526127df816124e6565b9050919050565b600060208201905081810360008301526127ff81612509565b9050919050565b6000602082019050818103600083015261281f8161252c565b9050919050565b6000602082019050818103600083015261283f8161254f565b9050919050565b600060208201905061285b6000830184612572565b92915050565b60006020820190506128766000830184612581565b92915050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b60006128bf82612986565b91506128ca83612986565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156128ff576128fe612a64565b5b828201905092915050565b600061291582612986565b915061292083612986565b92508282101561293357612932612a64565b5b828203905092915050565b600061294982612966565b9050919050565b60008115159050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b82818337600083830152505050565b60005b838110156129ca5780820151818401526020810190506129af565b838111156129d9576000848401525b50505050565b600060028204905060018216806129f757607f821691505b60208210811415612a0b57612a0a612a93565b5b50919050565b6000612a1c82612986565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415612a4f57612a4e612a64565b5b600182019050919050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000601f19601f8301169050919050565b7f19457468657265756d205369676e6564204d6573736167653a0a333200000000600082015250565b7f1901000000000000000000000000000000000000000000000000000000000000600082015250565b7f6e6577206f776e657220697320746865207a65726f2061646472657373000000600082015250565b7f5745524331303a2045787069726564207065726d697400000000000000000000600082015250565b7f62696e64206164647265737320697320746865207a65726f2061646472657373600082015250565b7f6f6e6c79206f776e657200000000000000000000000000000000000000000000600082015250565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f5745524331303a2072657175657374206578636565647320616c6c6f77616e6360008201527f6500000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b7f5745524331303a207472616e7366657220616d6f756e7420657863656564732060008201527f62616c616e636500000000000000000000000000000000000000000000000000602082015250565b612ce88161293e565b8114612cf357600080fd5b50565b612cff81612950565b8114612d0a57600080fd5b50565b612d168161295c565b8114612d2157600080fd5b50565b612d2d81612986565b8114612d3857600080fd5b50565b612d4481612990565b8114612d4f57600080fd5b5056fea264697066735822122016fb8ee802446d7d58ac13b673724a1c0b1dbcf47da480579ef04e57773d2ee864736f6c63430008010033000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000012000000000000000000000000c564ee9f21ed8a2d8e7e76c085740d5e4c5fafbe0000000000000000000000000000000000000000000000000000000000000008457468657265756d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000034554480000000000000000000000000000000000000000000000000000000000

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000012000000000000000000000000c564ee9f21ed8a2d8e7e76c085740d5e4c5fafbe0000000000000000000000000000000000000000000000000000000000000008457468657265756d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000034554480000000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : _name (string): Ethereum
Arg [1] : _symbol (string): ETH
Arg [2] : _decimals (uint8): 18
Arg [3] : _owner (address): 0xc564ee9f21ed8a2d8e7e76c085740d5e4c5fafbe

-----Encoded View---------------
8 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000c0
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000012
Arg [3] : 000000000000000000000000c564ee9f21ed8a2d8e7e76c085740d5e4c5fafbe
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000008
Arg [5] : 457468657265756d000000000000000000000000000000000000000000000000
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [7] : 4554480000000000000000000000000000000000000000000000000000000000


Deployed ByteCode Sourcemap

8675:13270:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8976:136;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8739:18;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13742:265;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12272:102;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19888:927;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8832:137;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8791:32;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9119:41;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21419:523;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16316:929;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10373:273;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9232:54;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10918:51;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9563:182;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8764:20;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18593:438;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9763:384;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14420:364;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15601:707;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11131:75;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10155:210;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8976:136;9020:92;8976:136;:::o;8739:18::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;13742:265::-;13818:4;13918:5;13885:9;:21;13895:10;13885:21;;;;;;;;;;;;;;;:30;13907:7;13885:30;;;;;;;;;;;;;;;:38;;;;13960:7;13939:36;;13948:10;13939:36;;;13969:5;13939:36;;;;;;:::i;:::-;;;;;;;;13995:4;13988:11;;13742:265;;;;:::o;12272:102::-;12327:7;12354:12;;12347:19;;12272:102;:::o;19888:927::-;19978:4;20017:1;20003:16;;:2;:16;;;;:39;;;;20037:4;20023:19;;:2;:19;;;;20003:39;19995:48;;;;;;20066:10;20058:18;;:4;:18;;;20054:469;;20154:15;20172:9;:15;20182:4;20172:15;;;;;;;;;;;;;;;:27;20188:10;20172:27;;;;;;;;;;;;;;;;20154:45;;20229:17;20218:7;:28;20214:298;;20286:5;20275:7;:16;;20267:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;20348:15;20376:5;20366:7;:15;;;;:::i;:::-;20348:33;;20430:7;20400:9;:15;20410:4;20400:15;;;;;;;;;;;;;;;:27;20416:10;20400:27;;;;;;;;;;;;;;;:37;;;;20476:10;20461:35;;20470:4;20461:35;;;20488:7;20461:35;;;;;;:::i;:::-;;;;;;;;20214:298;;20054:469;;20543:15;20561:9;:15;20571:4;20561:15;;;;;;;;;;;;;;;;20543:33;;20606:5;20595:7;:16;;20587:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20696:5;20686:7;:15;;;;:::i;:::-;20668:9;:15;20678:4;20668:15;;;;;;;;;;;;;;;:33;;;;20729:5;20712:9;:13;20722:2;20712:13;;;;;;;;;;;;;;;;:22;;;;;;;:::i;:::-;;;;;;;;20765:2;20750:25;;20759:4;20750:25;;;20769:5;20750:25;;;;;;:::i;:::-;;;;;;;;20803:4;20796:11;;;19888:927;;;;;:::o;8832:137::-;8874:95;8832:137;:::o;8791:32::-;;;:::o;9119:41::-;;;:::o;21419:523::-;21516:4;21555:1;21541:16;;:2;:16;;;;:39;;;;21575:4;21561:19;;:2;:19;;;;21541:39;21533:48;;;;;;21602:15;21620:9;:21;21630:10;21620:21;;;;;;;;;;;;;;;;21602:39;;21671:5;21660:7;:16;;21652:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21767:5;21757:7;:15;;;;:::i;:::-;21733:9;:21;21743:10;21733:21;;;;;;;;;;;;;;;:39;;;;21800:5;21783:9;:13;21793:2;21783:13;;;;;;;;;;;;;;;;:22;;;;;;;:::i;:::-;;;;;;;;21842:2;21821:31;;21830:10;21821:31;;;21846:5;21821:31;;;;;;:::i;:::-;;;;;;;;21890:2;21872:37;;;21910:10;21922:5;21929:4;;21872:62;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21865:69;;;21419:523;;;;;;:::o;16316:929::-;16454:4;16498:8;16479:15;:27;;16471:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;16546:18;9020:92;16656:6;16681:2;16702:5;16726:6;:14;16733:6;16726:14;;;;;;;;;;;;;;;;:16;;;;;;;;;:::i;:::-;;;;;16761:8;16591:179;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;16567:204;;;;;;16546:225;;16792:41;16805:6;16813:10;16825:1;16828;16831;16792:12;:41::i;:::-;:92;;;;16837:47;16856:6;16864:10;16876:1;16879;16882;16837:18;:47::i;:::-;16792:92;16784:101;;;;;;16920:1;16906:16;;:2;:16;;;;:39;;;;16940:4;16926:19;;:2;:19;;;;16906:39;16898:48;;;;;;16967:15;16985:9;:17;16995:6;16985:17;;;;;;;;;;;;;;;;16967:35;;17032:5;17021:7;:16;;17013:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17124:5;17114:7;:15;;;;:::i;:::-;17094:9;:17;17104:6;17094:17;;;;;;;;;;;;;;;:35;;;;17157:5;17140:9;:13;17150:2;17140:13;;;;;;;;;;;;;;;;:22;;;;;;;:::i;:::-;;;;;;;;17195:2;17178:27;;17187:6;17178:27;;;17199:5;17178:27;;;;;;:::i;:::-;;;;;;;;17233:4;17226:11;;;;16316:929;;;;;;;;;:::o;10373:273::-;10440:4;10485:1;10465:22;;:8;:22;;;;10457:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;10535:25;10541:10;10553:6;10535:5;:25::i;:::-;10599:8;10576:40;;10587:10;10576:40;;;10609:6;10576:40;;;;;;:::i;:::-;;;;;;;;10634:4;10627:11;;10373:273;;;;:::o;9232:54::-;;;;;;;;;;;;;;;;;:::o;10918:51::-;;;;;;;;;;;;;;;;;:::o;9563:182::-;9601:7;9644:22;;9625:15;:41;9621:90;;9690:9;;;;;;;;;;;9683:16;;;;9621:90;9728:9;;;;;;;;;;;9721:16;;9563:182;;:::o;8764:20::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;18593:438::-;18665:4;18704:1;18690:16;;:2;:16;;;;:39;;;;18724:4;18710:19;;:2;:19;;;;18690:39;18682:48;;;;;;18741:15;18759:9;:21;18769:10;18759:21;;;;;;;;;;;;;;;;18741:39;;18810:5;18799:7;:16;;18791:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18906:5;18896:7;:15;;;;:::i;:::-;18872:9;:21;18882:10;18872:21;;;;;;;;;;;;;;;:39;;;;18939:5;18922:9;:13;18932:2;18922:13;;;;;;;;;;;;;;;;:22;;;;;;;:::i;:::-;;;;;;;;18981:2;18960:31;;18969:10;18960:31;;;18985:5;18960:31;;;;;;:::i;:::-;;;;;;;;19019:4;19012:11;;;18593:438;;;;:::o;9763:384::-;9832:4;9509:7;:5;:7::i;:::-;9495:21;;:10;:21;;;9487:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;9877:1:::1;9857:22;;:8;:22;;;;9849:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;9936:7;:5;:7::i;:::-;9924:9;;:19;;;;;;;;;;;;;;;;;;9966:8;9954:9;;:20;;;;;;;;;;;;;;;;;;10028:9;10010:15;:27;;;;:::i;:::-;9985:22;:52;;;;10094:22;;10083:9;;;;;;;;;;;10053:64;;10072:9;;;;;;;;;;;10053:64;;;;;;;;;;;;10135:4;10128:11;;9763:384:::0;;;:::o;14420:364::-;14524:4;14624:5;14591:9;:21;14601:10;14591:21;;;;;;;;;;;;;;;:30;14613:7;14591:30;;;;;;;;;;;;;;;:38;;;;14666:7;14645:36;;14654:10;14645:36;;;14675:5;14645:36;;;;;;:::i;:::-;;;;;;;;14727:7;14709:42;;;14752:10;14764:5;14771:4;;14709:67;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14702:74;;14420:364;;;;;;:::o;15601:707::-;15770:8;15751:15;:27;;15743:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;15818:18;8874:95;15926:6;15951:7;15977:5;16001:6;:14;16008:6;16001:14;;;;;;;;;;;;;;;;:16;;;;;;;;;:::i;:::-;;;;;16036:8;15863:182;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;15839:207;;;;;;15818:228;;16067:41;16080:6;16088:10;16100:1;16103;16106;16067:12;:41::i;:::-;:92;;;;16112:47;16131:6;16139:10;16151:1;16154;16157;16112:18;:47::i;:::-;16067:92;16059:101;;;;;;16247:5;16218:9;:17;16228:6;16218:17;;;;;;;;;;;;;;;:26;16236:7;16218:26;;;;;;;;;;;;;;;:34;;;;16285:7;16268:32;;16277:6;16268:32;;;16294:5;16268:32;;;;;;:::i;:::-;;;;;;;;15601:707;;;;;;;;:::o;11131:75::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;10155:210::-;10246:4;9509:7;:5;:7::i;:::-;9495:21;;:10;:21;;;9487:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;10263:22:::1;10269:7;10278:6;10263:5;:22::i;:::-;10319:7;10301:34;;10311:6;10301:34;10328:6;10301:34;;;;;;:::i;:::-;;;;;;;;10353:4;10346:11;;10155:210:::0;;;;;:::o;17257:399::-;17369:4;17386:12;17489:16;17524:10;17425:110;;;;;;;;;:::i;:::-;;;;;;;;;;;;;17401:135;;;;;;17386:150;;17547:14;17564:24;17574:4;17580:1;17583;17586;17564:24;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17547:41;;17625:1;17607:20;;:6;:20;;;;:40;;;;;17641:6;17631:16;;:6;:16;;;17607:40;17599:49;;;;17257:399;;;;;;;:::o;17668:290::-;17786:4;17803:12;17818:20;17827:10;17818:8;:20::i;:::-;17803:35;;17849:14;17866:24;17876:4;17882:1;17885;17888;17866:24;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17849:41;;17927:1;17909:20;;:6;:20;;;;:40;;;;;17943:6;17933:16;;:6;:16;;;17909:40;17901:49;;;;17668:290;;;;;;;:::o;13259:270::-;13354:1;13335:21;;:7;:21;;;;13327:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;13429:6;13407:9;:18;13417:7;13407:18;;;;;;;;;;;;;;;;:28;;;;;;;:::i;:::-;;;;;;;;13462:6;13446:12;;:22;;;;;;;:::i;:::-;;;;;;;;13510:1;13484:37;;13493:7;13484:37;;;13514:6;13484:37;;;;;;:::i;:::-;;;;;;;;13259:270;;:::o;12659:268::-;12754:1;12735:21;;:7;:21;;;;12727:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;12821:6;12805:12;;:22;;;;;;;:::i;:::-;;;;;;;;12860:6;12838:9;:18;12848:7;12838:18;;;;;;;;;;;;;;;;:28;;;;;;;:::i;:::-;;;;;;;;12903:7;12882:37;;12899:1;12882:37;;;12912:6;12882:37;;;;;;:::i;:::-;;;;;;;;12659:268;;:::o;18036:159::-;18091:7;18181:4;18128:58;;;;;;;;:::i;:::-;;;;;;;;;;;;;18118:69;;;;;;18111:76;;18036:159;;;:::o;7:139:1:-;;91:6;78:20;69:29;;107:33;134:5;107:33;:::i;:::-;59:87;;;;:::o;152:137::-;;237:6;231:13;222:22;;253:30;277:5;253:30;:::i;:::-;212:77;;;;:::o;295:139::-;;379:6;366:20;357:29;;395:33;422:5;395:33;:::i;:::-;347:87;;;;:::o;453:351::-;;;570:3;563:4;555:6;551:17;547:27;537:2;;588:1;585;578:12;537:2;624:6;611:20;601:30;;654:18;646:6;643:30;640:2;;;686:1;683;676:12;640:2;723:4;715:6;711:17;699:29;;777:3;769:4;761:6;757:17;747:8;743:32;740:41;737:2;;;794:1;791;784:12;737:2;527:277;;;;;:::o;810:139::-;;894:6;881:20;872:29;;910:33;937:5;910:33;:::i;:::-;862:87;;;;:::o;955:135::-;;1037:6;1024:20;1015:29;;1053:31;1078:5;1053:31;:::i;:::-;1005:85;;;;:::o;1096:262::-;;1204:2;1192:9;1183:7;1179:23;1175:32;1172:2;;;1220:1;1217;1210:12;1172:2;1263:1;1288:53;1333:7;1324:6;1313:9;1309:22;1288:53;:::i;:::-;1278:63;;1234:117;1162:196;;;;:::o;1364:407::-;;;1489:2;1477:9;1468:7;1464:23;1460:32;1457:2;;;1505:1;1502;1495:12;1457:2;1548:1;1573:53;1618:7;1609:6;1598:9;1594:22;1573:53;:::i;:::-;1563:63;;1519:117;1675:2;1701:53;1746:7;1737:6;1726:9;1722:22;1701:53;:::i;:::-;1691:63;;1646:118;1447:324;;;;;:::o;1777:552::-;;;;1919:2;1907:9;1898:7;1894:23;1890:32;1887:2;;;1935:1;1932;1925:12;1887:2;1978:1;2003:53;2048:7;2039:6;2028:9;2024:22;2003:53;:::i;:::-;1993:63;;1949:117;2105:2;2131:53;2176:7;2167:6;2156:9;2152:22;2131:53;:::i;:::-;2121:63;;2076:118;2233:2;2259:53;2304:7;2295:6;2284:9;2280:22;2259:53;:::i;:::-;2249:63;;2204:118;1877:452;;;;;:::o;2335:1132::-;;;;;;;;2543:3;2531:9;2522:7;2518:23;2514:33;2511:2;;;2560:1;2557;2550:12;2511:2;2603:1;2628:53;2673:7;2664:6;2653:9;2649:22;2628:53;:::i;:::-;2618:63;;2574:117;2730:2;2756:53;2801:7;2792:6;2781:9;2777:22;2756:53;:::i;:::-;2746:63;;2701:118;2858:2;2884:53;2929:7;2920:6;2909:9;2905:22;2884:53;:::i;:::-;2874:63;;2829:118;2986:2;3012:53;3057:7;3048:6;3037:9;3033:22;3012:53;:::i;:::-;3002:63;;2957:118;3114:3;3141:51;3184:7;3175:6;3164:9;3160:22;3141:51;:::i;:::-;3131:61;;3085:117;3241:3;3268:53;3313:7;3304:6;3293:9;3289:22;3268:53;:::i;:::-;3258:63;;3212:119;3370:3;3397:53;3442:7;3433:6;3422:9;3418:22;3397:53;:::i;:::-;3387:63;;3341:119;2501:966;;;;;;;;;;:::o;3473:407::-;;;3598:2;3586:9;3577:7;3573:23;3569:32;3566:2;;;3614:1;3611;3604:12;3566:2;3657:1;3682:53;3727:7;3718:6;3707:9;3703:22;3682:53;:::i;:::-;3672:63;;3628:117;3784:2;3810:53;3855:7;3846:6;3835:9;3831:22;3810:53;:::i;:::-;3800:63;;3755:118;3556:324;;;;;:::o;3886:683::-;;;;;4047:2;4035:9;4026:7;4022:23;4018:32;4015:2;;;4063:1;4060;4053:12;4015:2;4106:1;4131:53;4176:7;4167:6;4156:9;4152:22;4131:53;:::i;:::-;4121:63;;4077:117;4233:2;4259:53;4304:7;4295:6;4284:9;4280:22;4259:53;:::i;:::-;4249:63;;4204:118;4389:2;4378:9;4374:18;4361:32;4420:18;4412:6;4409:30;4406:2;;;4452:1;4449;4442:12;4406:2;4488:64;4544:7;4535:6;4524:9;4520:22;4488:64;:::i;:::-;4470:82;;;;4332:230;4005:564;;;;;;;:::o;4575:278::-;;4691:2;4679:9;4670:7;4666:23;4662:32;4659:2;;;4707:1;4704;4697:12;4659:2;4750:1;4775:61;4828:7;4819:6;4808:9;4804:22;4775:61;:::i;:::-;4765:71;;4721:125;4649:204;;;;:::o;4859:552::-;;;;5001:2;4989:9;4980:7;4976:23;4972:32;4969:2;;;5017:1;5014;5007:12;4969:2;5060:1;5085:53;5130:7;5121:6;5110:9;5106:22;5085:53;:::i;:::-;5075:63;;5031:117;5187:2;5213:53;5258:7;5249:6;5238:9;5234:22;5213:53;:::i;:::-;5203:63;;5158:118;5315:2;5341:53;5386:7;5377:6;5366:9;5362:22;5341:53;:::i;:::-;5331:63;;5286:118;4959:452;;;;;:::o;5417:407::-;;;5542:2;5530:9;5521:7;5517:23;5513:32;5510:2;;;5558:1;5555;5548:12;5510:2;5601:1;5626:53;5671:7;5662:6;5651:9;5647:22;5626:53;:::i;:::-;5616:63;;5572:117;5728:2;5754:53;5799:7;5790:6;5779:9;5775:22;5754:53;:::i;:::-;5744:63;;5699:118;5500:324;;;;;:::o;5830:118::-;5917:24;5935:5;5917:24;:::i;:::-;5912:3;5905:37;5895:53;;:::o;5954:109::-;6035:21;6050:5;6035:21;:::i;:::-;6030:3;6023:34;6013:50;;:::o;6069:118::-;6156:24;6174:5;6156:24;:::i;:::-;6151:3;6144:37;6134:53;;:::o;6193:157::-;6298:45;6318:24;6336:5;6318:24;:::i;:::-;6298:45;:::i;:::-;6293:3;6286:58;6276:74;;:::o;6378:301::-;;6495:70;6558:6;6553:3;6495:70;:::i;:::-;6488:77;;6575:43;6611:6;6606:3;6599:5;6575:43;:::i;:::-;6643:29;6665:6;6643:29;:::i;:::-;6638:3;6634:39;6627:46;;6478:201;;;;;:::o;6685:364::-;;6801:39;6834:5;6801:39;:::i;:::-;6856:71;6920:6;6915:3;6856:71;:::i;:::-;6849:78;;6936:52;6981:6;6976:3;6969:4;6962:5;6958:16;6936:52;:::i;:::-;7013:29;7035:6;7013:29;:::i;:::-;7008:3;7004:39;6997:46;;6777:272;;;;;:::o;7055:402::-;;7236:85;7318:2;7313:3;7236:85;:::i;:::-;7229:92;;7330:93;7419:3;7330:93;:::i;:::-;7448:2;7443:3;7439:12;7432:19;;7219:238;;;:::o;7463:400::-;;7644:84;7726:1;7721:3;7644:84;:::i;:::-;7637:91;;7737:93;7826:3;7737:93;:::i;:::-;7855:1;7850:3;7846:11;7839:18;;7627:236;;;:::o;7869:366::-;;8032:67;8096:2;8091:3;8032:67;:::i;:::-;8025:74;;8108:93;8197:3;8108:93;:::i;:::-;8226:2;8221:3;8217:12;8210:19;;8015:220;;;:::o;8241:366::-;;8404:67;8468:2;8463:3;8404:67;:::i;:::-;8397:74;;8480:93;8569:3;8480:93;:::i;:::-;8598:2;8593:3;8589:12;8582:19;;8387:220;;;:::o;8613:366::-;;8776:67;8840:2;8835:3;8776:67;:::i;:::-;8769:74;;8852:93;8941:3;8852:93;:::i;:::-;8970:2;8965:3;8961:12;8954:19;;8759:220;;;:::o;8985:366::-;;9148:67;9212:2;9207:3;9148:67;:::i;:::-;9141:74;;9224:93;9313:3;9224:93;:::i;:::-;9342:2;9337:3;9333:12;9326:19;;9131:220;;;:::o;9357:366::-;;9520:67;9584:2;9579:3;9520:67;:::i;:::-;9513:74;;9596:93;9685:3;9596:93;:::i;:::-;9714:2;9709:3;9705:12;9698:19;;9503:220;;;:::o;9729:366::-;;9892:67;9956:2;9951:3;9892:67;:::i;:::-;9885:74;;9968:93;10057:3;9968:93;:::i;:::-;10086:2;10081:3;10077:12;10070:19;;9875:220;;;:::o;10101:366::-;;10264:67;10328:2;10323:3;10264:67;:::i;:::-;10257:74;;10340:93;10429:3;10340:93;:::i;:::-;10458:2;10453:3;10449:12;10442:19;;10247:220;;;:::o;10473:366::-;;10636:67;10700:2;10695:3;10636:67;:::i;:::-;10629:74;;10712:93;10801:3;10712:93;:::i;:::-;10830:2;10825:3;10821:12;10814:19;;10619:220;;;:::o;10845:118::-;10932:24;10950:5;10932:24;:::i;:::-;10927:3;10920:37;10910:53;;:::o;10969:112::-;11052:22;11068:5;11052:22;:::i;:::-;11047:3;11040:35;11030:51;;:::o;11087:522::-;;11322:148;11466:3;11322:148;:::i;:::-;11315:155;;11480:75;11551:3;11542:6;11480:75;:::i;:::-;11580:2;11575:3;11571:12;11564:19;;11600:3;11593:10;;11304:305;;;;:::o;11615:663::-;;11878:148;12022:3;11878:148;:::i;:::-;11871:155;;12036:75;12107:3;12098:6;12036:75;:::i;:::-;12136:2;12131:3;12127:12;12120:19;;12149:75;12220:3;12211:6;12149:75;:::i;:::-;12249:2;12244:3;12240:12;12233:19;;12269:3;12262:10;;11860:418;;;;;:::o;12284:222::-;;12415:2;12404:9;12400:18;12392:26;;12428:71;12496:1;12485:9;12481:17;12472:6;12428:71;:::i;:::-;12382:124;;;;:::o;12512:549::-;;12727:2;12716:9;12712:18;12704:26;;12740:71;12808:1;12797:9;12793:17;12784:6;12740:71;:::i;:::-;12821:72;12889:2;12878:9;12874:18;12865:6;12821:72;:::i;:::-;12940:9;12934:4;12930:20;12925:2;12914:9;12910:18;12903:48;12968:86;13049:4;13040:6;13032;12968:86;:::i;:::-;12960:94;;12694:367;;;;;;;:::o;13067:210::-;;13192:2;13181:9;13177:18;13169:26;;13205:65;13267:1;13256:9;13252:17;13243:6;13205:65;:::i;:::-;13159:118;;;;:::o;13283:222::-;;13414:2;13403:9;13399:18;13391:26;;13427:71;13495:1;13484:9;13480:17;13471:6;13427:71;:::i;:::-;13381:124;;;;:::o;13511:775::-;;13782:3;13771:9;13767:19;13759:27;;13796:71;13864:1;13853:9;13849:17;13840:6;13796:71;:::i;:::-;13877:72;13945:2;13934:9;13930:18;13921:6;13877:72;:::i;:::-;13959;14027:2;14016:9;14012:18;14003:6;13959:72;:::i;:::-;14041;14109:2;14098:9;14094:18;14085:6;14041:72;:::i;:::-;14123:73;14191:3;14180:9;14176:19;14167:6;14123:73;:::i;:::-;14206;14274:3;14263:9;14259:19;14250:6;14206:73;:::i;:::-;13749:537;;;;;;;;;:::o;14292:545::-;;14503:3;14492:9;14488:19;14480:27;;14517:71;14585:1;14574:9;14570:17;14561:6;14517:71;:::i;:::-;14598:68;14662:2;14651:9;14647:18;14638:6;14598:68;:::i;:::-;14676:72;14744:2;14733:9;14729:18;14720:6;14676:72;:::i;:::-;14758;14826:2;14815:9;14811:18;14802:6;14758:72;:::i;:::-;14470:367;;;;;;;:::o;14843:313::-;;14994:2;14983:9;14979:18;14971:26;;15043:9;15037:4;15033:20;15029:1;15018:9;15014:17;15007:47;15071:78;15144:4;15135:6;15071:78;:::i;:::-;15063:86;;14961:195;;;;:::o;15162:419::-;;15366:2;15355:9;15351:18;15343:26;;15415:9;15409:4;15405:20;15401:1;15390:9;15386:17;15379:47;15443:131;15569:4;15443:131;:::i;:::-;15435:139;;15333:248;;;:::o;15587:419::-;;15791:2;15780:9;15776:18;15768:26;;15840:9;15834:4;15830:20;15826:1;15815:9;15811:17;15804:47;15868:131;15994:4;15868:131;:::i;:::-;15860:139;;15758:248;;;:::o;16012:419::-;;16216:2;16205:9;16201:18;16193:26;;16265:9;16259:4;16255:20;16251:1;16240:9;16236:17;16229:47;16293:131;16419:4;16293:131;:::i;:::-;16285:139;;16183:248;;;:::o;16437:419::-;;16641:2;16630:9;16626:18;16618:26;;16690:9;16684:4;16680:20;16676:1;16665:9;16661:17;16654:47;16718:131;16844:4;16718:131;:::i;:::-;16710:139;;16608:248;;;:::o;16862:419::-;;17066:2;17055:9;17051:18;17043:26;;17115:9;17109:4;17105:20;17101:1;17090:9;17086:17;17079:47;17143:131;17269:4;17143:131;:::i;:::-;17135:139;;17033:248;;;:::o;17287:419::-;;17491:2;17480:9;17476:18;17468:26;;17540:9;17534:4;17530:20;17526:1;17515:9;17511:17;17504:47;17568:131;17694:4;17568:131;:::i;:::-;17560:139;;17458:248;;;:::o;17712:419::-;;17916:2;17905:9;17901:18;17893:26;;17965:9;17959:4;17955:20;17951:1;17940:9;17936:17;17929:47;17993:131;18119:4;17993:131;:::i;:::-;17985:139;;17883:248;;;:::o;18137:419::-;;18341:2;18330:9;18326:18;18318:26;;18390:9;18384:4;18380:20;18376:1;18365:9;18361:17;18354:47;18418:131;18544:4;18418:131;:::i;:::-;18410:139;;18308:248;;;:::o;18562:222::-;;18693:2;18682:9;18678:18;18670:26;;18706:71;18774:1;18763:9;18759:17;18750:6;18706:71;:::i;:::-;18660:124;;;;:::o;18790:214::-;;18917:2;18906:9;18902:18;18894:26;;18930:67;18994:1;18983:9;18979:17;18970:6;18930:67;:::i;:::-;18884:120;;;;:::o;19010:99::-;;19096:5;19090:12;19080:22;;19069:40;;;:::o;19115:168::-;;19232:6;19227:3;19220:19;19272:4;19267:3;19263:14;19248:29;;19210:73;;;;:::o;19289:169::-;;19407:6;19402:3;19395:19;19447:4;19442:3;19438:14;19423:29;;19385:73;;;;:::o;19464:148::-;;19603:3;19588:18;;19578:34;;;;:::o;19618:305::-;;19677:20;19695:1;19677:20;:::i;:::-;19672:25;;19711:20;19729:1;19711:20;:::i;:::-;19706:25;;19865:1;19797:66;19793:74;19790:1;19787:81;19784:2;;;19871:18;;:::i;:::-;19784:2;19915:1;19912;19908:9;19901:16;;19662:261;;;;:::o;19929:191::-;;19989:20;20007:1;19989:20;:::i;:::-;19984:25;;20023:20;20041:1;20023:20;:::i;:::-;20018:25;;20062:1;20059;20056:8;20053:2;;;20067:18;;:::i;:::-;20053:2;20112:1;20109;20105:9;20097:17;;19974:146;;;;:::o;20126:96::-;;20192:24;20210:5;20192:24;:::i;:::-;20181:35;;20171:51;;;:::o;20228:90::-;;20305:5;20298:13;20291:21;20280:32;;20270:48;;;:::o;20324:77::-;;20390:5;20379:16;;20369:32;;;:::o;20407:126::-;;20484:42;20477:5;20473:54;20462:65;;20452:81;;;:::o;20539:77::-;;20605:5;20594:16;;20584:32;;;:::o;20622:86::-;;20697:4;20690:5;20686:16;20675:27;;20665:43;;;:::o;20714:154::-;20798:6;20793:3;20788;20775:30;20860:1;20851:6;20846:3;20842:16;20835:27;20765:103;;;:::o;20874:307::-;20942:1;20952:113;20966:6;20963:1;20960:13;20952:113;;;21051:1;21046:3;21042:11;21036:18;21032:1;21027:3;21023:11;21016:39;20988:2;20985:1;20981:10;20976:15;;20952:113;;;21083:6;21080:1;21077:13;21074:2;;;21163:1;21154:6;21149:3;21145:16;21138:27;21074:2;20923:258;;;;:::o;21187:320::-;;21268:1;21262:4;21258:12;21248:22;;21315:1;21309:4;21305:12;21336:18;21326:2;;21392:4;21384:6;21380:17;21370:27;;21326:2;21454;21446:6;21443:14;21423:18;21420:38;21417:2;;;21473:18;;:::i;:::-;21417:2;21238:269;;;;:::o;21513:233::-;;21575:24;21593:5;21575:24;:::i;:::-;21566:33;;21621:66;21614:5;21611:77;21608:2;;;21691:18;;:::i;:::-;21608:2;21738:1;21731:5;21727:13;21720:20;;21556:190;;;:::o;21752:79::-;;21820:5;21809:16;;21799:32;;;:::o;21837:180::-;21885:77;21882:1;21875:88;21982:4;21979:1;21972:15;22006:4;22003:1;21996:15;22023:180;22071:77;22068:1;22061:88;22168:4;22165:1;22158:15;22192:4;22189:1;22182:15;22209:102;;22301:2;22297:7;22292:2;22285:5;22281:14;22277:28;22267:38;;22257:54;;;:::o;22317:214::-;22457:66;22453:1;22445:6;22441:14;22434:90;22423:108;:::o;22537:214::-;22677:66;22673:1;22665:6;22661:14;22654:90;22643:108;:::o;22757:179::-;22897:31;22893:1;22885:6;22881:14;22874:55;22863:73;:::o;22942:172::-;23082:24;23078:1;23070:6;23066:14;23059:48;23048:66;:::o;23120:182::-;23260:34;23256:1;23248:6;23244:14;23237:58;23226:76;:::o;23308:160::-;23448:12;23444:1;23436:6;23432:14;23425:36;23414:54;:::o;23474:220::-;23614:34;23610:1;23602:6;23598:14;23591:58;23683:3;23678:2;23670:6;23666:15;23659:28;23580:114;:::o;23700:220::-;23840:34;23836:1;23828:6;23824:14;23817:58;23909:3;23904:2;23896:6;23892:15;23885:28;23806:114;:::o;23926:181::-;24066:33;24062:1;24054:6;24050:14;24043:57;24032:75;:::o;24113:226::-;24253:34;24249:1;24241:6;24237:14;24230:58;24322:9;24317:2;24309:6;24305:15;24298:34;24219:120;:::o;24345:122::-;24418:24;24436:5;24418:24;:::i;:::-;24411:5;24408:35;24398:2;;24457:1;24454;24447:12;24398:2;24388:79;:::o;24473:116::-;24543:21;24558:5;24543:21;:::i;:::-;24536:5;24533:32;24523:2;;24579:1;24576;24569:12;24523:2;24513:76;:::o;24595:122::-;24668:24;24686:5;24668:24;:::i;:::-;24661:5;24658:35;24648:2;;24707:1;24704;24697:12;24648:2;24638:79;:::o;24723:122::-;24796:24;24814:5;24796:24;:::i;:::-;24789:5;24786:35;24776:2;;24835:1;24832;24825:12;24776:2;24766:79;:::o;24851:118::-;24922:22;24938:5;24922:22;:::i;:::-;24915:5;24912:33;24902:2;;24959:1;24956;24949:12;24902:2;24892:77;:::o

Swarm Source

ipfs://16fb8ee802446d7d58ac13b673724a1c0b1dbcf47da480579ef04e57773d2ee8
Block Transaction Gas Used Reward
Age Block Fee Address BC Fee Address Voting Power Jailed Incoming
Validator ID :
0 FTM

Amount Staked
0

Amount Delegated
0

Staking Total
0

Staking Start Epoch
0

Staking Start Time
0

Proof of Importance
0

Origination Score
0

Validation Score
0

Active
0

Online
0

Downtime
0 s
Address Amount claimed Rewards Created On Epoch Created On
Block Uncle Number Difficulty Gas Used Reward
Loading
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.