Contract 0x819542aAf1A6093ed59D6f8c813ec9e5F5de5810

 

Contract Overview

CrickDAO: CRIC Token
Balance:
0 MATIC

MATIC Value:
$0.00
 
Txn Hash Method
Block
From
To
Value [Txn Fee]
0xc9402c620416b2afbcfeb692afac502cc7bac077bf60105badf8e9a88463552cApprove316994312022-08-09 15:18:2756 days 13 hrs agoCrickDAO: Deployer 1 IN  CrickDAO: CRIC Token0 MATIC0.001474935444 31.222833775
0xbc486890cbffcd928486b5b30cfe5aa71fd260eed92ceb2f176ac45305b2f276Approve311198242022-07-25 11:03:5871 days 17 hrs ago0x64b1a780c22423b30f602c98810a9cd9124b71b9 IN  CrickDAO: CRIC Token0 MATIC0.000913163976 33.401513459
0x6cd0597ea88685add53b374792832bb73249e7b37ece85d20f26f3ecbe5a7b29Approve311197962022-07-25 11:02:3671 days 18 hrs ago0x64b1a780c22423b30f602c98810a9cd9124b71b9 IN  CrickDAO: CRIC Token0 MATIC0.001711132733 36.222882229
0x2b2e1357158ccaeb2aa5d728eef5a901f4b10bc1c01c284def3cf394392ec92eTransfer311196162022-07-25 10:52:3471 days 18 hrs agoCrickDAO: Deployer 1 IN  CrickDAO: CRIC Token0 MATIC0.001812956377 30.563858203
0x9848a28266d04d34b8f60164a1c20f37a9fdc9b4a03a3c6111b586da1ad210e20x61016060310065612022-07-22 9:11:2774 days 19 hrs agoCrickDAO: Deployer 1 IN  Create: CrickDAO0 MATIC0.141415742133 35.279390182
[ Download CSV Export 

OVERVIEW

CrickDAO hope to bring fantasy cricket to sports fans of all ages and make the metaverse accessible to millions of people. CrickDAO’s mission is to tokenize fantasy cricket leagues and establish a digital ecosystem and game structure administered and maintained only by the community.

Parent Txn Hash Block From To Value
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
CrickDAO

Compiler Version
v0.8.10+commit.fc410830

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at polygonscan.com on 2022-07-22
*/

//SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/math/SafeCast.sol)
pragma solidity ^0.8.0;
library SafeCast {

    function toUint224(uint256 value) internal pure returns (uint224) {
        require(value <= type(uint224).max, "SafeCast: value doesn't fit in 224 bits");
        return uint224(value);
    }

    function toUint128(uint256 value) internal pure returns (uint128) {
        require(value <= type(uint128).max, "SafeCast: value doesn't fit in 128 bits");
        return uint128(value);
    }

    function toUint96(uint256 value) internal pure returns (uint96) {
        require(value <= type(uint96).max, "SafeCast: value doesn't fit in 96 bits");
        return uint96(value);
    }

    function toUint64(uint256 value) internal pure returns (uint64) {
        require(value <= type(uint64).max, "SafeCast: value doesn't fit in 64 bits");
        return uint64(value);
    }

    function toUint32(uint256 value) internal pure returns (uint32) {
        require(value <= type(uint32).max, "SafeCast: value doesn't fit in 32 bits");
        return uint32(value);
    }

    function toUint16(uint256 value) internal pure returns (uint16) {
        require(value <= type(uint16).max, "SafeCast: value doesn't fit in 16 bits");
        return uint16(value);
    }

    function toUint8(uint256 value) internal pure returns (uint8) {
        require(value <= type(uint8).max, "SafeCast: value doesn't fit in 8 bits");
        return uint8(value);
    }

    function toUint256(int256 value) internal pure returns (uint256) {
        require(value >= 0, "SafeCast: value must be positive");
        return uint256(value);
    }

    function toInt128(int256 value) internal pure returns (int128) {
        require(value >= type(int128).min && value <= type(int128).max, "SafeCast: value doesn't fit in 128 bits");
        return int128(value);
    }

    function toInt64(int256 value) internal pure returns (int64) {
        require(value >= type(int64).min && value <= type(int64).max, "SafeCast: value doesn't fit in 64 bits");
        return int64(value);
    }

    function toInt32(int256 value) internal pure returns (int32) {
        require(value >= type(int32).min && value <= type(int32).max, "SafeCast: value doesn't fit in 32 bits");
        return int32(value);
    }

    function toInt16(int256 value) internal pure returns (int16) {
        require(value >= type(int16).min && value <= type(int16).max, "SafeCast: value doesn't fit in 16 bits");
        return int16(value);
    }

    function toInt8(int256 value) internal pure returns (int8) {
        require(value >= type(int8).min && value <= type(int8).max, "SafeCast: value doesn't fit in 8 bits");
        return int8(value);
    }

    function toInt256(uint256 value) internal pure returns (int256) {
        // Note: Unsafe cast below is okay because `type(int256).max` is guaranteed to be positive
        require(value <= uint256(type(int256).max), "SafeCast: value doesn't fit in an int256");
        return int256(value);
    }
}

// File: @openzeppelin/contracts/governance/utils/IVotes.sol
// OpenZeppelin Contracts (last updated v4.5.0) (governance/utils/IVotes.sol)
pragma solidity ^0.8.0;

interface IVotes {

    event DelegateChanged(address indexed delegator, address indexed fromDelegate, address indexed toDelegate);

    event DelegateVotesChanged(address indexed delegate, uint256 previousBalance, uint256 newBalance);

    function getVotes(address account) external view returns (uint256);

    function getPastVotes(address account, uint256 blockNumber) external view returns (uint256);

    function getPastTotalSupply(uint256 blockNumber) external view returns (uint256);

    function delegates(address account) external view returns (address);

    function delegate(address delegatee) external;

    function delegateBySig(
        address delegatee,
        uint256 nonce,
        uint256 expiry,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external;
}

// File: @openzeppelin/contracts/utils/math/Math.sol
// OpenZeppelin Contracts (last updated v4.5.0) (utils/math/Math.sol)

pragma solidity ^0.8.0;

library Math {

    function max(uint256 a, uint256 b) internal pure returns (uint256) {
        return a >= b ? a : b;
    }

    function min(uint256 a, uint256 b) internal pure returns (uint256) {
        return a < b ? a : b;
    }

    function average(uint256 a, uint256 b) internal pure returns (uint256) {
        // (a + b) / 2 can overflow.
        return (a & b) + (a ^ b) / 2;
    }

    function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {
        // (a + b - 1) / b can overflow on addition, so we distribute.
        return a / b + (a % b == 0 ? 0 : 1);
    }
}

// File: @openzeppelin/contracts/utils/Counters.sol
// OpenZeppelin Contracts v4.4.1 (utils/Counters.sol)

pragma solidity ^0.8.0;

library Counters {
    struct Counter {
        uint256 _value; // default: 0
    }

    function current(Counter storage counter) internal view returns (uint256) {
        return counter._value;
    }

    function increment(Counter storage counter) internal {
        unchecked {
            counter._value += 1;
        }
    }

    function decrement(Counter storage counter) internal {
        uint256 value = counter._value;
        require(value > 0, "Counter: decrement overflow");
        unchecked {
            counter._value = value - 1;
        }
    }

    function reset(Counter storage counter) internal {
        counter._value = 0;
    }
}

// File: @openzeppelin/contracts/utils/Strings.sol
// OpenZeppelin Contracts v4.4.1 (utils/Strings.sol)

pragma solidity ^0.8.0;

library Strings {
    bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef";

    function toString(uint256 value) internal pure returns (string memory) {
        if (value == 0) {
            return "0";
        }
        uint256 temp = value;
        uint256 digits;
        while (temp != 0) {
            digits++;
            temp /= 10;
        }
        bytes memory buffer = new bytes(digits);
        while (value != 0) {
            digits -= 1;
            buffer[digits] = bytes1(uint8(48 + uint256(value % 10)));
            value /= 10;
        }
        return string(buffer);
    }

    function toHexString(uint256 value) internal pure returns (string memory) {
        if (value == 0) {
            return "0x00";
        }
        uint256 temp = value;
        uint256 length = 0;
        while (temp != 0) {
            length++;
            temp >>= 8;
        }
        return toHexString(value, length);
    }

    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {
        bytes memory buffer = new bytes(2 * length + 2);
        buffer[0] = "0";
        buffer[1] = "x";
        for (uint256 i = 2 * length + 1; i > 1; --i) {
            buffer[i] = _HEX_SYMBOLS[value & 0xf];
            value >>= 4;
        }
        require(value == 0, "Strings: hex length insufficient");
        return string(buffer);
    }
}

// File: @openzeppelin/contracts/utils/cryptography/ECDSA.sol
// OpenZeppelin Contracts (last updated v4.5.0) (utils/cryptography/ECDSA.sol)

pragma solidity ^0.8.0;

library ECDSA {
    enum RecoverError {
        NoError,
        InvalidSignature,
        InvalidSignatureLength,
        InvalidSignatureS,
        InvalidSignatureV
    }

    function _throwError(RecoverError error) private pure {
        if (error == RecoverError.NoError) {
            return; // no error: do nothing
        } else if (error == RecoverError.InvalidSignature) {
            revert("ECDSA: invalid signature");
        } else if (error == RecoverError.InvalidSignatureLength) {
            revert("ECDSA: invalid signature length");
        } else if (error == RecoverError.InvalidSignatureS) {
            revert("ECDSA: invalid signature 's' value");
        } else if (error == RecoverError.InvalidSignatureV) {
            revert("ECDSA: invalid signature 'v' value");
        }
    }

    function tryRecover(bytes32 hash, bytes memory signature) internal pure returns (address, RecoverError) {
        if (signature.length == 65) {
            bytes32 r;
            bytes32 s;
            uint8 v;
            assembly {
                r := mload(add(signature, 0x20))
                s := mload(add(signature, 0x40))
                v := byte(0, mload(add(signature, 0x60)))
            }
            return tryRecover(hash, v, r, s);
        } else if (signature.length == 64) {
            bytes32 r;
            bytes32 vs;
            assembly {
                r := mload(add(signature, 0x20))
                vs := mload(add(signature, 0x40))
            }
            return tryRecover(hash, r, vs);
        } else {
            return (address(0), RecoverError.InvalidSignatureLength);
        }
    }
    function recover(bytes32 hash, bytes memory signature) internal pure returns (address) {
        (address recovered, RecoverError error) = tryRecover(hash, signature);
        _throwError(error);
        return recovered;
    }
    function tryRecover(
        bytes32 hash,
        bytes32 r,
        bytes32 vs
    ) internal pure returns (address, RecoverError) {
        bytes32 s = vs & bytes32(0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff);
        uint8 v = uint8((uint256(vs) >> 255) + 27);
        return tryRecover(hash, v, r, s);
    }

    function recover(
        bytes32 hash,
        bytes32 r,
        bytes32 vs
    ) internal pure returns (address) {
        (address recovered, RecoverError error) = tryRecover(hash, r, vs);
        _throwError(error);
        return recovered;
    }

    function tryRecover(
        bytes32 hash,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) internal pure returns (address, RecoverError) {
        if (uint256(s) > 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0) {
            return (address(0), RecoverError.InvalidSignatureS);
        }
        if (v != 27 && v != 28) {
            return (address(0), RecoverError.InvalidSignatureV);
        }

        address signer = ecrecover(hash, v, r, s);
        if (signer == address(0)) {
            return (address(0), RecoverError.InvalidSignature);
        }

        return (signer, RecoverError.NoError);
    }

    function recover(
        bytes32 hash,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) internal pure returns (address) {
        (address recovered, RecoverError error) = tryRecover(hash, v, r, s);
        _throwError(error);
        return recovered;
    }

    function toEthSignedMessageHash(bytes32 hash) internal pure returns (bytes32) {
        return keccak256(abi.encodePacked("\x19Ethereum Signed Message:\n32", hash));
    }

    function toEthSignedMessageHash(bytes memory s) internal pure returns (bytes32) {
        return keccak256(abi.encodePacked("\x19Ethereum Signed Message:\n", Strings.toString(s.length), s));
    }

    function toTypedDataHash(bytes32 domainSeparator, bytes32 structHash) internal pure returns (bytes32) {
        return keccak256(abi.encodePacked("\x19\x01", domainSeparator, structHash));
    }
}

// File: @openzeppelin/contracts/utils/cryptography/draft-EIP712.sol
// OpenZeppelin Contracts v4.4.1 (utils/cryptography/draft-EIP712.sol)

pragma solidity ^0.8.0;

abstract contract EIP712 {
    bytes32 private immutable _CACHED_DOMAIN_SEPARATOR;
    uint256 private immutable _CACHED_CHAIN_ID;
    address private immutable _CACHED_THIS;

    bytes32 private immutable _HASHED_NAME;
    bytes32 private immutable _HASHED_VERSION;
    bytes32 private immutable _TYPE_HASH;

    constructor(string memory name, string memory version) {
        bytes32 hashedName = keccak256(bytes(name));
        bytes32 hashedVersion = keccak256(bytes(version));
        bytes32 typeHash = keccak256(
            "EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)"
        );
        _HASHED_NAME = hashedName;
        _HASHED_VERSION = hashedVersion;
        _CACHED_CHAIN_ID = block.chainid;
        _CACHED_DOMAIN_SEPARATOR = _buildDomainSeparator(typeHash, hashedName, hashedVersion);
        _CACHED_THIS = address(this);
        _TYPE_HASH = typeHash;
    }

    function _domainSeparatorV4() internal view returns (bytes32) {
        if (address(this) == _CACHED_THIS && block.chainid == _CACHED_CHAIN_ID) {
            return _CACHED_DOMAIN_SEPARATOR;
        } else {
            return _buildDomainSeparator(_TYPE_HASH, _HASHED_NAME, _HASHED_VERSION);
        }
    }

    function _buildDomainSeparator(
        bytes32 typeHash,
        bytes32 nameHash,
        bytes32 versionHash
    ) private view returns (bytes32) {
        return keccak256(abi.encode(typeHash, nameHash, versionHash, block.chainid, address(this)));
    }

    function _hashTypedDataV4(bytes32 structHash) internal view virtual returns (bytes32) {
        return ECDSA.toTypedDataHash(_domainSeparatorV4(), structHash);
    }
}

// File: @openzeppelin/contracts/token/ERC20/extensions/draft-IERC20Permit.sol
// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/draft-IERC20Permit.sol)

pragma solidity ^0.8.0;

interface IERC20Permit {
    function permit(
        address owner,
        address spender,
        uint256 value,
        uint256 deadline,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external;

    function nonces(address owner) external view returns (uint256);
    function DOMAIN_SEPARATOR() external view returns (bytes32);
}

// File: @openzeppelin/contracts/utils/Context.sol
pragma solidity ^0.8.0;

abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}

// File: @openzeppelin/contracts/access/Ownable.sol
pragma solidity ^0.8.0;

abstract contract Ownable is Context {
    address private _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    constructor() {
        _setOwner(_msgSender());
    }

    function owner() public view virtual returns (address) {
        return _owner;
    }

    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    function renounceOwnership() public virtual onlyOwner {
        _setOwner(address(0));
    }

    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _setOwner(newOwner);
    }

    function _setOwner(address newOwner) private {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

// File: @openzeppelin/contracts/security/Pausable.sol
// OpenZeppelin Contracts v4.4.1 (security/Pausable.sol)

pragma solidity ^0.8.0;

abstract contract Pausable is Context {
    event Paused(address account);
    event Unpaused(address account);

    bool private _paused;
    constructor() {
        _paused = false;
    }

    function paused() public view virtual returns (bool) {
        return _paused;
    }
    modifier whenNotPaused() {
        require(!paused(), "Pausable: paused");
        _;
    }
    modifier whenPaused() {
        require(paused(), "Pausable: not paused");
        _;
    }
    function _pause() internal virtual whenNotPaused {
        _paused = true;
        emit Paused(_msgSender());
    }

    function _unpause() internal virtual whenPaused {
        _paused = false;
        emit Unpaused(_msgSender());
    }
}

// File: @openzeppelin/contracts/token/ERC20/IERC20.sol
pragma solidity ^0.8.0;

interface IERC20 {
    function totalSupply() external view returns (uint256);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address recipient, uint256 amount) external returns (bool);
    function allowance(address owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

// File: @openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol
pragma solidity ^0.8.0;

interface IERC20Metadata is IERC20 {
    function name() external view returns (string memory);
    function symbol() external view returns (string memory);
    function decimals() external view returns (uint8);
}

// File: @openzeppelin/contracts/token/ERC20/ERC20.sol
pragma solidity ^0.8.0;

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;

    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }
    function name() public view virtual override returns (string memory) {
        return _name;
    }

    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

    function decimals() public view virtual override returns (uint8) {
        return 18;
    }

    function totalSupply() public view virtual override returns (uint256) {
        return _totalSupply;
    }

    function balanceOf(address account) public view virtual override returns (uint256) {
        return _balances[account];
    }

    function transfer(address recipient, uint256 amount) public virtual override returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

    function allowance(address owner, address spender) public view virtual override returns (uint256) {
        return _allowances[owner][spender];
    }

    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);

        uint256 currentAllowance = _allowances[sender][_msgSender()];
        require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance");
        unchecked {
            _approve(sender, _msgSender(), currentAllowance - amount);
        }

        return true;
    }

    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue);
        return true;
    }

    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        uint256 currentAllowance = _allowances[_msgSender()][spender];
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
        unchecked {
            _approve(_msgSender(), spender, currentAllowance - subtractedValue);
        }

        return true;
    }

    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal virtual {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");

        _beforeTokenTransfer(sender, recipient, amount);

        uint256 senderBalance = _balances[sender];
        require(senderBalance >= amount, "ERC20: transfer amount exceeds balance");
        unchecked {
            _balances[sender] = senderBalance - amount;
        }
        _balances[recipient] += amount;

        emit Transfer(sender, recipient, amount);

        _afterTokenTransfer(sender, recipient, amount);
    }

    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");

        _beforeTokenTransfer(address(0), account, amount);

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

        _afterTokenTransfer(address(0), account, amount);
    }

    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");

        _beforeTokenTransfer(account, address(0), amount);

        uint256 accountBalance = _balances[account];
        require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
        unchecked {
            _balances[account] = accountBalance - amount;
        }
        _totalSupply -= amount;

        emit Transfer(account, address(0), amount);

        _afterTokenTransfer(account, address(0), amount);
    }

    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);
    }

    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}

    function _afterTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}
}

// File: @openzeppelin/contracts/token/ERC20/extensions/draft-ERC20Permit.sol
// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/draft-ERC20Permit.sol)

pragma solidity ^0.8.0;

abstract contract ERC20Permit is ERC20, IERC20Permit, EIP712 {
    using Counters for Counters.Counter;

    mapping(address => Counters.Counter) private _nonces;

    bytes32 private immutable _PERMIT_TYPEHASH =
        keccak256("Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)");

    constructor(string memory name) EIP712(name, "1") {}
    function permit(
        address owner,
        address spender,
        uint256 value,
        uint256 deadline,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) public virtual override {
        require(block.timestamp <= deadline, "ERC20Permit: expired deadline");

        bytes32 structHash = keccak256(abi.encode(_PERMIT_TYPEHASH, owner, spender, value, _useNonce(owner), deadline));

        bytes32 hash = _hashTypedDataV4(structHash);

        address signer = ECDSA.recover(hash, v, r, s);
        require(signer == owner, "ERC20Permit: invalid signature");

        _approve(owner, spender, value);
    }

    function nonces(address owner) public view virtual override returns (uint256) {
        return _nonces[owner].current();
    }

    function DOMAIN_SEPARATOR() external view override returns (bytes32) {
        return _domainSeparatorV4();
    }

    function _useNonce(address owner) internal virtual returns (uint256 current) {
        Counters.Counter storage nonce = _nonces[owner];
        current = nonce.current();
        nonce.increment();
    }
}

// File: @openzeppelin/contracts/token/ERC20/extensions/ERC20Votes.sol
// OpenZeppelin Contracts (last updated v4.5.0) (token/ERC20/extensions/ERC20Votes.sol)
pragma solidity ^0.8.0;

abstract contract ERC20Votes is IVotes, ERC20Permit {
    struct Checkpoint {
        uint32 fromBlock;
        uint224 votes;
    }

    bytes32 private constant _DELEGATION_TYPEHASH =
        keccak256("Delegation(address delegatee,uint256 nonce,uint256 expiry)");

    mapping(address => address) private _delegates;
    mapping(address => Checkpoint[]) private _checkpoints;
    Checkpoint[] private _totalSupplyCheckpoints;

    function checkpoints(address account, uint32 pos) public view virtual returns (Checkpoint memory) {
        return _checkpoints[account][pos];
    }

    function numCheckpoints(address account) public view virtual returns (uint32) {
        return SafeCast.toUint32(_checkpoints[account].length);
    }

    function delegates(address account) public view virtual override returns (address) {
        return _delegates[account];
    }

    function getVotes(address account) public view virtual override returns (uint256) {
        uint256 pos = _checkpoints[account].length;
        return pos == 0 ? 0 : _checkpoints[account][pos - 1].votes;
    }

    function getPastVotes(address account, uint256 blockNumber) public view virtual override returns (uint256) {
        require(blockNumber < block.number, "ERC20Votes: block not yet mined");
        return _checkpointsLookup(_checkpoints[account], blockNumber);
    }

    function getPastTotalSupply(uint256 blockNumber) public view virtual override returns (uint256) {
        require(blockNumber < block.number, "ERC20Votes: block not yet mined");
        return _checkpointsLookup(_totalSupplyCheckpoints, blockNumber);
    }

    function _checkpointsLookup(Checkpoint[] storage ckpts, uint256 blockNumber) private view returns (uint256) {
        uint256 high = ckpts.length;
        uint256 low = 0;
        while (low < high) {
            uint256 mid = Math.average(low, high);
            if (ckpts[mid].fromBlock > blockNumber) {
                high = mid;
            } else {
                low = mid + 1;
            }
        }

        return high == 0 ? 0 : ckpts[high - 1].votes;
    }

    function delegate(address delegatee) public virtual override {
        _delegate(_msgSender(), delegatee);
    }

    function delegateBySig(
        address delegatee,
        uint256 nonce,
        uint256 expiry,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) public virtual override {
        require(block.timestamp <= expiry, "ERC20Votes: signature expired");
        address signer = ECDSA.recover(
            _hashTypedDataV4(keccak256(abi.encode(_DELEGATION_TYPEHASH, delegatee, nonce, expiry))),
            v,
            r,
            s
        );
        require(nonce == _useNonce(signer), "ERC20Votes: invalid nonce");
        _delegate(signer, delegatee);
    }

    function _maxSupply() internal view virtual returns (uint224) {
        return type(uint224).max;
    }

    function _mint(address account, uint256 amount) internal virtual override {
        super._mint(account, amount);
        require(totalSupply() <= _maxSupply(), "ERC20Votes: total supply risks overflowing votes");

        _writeCheckpoint(_totalSupplyCheckpoints, _add, amount);
    }

    function _burn(address account, uint256 amount) internal virtual override {
        super._burn(account, amount);

        _writeCheckpoint(_totalSupplyCheckpoints, _subtract, amount);
    }

    function _afterTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual override {
        super._afterTokenTransfer(from, to, amount);

        _moveVotingPower(delegates(from), delegates(to), amount);
    }

    function _delegate(address delegator, address delegatee) internal virtual {
        address currentDelegate = delegates(delegator);
        uint256 delegatorBalance = balanceOf(delegator);
        _delegates[delegator] = delegatee;

        emit DelegateChanged(delegator, currentDelegate, delegatee);

        _moveVotingPower(currentDelegate, delegatee, delegatorBalance);
    }

    function _moveVotingPower(
        address src,
        address dst,
        uint256 amount
    ) private {
        if (src != dst && amount > 0) {
            if (src != address(0)) {
                (uint256 oldWeight, uint256 newWeight) = _writeCheckpoint(_checkpoints[src], _subtract, amount);
                emit DelegateVotesChanged(src, oldWeight, newWeight);
            }

            if (dst != address(0)) {
                (uint256 oldWeight, uint256 newWeight) = _writeCheckpoint(_checkpoints[dst], _add, amount);
                emit DelegateVotesChanged(dst, oldWeight, newWeight);
            }
        }
    }

    function _writeCheckpoint(
        Checkpoint[] storage ckpts,
        function(uint256, uint256) view returns (uint256) op,
        uint256 delta
    ) private returns (uint256 oldWeight, uint256 newWeight) {
        uint256 pos = ckpts.length;
        oldWeight = pos == 0 ? 0 : ckpts[pos - 1].votes;
        newWeight = op(oldWeight, delta);

        if (pos > 0 && ckpts[pos - 1].fromBlock == block.number) {
            ckpts[pos - 1].votes = SafeCast.toUint224(newWeight);
        } else {
            ckpts.push(Checkpoint({fromBlock: SafeCast.toUint32(block.number), votes: SafeCast.toUint224(newWeight)}));
        }
    }

    function _add(uint256 a, uint256 b) private pure returns (uint256) {
        return a + b;
    }

    function _subtract(uint256 a, uint256 b) private pure returns (uint256) {
        return a - b;
    }
}

// File: contracts/CrickDAO.sol
pragma solidity ^0.8.10;

contract CrickDAO is ERC20, Pausable, Ownable, ERC20Permit, ERC20Votes {
    constructor() ERC20("CrickDAO", "CRIC") ERC20Permit("CrickDAO") {
        _mint(msg.sender, 2 * 10**8 * 10 ** decimals()); // 200 million tokens
    }

    function pause() public onlyOwner {
        _pause();
    }

    function unpause() public onlyOwner {
        _unpause();
    }

   function claimStuckTokens(address _token) external onlyOwner {
     if (_token == address(0x0)) {
     payable(owner()).transfer(address(this).balance);
     return;
    }

    IERC20 erc20token = IERC20(_token);
    uint256 balance = erc20token.balanceOf(address(this));
    erc20token.transfer(owner(), balance);
   }

    function _beforeTokenTransfer(address from, address to, uint256 amount)
        internal
        whenNotPaused
        override
    {
        super._beforeTokenTransfer(from, to, amount);
    }

    function _afterTokenTransfer(address from, address to, uint256 amount)
        internal
        override(ERC20, ERC20Votes)
    {
        super._afterTokenTransfer(from, to, amount);
    }

    function _mint(address to, uint256 amount)
        internal
        override(ERC20, ERC20Votes)
    {
        super._mint(to, amount);
    }

    function _burn(address account, uint256 amount)
        internal
        override(ERC20, ERC20Votes)
    {
        super._burn(account, amount);
    }
}

Contract Security Audit

Contract ABI

[{"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":"delegator","type":"address"},{"indexed":true,"internalType":"address","name":"fromDelegate","type":"address"},{"indexed":true,"internalType":"address","name":"toDelegate","type":"address"}],"name":"DelegateChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"delegate","type":"address"},{"indexed":false,"internalType":"uint256","name":"previousBalance","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newBalance","type":"uint256"}],"name":"DelegateVotesChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"inputs":[],"name":"DOMAIN_SEPARATOR","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint32","name":"pos","type":"uint32"}],"name":"checkpoints","outputs":[{"components":[{"internalType":"uint32","name":"fromBlock","type":"uint32"},{"internalType":"uint224","name":"votes","type":"uint224"}],"internalType":"struct ERC20Votes.Checkpoint","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"}],"name":"claimStuckTokens","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":"delegatee","type":"address"}],"name":"delegate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"delegatee","type":"address"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"uint256","name":"expiry","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"delegateBySig","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"delegates","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"blockNumber","type":"uint256"}],"name":"getPastTotalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"blockNumber","type":"uint256"}],"name":"getPastVotes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getVotes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"nonces","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"numCheckpoints","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"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":"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":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"}]

6101606040527f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9610140908152503480156200003a57600080fd5b506040518060400160405280600881526020017f437269636b44414f000000000000000000000000000000000000000000000000815250806040518060400160405280600181526020017f31000000000000000000000000000000000000000000000000000000000000008152506040518060400160405280600881526020017f437269636b44414f0000000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f435249430000000000000000000000000000000000000000000000000000000081525081600390805190602001906200012c92919062000d3e565b5080600490805190602001906200014592919062000d3e565b5050506000600560006101000a81548160ff02191690831515021790555062000183620001776200027c60201b60201c565b6200028460201b60201c565b60008280519060200120905060008280519060200120905060007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f90508260e081815250508161010081815250504660a08181525050620001ec8184846200034a60201b60201c565b608081815250503073ffffffffffffffffffffffffffffffffffffffff1660c08173ffffffffffffffffffffffffffffffffffffffff168152505080610120818152505050505050505062000276336200024b6200038660201b60201c565b600a62000259919062000f88565b630bebc2006200026a919062000fd9565b6200038f60201b60201c565b6200153b565b600033905090565b6000600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000838383463060405160200162000367959493929190620010ab565b6040516020818303038152906040528051906020012090509392505050565b60006012905090565b620003a68282620003aa60201b620016221760201c565b5050565b620003c182826200046860201b620016af1760201c565b620003d1620005e160201b60201c565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16620003ff6200060560201b60201c565b111562000443576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200043a906200118f565b60405180910390fd5b6200046260096200060f60201b6200180f17836200062760201b60201c565b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415620004db576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620004d29062001201565b60405180910390fd5b620004ef60008383620008d860201b60201c565b806002600082825462000503919062001223565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546200055a919062001223565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620005c1919062001280565b60405180910390a3620005dd600083836200094860201b60201c565b5050565b60007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff905090565b6000600254905090565b600081836200061f919062001223565b905092915050565b600080600085805490509050600081146200069c57856001826200064c91906200129d565b8154811062000660576200065f620012d8565b5b9060005260206000200160000160049054906101000a90047bffffffffffffffffffffffffffffffffffffffffffffffffffffffff166200069f565b60005b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff169250620006cb83858760201c565b91506000811180156200072457504386600183620006ea91906200129d565b81548110620006fe57620006fd620012d8565b5b9060005260206000200160000160009054906101000a900463ffffffff1663ffffffff16145b15620007c55762000740826200096560201b620018251760201c565b866001836200075091906200129d565b81548110620007645762000763620012d8565b5b9060005260206000200160000160046101000a8154817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff02191690837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff160217905550620008cf565b856040518060400160405280620007e743620009d360201b620018901760201c565b63ffffffff16815260200162000808856200096560201b620018251760201c565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff168152509080600181540180825580915050600190039060005260206000200160009091909190915060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a8154817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff02191690837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16021790555050505b50935093915050565b620008e862000a2960201b60201c565b156200092b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009229062001357565b60405180910390fd5b6200094383838362000a4060201b620018e31760201c565b505050565b6200096083838362000a4560201b620018e81760201c565b505050565b60007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8016821115620009cb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009c290620013ef565b60405180910390fd5b819050919050565b600063ffffffff801682111562000a21576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000a189062001487565b60405180910390fd5b819050919050565b6000600560009054906101000a900460ff16905090565b505050565b62000a5d83838362000a9560201b620019131760201c565b62000a9062000a728462000a9a60201b60201c565b62000a838462000a9a60201b60201c565b8362000b0360201b60201c565b505050565b505050565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801562000b405750600081115b1562000d2157600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161462000c335760008062000bda600860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002062000d2660201b6200191817856200062760201b60201c565b915091508473ffffffffffffffffffffffffffffffffffffffff167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a724838360405162000c28929190620014a9565b60405180910390a250505b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161462000d205760008062000cc7600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206200060f60201b6200180f17856200062760201b60201c565b915091508373ffffffffffffffffffffffffffffffffffffffff167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a724838360405162000d15929190620014a9565b60405180910390a250505b5b505050565b6000818362000d3691906200129d565b905092915050565b82805462000d4c9062001505565b90600052602060002090601f01602090048101928262000d70576000855562000dbc565b82601f1062000d8b57805160ff191683800117855562000dbc565b8280016001018555821562000dbc579182015b8281111562000dbb57825182559160200191906001019062000d9e565b5b50905062000dcb919062000dcf565b5090565b5b8082111562000dea57600081600090555060010162000dd0565b5090565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b600185111562000e7c5780860481111562000e545762000e5362000dee565b5b600185161562000e645780820291505b808102905062000e748562000e1d565b945062000e34565b94509492505050565b60008262000e97576001905062000f6a565b8162000ea7576000905062000f6a565b816001811462000ec0576002811462000ecb5762000f01565b600191505062000f6a565b60ff84111562000ee05762000edf62000dee565b5b8360020a91508482111562000efa5762000ef962000dee565b5b5062000f6a565b5060208310610133831016604e8410600b841016171562000f3b5782820a90508381111562000f355762000f3462000dee565b5b62000f6a565b62000f4a848484600162000e2a565b9250905081840481111562000f645762000f6362000dee565b5b81810290505b9392505050565b6000819050919050565b600060ff82169050919050565b600062000f958262000f71565b915062000fa28362000f7b565b925062000fd17fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000e85565b905092915050565b600062000fe68262000f71565b915062000ff38362000f71565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156200102f576200102e62000dee565b5b828202905092915050565b6000819050919050565b6200104f816200103a565b82525050565b620010608162000f71565b82525050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620010938262001066565b9050919050565b620010a58162001086565b82525050565b600060a082019050620010c2600083018862001044565b620010d1602083018762001044565b620010e0604083018662001044565b620010ef606083018562001055565b620010fe60808301846200109a565b9695505050505050565b600082825260208201905092915050565b7f4552433230566f7465733a20746f74616c20737570706c79207269736b73206f60008201527f766572666c6f77696e6720766f74657300000000000000000000000000000000602082015250565b60006200117760308362001108565b9150620011848262001119565b604082019050919050565b60006020820190508181036000830152620011aa8162001168565b9050919050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6000620011e9601f8362001108565b9150620011f682620011b1565b602082019050919050565b600060208201905081810360008301526200121c81620011da565b9050919050565b6000620012308262000f71565b91506200123d8362000f71565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562001275576200127462000dee565b5b828201905092915050565b600060208201905062001297600083018462001055565b92915050565b6000620012aa8262000f71565b9150620012b78362000f71565b925082821015620012cd57620012cc62000dee565b5b828203905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b60006200133f60108362001108565b91506200134c8262001307565b602082019050919050565b60006020820190508181036000830152620013728162001330565b9050919050565b7f53616665436173743a2076616c756520646f65736e27742066697420696e203260008201527f3234206269747300000000000000000000000000000000000000000000000000602082015250565b6000620013d760278362001108565b9150620013e48262001379565b604082019050919050565b600060208201905081810360008301526200140a81620013c8565b9050919050565b7f53616665436173743a2076616c756520646f65736e27742066697420696e203360008201527f3220626974730000000000000000000000000000000000000000000000000000602082015250565b60006200146f60268362001108565b91506200147c8262001411565b604082019050919050565b60006020820190508181036000830152620014a28162001460565b9050919050565b6000604082019050620014c0600083018562001055565b620014cf602083018462001055565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200151e57607f821691505b60208210811415620015355762001534620014d6565b5b50919050565b60805160a05160c05160e05161010051610120516101405161436d62001596600039600061108501526000611e3001526000611e7201526000611e5101526000611d8601526000611ddc01526000611e05015261436d6000f3fe608060405234801561001057600080fd5b50600436106101cf5760003560e01c8063715018a611610104578063a457c2d7116100a2578063dd62ed3e11610071578063dd62ed3e14610558578063f1127ed814610588578063f2fde38b146105b8578063f9d0831a146105d4576101cf565b8063a457c2d7146104c0578063a9059cbb146104f0578063c3cda52014610520578063d505accf1461053c576101cf565b80638da5cb5b116100de5780638da5cb5b146104245780638e539e8c1461044257806395d89b41146104725780639ab24eb014610490576101cf565b8063715018a6146103e05780637ecebe00146103ea5780638456cb591461041a576101cf565b80633a46b1a8116101715780635c19a95c1161014b5780635c19a95c146103465780635c975abb146103625780636fcfff451461038057806370a08231146103b0576101cf565b80633a46b1a8146102dc5780633f4ba83a1461030c578063587cde1e14610316576101cf565b806323b872dd116101ad57806323b872dd14610240578063313ce567146102705780633644e5151461028e57806339509351146102ac576101cf565b806306fdde03146101d4578063095ea7b3146101f257806318160ddd14610222575b600080fd5b6101dc6105f0565b6040516101e99190612cdd565b60405180910390f35b61020c60048036038101906102079190612d98565b610682565b6040516102199190612df3565b60405180910390f35b61022a6106a0565b6040516102379190612e1d565b60405180910390f35b61025a60048036038101906102559190612e38565b6106aa565b6040516102679190612df3565b60405180910390f35b6102786107a2565b6040516102859190612ea7565b60405180910390f35b6102966107ab565b6040516102a39190612edb565b60405180910390f35b6102c660048036038101906102c19190612d98565b6107ba565b6040516102d39190612df3565b60405180910390f35b6102f660048036038101906102f19190612d98565b610866565b6040516103039190612e1d565b60405180910390f35b6103146108fa565b005b610330600480360381019061032b9190612ef6565b610980565b60405161033d9190612f32565b60405180910390f35b610360600480360381019061035b9190612ef6565b6109e9565b005b61036a6109fd565b6040516103779190612df3565b60405180910390f35b61039a60048036038101906103959190612ef6565b610a14565b6040516103a79190612f6c565b60405180910390f35b6103ca60048036038101906103c59190612ef6565b610a68565b6040516103d79190612e1d565b60405180910390f35b6103e8610ab0565b005b61040460048036038101906103ff9190612ef6565b610b38565b6040516104119190612e1d565b60405180910390f35b610422610b88565b005b61042c610c0e565b6040516104399190612f32565b60405180910390f35b61045c60048036038101906104579190612f87565b610c38565b6040516104699190612e1d565b60405180910390f35b61047a610c8e565b6040516104879190612cdd565b60405180910390f35b6104aa60048036038101906104a59190612ef6565b610d20565b6040516104b79190612e1d565b60405180910390f35b6104da60048036038101906104d59190612d98565b610e31565b6040516104e79190612df3565b60405180910390f35b61050a60048036038101906105059190612d98565b610f1c565b6040516105179190612df3565b60405180910390f35b61053a6004803603810190610535919061300c565b610f3a565b005b61055660048036038101906105519190613099565b61103e565b005b610572600480360381019061056d919061313b565b611180565b60405161057f9190612e1d565b60405180910390f35b6105a2600480360381019061059d91906131a7565b611207565b6040516105af919061325c565b60405180910390f35b6105d260048036038101906105cd9190612ef6565b611317565b005b6105ee60048036038101906105e99190612ef6565b61140f565b005b6060600380546105ff906132a6565b80601f016020809104026020016040519081016040528092919081815260200182805461062b906132a6565b80156106785780601f1061064d57610100808354040283529160200191610678565b820191906000526020600020905b81548152906001019060200180831161065b57829003601f168201915b5050505050905090565b600061069661068f61192e565b8484611936565b6001905092915050565b6000600254905090565b60006106b7848484611b01565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061070261192e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610782576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107799061334a565b60405180910390fd5b6107968561078e61192e565b858403611936565b60019150509392505050565b60006012905090565b60006107b5611d82565b905090565b600061085c6107c761192e565b8484600160006107d561192e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546108579190613399565b611936565b6001905092915050565b60004382106108aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108a19061343b565b60405180910390fd5b6108f2600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002083611e9c565b905092915050565b61090261192e565b73ffffffffffffffffffffffffffffffffffffffff16610920610c0e565b73ffffffffffffffffffffffffffffffffffffffff1614610976576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161096d906134a7565b60405180910390fd5b61097e611fa8565b565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6109fa6109f461192e565b8261204a565b50565b6000600560009054906101000a900460ff16905090565b6000610a61600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080549050611890565b9050919050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610ab861192e565b73ffffffffffffffffffffffffffffffffffffffff16610ad6610c0e565b73ffffffffffffffffffffffffffffffffffffffff1614610b2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b23906134a7565b60405180910390fd5b610b366000612164565b565b6000610b81600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002061222a565b9050919050565b610b9061192e565b73ffffffffffffffffffffffffffffffffffffffff16610bae610c0e565b73ffffffffffffffffffffffffffffffffffffffff1614610c04576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bfb906134a7565b60405180910390fd5b610c0c612238565b565b6000600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000438210610c7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c739061343b565b60405180910390fd5b610c87600983611e9c565b9050919050565b606060048054610c9d906132a6565b80601f0160208091040260200160405190810160405280929190818152602001828054610cc9906132a6565b8015610d165780601f10610ceb57610100808354040283529160200191610d16565b820191906000526020600020905b815481529060010190602001808311610cf957829003601f168201915b5050505050905090565b600080600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080549050905060008114610e0857600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600182610dbc91906134c7565b81548110610dcd57610dcc6134fb565b5b9060005260206000200160000160049054906101000a90047bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16610e0b565b60005b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16915050919050565b60008060016000610e4061192e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610efd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ef49061359c565b60405180910390fd5b610f11610f0861192e565b85858403611936565b600191505092915050565b6000610f30610f2961192e565b8484611b01565b6001905092915050565b83421115610f7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7490613608565b60405180910390fd5b6000610fdf610fd77fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf898989604051602001610fbc9493929190613628565b604051602081830303815290604052805190602001206122db565b8585856122f5565b9050610fea81612320565b861461102b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611022906136b9565b60405180910390fd5b611035818861204a565b50505050505050565b83421115611081576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107890613725565b60405180910390fd5b60007f00000000000000000000000000000000000000000000000000000000000000008888886110b08c612320565b896040516020016110c696959493929190613745565b60405160208183030381529060405280519060200120905060006110e9826122db565b905060006110f9828787876122f5565b90508973ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611169576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611160906137f2565b60405180910390fd5b6111748a8a8a611936565b50505050505050505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b61120f612c06565b600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208263ffffffff1681548110611266576112656134fb565b5b906000526020600020016040518060400160405290816000820160009054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016000820160049054906101000a90047bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1681525050905092915050565b61131f61192e565b73ffffffffffffffffffffffffffffffffffffffff1661133d610c0e565b73ffffffffffffffffffffffffffffffffffffffff1614611393576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161138a906134a7565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611403576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113fa90613884565b60405180910390fd5b61140c81612164565b50565b61141761192e565b73ffffffffffffffffffffffffffffffffffffffff16611435610c0e565b73ffffffffffffffffffffffffffffffffffffffff161461148b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611482906134a7565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611513576114c8610c0e565b73ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f1935050505015801561150d573d6000803e3d6000fd5b5061161f565b600081905060008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016115539190612f32565b602060405180830381865afa158015611570573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061159491906138b9565b90508173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb6115ba610c0e565b836040518363ffffffff1660e01b81526004016115d89291906138e6565b6020604051808303816000875af11580156115f7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061161b919061393b565b5050505b50565b61162c82826116af565b61163461237e565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1661165a6106a0565b111561169b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611692906139da565b60405180910390fd5b6116a9600961180f836123a2565b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561171f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161171690613a46565b60405180910390fd5b61172b6000838361261a565b806002600082825461173d9190613399565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546117929190613399565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516117f79190612e1d565b60405180910390a361180b60008383612672565b5050565b6000818361181d9190613399565b905092915050565b60007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8016821115611888576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187f90613ad8565b60405180910390fd5b819050919050565b600063ffffffff80168211156118db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118d290613b6a565b60405180910390fd5b819050919050565b505050565b6118f3838383611913565b61190e6118ff84610980565b61190884610980565b83612682565b505050565b505050565b6000818361192691906134c7565b905092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156119a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199d90613bfc565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611a16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0d90613c8e565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611af49190612e1d565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611b71576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6890613d20565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611be1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bd890613db2565b60405180910390fd5b611bec83838361261a565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611c72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c6990613e44565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611d059190613399565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611d699190612e1d565b60405180910390a3611d7c848484612672565b50505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff16148015611dfe57507f000000000000000000000000000000000000000000000000000000000000000046145b15611e2b577f00000000000000000000000000000000000000000000000000000000000000009050611e99565b611e967f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000061287b565b90505b90565b6000808380549050905060005b81811015611f1b576000611ebd82846128b5565b905084868281548110611ed357611ed26134fb565b5b9060005260206000200160000160009054906101000a900463ffffffff1663ffffffff161115611f0557809250611f15565b600181611f129190613399565b91505b50611ea9565b60008214611f7d5784600183611f3191906134c7565b81548110611f4257611f416134fb565b5b9060005260206000200160000160049054906101000a90047bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16611f80565b60005b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff169250505092915050565b611fb06109fd565b611fef576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fe690613eb0565b60405180910390fd5b6000600560006101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa61203361192e565b6040516120409190612f32565b60405180910390a1565b600061205583610980565b9050600061206284610a68565b905082600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f60405160405180910390a461215e828483612682565b50505050565b6000600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600081600001549050919050565b6122406109fd565b15612280576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161227790613f1c565b60405180910390fd5b6001600560006101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586122c461192e565b6040516122d19190612f32565b60405180910390a1565b60006122ee6122e8611d82565b836128db565b9050919050565b60008060006123068787878761290e565b9150915061231381612a1b565b8192505050949350505050565b600080600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905061236d8161222a565b915061237881612bf0565b50919050565b60007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff905090565b6000806000858054905090506000811461241057856001826123c491906134c7565b815481106123d5576123d46134fb565b5b9060005260206000200160000160049054906101000a90047bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16612413565b60005b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16925061244183858763ffffffff16565b91506000811180156124945750438660018361245d91906134c7565b8154811061246e5761246d6134fb565b5b9060005260206000200160000160009054906101000a900463ffffffff1663ffffffff16145b15612521576124a282611825565b866001836124b091906134c7565b815481106124c1576124c06134fb565b5b9060005260206000200160000160046101000a8154817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff02191690837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff160217905550612611565b85604051806040016040528061253643611890565b63ffffffff16815260200161254a85611825565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff168152509080600181540180825580915050600190039060005260206000200160009091909190915060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a8154817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff02191690837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16021790555050505b50935093915050565b6126226109fd565b15612662576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161265990613f1c565b60405180910390fd5b61266d8383836118e3565b505050565b61267d8383836118e8565b505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156126be5750600081115b1561287657600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161461279c57600080612745600860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020611918856123a2565b915091508473ffffffffffffffffffffffffffffffffffffffff167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a7248383604051612791929190613f3c565b60405180910390a250505b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146128755760008061281e600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002061180f856123a2565b915091508373ffffffffffffffffffffffffffffffffffffffff167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a724838360405161286a929190613f3c565b60405180910390a250505b5b505050565b60008383834630604051602001612896959493929190613f65565b6040516020818303038152906040528051906020012090509392505050565b600060028284186128c69190613fe7565b8284166128d39190613399565b905092915050565b600082826040516020016128f0929190614090565b60405160208183030381529060405280519060200120905092915050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08360001c1115612949576000600391509150612a12565b601b8560ff16141580156129615750601c8560ff1614155b15612973576000600491509150612a12565b60006001878787876040516000815260200160405260405161299894939291906140c7565b6020604051602081039080840390855afa1580156129ba573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612a0957600060019250925050612a12565b80600092509250505b94509492505050565b60006004811115612a2f57612a2e61410c565b5b816004811115612a4257612a4161410c565b5b1415612a4d57612bed565b60016004811115612a6157612a6061410c565b5b816004811115612a7457612a7361410c565b5b1415612ab5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612aac90614187565b60405180910390fd5b60026004811115612ac957612ac861410c565b5b816004811115612adc57612adb61410c565b5b1415612b1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b14906141f3565b60405180910390fd5b60036004811115612b3157612b3061410c565b5b816004811115612b4457612b4361410c565b5b1415612b85576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b7c90614285565b60405180910390fd5b600480811115612b9857612b9761410c565b5b816004811115612bab57612baa61410c565b5b1415612bec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612be390614317565b60405180910390fd5b5b50565b6001816000016000828254019250508190555050565b6040518060400160405280600063ffffffff16815260200160007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1681525090565b600081519050919050565b600082825260208201905092915050565b60005b83811015612c7e578082015181840152602081019050612c63565b83811115612c8d576000848401525b50505050565b6000601f19601f8301169050919050565b6000612caf82612c44565b612cb98185612c4f565b9350612cc9818560208601612c60565b612cd281612c93565b840191505092915050565b60006020820190508181036000830152612cf78184612ca4565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612d2f82612d04565b9050919050565b612d3f81612d24565b8114612d4a57600080fd5b50565b600081359050612d5c81612d36565b92915050565b6000819050919050565b612d7581612d62565b8114612d8057600080fd5b50565b600081359050612d9281612d6c565b92915050565b60008060408385031215612daf57612dae612cff565b5b6000612dbd85828601612d4d565b9250506020612dce85828601612d83565b9150509250929050565b60008115159050919050565b612ded81612dd8565b82525050565b6000602082019050612e086000830184612de4565b92915050565b612e1781612d62565b82525050565b6000602082019050612e326000830184612e0e565b92915050565b600080600060608486031215612e5157612e50612cff565b5b6000612e5f86828701612d4d565b9350506020612e7086828701612d4d565b9250506040612e8186828701612d83565b9150509250925092565b600060ff82169050919050565b612ea181612e8b565b82525050565b6000602082019050612ebc6000830184612e98565b92915050565b6000819050919050565b612ed581612ec2565b82525050565b6000602082019050612ef06000830184612ecc565b92915050565b600060208284031215612f0c57612f0b612cff565b5b6000612f1a84828501612d4d565b91505092915050565b612f2c81612d24565b82525050565b6000602082019050612f476000830184612f23565b92915050565b600063ffffffff82169050919050565b612f6681612f4d565b82525050565b6000602082019050612f816000830184612f5d565b92915050565b600060208284031215612f9d57612f9c612cff565b5b6000612fab84828501612d83565b91505092915050565b612fbd81612e8b565b8114612fc857600080fd5b50565b600081359050612fda81612fb4565b92915050565b612fe981612ec2565b8114612ff457600080fd5b50565b60008135905061300681612fe0565b92915050565b60008060008060008060c0878903121561302957613028612cff565b5b600061303789828a01612d4d565b965050602061304889828a01612d83565b955050604061305989828a01612d83565b945050606061306a89828a01612fcb565b935050608061307b89828a01612ff7565b92505060a061308c89828a01612ff7565b9150509295509295509295565b600080600080600080600060e0888a0312156130b8576130b7612cff565b5b60006130c68a828b01612d4d565b97505060206130d78a828b01612d4d565b96505060406130e88a828b01612d83565b95505060606130f98a828b01612d83565b945050608061310a8a828b01612fcb565b93505060a061311b8a828b01612ff7565b92505060c061312c8a828b01612ff7565b91505092959891949750929550565b6000806040838503121561315257613151612cff565b5b600061316085828601612d4d565b925050602061317185828601612d4d565b9150509250929050565b61318481612f4d565b811461318f57600080fd5b50565b6000813590506131a18161317b565b92915050565b600080604083850312156131be576131bd612cff565b5b60006131cc85828601612d4d565b92505060206131dd85828601613192565b9150509250929050565b6131f081612f4d565b82525050565b60007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff82169050919050565b613227816131f6565b82525050565b60408201600082015161324360008501826131e7565b506020820151613256602085018261321e565b50505050565b6000604082019050613271600083018461322d565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806132be57607f821691505b602082108114156132d2576132d1613277565b5b50919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000613334602883612c4f565b915061333f826132d8565b604082019050919050565b6000602082019050818103600083015261336381613327565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006133a482612d62565b91506133af83612d62565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156133e4576133e361336a565b5b828201905092915050565b7f4552433230566f7465733a20626c6f636b206e6f7420796574206d696e656400600082015250565b6000613425601f83612c4f565b9150613430826133ef565b602082019050919050565b6000602082019050818103600083015261345481613418565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613491602083612c4f565b915061349c8261345b565b602082019050919050565b600060208201905081810360008301526134c081613484565b9050919050565b60006134d282612d62565b91506134dd83612d62565b9250828210156134f0576134ef61336a565b5b828203905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000613586602583612c4f565b91506135918261352a565b604082019050919050565b600060208201905081810360008301526135b581613579565b9050919050565b7f4552433230566f7465733a207369676e61747572652065787069726564000000600082015250565b60006135f2601d83612c4f565b91506135fd826135bc565b602082019050919050565b60006020820190508181036000830152613621816135e5565b9050919050565b600060808201905061363d6000830187612ecc565b61364a6020830186612f23565b6136576040830185612e0e565b6136646060830184612e0e565b95945050505050565b7f4552433230566f7465733a20696e76616c6964206e6f6e636500000000000000600082015250565b60006136a3601983612c4f565b91506136ae8261366d565b602082019050919050565b600060208201905081810360008301526136d281613696565b9050919050565b7f45524332305065726d69743a206578706972656420646561646c696e65000000600082015250565b600061370f601d83612c4f565b915061371a826136d9565b602082019050919050565b6000602082019050818103600083015261373e81613702565b9050919050565b600060c08201905061375a6000830189612ecc565b6137676020830188612f23565b6137746040830187612f23565b6137816060830186612e0e565b61378e6080830185612e0e565b61379b60a0830184612e0e565b979650505050505050565b7f45524332305065726d69743a20696e76616c6964207369676e61747572650000600082015250565b60006137dc601e83612c4f565b91506137e7826137a6565b602082019050919050565b6000602082019050818103600083015261380b816137cf565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061386e602683612c4f565b915061387982613812565b604082019050919050565b6000602082019050818103600083015261389d81613861565b9050919050565b6000815190506138b381612d6c565b92915050565b6000602082840312156138cf576138ce612cff565b5b60006138dd848285016138a4565b91505092915050565b60006040820190506138fb6000830185612f23565b6139086020830184612e0e565b9392505050565b61391881612dd8565b811461392357600080fd5b50565b6000815190506139358161390f565b92915050565b60006020828403121561395157613950612cff565b5b600061395f84828501613926565b91505092915050565b7f4552433230566f7465733a20746f74616c20737570706c79207269736b73206f60008201527f766572666c6f77696e6720766f74657300000000000000000000000000000000602082015250565b60006139c4603083612c4f565b91506139cf82613968565b604082019050919050565b600060208201905081810360008301526139f3816139b7565b9050919050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6000613a30601f83612c4f565b9150613a3b826139fa565b602082019050919050565b60006020820190508181036000830152613a5f81613a23565b9050919050565b7f53616665436173743a2076616c756520646f65736e27742066697420696e203260008201527f3234206269747300000000000000000000000000000000000000000000000000602082015250565b6000613ac2602783612c4f565b9150613acd82613a66565b604082019050919050565b60006020820190508181036000830152613af181613ab5565b9050919050565b7f53616665436173743a2076616c756520646f65736e27742066697420696e203360008201527f3220626974730000000000000000000000000000000000000000000000000000602082015250565b6000613b54602683612c4f565b9150613b5f82613af8565b604082019050919050565b60006020820190508181036000830152613b8381613b47565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000613be6602483612c4f565b9150613bf182613b8a565b604082019050919050565b60006020820190508181036000830152613c1581613bd9565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000613c78602283612c4f565b9150613c8382613c1c565b604082019050919050565b60006020820190508181036000830152613ca781613c6b565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000613d0a602583612c4f565b9150613d1582613cae565b604082019050919050565b60006020820190508181036000830152613d3981613cfd565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000613d9c602383612c4f565b9150613da782613d40565b604082019050919050565b60006020820190508181036000830152613dcb81613d8f565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000613e2e602683612c4f565b9150613e3982613dd2565b604082019050919050565b60006020820190508181036000830152613e5d81613e21565b9050919050565b7f5061757361626c653a206e6f7420706175736564000000000000000000000000600082015250565b6000613e9a601483612c4f565b9150613ea582613e64565b602082019050919050565b60006020820190508181036000830152613ec981613e8d565b9050919050565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b6000613f06601083612c4f565b9150613f1182613ed0565b602082019050919050565b60006020820190508181036000830152613f3581613ef9565b9050919050565b6000604082019050613f516000830185612e0e565b613f5e6020830184612e0e565b9392505050565b600060a082019050613f7a6000830188612ecc565b613f876020830187612ecc565b613f946040830186612ecc565b613fa16060830185612e0e565b613fae6080830184612f23565b9695505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613ff282612d62565b9150613ffd83612d62565b92508261400d5761400c613fb8565b5b828204905092915050565b600081905092915050565b7f1901000000000000000000000000000000000000000000000000000000000000600082015250565b6000614059600283614018565b915061406482614023565b600282019050919050565b6000819050919050565b61408a61408582612ec2565b61406f565b82525050565b600061409b8261404c565b91506140a78285614079565b6020820191506140b78284614079565b6020820191508190509392505050565b60006080820190506140dc6000830187612ecc565b6140e96020830186612e98565b6140f66040830185612ecc565b6141036060830184612ecc565b95945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f45434453413a20696e76616c6964207369676e61747572650000000000000000600082015250565b6000614171601883612c4f565b915061417c8261413b565b602082019050919050565b600060208201905081810360008301526141a081614164565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265206c656e67746800600082015250565b60006141dd601f83612c4f565b91506141e8826141a7565b602082019050919050565b6000602082019050818103600083015261420c816141d0565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265202773272076616c60008201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b600061426f602283612c4f565b915061427a82614213565b604082019050919050565b6000602082019050818103600083015261429e81614262565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265202776272076616c60008201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b6000614301602283612c4f565b915061430c826142a5565b604082019050919050565b60006020820190508181036000830152614330816142f4565b905091905056fea26469706673582212208b84560e3859519a977585732b219596d4f0e7666830b7491aedf2ea1ce7821364736f6c634300080a0033

Deployed ByteCode Sourcemap

30093:1434:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17832:100;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18746:169;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18153:108;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18923:492;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18052:93;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23833:115;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19423:215;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25478:268;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30400:65;;;:::i;:::-;;25122:128;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26512:114;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15681:86;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24963:151;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18269:127;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14852:94;;;:::i;:::-;;23697:128;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30331:61;;;:::i;:::-;;14629:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25754:259;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17940:104;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25258:212;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19646:413;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18404:175;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26634:591;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23044:645;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18587:151;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24805:150;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14954:192;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30472:328;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17832:100;17886:13;17919:5;17912:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17832:100;:::o;18746:169::-;18829:4;18846:39;18855:12;:10;:12::i;:::-;18869:7;18878:6;18846:8;:39::i;:::-;18903:4;18896:11;;18746:169;;;;:::o;18153:108::-;18214:7;18241:12;;18234:19;;18153:108;:::o;18923:492::-;19063:4;19080:36;19090:6;19098:9;19109:6;19080:9;:36::i;:::-;19129:24;19156:11;:19;19168:6;19156:19;;;;;;;;;;;;;;;:33;19176:12;:10;:12::i;:::-;19156:33;;;;;;;;;;;;;;;;19129:60;;19228:6;19208:16;:26;;19200:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;19315:57;19324:6;19332:12;:10;:12::i;:::-;19365:6;19346:16;:25;19315:8;:57::i;:::-;19403:4;19396:11;;;18923:492;;;;;:::o;18052:93::-;18110:5;18135:2;18128:9;;18052:93;:::o;23833:115::-;23893:7;23920:20;:18;:20::i;:::-;23913:27;;23833:115;:::o;19423:215::-;19511:4;19528:80;19537:12;:10;:12::i;:::-;19551:7;19597:10;19560:11;:25;19572:12;:10;:12::i;:::-;19560:25;;;;;;;;;;;;;;;:34;19586:7;19560:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;19528:8;:80::i;:::-;19626:4;19619:11;;19423:215;;;;:::o;25478:268::-;25576:7;25618:12;25604:11;:26;25596:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;25684:54;25703:12;:21;25716:7;25703:21;;;;;;;;;;;;;;;25726:11;25684:18;:54::i;:::-;25677:61;;25478:268;;;;:::o;30400:65::-;14775:12;:10;:12::i;:::-;14764:23;;:7;:5;:7::i;:::-;:23;;;14756:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30447:10:::1;:8;:10::i;:::-;30400:65::o:0;25122:128::-;25196:7;25223:10;:19;25234:7;25223:19;;;;;;;;;;;;;;;;;;;;;;;;;25216:26;;25122:128;;;:::o;26512:114::-;26584:34;26594:12;:10;:12::i;:::-;26608:9;26584;:34::i;:::-;26512:114;:::o;15681:86::-;15728:4;15752:7;;;;;;;;;;;15745:14;;15681:86;:::o;24963:151::-;25033:6;25059:47;25077:12;:21;25090:7;25077:21;;;;;;;;;;;;;;;:28;;;;25059:17;:47::i;:::-;25052:54;;24963:151;;;:::o;18269:127::-;18343:7;18370:9;:18;18380:7;18370:18;;;;;;;;;;;;;;;;18363:25;;18269:127;;;:::o;14852:94::-;14775:12;:10;:12::i;:::-;14764:23;;:7;:5;:7::i;:::-;:23;;;14756:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14917:21:::1;14935:1;14917:9;:21::i;:::-;14852:94::o:0;23697:128::-;23766:7;23793:24;:7;:14;23801:5;23793:14;;;;;;;;;;;;;;;:22;:24::i;:::-;23786:31;;23697:128;;;:::o;30331:61::-;14775:12;:10;:12::i;:::-;14764:23;;:7;:5;:7::i;:::-;:23;;;14756:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30376:8:::1;:6;:8::i;:::-;30331:61::o:0;14629:87::-;14675:7;14702:6;;;;;;;;;;;14695:13;;14629:87;:::o;25754:259::-;25841:7;25883:12;25869:11;:26;25861:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;25949:56;25968:23;25993:11;25949:18;:56::i;:::-;25942:63;;25754:259;;;:::o;17940:104::-;17996:13;18029:7;18022:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17940:104;:::o;25258:212::-;25331:7;25351:11;25365:12;:21;25378:7;25365:21;;;;;;;;;;;;;;;:28;;;;25351:42;;25418:1;25411:3;:8;:51;;25426:12;:21;25439:7;25426:21;;;;;;;;;;;;;;;25454:1;25448:3;:7;;;;:::i;:::-;25426:30;;;;;;;;:::i;:::-;;;;;;;;;:36;;;;;;;;;;;;25411:51;;;25422:1;25411:51;25404:58;;;;;25258:212;;;:::o;19646:413::-;19739:4;19756:24;19783:11;:25;19795:12;:10;:12::i;:::-;19783:25;;;;;;;;;;;;;;;:34;19809:7;19783:34;;;;;;;;;;;;;;;;19756:61;;19856:15;19836:16;:35;;19828:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;19949:67;19958:12;:10;:12::i;:::-;19972:7;20000:15;19981:16;:34;19949:8;:67::i;:::-;20047:4;20040:11;;;19646:413;;;;:::o;18404:175::-;18490:4;18507:42;18517:12;:10;:12::i;:::-;18531:9;18542:6;18507:9;:42::i;:::-;18567:4;18560:11;;18404:175;;;;:::o;26634:591::-;26861:6;26842:15;:25;;26834:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;26912:14;26929:174;26957:87;24559:71;27017:9;27028:5;27035:6;26984:58;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;26974:69;;;;;;26957:16;:87::i;:::-;27059:1;27075;27091;26929:13;:174::i;:::-;26912:191;;27131:17;27141:6;27131:9;:17::i;:::-;27122:5;:26;27114:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;27189:28;27199:6;27207:9;27189;:28::i;:::-;26823:402;26634:591;;;;;;:::o;23044:645::-;23288:8;23269:15;:27;;23261:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;23343:18;23385:16;23403:5;23410:7;23419:5;23426:16;23436:5;23426:9;:16::i;:::-;23444:8;23374:79;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;23364:90;;;;;;23343:111;;23467:12;23482:28;23499:10;23482:16;:28::i;:::-;23467:43;;23523:14;23540:28;23554:4;23560:1;23563;23566;23540:13;:28::i;:::-;23523:45;;23597:5;23587:15;;:6;:15;;;23579:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;23650:31;23659:5;23666:7;23675:5;23650:8;:31::i;:::-;23250:439;;;23044:645;;;;;;;:::o;18587:151::-;18676:7;18703:11;:18;18715:5;18703:18;;;;;;;;;;;;;;;:27;18722:7;18703:27;;;;;;;;;;;;;;;;18696:34;;18587:151;;;;:::o;24805:150::-;24884:17;;:::i;:::-;24921:12;:21;24934:7;24921:21;;;;;;;;;;;;;;;24943:3;24921:26;;;;;;;;;;:::i;:::-;;;;;;;;;24914:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24805:150;;;;:::o;14954:192::-;14775:12;:10;:12::i;:::-;14764:23;;:7;:5;:7::i;:::-;:23;;;14756:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15063:1:::1;15043:22;;:8;:22;;;;15035:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;15119:19;15129:8;15119:9;:19::i;:::-;14954:192:::0;:::o;30472:328::-;14775:12;:10;:12::i;:::-;14764:23;;:7;:5;:7::i;:::-;:23;;;14756:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30563:3:::1;30545:22;;:6;:22;;;30541:106;;;30585:7;:5;:7::i;:::-;30577:25;;:48;30603:21;30577:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;30633:7;;30541:106;30655:17;30682:6;30655:34;;30696:15;30714:10;:20;;;30743:4;30714:35;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30696:53;;30756:10;:19;;;30776:7;:5;:7::i;:::-;30785;30756:37;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;30533:267;;14835:1;30472:328:::0;:::o;27346:290::-;27431:28;27443:7;27452:6;27431:11;:28::i;:::-;27495:12;:10;:12::i;:::-;27478:29;;:13;:11;:13::i;:::-;:29;;27470:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;27573:55;27590:23;27615:4;27621:6;27573:16;:55::i;:::-;;;27346:290;;:::o;20808:399::-;20911:1;20892:21;;:7;:21;;;;20884:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;20962:49;20991:1;20995:7;21004:6;20962:20;:49::i;:::-;21040:6;21024:12;;:22;;;;;;;:::i;:::-;;;;;;;;21079:6;21057:9;:18;21067:7;21057:18;;;;;;;;;;;;;;;;:28;;;;;;;:::i;:::-;;;;;;;;21122:7;21101:37;;21118:1;21101:37;;;21131:6;21101:37;;;;;;:::i;:::-;;;;;;;;21151:48;21179:1;21183:7;21192:6;21151:19;:48::i;:::-;20808:399;;:::o;29816:98::-;29874:7;29905:1;29901;:5;;;;:::i;:::-;29894:12;;29816:98;;;;:::o;143:195::-;200:7;237:17;228:26;;:5;:26;;220:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;324:5;309:21;;143:195;;;:::o;945:190::-;1001:6;1037:16;1028:25;;:5;:25;;1020:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;1121:5;1107:20;;945:190;;;:::o;22202:125::-;;;;:::o;27846:262::-;27988:43;28014:4;28020:2;28024:6;27988:25;:43::i;:::-;28044:56;28061:15;28071:4;28061:9;:15::i;:::-;28078:13;28088:2;28078:9;:13::i;:::-;28093:6;28044:16;:56::i;:::-;27846:262;;;:::o;22335:124::-;;;;:::o;29922:103::-;29985:7;30016:1;30012;:5;;;;:::i;:::-;30005:12;;29922:103;;;;:::o;14104:98::-;14157:7;14184:10;14177:17;;14104:98;:::o;21814:380::-;21967:1;21950:19;;:5;:19;;;;21942:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22048:1;22029:21;;:7;:21;;;;22021:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22132:6;22102:11;:18;22114:5;22102:18;;;;;;;;;;;;;;;:27;22121:7;22102:27;;;;;;;;;;;;;;;:36;;;;22170:7;22154:32;;22163:5;22154:32;;;22179:6;22154:32;;;;;;:::i;:::-;;;;;;;;21814:380;;;:::o;20067:733::-;20225:1;20207:20;;:6;:20;;;;20199:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;20309:1;20288:23;;:9;:23;;;;20280:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;20364:47;20385:6;20393:9;20404:6;20364:20;:47::i;:::-;20424:21;20448:9;:17;20458:6;20448:17;;;;;;;;;;;;;;;;20424:41;;20501:6;20484:13;:23;;20476:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;20622:6;20606:13;:22;20586:9;:17;20596:6;20586:17;;;;;;;;;;;;;;;:42;;;;20674:6;20650:9;:20;20660:9;20650:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;20715:9;20698:35;;20707:6;20698:35;;;20726:6;20698:35;;;;;;:::i;:::-;;;;;;;;20746:46;20766:6;20774:9;20785:6;20746:19;:46::i;:::-;20188:612;20067:733;;;:::o;12669:314::-;12722:7;12763:12;12746:29;;12754:4;12746:29;;;:66;;;;;12796:16;12779:13;:33;12746:66;12742:234;;;12836:24;12829:31;;;;12742:234;12900:64;12922:10;12934:12;12948:15;12900:21;:64::i;:::-;12893:71;;12669:314;;:::o;26021:483::-;26120:7;26140:12;26155:5;:12;;;;26140:27;;26178:11;26204:236;26217:4;26211:3;:10;26204:236;;;26238:11;26252:23;26265:3;26270:4;26252:12;:23::i;:::-;26238:37;;26317:11;26294:5;26300:3;26294:10;;;;;;;;:::i;:::-;;;;;;;;;:20;;;;;;;;;;;;:34;;;26290:139;;;26356:3;26349:10;;26290:139;;;26412:1;26406:3;:7;;;;:::i;:::-;26400:13;;26290:139;26223:217;26204:236;;;26467:1;26459:4;:9;:37;;26475:5;26488:1;26481:4;:8;;;;:::i;:::-;26475:15;;;;;;;;:::i;:::-;;;;;;;;;:21;;;;;;;;;;;;26459:37;;;26471:1;26459:37;26452:44;;;;;;26021:483;;;;:::o;16099:120::-;15914:8;:6;:8::i;:::-;15906:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;16168:5:::1;16158:7;;:15;;;;;;;;;;;;;;;;;;16189:22;16198:12;:10;:12::i;:::-;16189:22;;;;;;:::i;:::-;;;;;;;;16099:120::o:0;28116:388::-;28201:23;28227:20;28237:9;28227;:20::i;:::-;28201:46;;28258:24;28285:20;28295:9;28285;:20::i;:::-;28258:47;;28340:9;28316:10;:21;28327:9;28316:21;;;;;;;;;;;;;;;;:33;;;;;;;;;;;;;;;;;;28411:9;28367:54;;28394:15;28367:54;;28383:9;28367:54;;;;;;;;;;;;28434:62;28451:15;28468:9;28479:16;28434;:62::i;:::-;28190:314;;28116:388;;:::o;15154:173::-;15210:16;15229:6;;;;;;;;;;;15210:25;;15255:8;15246:6;;:17;;;;;;;;;;;;;;;;;;15310:8;15279:40;;15300:8;15279:40;;;;;;;;;;;;15199:128;15154:173;:::o;5120:114::-;5185:7;5212;:14;;;5205:21;;5120:114;;;:::o;15973:118::-;15818:8;:6;:8::i;:::-;15817:9;15809:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;16043:4:::1;16033:7;;:14;;;;;;;;;;;;;;;;;;16063:20;16070:12;:10;:12::i;:::-;16063:20;;;;;;:::i;:::-;;;;;;;;15973:118::o:0;13262:167::-;13339:7;13366:55;13388:20;:18;:20::i;:::-;13410:10;13366:21;:55::i;:::-;13359:62;;13262:167;;;:::o;10676:279::-;10804:7;10825:17;10844:18;10866:25;10877:4;10883:1;10886;10889;10866:10;:25::i;:::-;10824:67;;;;10902:18;10914:5;10902:11;:18::i;:::-;10938:9;10931:16;;;;10676:279;;;;;;:::o;23956:207::-;24016:15;24044:30;24077:7;:14;24085:5;24077:14;;;;;;;;;;;;;;;24044:47;;24112:15;:5;:13;:15::i;:::-;24102:25;;24138:17;:5;:15;:17::i;:::-;24033:130;23956:207;;;:::o;27233:105::-;27286:7;27313:17;27306:24;;27233:105;:::o;29163:645::-;29337:17;29356;29386:11;29400:5;:12;;;;29386:26;;29442:1;29435:3;:8;:35;;29450:5;29462:1;29456:3;:7;;;;:::i;:::-;29450:14;;;;;;;;:::i;:::-;;;;;;;;;:20;;;;;;;;;;;;29435:35;;;29446:1;29435:35;29423:47;;;;29493:20;29496:9;29507:5;29493:2;:20;;:::i;:::-;29481:32;;29536:1;29530:3;:7;:51;;;;;29569:12;29541:5;29553:1;29547:3;:7;;;;:::i;:::-;29541:14;;;;;;;;:::i;:::-;;;;;;;;;:24;;;;;;;;;;;;:40;;;29530:51;29526:275;;;29621:29;29640:9;29621:18;:29::i;:::-;29598:5;29610:1;29604:3;:7;;;;:::i;:::-;29598:14;;;;;;;;:::i;:::-;;;;;;;;;:20;;;:52;;;;;;;;;;;;;;;;;;29526:275;;;29683:5;29694:94;;;;;;;;29717:31;29735:12;29717:17;:31::i;:::-;29694:94;;;;;;29757:29;29776:9;29757:18;:29::i;:::-;29694:94;;;;;29683:106;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29526:275;29375:433;29163:645;;;;;;:::o;30808:199::-;15818:8;:6;:8::i;:::-;15817:9;15809:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;30955:44:::1;30982:4;30988:2;30992:6;30955:26;:44::i;:::-;30808:199:::0;;;:::o;31015:193::-;31157:43;31183:4;31189:2;31193:6;31157:25;:43::i;:::-;31015:193;;;:::o;28512:643::-;28644:3;28637:10;;:3;:10;;;;:24;;;;;28660:1;28651:6;:10;28637:24;28633:515;;;28697:1;28682:17;;:3;:17;;;28678:224;;28721:17;28740;28761:54;28778:12;:17;28791:3;28778:17;;;;;;;;;;;;;;;28797:9;28808:6;28761:16;:54::i;:::-;28720:95;;;;28860:3;28839:47;;;28865:9;28876;28839:47;;;;;;;:::i;:::-;;;;;;;;28701:201;;28678:224;28937:1;28922:17;;:3;:17;;;28918:219;;28961:17;28980;29001:49;29018:12;:17;29031:3;29018:17;;;;;;;;;;;;;;;29037:4;29043:6;29001:16;:49::i;:::-;28960:90;;;;29095:3;29074:47;;;29100:9;29111;29074:47;;;;;;;:::i;:::-;;;;;;;;28941:196;;28918:219;28633:515;28512:643;;;:::o;12991:263::-;13135:7;13183:8;13193;13203:11;13216:13;13239:4;13172:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;13162:84;;;;;;13155:91;;12991:263;;;;;:::o;4521:156::-;4583:7;4668:1;4663;4659;:5;4658:11;;;;:::i;:::-;4653:1;4649;:5;4648:21;;;;:::i;:::-;4641:28;;4521:156;;;;:::o;11350:196::-;11443:7;11509:15;11526:10;11480:57;;;;;;;;;:::i;:::-;;;;;;;;;;;;;11470:68;;;;;;11463:75;;11350:196;;;;:::o;10004:664::-;10135:7;10144:12;10186:66;10181:1;10173:10;;:79;10169:163;;;10285:1;10289:30;10269:51;;;;;;10169:163;10351:2;10346:1;:7;;;;:18;;;;;10362:2;10357:1;:7;;;;10346:18;10342:102;;;10397:1;10401:30;10381:51;;;;;;10342:102;10456:14;10473:24;10483:4;10489:1;10492;10495;10473:24;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10456:41;;10530:1;10512:20;;:6;:20;;;10508:103;;;10565:1;10569:29;10549:50;;;;;;;10508:103;10631:6;10639:20;10623:37;;;;;10004:664;;;;;;;;:::o;7644:643::-;7722:20;7713:29;;;;;;;;:::i;:::-;;:5;:29;;;;;;;;:::i;:::-;;;7709:571;;;7759:7;;7709:571;7820:29;7811:38;;;;;;;;:::i;:::-;;:5;:38;;;;;;;;:::i;:::-;;;7807:473;;;7866:34;;;;;;;;;;:::i;:::-;;;;;;;;7807:473;7931:35;7922:44;;;;;;;;:::i;:::-;;:5;:44;;;;;;;;:::i;:::-;;;7918:362;;;7983:41;;;;;;;;;;:::i;:::-;;;;;;;;7918:362;8055:30;8046:39;;;;;;;;:::i;:::-;;:5;:39;;;;;;;;:::i;:::-;;;8042:238;;;8102:44;;;;;;;;;;:::i;:::-;;;;;;;;8042:238;8177:30;8168:39;;;;;;;;:::i;:::-;;:5;:39;;;;;;;;:::i;:::-;;;8164:116;;;8224:44;;;;;;;;;;:::i;:::-;;;;;;;;8164:116;7644:643;;:::o;5242:127::-;5349:1;5331:7;:14;;;:19;;;;;;;;;;;5242:127;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:307::-;355:1;365:113;379:6;376:1;373:13;365:113;;;464:1;459:3;455:11;449:18;445:1;440:3;436:11;429:39;401:2;398:1;394:10;389:15;;365:113;;;496:6;493:1;490:13;487:101;;;576:1;567:6;562:3;558:16;551:27;487:101;336:258;287:307;;;:::o;600:102::-;641:6;692:2;688:7;683:2;676:5;672:14;668:28;658:38;;600:102;;;:::o;708:364::-;796:3;824:39;857:5;824:39;:::i;:::-;879:71;943:6;938:3;879:71;:::i;:::-;872:78;;959:52;1004:6;999:3;992:4;985:5;981:16;959:52;:::i;:::-;1036:29;1058:6;1036:29;:::i;:::-;1031:3;1027:39;1020:46;;800:272;708:364;;;;:::o;1078:313::-;1191:4;1229:2;1218:9;1214:18;1206:26;;1278:9;1272:4;1268:20;1264:1;1253:9;1249:17;1242:47;1306:78;1379:4;1370:6;1306:78;:::i;:::-;1298:86;;1078:313;;;;:::o;1478:117::-;1587:1;1584;1577:12;1724:126;1761:7;1801:42;1794:5;1790:54;1779:65;;1724:126;;;:::o;1856:96::-;1893:7;1922:24;1940:5;1922:24;:::i;:::-;1911:35;;1856:96;;;:::o;1958:122::-;2031:24;2049:5;2031:24;:::i;:::-;2024:5;2021:35;2011:63;;2070:1;2067;2060:12;2011:63;1958:122;:::o;2086:139::-;2132:5;2170:6;2157:20;2148:29;;2186:33;2213:5;2186:33;:::i;:::-;2086:139;;;;:::o;2231:77::-;2268:7;2297:5;2286:16;;2231:77;;;:::o;2314:122::-;2387:24;2405:5;2387:24;:::i;:::-;2380:5;2377:35;2367:63;;2426:1;2423;2416:12;2367:63;2314:122;:::o;2442:139::-;2488:5;2526:6;2513:20;2504:29;;2542:33;2569:5;2542:33;:::i;:::-;2442:139;;;;:::o;2587:474::-;2655:6;2663;2712:2;2700:9;2691:7;2687:23;2683:32;2680:119;;;2718:79;;:::i;:::-;2680:119;2838:1;2863:53;2908:7;2899:6;2888:9;2884:22;2863:53;:::i;:::-;2853:63;;2809:117;2965:2;2991:53;3036:7;3027:6;3016:9;3012:22;2991:53;:::i;:::-;2981:63;;2936:118;2587:474;;;;;:::o;3067:90::-;3101:7;3144:5;3137:13;3130:21;3119:32;;3067:90;;;:::o;3163:109::-;3244:21;3259:5;3244:21;:::i;:::-;3239:3;3232:34;3163:109;;:::o;3278:210::-;3365:4;3403:2;3392:9;3388:18;3380:26;;3416:65;3478:1;3467:9;3463:17;3454:6;3416:65;:::i;:::-;3278:210;;;;:::o;3494:118::-;3581:24;3599:5;3581:24;:::i;:::-;3576:3;3569:37;3494:118;;:::o;3618:222::-;3711:4;3749:2;3738:9;3734:18;3726:26;;3762:71;3830:1;3819:9;3815:17;3806:6;3762:71;:::i;:::-;3618:222;;;;:::o;3846:619::-;3923:6;3931;3939;3988:2;3976:9;3967:7;3963:23;3959:32;3956:119;;;3994:79;;:::i;:::-;3956:119;4114:1;4139:53;4184:7;4175:6;4164:9;4160:22;4139:53;:::i;:::-;4129:63;;4085:117;4241:2;4267:53;4312:7;4303:6;4292:9;4288:22;4267:53;:::i;:::-;4257:63;;4212:118;4369:2;4395:53;4440:7;4431:6;4420:9;4416:22;4395:53;:::i;:::-;4385:63;;4340:118;3846:619;;;;;:::o;4471:86::-;4506:7;4546:4;4539:5;4535:16;4524:27;;4471:86;;;:::o;4563:112::-;4646:22;4662:5;4646:22;:::i;:::-;4641:3;4634:35;4563:112;;:::o;4681:214::-;4770:4;4808:2;4797:9;4793:18;4785:26;;4821:67;4885:1;4874:9;4870:17;4861:6;4821:67;:::i;:::-;4681:214;;;;:::o;4901:77::-;4938:7;4967:5;4956:16;;4901:77;;;:::o;4984:118::-;5071:24;5089:5;5071:24;:::i;:::-;5066:3;5059:37;4984:118;;:::o;5108:222::-;5201:4;5239:2;5228:9;5224:18;5216:26;;5252:71;5320:1;5309:9;5305:17;5296:6;5252:71;:::i;:::-;5108:222;;;;:::o;5336:329::-;5395:6;5444:2;5432:9;5423:7;5419:23;5415:32;5412:119;;;5450:79;;:::i;:::-;5412:119;5570:1;5595:53;5640:7;5631:6;5620:9;5616:22;5595:53;:::i;:::-;5585:63;;5541:117;5336:329;;;;:::o;5671:118::-;5758:24;5776:5;5758:24;:::i;:::-;5753:3;5746:37;5671:118;;:::o;5795:222::-;5888:4;5926:2;5915:9;5911:18;5903:26;;5939:71;6007:1;5996:9;5992:17;5983:6;5939:71;:::i;:::-;5795:222;;;;:::o;6023:93::-;6059:7;6099:10;6092:5;6088:22;6077:33;;6023:93;;;:::o;6122:115::-;6207:23;6224:5;6207:23;:::i;:::-;6202:3;6195:36;6122:115;;:::o;6243:218::-;6334:4;6372:2;6361:9;6357:18;6349:26;;6385:69;6451:1;6440:9;6436:17;6427:6;6385:69;:::i;:::-;6243:218;;;;:::o;6467:329::-;6526:6;6575:2;6563:9;6554:7;6550:23;6546:32;6543:119;;;6581:79;;:::i;:::-;6543:119;6701:1;6726:53;6771:7;6762:6;6751:9;6747:22;6726:53;:::i;:::-;6716:63;;6672:117;6467:329;;;;:::o;6802:118::-;6873:22;6889:5;6873:22;:::i;:::-;6866:5;6863:33;6853:61;;6910:1;6907;6900:12;6853:61;6802:118;:::o;6926:135::-;6970:5;7008:6;6995:20;6986:29;;7024:31;7049:5;7024:31;:::i;:::-;6926:135;;;;:::o;7067:122::-;7140:24;7158:5;7140:24;:::i;:::-;7133:5;7130:35;7120:63;;7179:1;7176;7169:12;7120:63;7067:122;:::o;7195:139::-;7241:5;7279:6;7266:20;7257:29;;7295:33;7322:5;7295:33;:::i;:::-;7195:139;;;;:::o;7340:1053::-;7442:6;7450;7458;7466;7474;7482;7531:3;7519:9;7510:7;7506:23;7502:33;7499:120;;;7538:79;;:::i;:::-;7499:120;7658:1;7683:53;7728:7;7719:6;7708:9;7704:22;7683:53;:::i;:::-;7673:63;;7629:117;7785:2;7811:53;7856:7;7847:6;7836:9;7832:22;7811:53;:::i;:::-;7801:63;;7756:118;7913:2;7939:53;7984:7;7975:6;7964:9;7960:22;7939:53;:::i;:::-;7929:63;;7884:118;8041:2;8067:51;8110:7;8101:6;8090:9;8086:22;8067:51;:::i;:::-;8057:61;;8012:116;8167:3;8194:53;8239:7;8230:6;8219:9;8215:22;8194:53;:::i;:::-;8184:63;;8138:119;8296:3;8323:53;8368:7;8359:6;8348:9;8344:22;8323:53;:::i;:::-;8313:63;;8267:119;7340:1053;;;;;;;;:::o;8399:1199::-;8510:6;8518;8526;8534;8542;8550;8558;8607:3;8595:9;8586:7;8582:23;8578:33;8575:120;;;8614:79;;:::i;:::-;8575:120;8734:1;8759:53;8804:7;8795:6;8784:9;8780:22;8759:53;:::i;:::-;8749:63;;8705:117;8861:2;8887:53;8932:7;8923:6;8912:9;8908:22;8887:53;:::i;:::-;8877:63;;8832:118;8989:2;9015:53;9060:7;9051:6;9040:9;9036:22;9015:53;:::i;:::-;9005:63;;8960:118;9117:2;9143:53;9188:7;9179:6;9168:9;9164:22;9143:53;:::i;:::-;9133:63;;9088:118;9245:3;9272:51;9315:7;9306:6;9295:9;9291:22;9272:51;:::i;:::-;9262:61;;9216:117;9372:3;9399:53;9444:7;9435:6;9424:9;9420:22;9399:53;:::i;:::-;9389:63;;9343:119;9501:3;9528:53;9573:7;9564:6;9553:9;9549:22;9528:53;:::i;:::-;9518:63;;9472:119;8399:1199;;;;;;;;;;:::o;9604:474::-;9672:6;9680;9729:2;9717:9;9708:7;9704:23;9700:32;9697:119;;;9735:79;;:::i;:::-;9697:119;9855:1;9880:53;9925:7;9916:6;9905:9;9901:22;9880:53;:::i;:::-;9870:63;;9826:117;9982:2;10008:53;10053:7;10044:6;10033:9;10029:22;10008:53;:::i;:::-;9998:63;;9953:118;9604:474;;;;;:::o;10084:120::-;10156:23;10173:5;10156:23;:::i;:::-;10149:5;10146:34;10136:62;;10194:1;10191;10184:12;10136:62;10084:120;:::o;10210:137::-;10255:5;10293:6;10280:20;10271:29;;10309:32;10335:5;10309:32;:::i;:::-;10210:137;;;;:::o;10353:472::-;10420:6;10428;10477:2;10465:9;10456:7;10452:23;10448:32;10445:119;;;10483:79;;:::i;:::-;10445:119;10603:1;10628:53;10673:7;10664:6;10653:9;10649:22;10628:53;:::i;:::-;10618:63;;10574:117;10730:2;10756:52;10800:7;10791:6;10780:9;10776:22;10756:52;:::i;:::-;10746:62;;10701:117;10353:472;;;;;:::o;10831:105::-;10906:23;10923:5;10906:23;:::i;:::-;10901:3;10894:36;10831:105;;:::o;10942:142::-;10979:7;11019:58;11012:5;11008:70;10997:81;;10942:142;;;:::o;11090:108::-;11167:24;11185:5;11167:24;:::i;:::-;11162:3;11155:37;11090:108;;:::o;11272:517::-;11425:4;11420:3;11416:14;11517:4;11510:5;11506:16;11500:23;11536:61;11591:4;11586:3;11582:14;11568:12;11536:61;:::i;:::-;11440:167;11690:4;11683:5;11679:16;11673:23;11709:63;11766:4;11761:3;11757:14;11743:12;11709:63;:::i;:::-;11617:165;11394:395;11272:517;;:::o;11795:334::-;11944:4;11982:2;11971:9;11967:18;11959:26;;11995:127;12119:1;12108:9;12104:17;12095:6;11995:127;:::i;:::-;11795:334;;;;:::o;12135:180::-;12183:77;12180:1;12173:88;12280:4;12277:1;12270:15;12304:4;12301:1;12294:15;12321:320;12365:6;12402:1;12396:4;12392:12;12382:22;;12449:1;12443:4;12439:12;12470:18;12460:81;;12526:4;12518:6;12514:17;12504:27;;12460:81;12588:2;12580:6;12577:14;12557:18;12554:38;12551:84;;;12607:18;;:::i;:::-;12551:84;12372:269;12321:320;;;:::o;12647:227::-;12787:34;12783:1;12775:6;12771:14;12764:58;12856:10;12851:2;12843:6;12839:15;12832:35;12647:227;:::o;12880:366::-;13022:3;13043:67;13107:2;13102:3;13043:67;:::i;:::-;13036:74;;13119:93;13208:3;13119:93;:::i;:::-;13237:2;13232:3;13228:12;13221:19;;12880:366;;;:::o;13252:419::-;13418:4;13456:2;13445:9;13441:18;13433:26;;13505:9;13499:4;13495:20;13491:1;13480:9;13476:17;13469:47;13533:131;13659:4;13533:131;:::i;:::-;13525:139;;13252:419;;;:::o;13677:180::-;13725:77;13722:1;13715:88;13822:4;13819:1;13812:15;13846:4;13843:1;13836:15;13863:305;13903:3;13922:20;13940:1;13922:20;:::i;:::-;13917:25;;13956:20;13974:1;13956:20;:::i;:::-;13951:25;;14110:1;14042:66;14038:74;14035:1;14032:81;14029:107;;;14116:18;;:::i;:::-;14029:107;14160:1;14157;14153:9;14146:16;;13863:305;;;;:::o;14174:181::-;14314:33;14310:1;14302:6;14298:14;14291:57;14174:181;:::o;14361:366::-;14503:3;14524:67;14588:2;14583:3;14524:67;:::i;:::-;14517:74;;14600:93;14689:3;14600:93;:::i;:::-;14718:2;14713:3;14709:12;14702:19;;14361:366;;;:::o;14733:419::-;14899:4;14937:2;14926:9;14922:18;14914:26;;14986:9;14980:4;14976:20;14972:1;14961:9;14957:17;14950:47;15014:131;15140:4;15014:131;:::i;:::-;15006:139;;14733:419;;;:::o;15158:182::-;15298:34;15294:1;15286:6;15282:14;15275:58;15158:182;:::o;15346:366::-;15488:3;15509:67;15573:2;15568:3;15509:67;:::i;:::-;15502:74;;15585:93;15674:3;15585:93;:::i;:::-;15703:2;15698:3;15694:12;15687:19;;15346:366;;;:::o;15718:419::-;15884:4;15922:2;15911:9;15907:18;15899:26;;15971:9;15965:4;15961:20;15957:1;15946:9;15942:17;15935:47;15999:131;16125:4;15999:131;:::i;:::-;15991:139;;15718:419;;;:::o;16143:191::-;16183:4;16203:20;16221:1;16203:20;:::i;:::-;16198:25;;16237:20;16255:1;16237:20;:::i;:::-;16232:25;;16276:1;16273;16270:8;16267:34;;;16281:18;;:::i;:::-;16267:34;16326:1;16323;16319:9;16311:17;;16143:191;;;;:::o;16340:180::-;16388:77;16385:1;16378:88;16485:4;16482:1;16475:15;16509:4;16506:1;16499:15;16526:224;16666:34;16662:1;16654:6;16650:14;16643:58;16735:7;16730:2;16722:6;16718:15;16711:32;16526:224;:::o;16756:366::-;16898:3;16919:67;16983:2;16978:3;16919:67;:::i;:::-;16912:74;;16995:93;17084:3;16995:93;:::i;:::-;17113:2;17108:3;17104:12;17097:19;;16756:366;;;:::o;17128:419::-;17294:4;17332:2;17321:9;17317:18;17309:26;;17381:9;17375:4;17371:20;17367:1;17356:9;17352:17;17345:47;17409:131;17535:4;17409:131;:::i;:::-;17401:139;;17128:419;;;:::o;17553:179::-;17693:31;17689:1;17681:6;17677:14;17670:55;17553:179;:::o;17738:366::-;17880:3;17901:67;17965:2;17960:3;17901:67;:::i;:::-;17894:74;;17977:93;18066:3;17977:93;:::i;:::-;18095:2;18090:3;18086:12;18079:19;;17738:366;;;:::o;18110:419::-;18276:4;18314:2;18303:9;18299:18;18291:26;;18363:9;18357:4;18353:20;18349:1;18338:9;18334:17;18327:47;18391:131;18517:4;18391:131;:::i;:::-;18383:139;;18110:419;;;:::o;18535:553::-;18712:4;18750:3;18739:9;18735:19;18727:27;;18764:71;18832:1;18821:9;18817:17;18808:6;18764:71;:::i;:::-;18845:72;18913:2;18902:9;18898:18;18889:6;18845:72;:::i;:::-;18927;18995:2;18984:9;18980:18;18971:6;18927:72;:::i;:::-;19009;19077:2;19066:9;19062:18;19053:6;19009:72;:::i;:::-;18535:553;;;;;;;:::o;19094:175::-;19234:27;19230:1;19222:6;19218:14;19211:51;19094:175;:::o;19275:366::-;19417:3;19438:67;19502:2;19497:3;19438:67;:::i;:::-;19431:74;;19514:93;19603:3;19514:93;:::i;:::-;19632:2;19627:3;19623:12;19616:19;;19275:366;;;:::o;19647:419::-;19813:4;19851:2;19840:9;19836:18;19828:26;;19900:9;19894:4;19890:20;19886:1;19875:9;19871:17;19864:47;19928:131;20054:4;19928:131;:::i;:::-;19920:139;;19647:419;;;:::o;20072:179::-;20212:31;20208:1;20200:6;20196:14;20189:55;20072:179;:::o;20257:366::-;20399:3;20420:67;20484:2;20479:3;20420:67;:::i;:::-;20413:74;;20496:93;20585:3;20496:93;:::i;:::-;20614:2;20609:3;20605:12;20598:19;;20257:366;;;:::o;20629:419::-;20795:4;20833:2;20822:9;20818:18;20810:26;;20882:9;20876:4;20872:20;20868:1;20857:9;20853:17;20846:47;20910:131;21036:4;20910:131;:::i;:::-;20902:139;;20629:419;;;:::o;21054:775::-;21287:4;21325:3;21314:9;21310:19;21302:27;;21339:71;21407:1;21396:9;21392:17;21383:6;21339:71;:::i;:::-;21420:72;21488:2;21477:9;21473:18;21464:6;21420:72;:::i;:::-;21502;21570:2;21559:9;21555:18;21546:6;21502:72;:::i;:::-;21584;21652:2;21641:9;21637:18;21628:6;21584:72;:::i;:::-;21666:73;21734:3;21723:9;21719:19;21710:6;21666:73;:::i;:::-;21749;21817:3;21806:9;21802:19;21793:6;21749:73;:::i;:::-;21054:775;;;;;;;;;:::o;21835:180::-;21975:32;21971:1;21963:6;21959:14;21952:56;21835:180;:::o;22021:366::-;22163:3;22184:67;22248:2;22243:3;22184:67;:::i;:::-;22177:74;;22260:93;22349:3;22260:93;:::i;:::-;22378:2;22373:3;22369:12;22362:19;;22021:366;;;:::o;22393:419::-;22559:4;22597:2;22586:9;22582:18;22574:26;;22646:9;22640:4;22636:20;22632:1;22621:9;22617:17;22610:47;22674:131;22800:4;22674:131;:::i;:::-;22666:139;;22393:419;;;:::o;22818:225::-;22958:34;22954:1;22946:6;22942:14;22935:58;23027:8;23022:2;23014:6;23010:15;23003:33;22818:225;:::o;23049:366::-;23191:3;23212:67;23276:2;23271:3;23212:67;:::i;:::-;23205:74;;23288:93;23377:3;23288:93;:::i;:::-;23406:2;23401:3;23397:12;23390:19;;23049:366;;;:::o;23421:419::-;23587:4;23625:2;23614:9;23610:18;23602:26;;23674:9;23668:4;23664:20;23660:1;23649:9;23645:17;23638:47;23702:131;23828:4;23702:131;:::i;:::-;23694:139;;23421:419;;;:::o;23846:143::-;23903:5;23934:6;23928:13;23919:22;;23950:33;23977:5;23950:33;:::i;:::-;23846:143;;;;:::o;23995:351::-;24065:6;24114:2;24102:9;24093:7;24089:23;24085:32;24082:119;;;24120:79;;:::i;:::-;24082:119;24240:1;24265:64;24321:7;24312:6;24301:9;24297:22;24265:64;:::i;:::-;24255:74;;24211:128;23995:351;;;;:::o;24352:332::-;24473:4;24511:2;24500:9;24496:18;24488:26;;24524:71;24592:1;24581:9;24577:17;24568:6;24524:71;:::i;:::-;24605:72;24673:2;24662:9;24658:18;24649:6;24605:72;:::i;:::-;24352:332;;;;;:::o;24690:116::-;24760:21;24775:5;24760:21;:::i;:::-;24753:5;24750:32;24740:60;;24796:1;24793;24786:12;24740:60;24690:116;:::o;24812:137::-;24866:5;24897:6;24891:13;24882:22;;24913:30;24937:5;24913:30;:::i;:::-;24812:137;;;;:::o;24955:345::-;25022:6;25071:2;25059:9;25050:7;25046:23;25042:32;25039:119;;;25077:79;;:::i;:::-;25039:119;25197:1;25222:61;25275:7;25266:6;25255:9;25251:22;25222:61;:::i;:::-;25212:71;;25168:125;24955:345;;;;:::o;25306:235::-;25446:34;25442:1;25434:6;25430:14;25423:58;25515:18;25510:2;25502:6;25498:15;25491:43;25306:235;:::o;25547:366::-;25689:3;25710:67;25774:2;25769:3;25710:67;:::i;:::-;25703:74;;25786:93;25875:3;25786:93;:::i;:::-;25904:2;25899:3;25895:12;25888:19;;25547:366;;;:::o;25919:419::-;26085:4;26123:2;26112:9;26108:18;26100:26;;26172:9;26166:4;26162:20;26158:1;26147:9;26143:17;26136:47;26200:131;26326:4;26200:131;:::i;:::-;26192:139;;25919:419;;;:::o;26344:181::-;26484:33;26480:1;26472:6;26468:14;26461:57;26344:181;:::o;26531:366::-;26673:3;26694:67;26758:2;26753:3;26694:67;:::i;:::-;26687:74;;26770:93;26859:3;26770:93;:::i;:::-;26888:2;26883:3;26879:12;26872:19;;26531:366;;;:::o;26903:419::-;27069:4;27107:2;27096:9;27092:18;27084:26;;27156:9;27150:4;27146:20;27142:1;27131:9;27127:17;27120:47;27184:131;27310:4;27184:131;:::i;:::-;27176:139;;26903:419;;;:::o;27328:226::-;27468:34;27464:1;27456:6;27452:14;27445:58;27537:9;27532:2;27524:6;27520:15;27513:34;27328:226;:::o;27560:366::-;27702:3;27723:67;27787:2;27782:3;27723:67;:::i;:::-;27716:74;;27799:93;27888:3;27799:93;:::i;:::-;27917:2;27912:3;27908:12;27901:19;;27560:366;;;:::o;27932:419::-;28098:4;28136:2;28125:9;28121:18;28113:26;;28185:9;28179:4;28175:20;28171:1;28160:9;28156:17;28149:47;28213:131;28339:4;28213:131;:::i;:::-;28205:139;;27932:419;;;:::o;28357:225::-;28497:34;28493:1;28485:6;28481:14;28474:58;28566:8;28561:2;28553:6;28549:15;28542:33;28357:225;:::o;28588:366::-;28730:3;28751:67;28815:2;28810:3;28751:67;:::i;:::-;28744:74;;28827:93;28916:3;28827:93;:::i;:::-;28945:2;28940:3;28936:12;28929:19;;28588:366;;;:::o;28960:419::-;29126:4;29164:2;29153:9;29149:18;29141:26;;29213:9;29207:4;29203:20;29199:1;29188:9;29184:17;29177:47;29241:131;29367:4;29241:131;:::i;:::-;29233:139;;28960:419;;;:::o;29385:223::-;29525:34;29521:1;29513:6;29509:14;29502:58;29594:6;29589:2;29581:6;29577:15;29570:31;29385:223;:::o;29614:366::-;29756:3;29777:67;29841:2;29836:3;29777:67;:::i;:::-;29770:74;;29853:93;29942:3;29853:93;:::i;:::-;29971:2;29966:3;29962:12;29955:19;;29614:366;;;:::o;29986:419::-;30152:4;30190:2;30179:9;30175:18;30167:26;;30239:9;30233:4;30229:20;30225:1;30214:9;30210:17;30203:47;30267:131;30393:4;30267:131;:::i;:::-;30259:139;;29986:419;;;:::o;30411:221::-;30551:34;30547:1;30539:6;30535:14;30528:58;30620:4;30615:2;30607:6;30603:15;30596:29;30411:221;:::o;30638:366::-;30780:3;30801:67;30865:2;30860:3;30801:67;:::i;:::-;30794:74;;30877:93;30966:3;30877:93;:::i;:::-;30995:2;30990:3;30986:12;30979:19;;30638:366;;;:::o;31010:419::-;31176:4;31214:2;31203:9;31199:18;31191:26;;31263:9;31257:4;31253:20;31249:1;31238:9;31234:17;31227:47;31291:131;31417:4;31291:131;:::i;:::-;31283:139;;31010:419;;;:::o;31435:224::-;31575:34;31571:1;31563:6;31559:14;31552:58;31644:7;31639:2;31631:6;31627:15;31620:32;31435:224;:::o;31665:366::-;31807:3;31828:67;31892:2;31887:3;31828:67;:::i;:::-;31821:74;;31904:93;31993:3;31904:93;:::i;:::-;32022:2;32017:3;32013:12;32006:19;;31665:366;;;:::o;32037:419::-;32203:4;32241:2;32230:9;32226:18;32218:26;;32290:9;32284:4;32280:20;32276:1;32265:9;32261:17;32254:47;32318:131;32444:4;32318:131;:::i;:::-;32310:139;;32037:419;;;:::o;32462:222::-;32602:34;32598:1;32590:6;32586:14;32579:58;32671:5;32666:2;32658:6;32654:15;32647:30;32462:222;:::o;32690:366::-;32832:3;32853:67;32917:2;32912:3;32853:67;:::i;:::-;32846:74;;32929:93;33018:3;32929:93;:::i;:::-;33047:2;33042:3;33038:12;33031:19;;32690:366;;;:::o;33062:419::-;33228:4;33266:2;33255:9;33251:18;33243:26;;33315:9;33309:4;33305:20;33301:1;33290:9;33286:17;33279:47;33343:131;33469:4;33343:131;:::i;:::-;33335:139;;33062:419;;;:::o;33487:225::-;33627:34;33623:1;33615:6;33611:14;33604:58;33696:8;33691:2;33683:6;33679:15;33672:33;33487:225;:::o;33718:366::-;33860:3;33881:67;33945:2;33940:3;33881:67;:::i;:::-;33874:74;;33957:93;34046:3;33957:93;:::i;:::-;34075:2;34070:3;34066:12;34059:19;;33718:366;;;:::o;34090:419::-;34256:4;34294:2;34283:9;34279:18;34271:26;;34343:9;34337:4;34333:20;34329:1;34318:9;34314:17;34307:47;34371:131;34497:4;34371:131;:::i;:::-;34363:139;;34090:419;;;:::o;34515:170::-;34655:22;34651:1;34643:6;34639:14;34632:46;34515:170;:::o;34691:366::-;34833:3;34854:67;34918:2;34913:3;34854:67;:::i;:::-;34847:74;;34930:93;35019:3;34930:93;:::i;:::-;35048:2;35043:3;35039:12;35032:19;;34691:366;;;:::o;35063:419::-;35229:4;35267:2;35256:9;35252:18;35244:26;;35316:9;35310:4;35306:20;35302:1;35291:9;35287:17;35280:47;35344:131;35470:4;35344:131;:::i;:::-;35336:139;;35063:419;;;:::o;35488:166::-;35628:18;35624:1;35616:6;35612:14;35605:42;35488:166;:::o;35660:366::-;35802:3;35823:67;35887:2;35882:3;35823:67;:::i;:::-;35816:74;;35899:93;35988:3;35899:93;:::i;:::-;36017:2;36012:3;36008:12;36001:19;;35660:366;;;:::o;36032:419::-;36198:4;36236:2;36225:9;36221:18;36213:26;;36285:9;36279:4;36275:20;36271:1;36260:9;36256:17;36249:47;36313:131;36439:4;36313:131;:::i;:::-;36305:139;;36032:419;;;:::o;36457:332::-;36578:4;36616:2;36605:9;36601:18;36593:26;;36629:71;36697:1;36686:9;36682:17;36673:6;36629:71;:::i;:::-;36710:72;36778:2;36767:9;36763:18;36754:6;36710:72;:::i;:::-;36457:332;;;;;:::o;36795:664::-;37000:4;37038:3;37027:9;37023:19;37015:27;;37052:71;37120:1;37109:9;37105:17;37096:6;37052:71;:::i;:::-;37133:72;37201:2;37190:9;37186:18;37177:6;37133:72;:::i;:::-;37215;37283:2;37272:9;37268:18;37259:6;37215:72;:::i;:::-;37297;37365:2;37354:9;37350:18;37341:6;37297:72;:::i;:::-;37379:73;37447:3;37436:9;37432:19;37423:6;37379:73;:::i;:::-;36795:664;;;;;;;;:::o;37465:180::-;37513:77;37510:1;37503:88;37610:4;37607:1;37600:15;37634:4;37631:1;37624:15;37651:185;37691:1;37708:20;37726:1;37708:20;:::i;:::-;37703:25;;37742:20;37760:1;37742:20;:::i;:::-;37737:25;;37781:1;37771:35;;37786:18;;:::i;:::-;37771:35;37828:1;37825;37821:9;37816:14;;37651:185;;;;:::o;37842:148::-;37944:11;37981:3;37966:18;;37842:148;;;;:::o;37996:214::-;38136:66;38132:1;38124:6;38120:14;38113:90;37996:214;:::o;38216:400::-;38376:3;38397:84;38479:1;38474:3;38397:84;:::i;:::-;38390:91;;38490:93;38579:3;38490:93;:::i;:::-;38608:1;38603:3;38599:11;38592:18;;38216:400;;;:::o;38622:79::-;38661:7;38690:5;38679:16;;38622:79;;;:::o;38707:157::-;38812:45;38832:24;38850:5;38832:24;:::i;:::-;38812:45;:::i;:::-;38807:3;38800:58;38707:157;;:::o;38870:663::-;39111:3;39133:148;39277:3;39133:148;:::i;:::-;39126:155;;39291:75;39362:3;39353:6;39291:75;:::i;:::-;39391:2;39386:3;39382:12;39375:19;;39404:75;39475:3;39466:6;39404:75;:::i;:::-;39504:2;39499:3;39495:12;39488:19;;39524:3;39517:10;;38870:663;;;;;:::o;39539:545::-;39712:4;39750:3;39739:9;39735:19;39727:27;;39764:71;39832:1;39821:9;39817:17;39808:6;39764:71;:::i;:::-;39845:68;39909:2;39898:9;39894:18;39885:6;39845:68;:::i;:::-;39923:72;39991:2;39980:9;39976:18;39967:6;39923:72;:::i;:::-;40005;40073:2;40062:9;40058:18;40049:6;40005:72;:::i;:::-;39539:545;;;;;;;:::o;40090:180::-;40138:77;40135:1;40128:88;40235:4;40232:1;40225:15;40259:4;40256:1;40249:15;40276:174;40416:26;40412:1;40404:6;40400:14;40393:50;40276:174;:::o;40456:366::-;40598:3;40619:67;40683:2;40678:3;40619:67;:::i;:::-;40612:74;;40695:93;40784:3;40695:93;:::i;:::-;40813:2;40808:3;40804:12;40797:19;;40456:366;;;:::o;40828:419::-;40994:4;41032:2;41021:9;41017:18;41009:26;;41081:9;41075:4;41071:20;41067:1;41056:9;41052:17;41045:47;41109:131;41235:4;41109:131;:::i;:::-;41101:139;;40828:419;;;:::o;41253:181::-;41393:33;41389:1;41381:6;41377:14;41370:57;41253:181;:::o;41440:366::-;41582:3;41603:67;41667:2;41662:3;41603:67;:::i;:::-;41596:74;;41679:93;41768:3;41679:93;:::i;:::-;41797:2;41792:3;41788:12;41781:19;;41440:366;;;:::o;41812:419::-;41978:4;42016:2;42005:9;42001:18;41993:26;;42065:9;42059:4;42055:20;42051:1;42040:9;42036:17;42029:47;42093:131;42219:4;42093:131;:::i;:::-;42085:139;;41812:419;;;:::o;42237:221::-;42377:34;42373:1;42365:6;42361:14;42354:58;42446:4;42441:2;42433:6;42429:15;42422:29;42237:221;:::o;42464:366::-;42606:3;42627:67;42691:2;42686:3;42627:67;:::i;:::-;42620:74;;42703:93;42792:3;42703:93;:::i;:::-;42821:2;42816:3;42812:12;42805:19;;42464:366;;;:::o;42836:419::-;43002:4;43040:2;43029:9;43025:18;43017:26;;43089:9;43083:4;43079:20;43075:1;43064:9;43060:17;43053:47;43117:131;43243:4;43117:131;:::i;:::-;43109:139;;42836:419;;;:::o;43261:221::-;43401:34;43397:1;43389:6;43385:14;43378:58;43470:4;43465:2;43457:6;43453:15;43446:29;43261:221;:::o;43488:366::-;43630:3;43651:67;43715:2;43710:3;43651:67;:::i;:::-;43644:74;;43727:93;43816:3;43727:93;:::i;:::-;43845:2;43840:3;43836:12;43829:19;;43488:366;;;:::o;43860:419::-;44026:4;44064:2;44053:9;44049:18;44041:26;;44113:9;44107:4;44103:20;44099:1;44088:9;44084:17;44077:47;44141:131;44267:4;44141:131;:::i;:::-;44133:139;;43860:419;;;:::o

Swarm Source

ipfs://8b84560e3859519a977585732b219596d4f0e7666830b7491aedf2ea1ce78213
Block Transaction Gas Used Reward
Age Block Fee Address BC Fee Address Voting Power Jailed Incoming
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.