Contract
0xd45c88fa2381d29c73a865b0d163906490255567
1
Contract Overview
Balance:
0 AVAX
AVAX Value:
$0.00
My Name Tag:
Not Available, login to update
Txn Hash | Method |
Block
|
From
|
To
|
Value | [Txn Fee] | |||
---|---|---|---|---|---|---|---|---|---|
0x4283fd664d06020f867cc6da2cba4b8a13e112e53590e069d810d5a3209d37f3 | 0x60806040 | 27478877 | 5 days 10 hrs ago | 0xd5004331bd2ff309fb39a39621fcdf31456bebf2 | IN | Create: LeonPay | 0 AVAX | 0.1145588125 |
[ Download CSV Export ]
Contract Name:
LeonPay
Compiler Version
v0.8.0+commit.c7dfd78e
Contract Source Code (Solidity)
/** *Submitted for verification at snowtrace.io on 2023-03-17 */ // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /** * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect. * * The initialization functions use a version number. Once a version number is used, it is consumed and cannot be * reused. This mechanism prevents re-execution of each "step" but allows the creation of new initialization steps in * case an upgrade adds a module that needs to be initialized. * * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}. * * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity. * * [CAUTION] * ==== * Avoid leaving a contract uninitialized. * * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation * contract, which may impact the proxy. To prevent the implementation contract from being used, you should invoke * the {_disableInitializers} function in the constructor to automatically lock it when it is deployed: */ abstract contract Initializable { /** * @dev Indicates that the contract has been initialized. */ bool private _initialized; /** * @dev Indicates that the contract is in the process of being initialized. */ bool private _initializing; /** * @dev Modifier to protect an initializer function from being invoked twice. */ modifier initializer() { require(_initializing || !_initialized, "Initializable: contract is already initialized"); bool isTopLevelCall = !_initializing; if (isTopLevelCall) { _initializing = true; _initialized = true; } _; if (isTopLevelCall) { _initializing = false; } } } /* * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract ContextUpgradeable is Initializable { function __Context_init() internal initializer { __Context_init_unchained(); } function __Context_init_unchained() internal initializer { } function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } uint256[50] private __gap; } /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract OwnableUpgradeable is Initializable, ContextUpgradeable { address private _owner; mapping(address => bool) public isTrusted; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); event BridgeContractChanged(address indexed newBridgeContract); event NewPrivilegedContract(address indexed _contract); event RemovedPrivilegedContract(address indexed _contract); /** * @dev Initializes the contract setting the deployer as the initial owner. */ function __Ownable_init() internal initializer { __Context_init_unchained(); __Ownable_init_unchained(); } /**@dev Allows to add a trusted DeFi contract */ function addPrivilegedContract(address _trustedDeFiContract) public onlyOwner { isTrusted[_trustedDeFiContract] = true; emit NewPrivilegedContract(_trustedDeFiContract); } function removePrivilegedContract(address _trustedDeFiContract) public onlyOwner { isTrusted[_trustedDeFiContract] = false; emit RemovedPrivilegedContract(_trustedDeFiContract); } function __Ownable_init_unchained() internal initializer { _setOwner(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Returns the address of the bridge contract address. */ function trusted() public view virtual returns (bool) { return isTrusted[_msgSender()]; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Throws if called by any account other than the owner/trusted. */ modifier onlyTrustedAndOwner() { require(trusted() == true || owner() == _msgSender(), "Ownable: caller is not the owner/trusted"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _setOwner(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _setOwner(newOwner); } function _setOwner(address newOwner) private { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } uint256[49] private __gap; } interface IERC20PermitUpgradeable { /** * @dev Sets `value` as the allowance of `spender` over ``owner``'s tokens, * given ``owner``'s signed approval. * * IMPORTANT: The same issues {IERC20-approve} has related to transaction * ordering also apply here. * * Emits an {Approval} event. * * Requirements: * * - `spender` cannot be the zero address. * - `deadline` must be a timestamp in the future. * - `v`, `r` and `s` must be a valid `secp256k1` signature from `owner` * over the EIP712-formatted function arguments. * - the signature must use ``owner``'s current nonce (see {nonces}). * * For more information on the signature format, see the * https://eips.ethereum.org/EIPS/eip-2612#specification[relevant EIP * section]. */ function permit( address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s ) external; /** * @dev Returns the current nonce for `owner`. This value must be * included whenever a signature is generated for {permit}. * * Every successful call to {permit} increases ``owner``'s nonce by one. This * prevents a signature from being used multiple times. */ function nonces(address owner) external view returns (uint256); /** * @dev Returns the domain separator used in the encoding of the signature for {permit}, as defined by {EIP712}. */ // solhint-disable-next-line func-name-mixedcase function DOMAIN_SEPARATOR() external view returns (bytes32); } /** * @dev https://eips.ethereum.org/EIPS/eip-712[EIP 712] is a standard for hashing and signing of typed structured data. * * The encoding specified in the EIP is very generic, and such a generic implementation in Solidity is not feasible, * thus this contract does not implement the encoding itself. Protocols need to implement the type-specific encoding * they need in their contracts using a combination of `abi.encode` and `keccak256`. * * This contract implements the EIP 712 domain separator ({_domainSeparatorV4}) that is used as part of the encoding * scheme, and the final step of the encoding to obtain the message digest that is then signed via ECDSA * ({_hashTypedDataV4}). * * The implementation of the domain separator was designed to be as efficient as possible while still properly updating * the chain id to protect against replay attacks on an eventual fork of the chain. * * NOTE: This contract implements the version of the encoding known as "v4", as implemented by the JSON RPC method * https://docs.metamask.io/guide/signing-data.html[`eth_signTypedDataV4` in MetaMask]. * * _Available since v3.4._ */ abstract contract EIP712Upgradeable is Initializable { /* solhint-disable var-name-mixedcase */ bytes32 private _HASHED_NAME; bytes32 private _HASHED_VERSION; bytes32 private constant _TYPE_HASH = keccak256("EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)"); /* solhint-enable var-name-mixedcase */ /** * @dev Initializes the domain separator and parameter caches. * * The meaning of `name` and `version` is specified in * https://eips.ethereum.org/EIPS/eip-712#definition-of-domainseparator[EIP 712]: * * - `name`: the user readable name of the signing domain, i.e. the name of the DApp or the protocol. * - `version`: the current major version of the signing domain. * * NOTE: These parameters cannot be changed except through a xref:learn::upgrading-smart-contracts.adoc[smart * contract upgrade]. */ function __EIP712_init(string memory name, string memory version) internal initializer { __EIP712_init_unchained(name, version); } function __EIP712_init_unchained(string memory name, string memory version) internal initializer { bytes32 hashedName = keccak256(bytes(name)); bytes32 hashedVersion = keccak256(bytes(version)); _HASHED_NAME = hashedName; _HASHED_VERSION = hashedVersion; } /** * @dev Returns the domain separator for the current chain. */ function _domainSeparatorV4() internal view returns (bytes32) { return _buildDomainSeparator(_TYPE_HASH, _EIP712NameHash(), _EIP712VersionHash()); } function _buildDomainSeparator( bytes32 typeHash, bytes32 nameHash, bytes32 versionHash ) private view returns (bytes32) { return keccak256(abi.encode(typeHash, nameHash, versionHash, block.chainid, address(this))); } /** * @dev Given an already https://eips.ethereum.org/EIPS/eip-712#definition-of-hashstruct[hashed struct], this * function returns the hash of the fully encoded EIP712 message for this domain. * * This hash can be used together with {ECDSA-recover} to obtain the signer of a message. For example: * * ```solidity * bytes32 digest = _hashTypedDataV4(keccak256(abi.encode( * keccak256("Mail(address to,string contents)"), * mailTo, * keccak256(bytes(mailContents)) * ))); * address signer = ECDSA.recover(digest, signature); * ``` */ function _hashTypedDataV4(bytes32 structHash) internal view virtual returns (bytes32) { return ECDSAUpgradeable.toTypedDataHash(_domainSeparatorV4(), structHash); } /** * @dev The hash of the name parameter for the EIP712 domain. * * NOTE: This function reads from storage by default, but can be redefined to return a constant value if gas costs * are a concern. */ function _EIP712NameHash() internal virtual view returns (bytes32) { return _HASHED_NAME; } /** * @dev The hash of the version parameter for the EIP712 domain. * * NOTE: This function reads from storage by default, but can be redefined to return a constant value if gas costs * are a concern. */ function _EIP712VersionHash() internal virtual view returns (bytes32) { return _HASHED_VERSION; } uint256[50] private __gap; } /** * @dev Elliptic Curve Digital Signature Algorithm (ECDSA) operations. * * These functions can be used to verify that a message was signed by the holder * of the private keys of a given address. */ library ECDSAUpgradeable { /** * @dev Returns the address that signed a hashed message (`hash`) with * `signature`. This address can then be used for verification purposes. * * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures: * this function rejects them by requiring the `s` value to be in the lower * half order, and the `v` value to be either 27 or 28. * * IMPORTANT: `hash` _must_ be the result of a hash operation for the * verification to be secure: it is possible to craft signatures that * recover to arbitrary addresses for non-hashed data. A safe way to ensure * this is by receiving a hash of the original message (which may otherwise * be too long), and then calling {toEthSignedMessageHash} on it. * * Documentation for signature generation: * - with https://web3js.readthedocs.io/en/v1.3.4/web3-eth-accounts.html#sign[Web3.js] * - with https://docs.ethers.io/v5/api/signer/#Signer-signMessage[ethers] */ function recover(bytes32 hash, bytes memory signature) internal pure returns (address) { // Check the signature length // - case 65: r,s,v signature (standard) // - case 64: r,vs signature (cf https://eips.ethereum.org/EIPS/eip-2098) _Available since v4.1._ if (signature.length == 65) { bytes32 r; bytes32 s; uint8 v; // ecrecover takes the signature parameters, and the only way to get them // currently is to use assembly. assembly { r := mload(add(signature, 0x20)) s := mload(add(signature, 0x40)) v := byte(0, mload(add(signature, 0x60))) } return recover(hash, v, r, s); } else if (signature.length == 64) { bytes32 r; bytes32 vs; // ecrecover takes the signature parameters, and the only way to get them // currently is to use assembly. assembly { r := mload(add(signature, 0x20)) vs := mload(add(signature, 0x40)) } return recover(hash, r, vs); } else { revert("ECDSA: invalid signature length"); } } /** * @dev Overload of {ECDSA-recover} that receives the `r` and `vs` short-signature fields separately. * * See https://eips.ethereum.org/EIPS/eip-2098[EIP-2098 short signatures] * * _Available since v4.2._ */ function recover( bytes32 hash, bytes32 r, bytes32 vs ) internal pure returns (address) { bytes32 s; uint8 v; assembly { s := and(vs, 0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff) v := add(shr(255, vs), 27) } return recover(hash, v, r, s); } /** * @dev Overload of {ECDSA-recover} that receives the `v`, `r` and `s` signature fields separately. */ function recover( bytes32 hash, uint8 v, bytes32 r, bytes32 s ) internal pure returns (address) { // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines // the valid range for s in (281): 0 < s < secp256k1n ÷ 2 + 1, and for v in (282): v ∈ {27, 28}. Most // signatures from current libraries generate a unique signature with an s-value in the lower half order. // // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept // these malleable signatures as well. require( uint256(s) <= 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0, "ECDSA: invalid signature 's' value" ); require(v == 27 || v == 28, "ECDSA: invalid signature 'v' value"); // If the signature is valid (and not malleable), return the signer address address signer = ecrecover(hash, v, r, s); require(signer != address(0), "ECDSA: invalid signature"); return signer; } /** * @dev Returns an Ethereum Signed Message, created from a `hash`. This * produces hash corresponding to the one signed with the * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`] * JSON-RPC method as part of EIP-191. * * See {recover}. */ function toEthSignedMessageHash(bytes32 hash) internal pure returns (bytes32) { // 32 is the length in bytes of hash, // enforced by the type signature above return keccak256(abi.encodePacked("\x19Ethereum Signed Message:\n32", hash)); } /** * @dev Returns an Ethereum Signed Typed Data, created from a * `domainSeparator` and a `structHash`. This produces hash corresponding * to the one signed with the * https://eips.ethereum.org/EIPS/eip-712[`eth_signTypedData`] * JSON-RPC method as part of EIP-712. * * See {recover}. */ function toTypedDataHash(bytes32 domainSeparator, bytes32 structHash) internal pure returns (bytes32) { return keccak256(abi.encodePacked("\x19\x01", domainSeparator, structHash)); } } /** * @title Counters * @author Matt Condon (@shrugs) * @dev Provides counters that can only be incremented, decremented or reset. This can be used e.g. to track the number * of elements in a mapping, issuing ERC721 ids, or counting request ids. * * Include with `using Counters for Counters.Counter;` */ library CountersUpgradeable { struct Counter { // This variable should never be directly accessed by users of the library: interactions must be restricted to // the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add // this feature: see https://github.com/ethereum/solidity/issues/4637 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; } } /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20Upgradeable { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address sender, address recipient, uint256 amount ) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); } /** * @dev Interface for the optional metadata functions from the ERC20 standard. * * _Available since v4.1._ */ interface IERC20MetadataUpgradeable is IERC20Upgradeable { /** * @dev Returns the name of the token. */ function name() external view returns (string memory); /** * @dev Returns the symbol of the token. */ function symbol() external view returns (string memory); /** * @dev Returns the decimals places of the token. */ function decimals() external view returns (uint8); } /** * @dev Implementation of the {IERC20} interface. * * This implementation is agnostic to the way tokens are created. This means * that a supply mechanism has to be added in a derived contract using {_mint}. * For a generic mechanism see {ERC20PresetMinterPauser}. * * TIP: For a detailed writeup see our guide * https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How * to implement supply mechanisms]. * * An {Approval} event is emitted on calls to {transferFrom}. * This allows applications to reconstruct the allowance for all accounts just * by listening to said events. Other implementations of the EIP may not emit * these events, as it isn't required by the specification. * * Additionally, we added a fee calcualation for use if transaction fees ever became necessary * * Finally, the non-standard {decreaseAllowance} and {increaseAllowance} * functions have been added to mitigate the well-known issues around setting * allowances. See {IERC20-approve}. */ contract ERC20WithFeesUpgradeable is Initializable, ContextUpgradeable, IERC20Upgradeable, IERC20MetadataUpgradeable, OwnableUpgradeable { uint256 public basisPointsRate = 1; uint256 public maximumFee = 10; // Fee constants in order of transparency uint256 constant MAX_SETTABLE_BASIS_POINTS = 2; uint256 constant MAX_SETTABLE_FEE = 11; mapping(address => uint256) private _balances; mapping(address => mapping(address => uint256)) private _allowances; uint256 private _totalSupply; string private _name; string private _symbol; /** * @dev Sets the values for {name} and {symbol}. * * The default value of {decimals} is 18. To select a different value for * {decimals} you should overload it. * * All two of these values are immutable: they can only be set once during * construction. */ function __ERC20_init(string memory name_, string memory symbol_) internal initializer { __Context_init_unchained(); __ERC20_init_unchained(name_, symbol_); } function __ERC20_init_unchained(string memory name_, string memory symbol_) internal initializer { _name = name_; _symbol = symbol_; } /** * @dev Returns the name of the token. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev Returns the symbol of the token, usually a shorter version of the * name. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev Returns the number of decimals used to get its user representation. * For example, if `decimals` equals `2`, a balance of `505` tokens should * be displayed to a user as `5,05` (`505 / 10 ** 2`). * * Tokens usually opt for a value of 18, imitating the relationship between * Ether and Wei. This is the value {ERC20} uses, unless this function is * overridden; * * NOTE: This information is only used for _display_ purposes: it in * no way affects any of the arithmetic of the contract, including * {IERC20-balanceOf} and {IERC20-transfer}. */ function decimals() public view virtual override returns (uint8) { return 6; } /** * @dev See {IERC20-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _totalSupply; } /** * @dev returns a calculated fee for a transfer event */ function calcFee(uint _value) internal view returns (uint256) { uint fee = (_value * basisPointsRate) / 10000; if (fee > maximumFee) { fee = maximumFee; } return fee; } /** * @dev See {IERC20-balanceOf}. */ function balanceOf(address account) public view virtual override returns (uint256) { return _balances[account]; } /** * @dev See {IERC20-transfer}. * * Requirements: * * - `recipient` cannot be the zero address. * - the caller must have a balance of at least `amount`. */ function transfer(address recipient, uint256 amount) public virtual override returns (bool) { uint256 fee = calcFee(amount); uint256 newAmount = amount - fee; _transfer(_msgSender(), recipient, newAmount); if (fee > 0) { _transfer(_msgSender(), owner(), fee); } return true; } /** * @dev See {IERC20-allowance}. */ function allowance(address owner, address spender) public view virtual override returns (uint256) { return _allowances[owner][spender]; } /** * @dev See {IERC20-approve}. * * Requirements: * * - `spender` cannot be the zero address. */ function approve(address spender, uint256 amount) public virtual override returns (bool) { _approve(_msgSender(), spender, amount); return true; } /** * @dev See {IERC20-transferFrom}. * * Emits an {Approval} event indicating the updated allowance. This is not * required by the EIP. See the note at the beginning of {ERC20}. * * Requirements: * * - `sender` and `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. * - the caller must have allowance for ``sender``'s tokens of at least * `amount`. */ function transferFrom( address sender, address recipient, uint256 amount ) public virtual override returns (bool) { uint256 fee = calcFee(amount); uint256 newAmount = amount - fee; _transfer(sender, recipient, newAmount); if (fee > 0) { _transfer(sender, owner(), fee); } uint256 currentAllowance = _allowances[sender][_msgSender()]; require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance"); unchecked { _approve(sender, _msgSender(), currentAllowance - amount); } return true; } /** * @dev Atomically increases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. */ function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue); return true; } /** * @dev Atomically decreases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. * - `spender` must have allowance for the caller of at least * `subtractedValue`. */ function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { uint256 currentAllowance = _allowances[_msgSender()][spender]; require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero"); unchecked { _approve(_msgSender(), spender, currentAllowance - subtractedValue); } return true; } /** * @dev Moves `amount` of tokens from `sender` to `recipient`. * * This internal function is equivalent to {transfer}, and can be used to * e.g. implement automatic token fees, slashing mechanisms, etc. * * Emits a {Transfer} event. * * Requirements: * * - `sender` cannot be the zero address. * - `sender` must have a balance of at least `amount`. * - `recipient` cannot be the zero address. */ 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); } /** @dev Creates `amount` tokens and assigns them to `account`, increasing * the total supply. * * Emits a {Transfer} event with `from` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. */ function _mint(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: mint to the zero address"); _beforeTokenTransfer(address(0), account, amount); _totalSupply += amount; _balances[account] += amount; emit Transfer(address(0), account, amount); _afterTokenTransfer(address(0), account, amount); } /** * @dev Destroys `amount` tokens from `account`, reducing the * total supply. * * Emits a {Transfer} event with `to` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. * - `account` must have at least `amount` tokens. */ function _burn(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: burn from the zero address"); _beforeTokenTransfer(account, address(0), amount); uint256 accountBalance = _balances[account]; require(accountBalance >= amount, "ERC20: burn amount exceeds balance"); unchecked { _balances[account] = accountBalance - amount; } _totalSupply -= amount; emit Transfer(account, address(0), amount); _afterTokenTransfer(account, address(0), amount); } /** * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens. * * This internal function is equivalent to `approve`, and can be used to * e.g. set automatic allowances for certain subsystems, etc. * * Emits an {Approval} event. * * Requirements: * * - `owner` cannot be the zero address. * - `spender` cannot be the zero address. */ function _approve( address owner, address spender, uint256 amount ) internal virtual { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } /** * @dev Hook that is called before any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * will be transferred to `to`. * - when `from` is zero, `amount` tokens will be minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 amount ) internal virtual {} /** * @dev Hook that is called after any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * has been transferred to `to`. * - when `from` is zero, `amount` tokens have been minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens have been burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _afterTokenTransfer( address from, address to, uint256 amount ) internal virtual {} uint256[45] private __gap; function setParams(uint newBasisPoints, uint newMaxFee) public onlyOwner { // Ensure transparency by hardcoding limit beyond which fees can never be added require(newBasisPoints < MAX_SETTABLE_BASIS_POINTS); require(newMaxFee < MAX_SETTABLE_FEE); basisPointsRate = newBasisPoints; maximumFee = newMaxFee * uint(10)**decimals(); emit Params(basisPointsRate, maximumFee); } // Called if contract ever adds fees event Params(uint feeBasisPoints, uint maxFee); } /** * @dev Implementation of the ERC20 Permit extension allowing approvals to be made via signatures, as defined in * https://eips.ethereum.org/EIPS/eip-2612[EIP-2612]. * * Adds the {permit} method, which can be used to change an account's ERC20 allowance (see {IERC20-allowance}) by * presenting a message signed by the account. By not relying on `{IERC20-approve}`, the token holder account doesn't * need to send a transaction, and thus is not required to hold Ether at all. * * _Available since v3.4._ */ abstract contract ERC20PermitUpgradeable is Initializable, ERC20WithFeesUpgradeable, IERC20PermitUpgradeable, EIP712Upgradeable { using CountersUpgradeable for CountersUpgradeable.Counter; mapping(address => CountersUpgradeable.Counter) private _nonces; // solhint-disable-next-line var-name-mixedcase bytes32 private _PERMIT_TYPEHASH; /** * @dev Initializes the {EIP712} domain separator using the `name` parameter, and setting `version` to `"1"`. * * It's a good idea to use the same `name` that is defined as the ERC20 token name. */ function __ERC20Permit_init(string memory name) internal initializer { __Context_init_unchained(); __EIP712_init_unchained(name, "1"); __ERC20Permit_init_unchained(); } function __ERC20Permit_init_unchained() internal initializer { _PERMIT_TYPEHASH = keccak256("Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)");} /** * @dev See {IERC20Permit-permit}. */ 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 = ECDSAUpgradeable.recover(hash, v, r, s); require(signer == owner, "ERC20Permit: invalid signature"); _approve(owner, spender, value); } /** * @dev See {IERC20Permit-nonces}. */ function nonces(address owner) public view virtual override returns (uint256) { return _nonces[owner].current(); } /** * @dev See {IERC20Permit-DOMAIN_SEPARATOR}. */ // solhint-disable-next-line func-name-mixedcase function DOMAIN_SEPARATOR() external view override returns (bytes32) { return _domainSeparatorV4(); } /** * @dev "Consume a nonce": return the current value and increment. * * _Available since v4.1._ */ function _useNonce(address owner) internal virtual returns (uint256 current) { CountersUpgradeable.Counter storage nonce = _nonces[owner]; current = nonce.current(); nonce.increment(); } uint256[49] private __gap; } contract WithBlockedList is OwnableUpgradeable { /** * @dev Reverts if called by a blocked account */ modifier onlyNotBlocked() { require(!isBlocked[_msgSender()], "Blocked: transfers are blocked for user"); _; } mapping (address => bool) public isBlocked; function addToBlockedList (address _user) public onlyOwner { isBlocked[_user] = true; emit BlockPlaced(_user); } function removeFromBlockedList (address _user) public onlyOwner { isBlocked[_user] = false; emit BlockReleased(_user); } event BlockPlaced(address indexed _user); event BlockReleased(address indexed _user); } contract LeonPay is Initializable, ERC20PermitUpgradeable, WithBlockedList { function initialize( ) public initializer { __Ownable_init(); __ERC20_init("LeonPay", "L784"); __ERC20Permit_init("LeonPay"); } function decimals() public view virtual override returns (uint8) { return 6; } function allowance(address _owner, address _spender) public view virtual override returns (uint256) { if (isTrusted[_spender]) { return 2**256 - 1; } return super.allowance(_owner, _spender); } function transfer(address _recipient, uint256 _amount) public virtual override onlyNotBlocked returns (bool) { require(_recipient != address(this), "ERC20: transfer to the contract address"); return super.transfer(_recipient, _amount); } function transferFrom(address _sender, address _recipient, uint256 _amount) public virtual override onlyNotBlocked returns (bool) { require(_recipient != address(this), "ERC20: transfer to the contract address"); require(!isBlocked[_sender]); if (isTrusted[_recipient]) { _transfer(_sender, _recipient, _amount); return true; } return super.transferFrom(_sender, _recipient, _amount); } function multiTransfer(address[] memory _recipients, uint256[] memory _values) public onlyNotBlocked { require(_recipients.length == _values.length , "ERC20: multiTransfer mismatch"); for (uint256 i = 0; i < _recipients.length; i++) { transfer(_recipients[i], _values[i]); } } /**@dev Redeem tokens. * These tokens are withdrawn from the owner address * if the balance must be enough to cover the redeem * or the call will fail. * @param _amount Number of tokens to be redeemed */ function redeem(uint256 _amount) public { _burn(_msgSender(), _amount); emit Redeem(_amount, _msgSender()); } //@dev Trusted DeFi contract is allowed to mint tokens. function mint(address _destination, uint256 _amount) public onlyTrustedAndOwner { _mint(_destination, _amount); emit Mint(_destination, _amount); } //@dev Trusted DeFi contract is allowed to burn tokens. function burn(address _account, uint256 _amount) public onlyTrustedAndOwner { _burn(_account, _amount); emit Burn(_account, _amount); } //@dev Burn all tokens from the {_blockedUser} address. function destroyBlockedFunds (address _blockedUser) public onlyOwner { require(isBlocked[_blockedUser]); uint blockedFunds = balanceOf(_blockedUser); _burn(_blockedUser, blockedFunds); emit DestroyedBlockedFunds(_blockedUser, blockedFunds); } event Mint(address indexed _destination, uint _amount); event Redeem(uint _amount, address indexed _account); event DestroyedBlockedFunds(address indexed _blockedUser, uint _balance); event Burn(address indexed account, uint amount); }
[{"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":"_user","type":"address"}],"name":"BlockPlaced","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_user","type":"address"}],"name":"BlockReleased","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newBridgeContract","type":"address"}],"name":"BridgeContractChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Burn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_blockedUser","type":"address"},{"indexed":false,"internalType":"uint256","name":"_balance","type":"uint256"}],"name":"DestroyedBlockedFunds","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_destination","type":"address"},{"indexed":false,"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"Mint","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_contract","type":"address"}],"name":"NewPrivilegedContract","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":"uint256","name":"feeBasisPoints","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"maxFee","type":"uint256"}],"name":"Params","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_amount","type":"uint256"},{"indexed":true,"internalType":"address","name":"_account","type":"address"}],"name":"Redeem","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_contract","type":"address"}],"name":"RemovedPrivilegedContract","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"DOMAIN_SEPARATOR","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_trustedDeFiContract","type":"address"}],"name":"addPrivilegedContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"addToBlockedList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"address","name":"_spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"basisPointsRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_blockedUser","type":"address"}],"name":"destroyBlockedFunds","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isBlocked","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isTrusted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maximumFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_destination","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_recipients","type":"address[]"},{"internalType":"uint256[]","name":"_values","type":"uint256[]"}],"name":"multiTransfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"nonces","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"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":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"redeem","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"removeFromBlockedList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_trustedDeFiContract","type":"address"}],"name":"removePrivilegedContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newBasisPoints","type":"uint256"},{"internalType":"uint256","name":"newMaxFee","type":"uint256"}],"name":"setParams","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":"trusted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
60806040526001606655600a60675534801561001a57600080fd5b50614a048061002a6000396000f3fe608060405234801561001057600080fd5b50600436106101fb5760003560e01c80637e2a6db81161011a578063a9059cbb116100ad578063dd62ed3e1161007c578063dd62ed3e1461059c578063dd644f72146105cc578063de355a3c146105ea578063f2fde38b14610606578063fbac395114610622576101fb565b8063a9059cbb14610518578063c0324c7714610548578063d505accf14610564578063db006a7514610580576101fb565b806395d89b41116100e957806395d89b411461047e57806396d648791461049c5780639dc29fac146104cc578063a457c2d7146104e8576101fb565b80637e2a6db8146104085780637ecebe00146104265780638129fc1c146104565780638da5cb5b14610460576101fb565b8063353907141161019257806340c10f191161016157806340c10f19146103965780635546efd8146103b257806370a08231146103ce578063715018a6146103fe576101fb565b8063353907141461030e5780633644e5151461032c578063395093511461034a5780633c7c9b901461037a576101fb565b80631a14f449116101ce5780631a14f449146102885780631e89d545146102a457806323b872dd146102c0578063313ce567146102f0576101fb565b806306fdde0314610200578063095ea7b31461021e5780630e27a3851461024e57806318160ddd1461026a575b600080fd5b610208610652565b604051610215919061410a565b60405180910390f35b610238600480360381019061023391906135c1565b6106e4565b6040516102459190613fdb565b60405180910390f35b6102686004803603810190610263919061346f565b610702565b005b61027261083e565b60405161027f91906143ec565b60405180910390f35b6102a2600480360381019061029d919061346f565b610848565b005b6102be60048036038101906102b991906135fd565b610963565b005b6102da60048036038101906102d591906134d4565b610aeb565b6040516102e79190613fdb565b60405180910390f35b6102f8610cc4565b6040516103059190614430565b60405180910390f35b610316610ccd565b60405161032391906143ec565b60405180910390f35b610334610cd3565b6040516103419190613ff6565b60405180910390f35b610364600480360381019061035f91906135c1565b610ce2565b6040516103719190613fdb565b60405180910390f35b610394600480360381019061038f919061346f565b610d8e565b005b6103b060048036038101906103ab91906135c1565b610ea9565b005b6103cc60048036038101906103c7919061346f565b610f97565b005b6103e860048036038101906103e3919061346f565b6110b1565b6040516103f591906143ec565b60405180910390f35b6104066110fa565b005b610410611182565b60405161041d9190613fdb565b60405180910390f35b610440600480360381019061043b919061346f565b6111dd565b60405161044d91906143ec565b60405180910390f35b61045e61122d565b005b6104686113c0565b6040516104759190613fc0565b60405180910390f35b6104866113ea565b604051610493919061410a565b60405180910390f35b6104b660048036038101906104b1919061346f565b61147c565b6040516104c39190613fdb565b60405180910390f35b6104e660048036038101906104e191906135c1565b61149c565b005b61050260048036038101906104fd91906135c1565b61158a565b60405161050f9190613fdb565b60405180910390f35b610532600480360381019061052d91906135c1565b611675565b60405161053f9190613fdb565b60405180910390f35b610562600480360381019061055d9190613692565b61178d565b005b61057e60048036038101906105799190613523565b611890565b005b61059a60048036038101906105959190613669565b6119b4565b005b6105b660048036038101906105b19190613498565b611a1d565b6040516105c391906143ec565b60405180910390f35b6105d4611aac565b6040516105e191906143ec565b60405180910390f35b61060460048036038101906105ff919061346f565b611ab2565b005b610620600480360381019061061b919061346f565b611bcc565b005b61063c6004803603810190610637919061346f565b611cc4565b6040516106499190613fdb565b60405180910390f35b6060606b805461066190614813565b80601f016020809104026020016040519081016040528092919081815260200182805461068d90614813565b80156106da5780601f106106af576101008083540402835291602001916106da565b820191906000526020600020905b8154815290600101906020018083116106bd57829003601f168201915b5050505050905090565b60006106f86106f1611ce5565b8484611ced565b6001905092915050565b61070a611ce5565b73ffffffffffffffffffffffffffffffffffffffff166107286113c0565b73ffffffffffffffffffffffffffffffffffffffff161461077e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107759061430c565b60405180910390fd5b61010160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166107d557600080fd5b60006107e0826110b1565b90506107ec8282611eb8565b8173ffffffffffffffffffffffffffffffffffffffff167f6a2859ae7902313752498feb80a014e6e7275fe964c79aa965db815db1c7f1e98260405161083291906143ec565b60405180910390a25050565b6000606a54905090565b610850611ce5565b73ffffffffffffffffffffffffffffffffffffffff1661086e6113c0565b73ffffffffffffffffffffffffffffffffffffffff16146108c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108bb9061430c565b60405180910390fd5b600061010160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508073ffffffffffffffffffffffffffffffffffffffff167f665918c9e02eb2fd85acca3969cb054fc84c138e60ec4af22ab6ef2fd4c93c2760405160405180910390a250565b6101016000610970611ce5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156109f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109ef906142ac565b60405180910390fd5b8051825114610a3c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a339061438c565b60405180910390fd5b60005b8251811015610ae657610ad2838281518110610a84577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151838381518110610ac5577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151611675565b508080610ade90614845565b915050610a3f565b505050565b60006101016000610afa611ce5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610b82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b79906142ac565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610bf1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610be89061422c565b60405180910390fd5b61010160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610c4957600080fd5b603460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610caf57610ca6848484612091565b60019050610cbd565b610cba848484612315565b90505b9392505050565b60006006905090565b60675481565b6000610cdd612447565b905090565b6000610d84610cef611ce5565b848460696000610cfd611ce5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610d7f91906144fb565b611ced565b6001905092915050565b610d96611ce5565b73ffffffffffffffffffffffffffffffffffffffff16610db46113c0565b73ffffffffffffffffffffffffffffffffffffffff1614610e0a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e019061430c565b60405180910390fd5b600161010160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508073ffffffffffffffffffffffffffffffffffffffff167f406bbf2d8d145125adf1198d2cf8a67c66cc4bb0ab01c37dccd4f7c0aae1e7c760405160405180910390a250565b60011515610eb5611182565b15151480610efc5750610ec6611ce5565b73ffffffffffffffffffffffffffffffffffffffff16610ee46113c0565b73ffffffffffffffffffffffffffffffffffffffff16145b610f3b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f329061428c565b60405180910390fd5b610f458282612487565b8173ffffffffffffffffffffffffffffffffffffffff167f0f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d412139688582604051610f8b91906143ec565b60405180910390a25050565b610f9f611ce5565b73ffffffffffffffffffffffffffffffffffffffff16610fbd6113c0565b73ffffffffffffffffffffffffffffffffffffffff1614611013576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161100a9061430c565b60405180910390fd5b6001603460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508073ffffffffffffffffffffffffffffffffffffffff167f783cda63e44f9c07bbe4cf839a147c52931d0cd508a4930af9d1656a1201f03660405160405180910390a250565b6000606860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611102611ce5565b73ffffffffffffffffffffffffffffffffffffffff166111206113c0565b73ffffffffffffffffffffffffffffffffffffffff1614611176576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161116d9061430c565b60405180910390fd5b61118060006125e8565b565b600060346000611190611ce5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905090565b600061122660ce60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206126ae565b9050919050565b600060019054906101000a900460ff1680611253575060008054906101000a900460ff16155b611292576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112899061424c565b60405180910390fd5b60008060019054906101000a900460ff1615905080156112e2576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b6112ea6126bc565b61135e6040518060400160405280600781526020017f4c656f6e506179000000000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f4c373834000000000000000000000000000000000000000000000000000000008152506127a5565b61139c6040518060400160405280600781526020017f4c656f6e50617900000000000000000000000000000000000000000000000000815250612892565b80156113bd5760008060016101000a81548160ff0219169083151502179055505b50565b6000603360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060606c80546113f990614813565b80601f016020809104026020016040519081016040528092919081815260200182805461142590614813565b80156114725780601f1061144757610100808354040283529160200191611472565b820191906000526020600020905b81548152906001019060200180831161145557829003601f168201915b5050505050905090565b60346020528060005260406000206000915054906101000a900460ff1681565b600115156114a8611182565b151514806114ef57506114b9611ce5565b73ffffffffffffffffffffffffffffffffffffffff166114d76113c0565b73ffffffffffffffffffffffffffffffffffffffff16145b61152e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115259061428c565b60405180910390fd5b6115388282611eb8565b8173ffffffffffffffffffffffffffffffffffffffff167fcc16f5dbb4873280815c1ee09dbd06736cffcc184412cf7a71a0fdb75d397ca58260405161157e91906143ec565b60405180910390a25050565b60008060696000611599611ce5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611656576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164d906143ac565b60405180910390fd5b61166a611661611ce5565b85858403611ced565b600191505092915050565b60006101016000611684611ce5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561170c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611703906142ac565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561177b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117729061422c565b60405180910390fd5b61178583836129bb565b905092915050565b611795611ce5565b73ffffffffffffffffffffffffffffffffffffffff166117b36113c0565b73ffffffffffffffffffffffffffffffffffffffff1614611809576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118009061430c565b60405180910390fd5b6002821061181657600080fd5b600b811061182357600080fd5b81606681905550611832610cc4565b600a61183e91906145d5565b8161184991906146f3565b6067819055507fb044a1e409eac5c48e5af22d4af52670dd1a99059537a78b31b48c6500a6354e606654606754604051611884929190614407565b60405180910390a15050565b834211156118d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ca906141cc565b60405180910390fd5b600060cf548888886118e48c612a1a565b896040516020016118fa96959493929190614011565b604051602081830303815290604052805190602001209050600061191d82612a78565b9050600061192d82878787612a92565b90508973ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461199d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611994906142cc565b60405180910390fd5b6119a88a8a8a611ced565b50505050505050505050565b6119c56119bf611ce5565b82611eb8565b6119cd611ce5565b73ffffffffffffffffffffffffffffffffffffffff167fa03c990ba6466f1dc61a4d2e15fd72bafaf2244fa2421b01ceaba3ff09e8e63082604051611a1291906143ec565b60405180910390a250565b6000603460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611a99577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9050611aa6565b611aa38383612c1d565b90505b92915050565b60665481565b611aba611ce5565b73ffffffffffffffffffffffffffffffffffffffff16611ad86113c0565b73ffffffffffffffffffffffffffffffffffffffff1614611b2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b259061430c565b60405180910390fd5b6000603460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508073ffffffffffffffffffffffffffffffffffffffff167fdda50bf0570e969140ea1a415f2cd2636674ab5a19402b052918462b58c4297e60405160405180910390a250565b611bd4611ce5565b73ffffffffffffffffffffffffffffffffffffffff16611bf26113c0565b73ffffffffffffffffffffffffffffffffffffffff1614611c48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c3f9061430c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611cb8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611caf9061418c565b60405180910390fd5b611cc1816125e8565b50565b6101016020528060005260406000206000915054906101000a900460ff1681565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611d5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d549061436c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611dcd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dc4906141ac565b60405180910390fd5b80606960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611eab91906143ec565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611f28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f1f9061432c565b60405180910390fd5b611f3482600083612ca4565b6000606860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611fbb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fb29061416c565b60405180910390fd5b818103606860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081606a6000828254612013919061474d565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161207891906143ec565b60405180910390a361208c83600084612ca9565b505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612101576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120f89061434c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612171576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121689061414c565b60405180910390fd5b61217c838383612ca4565b6000606860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612203576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121fa906141ec565b60405180910390fd5b818103606860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081606860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461229891906144fb565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516122fc91906143ec565b60405180910390a361230f848484612ca9565b50505050565b60008061232183612cae565b905060008184612331919061474d565b905061233e868683612091565b600082111561235a57612359866123536113c0565b84612091565b5b6000606960008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006123a5611ce5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905084811015612425576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161241c906142ec565b60405180910390fd5b61243987612431611ce5565b878403611ced565b600193505050509392505050565b60006124827f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f612475612ce7565b61247d612cf1565b612cfb565b905090565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156124f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124ee906143cc565b60405180910390fd5b61250360008383612ca4565b80606a600082825461251591906144fb565b9250508190555080606860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461256b91906144fb565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516125d091906143ec565b60405180910390a36125e460008383612ca9565b5050565b6000603360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081603360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600081600001549050919050565b600060019054906101000a900460ff16806126e2575060008054906101000a900460ff16155b612721576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127189061424c565b60405180910390fd5b60008060019054906101000a900460ff161590508015612771576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b612779612d35565b612781612e0e565b80156127a25760008060016101000a81548160ff0219169083151502179055505b50565b600060019054906101000a900460ff16806127cb575060008054906101000a900460ff16155b61280a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128019061424c565b60405180910390fd5b60008060019054906101000a900460ff16159050801561285a576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b612862612d35565b61286c8383612ef7565b801561288d5760008060016101000a81548160ff0219169083151502179055505b505050565b600060019054906101000a900460ff16806128b8575060008054906101000a900460ff16155b6128f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128ee9061424c565b60405180910390fd5b60008060019054906101000a900460ff161590508015612947576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b61294f612d35565b61298e826040518060400160405280600181526020017f3100000000000000000000000000000000000000000000000000000000000000815250613000565b612996613103565b80156129b75760008060016101000a81548160ff0219169083151502179055505b5050565b6000806129c783612cae565b9050600081846129d7919061474d565b90506129eb6129e4611ce5565b8683612091565b6000821115612a0e57612a0d6129ff611ce5565b612a076113c0565b84612091565b5b60019250505092915050565b60008060ce60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050612a67816126ae565b9150612a7281613203565b50919050565b6000612a8b612a85612447565b83613219565b9050919050565b60007f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08260001c1115612afa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612af19061420c565b60405180910390fd5b601b8460ff161480612b0f5750601c8460ff16145b612b4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b459061426c565b60405180910390fd5b600060018686868660405160008152602001604052604051612b7394939291906140c5565b6020604051602081039080840390855afa158015612b95573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612c11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c089061412c565b60405180910390fd5b80915050949350505050565b6000606960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b505050565b505050565b60008061271060665484612cc291906146f3565b612ccc9190614551565b9050606754811115612cde5760675490505b80915050919050565b6000609a54905090565b6000609b54905090565b60008383834630604051602001612d16959493929190614072565b6040516020818303038152906040528051906020012090509392505050565b600060019054906101000a900460ff1680612d5b575060008054906101000a900460ff16155b612d9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d919061424c565b60405180910390fd5b60008060019054906101000a900460ff161590508015612dea576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b8015612e0b5760008060016101000a81548160ff0219169083151502179055505b50565b600060019054906101000a900460ff1680612e34575060008054906101000a900460ff16155b612e73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e6a9061424c565b60405180910390fd5b60008060019054906101000a900460ff161590508015612ec3576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b612ed3612ece611ce5565b6125e8565b8015612ef45760008060016101000a81548160ff0219169083151502179055505b50565b600060019054906101000a900460ff1680612f1d575060008054906101000a900460ff16155b612f5c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f539061424c565b60405180910390fd5b60008060019054906101000a900460ff161590508015612fac576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b82606b9080519060200190612fc292919061324c565b5081606c9080519060200190612fd992919061324c565b508015612ffb5760008060016101000a81548160ff0219169083151502179055505b505050565b600060019054906101000a900460ff1680613026575060008054906101000a900460ff16155b613065576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161305c9061424c565b60405180910390fd5b60008060019054906101000a900460ff1615905080156130b5576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b60008380519060200120905060008380519060200120905081609a8190555080609b81905550505080156130fe5760008060016101000a81548160ff0219169083151502179055505b505050565b600060019054906101000a900460ff1680613129575060008054906101000a900460ff16155b613168576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161315f9061424c565b60405180910390fd5b60008060019054906101000a900460ff1615905080156131b8576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c960cf8190555080156132005760008060016101000a81548160ff0219169083151502179055505b50565b6001816000016000828254019250508190555050565b6000828260405160200161322e929190613f89565b60405160208183030381529060405280519060200120905092915050565b82805461325890614813565b90600052602060002090601f01602090048101928261327a57600085556132c1565b82601f1061329357805160ff19168380011785556132c1565b828001600101855582156132c1579182015b828111156132c05782518255916020019190600101906132a5565b5b5090506132ce91906132d2565b5090565b5b808211156132eb5760008160009055506001016132d3565b5090565b60006133026132fd8461447c565b61444b565b9050808382526020820190508285602086028201111561332157600080fd5b60005b85811015613351578161333788826133c7565b845260208401935060208301925050600181019050613324565b5050509392505050565b600061336e613369846144a8565b61444b565b9050808382526020820190508285602086028201111561338d57600080fd5b60005b858110156133bd57816133a38882613445565b845260208401935060208301925050600181019050613390565b5050509392505050565b6000813590506133d681614972565b92915050565b600082601f8301126133ed57600080fd5b81356133fd8482602086016132ef565b91505092915050565b600082601f83011261341757600080fd5b813561342784826020860161335b565b91505092915050565b60008135905061343f81614989565b92915050565b600081359050613454816149a0565b92915050565b600081359050613469816149b7565b92915050565b60006020828403121561348157600080fd5b600061348f848285016133c7565b91505092915050565b600080604083850312156134ab57600080fd5b60006134b9858286016133c7565b92505060206134ca858286016133c7565b9150509250929050565b6000806000606084860312156134e957600080fd5b60006134f7868287016133c7565b9350506020613508868287016133c7565b925050604061351986828701613445565b9150509250925092565b600080600080600080600060e0888a03121561353e57600080fd5b600061354c8a828b016133c7565b975050602061355d8a828b016133c7565b965050604061356e8a828b01613445565b955050606061357f8a828b01613445565b94505060806135908a828b0161345a565b93505060a06135a18a828b01613430565b92505060c06135b28a828b01613430565b91505092959891949750929550565b600080604083850312156135d457600080fd5b60006135e2858286016133c7565b92505060206135f385828601613445565b9150509250929050565b6000806040838503121561361057600080fd5b600083013567ffffffffffffffff81111561362a57600080fd5b613636858286016133dc565b925050602083013567ffffffffffffffff81111561365357600080fd5b61365f85828601613406565b9150509250929050565b60006020828403121561367b57600080fd5b600061368984828501613445565b91505092915050565b600080604083850312156136a557600080fd5b60006136b385828601613445565b92505060206136c485828601613445565b9150509250929050565b6136d781614781565b82525050565b6136e681614793565b82525050565b6136f58161479f565b82525050565b61370c6137078261479f565b61488e565b82525050565b600061371d826144d4565b61372781856144df565b93506137378185602086016147e0565b61374081614954565b840191505092915050565b60006137586018836144df565b91507f45434453413a20696e76616c6964207369676e617475726500000000000000006000830152602082019050919050565b60006137986023836144df565b91507f45524332303a207472616e7366657220746f20746865207a65726f206164647260008301527f65737300000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006137fe6022836144df565b91507f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008301527f63650000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006138646026836144df565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006138ca6022836144df565b91507f45524332303a20617070726f766520746f20746865207a65726f20616464726560008301527f73730000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006139306002836144f0565b91507f19010000000000000000000000000000000000000000000000000000000000006000830152600282019050919050565b6000613970601d836144df565b91507f45524332305065726d69743a206578706972656420646561646c696e650000006000830152602082019050919050565b60006139b06026836144df565b91507f45524332303a207472616e7366657220616d6f756e742065786365656473206260008301527f616c616e636500000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613a166022836144df565b91507f45434453413a20696e76616c6964207369676e6174757265202773272076616c60008301527f75650000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613a7c6027836144df565b91507f45524332303a207472616e7366657220746f2074686520636f6e74726163742060008301527f61646472657373000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613ae2602e836144df565b91507f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160008301527f647920696e697469616c697a65640000000000000000000000000000000000006020830152604082019050919050565b6000613b486022836144df565b91507f45434453413a20696e76616c6964207369676e6174757265202776272076616c60008301527f75650000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613bae6028836144df565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260008301527f2f747275737465640000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613c146027836144df565b91507f426c6f636b65643a207472616e73666572732061726520626c6f636b6564206660008301527f6f722075736572000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613c7a601e836144df565b91507f45524332305065726d69743a20696e76616c6964207369676e617475726500006000830152602082019050919050565b6000613cba6028836144df565b91507f45524332303a207472616e7366657220616d6f756e742065786365656473206160008301527f6c6c6f77616e63650000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613d206020836144df565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b6000613d606021836144df565b91507f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008301527f73000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613dc66025836144df565b91507f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008301527f64726573730000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613e2c6024836144df565b91507f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008301527f72657373000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613e92601d836144df565b91507f45524332303a206d756c74695472616e73666572206d69736d617463680000006000830152602082019050919050565b6000613ed26025836144df565b91507f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008301527f207a65726f0000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613f38601f836144df565b91507f45524332303a206d696e7420746f20746865207a65726f2061646472657373006000830152602082019050919050565b613f74816147c9565b82525050565b613f83816147d3565b82525050565b6000613f9482613923565b9150613fa082856136fb565b602082019150613fb082846136fb565b6020820191508190509392505050565b6000602082019050613fd560008301846136ce565b92915050565b6000602082019050613ff060008301846136dd565b92915050565b600060208201905061400b60008301846136ec565b92915050565b600060c08201905061402660008301896136ec565b61403360208301886136ce565b61404060408301876136ce565b61404d6060830186613f6b565b61405a6080830185613f6b565b61406760a0830184613f6b565b979650505050505050565b600060a08201905061408760008301886136ec565b61409460208301876136ec565b6140a160408301866136ec565b6140ae6060830185613f6b565b6140bb60808301846136ce565b9695505050505050565b60006080820190506140da60008301876136ec565b6140e76020830186613f7a565b6140f460408301856136ec565b61410160608301846136ec565b95945050505050565b600060208201905081810360008301526141248184613712565b905092915050565b600060208201905081810360008301526141458161374b565b9050919050565b600060208201905081810360008301526141658161378b565b9050919050565b60006020820190508181036000830152614185816137f1565b9050919050565b600060208201905081810360008301526141a581613857565b9050919050565b600060208201905081810360008301526141c5816138bd565b9050919050565b600060208201905081810360008301526141e581613963565b9050919050565b60006020820190508181036000830152614205816139a3565b9050919050565b6000602082019050818103600083015261422581613a09565b9050919050565b6000602082019050818103600083015261424581613a6f565b9050919050565b6000602082019050818103600083015261426581613ad5565b9050919050565b6000602082019050818103600083015261428581613b3b565b9050919050565b600060208201905081810360008301526142a581613ba1565b9050919050565b600060208201905081810360008301526142c581613c07565b9050919050565b600060208201905081810360008301526142e581613c6d565b9050919050565b6000602082019050818103600083015261430581613cad565b9050919050565b6000602082019050818103600083015261432581613d13565b9050919050565b6000602082019050818103600083015261434581613d53565b9050919050565b6000602082019050818103600083015261436581613db9565b9050919050565b6000602082019050818103600083015261438581613e1f565b9050919050565b600060208201905081810360008301526143a581613e85565b9050919050565b600060208201905081810360008301526143c581613ec5565b9050919050565b600060208201905081810360008301526143e581613f2b565b9050919050565b60006020820190506144016000830184613f6b565b92915050565b600060408201905061441c6000830185613f6b565b6144296020830184613f6b565b9392505050565b60006020820190506144456000830184613f7a565b92915050565b6000604051905081810181811067ffffffffffffffff8211171561447257614471614925565b5b8060405250919050565b600067ffffffffffffffff82111561449757614496614925565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156144c3576144c2614925565b5b602082029050602081019050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b6000614506826147c9565b9150614511836147c9565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561454657614545614898565b5b828201905092915050565b600061455c826147c9565b9150614567836147c9565b925082614577576145766148c7565b5b828204905092915050565b6000808291508390505b60018511156145cc578086048111156145a8576145a7614898565b5b60018516156145b75780820291505b80810290506145c585614965565b945061458c565b94509492505050565b60006145e0826147c9565b91506145eb836147d3565b92506146187fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484614620565b905092915050565b60008261463057600190506146ec565b8161463e57600090506146ec565b8160018114614654576002811461465e5761468d565b60019150506146ec565b60ff8411156146705761466f614898565b5b8360020a91508482111561468757614686614898565b5b506146ec565b5060208310610133831016604e8410600b84101617156146c25782820a9050838111156146bd576146bc614898565b5b6146ec565b6146cf8484846001614582565b925090508184048111156146e6576146e5614898565b5b81810290505b9392505050565b60006146fe826147c9565b9150614709836147c9565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561474257614741614898565b5b828202905092915050565b6000614758826147c9565b9150614763836147c9565b92508282101561477657614775614898565b5b828203905092915050565b600061478c826147a9565b9050919050565b60008115159050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60005b838110156147fe5780820151818401526020810190506147e3565b8381111561480d576000848401525b50505050565b6000600282049050600182168061482b57607f821691505b6020821081141561483f5761483e6148f6565b5b50919050565b6000614850826147c9565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561488357614882614898565b5b600182019050919050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b60008160011c9050919050565b61497b81614781565b811461498657600080fd5b50565b6149928161479f565b811461499d57600080fd5b50565b6149a9816147c9565b81146149b457600080fd5b50565b6149c0816147d3565b81146149cb57600080fd5b5056fea2646970667358221220cbcb39092425ebc871514739020b335fee2db4fac874a3998a60bd2e1d4f893764736f6c63430008000033
Deployed ByteCode Sourcemap
41315:2946:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26397:100;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29017:169;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43740:268;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27516:108;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41061:143;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42567:301;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42133:428;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41559:88;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25260:30;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40094:115;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30736:215;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40918:135;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43294:160;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4755:184;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27968:127;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6430:94;;;:::i;:::-;;5505:103;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39836:128;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41403:148;;;:::i;:::-;;5327:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26616:104;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4124:41;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43519:148;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31454:413;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41877:250;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37011:418;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39114:656;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43109:122;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41653:218;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25219:34;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4945:192;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6679;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40867:42;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26397:100;26451:13;26484:5;26477:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26397:100;:::o;29017:169::-;29100:4;29117:39;29126:12;:10;:12::i;:::-;29140:7;29149:6;29117:8;:39::i;:::-;29174:4;29167:11;;29017:169;;;;:::o;43740:268::-;5752:12;:10;:12::i;:::-;5741:23;;:7;:5;:7::i;:::-;:23;;;5733:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43825:9:::1;:23;43835:12;43825:23;;;;;;;;;;;;;;;;;;;;;;;;;43817:32;;;::::0;::::1;;43857:17;43877:23;43887:12;43877:9;:23::i;:::-;43857:43;;43908:33;43914:12;43928;43908:5;:33::i;:::-;43976:12;43954:49;;;43990:12;43954:49;;;;;;:::i;:::-;;;;;;;;5812:1;43740:268:::0;:::o;27516:108::-;27577:7;27604:12;;27597:19;;27516:108;:::o;41061:143::-;5752:12;:10;:12::i;:::-;5741:23;;:7;:5;:7::i;:::-;:23;;;5733:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41155:5:::1;41136:9;:16;41146:5;41136:16;;;;;;;;;;;;;;;;:24;;;;;;;;;;;;;;;;;;41190:5;41176:20;;;;;;;;;;;;41061:143:::0;:::o;42567:301::-;40774:9;:23;40784:12;:10;:12::i;:::-;40774:23;;;;;;;;;;;;;;;;;;;;;;;;;40773:24;40765:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;42705:7:::1;:14;42683:11;:18;:36;42675:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;42766:9;42761:102;42785:11;:18;42781:1;:22;42761:102;;;42819:36;42828:11;42840:1;42828:14;;;;;;;;;;;;;;;;;;;;;;42844:7;42852:1;42844:10;;;;;;;;;;;;;;;;;;;;;;42819:8;:36::i;:::-;;42805:3;;;;;:::i;:::-;;;;42761:102;;;;42567:301:::0;;:::o;42133:428::-;42257:4;40774:9;:23;40784:12;:10;:12::i;:::-;40774:23;;;;;;;;;;;;;;;;;;;;;;;;;40773:24;40765:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;42300:4:::1;42278:27;;:10;:27;;;;42270:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;42365:9;:18;42375:7;42365:18;;;;;;;;;;;;;;;;;;;;;;;;;42364:19;42356:28;;;::::0;::::1;;42395:9;:21;42405:10;42395:21;;;;;;;;;;;;;;;;;;;;;;;;;42391:103;;;42427:39;42437:7;42446:10;42458:7;42427:9;:39::i;:::-;42482:4;42475:11;;;;42391:103;42507:48;42526:7;42535:10;42547:7;42507:18;:48::i;:::-;42500:55;;40850:1;42133:428:::0;;;;;:::o;41559:88::-;41617:5;41640:1;41633:8;;41559:88;:::o;25260:30::-;;;;:::o;40094:115::-;40154:7;40181:20;:18;:20::i;:::-;40174:27;;40094:115;:::o;30736:215::-;30824:4;30841:80;30850:12;:10;:12::i;:::-;30864:7;30910:10;30873:11;:25;30885:12;:10;:12::i;:::-;30873:25;;;;;;;;;;;;;;;:34;30899:7;30873:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;30841:8;:80::i;:::-;30939:4;30932:11;;30736:215;;;;:::o;40918:135::-;5752:12;:10;:12::i;:::-;5741:23;;:7;:5;:7::i;:::-;:23;;;5733:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41007:4:::1;40988:9;:16;40998:5;40988:16;;;;;;;;;;;;;;;;:23;;;;;;;;;;;;;;;;;;41039:5;41027:18;;;;;;;;;;;;40918:135:::0;:::o;43294:160::-;5983:4;5970:17;;:9;:7;:9::i;:::-;:17;;;:44;;;;6002:12;:10;:12::i;:::-;5991:23;;:7;:5;:7::i;:::-;:23;;;5970:44;5962:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;43381:28:::1;43387:12;43401:7;43381:5;:28::i;:::-;43426:12;43421:27;;;43440:7;43421:27;;;;;;:::i;:::-;;;;;;;;43294:160:::0;;:::o;4755:184::-;5752:12;:10;:12::i;:::-;5741:23;;:7;:5;:7::i;:::-;:23;;;5733:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4874:4:::1;4840:9;:31;4850:20;4840:31;;;;;;;;;;;;;;;;:38;;;;;;;;;;;;;;;;;;4912:20;4890:43;;;;;;;;;;;;4755:184:::0;:::o;27968:127::-;28042:7;28069:9;:18;28079:7;28069:18;;;;;;;;;;;;;;;;28062:25;;27968:127;;;:::o;6430:94::-;5752:12;:10;:12::i;:::-;5741:23;;:7;:5;:7::i;:::-;:23;;;5733:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6495:21:::1;6513:1;6495:9;:21::i;:::-;6430:94::o:0;5505:103::-;5553:4;5577:9;:23;5587:12;:10;:12::i;:::-;5577:23;;;;;;;;;;;;;;;;;;;;;;;;;5570:30;;5505:103;:::o;39836:128::-;39905:7;39932:24;:7;:14;39940:5;39932:14;;;;;;;;;;;;;;;:22;:24::i;:::-;39925:31;;39836:128;;;:::o;41403:148::-;2163:13;;;;;;;;;;;:30;;;;2181:12;;;;;;;;;;2180:13;2163:30;2155:89;;;;;;;;;;;;:::i;:::-;;;;;;;;;2257:19;2280:13;;;;;;;;;;;2279:14;2257:36;;2308:14;2304:101;;;2355:4;2339:13;;:20;;;;;;;;;;;;;;;;;;2389:4;2374:12;;:19;;;;;;;;;;;;;;;;;;2304:101;41455:16:::1;:14;:16::i;:::-;41478:31;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;::::0;:12:::1;:31::i;:::-;41516:29;;;;;;;;;;;;;;;;;::::0;:18:::1;:29::i;:::-;2435:14:::0;2431:68;;;2482:5;2466:13;;:21;;;;;;;;;;;;;;;;;;2431:68;41403:148;:::o;5327:87::-;5373:7;5400:6;;;;;;;;;;;5393:13;;5327:87;:::o;26616:104::-;26672:13;26705:7;26698:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26616:104;:::o;4124:41::-;;;;;;;;;;;;;;;;;;;;;;:::o;43519:148::-;5983:4;5970:17;;:9;:7;:9::i;:::-;:17;;;:44;;;;6002:12;:10;:12::i;:::-;5991:23;;:7;:5;:7::i;:::-;:23;;;5970:44;5962:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;43602:24:::1;43608:8;43618:7;43602:5;:24::i;:::-;43643:8;43638:23;;;43653:7;43638:23;;;;;;:::i;:::-;;;;;;;;43519:148:::0;;:::o;31454:413::-;31547:4;31564:24;31591:11;:25;31603:12;:10;:12::i;:::-;31591:25;;;;;;;;;;;;;;;:34;31617:7;31591:34;;;;;;;;;;;;;;;;31564:61;;31664:15;31644:16;:35;;31636:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;31757:67;31766:12;:10;:12::i;:::-;31780:7;31808:15;31789:16;:34;31757:8;:67::i;:::-;31855:4;31848:11;;;31454:413;;;;:::o;41877:250::-;41980:4;40774:9;:23;40784:12;:10;:12::i;:::-;40774:23;;;;;;;;;;;;;;;;;;;;;;;;;40773:24;40765:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;42023:4:::1;42001:27;;:10;:27;;;;41993:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;42086:35;42101:10;42113:7;42086:14;:35::i;:::-;42079:42;;41877:250:::0;;;;:::o;37011:418::-;5752:12;:10;:12::i;:::-;5741:23;;:7;:5;:7::i;:::-;:23;;;5733:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25389:1:::1;37188:14;:42;37180:51;;;::::0;::::1;;25433:2;37248:9;:28;37240:37;;;::::0;::::1;;37304:14;37286:15;:32;;;;37362:10;:8;:10::i;:::-;37357:2;37352:20;;;;:::i;:::-;37340:9;:32;;;;:::i;:::-;37327:10;:45;;;;37388:35;37395:15;;37412:10;;37388:35;;;;;;;:::i;:::-;;;;;;;;37011:418:::0;;:::o;39114:656::-;39358:8;39339:15;:27;;39331:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;39413:18;39455:16;;39473:5;39480:7;39489:5;39496:16;39506:5;39496:9;:16::i;:::-;39514:8;39444:79;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;39434:90;;;;;;39413:111;;39537:12;39552:28;39569:10;39552:16;:28::i;:::-;39537:43;;39593:14;39610:39;39635:4;39641:1;39644;39647;39610:24;:39::i;:::-;39593:56;;39678:5;39668:15;;:6;:15;;;39660:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;39731:31;39740:5;39747:7;39756:5;39731:8;:31::i;:::-;39114:656;;;;;;;;;;:::o;43109:122::-;43156:28;43162:12;:10;:12::i;:::-;43176:7;43156:5;:28::i;:::-;43212:12;:10;:12::i;:::-;43196:29;;;43203:7;43196:29;;;;;;:::i;:::-;;;;;;;;43109:122;:::o;41653:218::-;41744:7;41764:9;:19;41774:8;41764:19;;;;;;;;;;;;;;;;;;;;;;;;;41760:59;;;41801:10;41794:17;;;;41760:59;41832:33;41848:6;41856:8;41832:15;:33::i;:::-;41825:40;;41653:218;;;;;:::o;25219:34::-;;;;:::o;4945:192::-;5752:12;:10;:12::i;:::-;5741:23;;:7;:5;:7::i;:::-;:23;;;5733:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5067:5:::1;5033:9;:31;5043:20;5033:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;5110:20;5084:47;;;;;;;;;;;;4945:192:::0;:::o;6679:::-;5752:12;:10;:12::i;:::-;5741:23;;:7;:5;:7::i;:::-;:23;;;5733:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6788:1:::1;6768:22;;:8;:22;;;;6760:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;6844:19;6854:8;6844:9;:19::i;:::-;6679:192:::0;:::o;40867:42::-;;;;;;;;;;;;;;;;;;;;;;:::o;3253:98::-;3306:7;3333:10;3326:17;;3253:98;:::o;35138:380::-;35291:1;35274:19;;:5;:19;;;;35266:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35372:1;35353:21;;:7;:21;;;;35345:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35456:6;35426:11;:18;35438:5;35426:18;;;;;;;;;;;;;;;:27;35445:7;35426:27;;;;;;;;;;;;;;;:36;;;;35494:7;35478:32;;35487:5;35478:32;;;35503:6;35478:32;;;;;;:::i;:::-;;;;;;;;35138:380;;;:::o;34109:591::-;34212:1;34193:21;;:7;:21;;;;34185:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34265:49;34286:7;34303:1;34307:6;34265:20;:49::i;:::-;34327:22;34352:9;:18;34362:7;34352:18;;;;;;;;;;;;;;;;34327:43;;34407:6;34389:14;:24;;34381:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;34526:6;34509:14;:23;34488:9;:18;34498:7;34488:18;;;;;;;;;;;;;;;:44;;;;34570:6;34554:12;;:22;;;;;;;:::i;:::-;;;;;;;;34620:1;34594:37;;34603:7;34594:37;;;34624:6;34594:37;;;;;;:::i;:::-;;;;;;;;34644:48;34664:7;34681:1;34685:6;34644:19;:48::i;:::-;34109:591;;;:::o;32357:733::-;32515:1;32497:20;;:6;:20;;;;32489:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;32599:1;32578:23;;:9;:23;;;;32570:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;32654:47;32675:6;32683:9;32694:6;32654:20;:47::i;:::-;32714:21;32738:9;:17;32748:6;32738:17;;;;;;;;;;;;;;;;32714:41;;32791:6;32774:13;:23;;32766:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;32912:6;32896:13;:22;32876:9;:17;32886:6;32876:17;;;;;;;;;;;;;;;:42;;;;32964:6;32940:9;:20;32950:9;32940:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;33005:9;32988:35;;32997:6;32988:35;;;33016:6;32988:35;;;;;;:::i;:::-;;;;;;;;33036:46;33056:6;33064:9;33075:6;33036:19;:46::i;:::-;32357:733;;;;:::o;29668:659::-;29808:4;29825:11;29839:15;29847:6;29839:7;:15::i;:::-;29825:29;;29865:17;29894:3;29885:6;:12;;;;:::i;:::-;29865:32;;29908:39;29918:6;29926:9;29937;29908;:39::i;:::-;29968:1;29962:3;:7;29958:71;;;29986:31;29996:6;30004:7;:5;:7::i;:::-;30013:3;29986:9;:31::i;:::-;29958:71;30041:24;30068:11;:19;30080:6;30068:19;;;;;;;;;;;;;;;:33;30088:12;:10;:12::i;:::-;30068:33;;;;;;;;;;;;;;;;30041:60;;30140:6;30120:16;:26;;30112:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;30227:57;30236:6;30244:12;:10;:12::i;:::-;30277:6;30258:16;:25;30227:8;:57::i;:::-;30315:4;30308:11;;;;;29668:659;;;;;:::o;11435:162::-;11488:7;11515:74;10168:95;11549:17;:15;:17::i;:::-;11568:20;:18;:20::i;:::-;11515:21;:74::i;:::-;11508:81;;11435:162;:::o;33377:399::-;33480:1;33461:21;;:7;:21;;;;33453:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;33531:49;33560:1;33564:7;33573:6;33531:20;:49::i;:::-;33609:6;33593:12;;:22;;;;;;;:::i;:::-;;;;;;;;33648:6;33626:9;:18;33636:7;33626:18;;;;;;;;;;;;;;;;:28;;;;;;;:::i;:::-;;;;;;;;33691:7;33670:37;;33687:1;33670:37;;;33700:6;33670:37;;;;;;:::i;:::-;;;;;;;;33720:48;33748:1;33752:7;33761:6;33720:19;:48::i;:::-;33377:399;;:::o;6879:173::-;6935:16;6954:6;;;;;;;;;;;6935:25;;6980:8;6971:6;;:17;;;;;;;;;;;;;;;;;;7035:8;7004:40;;7025:8;7004:40;;;;;;;;;;;;6879:173;;:::o;20110:114::-;20175:7;20202;:14;;;20195:21;;20110:114;;;:::o;4561:129::-;2163:13;;;;;;;;;;;:30;;;;2181:12;;;;;;;;;;2180:13;2163:30;2155:89;;;;;;;;;;;;:::i;:::-;;;;;;;;;2257:19;2280:13;;;;;;;;;;;2279:14;2257:36;;2308:14;2304:101;;;2355:4;2339:13;;:20;;;;;;;;;;;;;;;;;;2389:4;2374:12;;:19;;;;;;;;;;;;;;;;;;2304:101;4619:26:::1;:24;:26::i;:::-;4656;:24;:26::i;:::-;2435:14:::0;2431:68;;;2482:5;2466:13;;:21;;;;;;;;;;;;;;;;;;2431:68;4561:129;:::o;25981:181::-;2163:13;;;;;;;;;;;:30;;;;2181:12;;;;;;;;;;2180:13;2163:30;2155:89;;;;;;;;;;;;:::i;:::-;;;;;;;;;2257:19;2280:13;;;;;;;;;;;2279:14;2257:36;;2308:14;2304:101;;;2355:4;2339:13;;:20;;;;;;;;;;;;;;;;;;2389:4;2374:12;;:19;;;;;;;;;;;;;;;;;;2304:101;26079:26:::1;:24;:26::i;:::-;26116:38;26139:5;26146:7;26116:22;:38::i;:::-;2435:14:::0;2431:68;;;2482:5;2466:13;;:21;;;;;;;;;;;;;;;;;;2431:68;25981:181;;;:::o;38652:200::-;2163:13;;;;;;;;;;;:30;;;;2181:12;;;;;;;;;;2180:13;2163:30;2155:89;;;;;;;;;;;;:::i;:::-;;;;;;;;;2257:19;2280:13;;;;;;;;;;;2279:14;2257:36;;2308:14;2304:101;;;2355:4;2339:13;;:20;;;;;;;;;;;;;;;;;;2389:4;2374:12;;:19;;;;;;;;;;;;;;;;;;2304:101;38732:26:::1;:24;:26::i;:::-;38769:34;38793:4;38769:34;;;;;;;;;;;;;;;;::::0;:23:::1;:34::i;:::-;38814:30;:28;:30::i;:::-;2435:14:::0;2431:68;;;2482:5;2466:13;;:21;;;;;;;;;;;;;;;;;;2431:68;38652:200;;:::o;28308:348::-;28394:4;28411:11;28425:15;28433:6;28425:7;:15::i;:::-;28411:29;;28451:17;28480:3;28471:6;:12;;;;:::i;:::-;28451:32;;28494:45;28504:12;:10;:12::i;:::-;28518:9;28529;28494;:45::i;:::-;28560:1;28554:3;:7;28550:77;;;28578:37;28588:12;:10;:12::i;:::-;28602:7;:5;:7::i;:::-;28611:3;28578:9;:37::i;:::-;28550:77;28644:4;28637:11;;;;28308:348;;;;:::o;40347:218::-;40407:15;40435:41;40479:7;:14;40487:5;40479:14;;;;;;;;;;;;;;;40435:58;;40514:15;:5;:13;:15::i;:::-;40504:25;;40540:17;:5;:15;:17::i;:::-;40347:218;;;;:::o;12510:178::-;12587:7;12614:66;12647:20;:18;:20::i;:::-;12669:10;12614:32;:66::i;:::-;12607:73;;12510:178;;;:::o;16732:1512::-;16860:7;17799:66;17793:1;17785:10;;:80;;17763:164;;;;;;;;;;;;:::i;:::-;;;;;;;;;17951:2;17946:1;:7;;;:18;;;;17962:2;17957:1;:7;;;17946:18;17938:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;18101:14;18118:24;18128:4;18134:1;18137;18140;18118:24;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18101:41;;18179:1;18161:20;;:6;:20;;;;18153:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;18230:6;18223:13;;;16732:1512;;;;;;:::o;28719:151::-;28808:7;28835:11;:18;28847:5;28835:18;;;;;;;;;;;;;;;:27;28854:7;28835:27;;;;;;;;;;;;;;;;28828:34;;28719:151;;;;:::o;36118:125::-;;;;:::o;36847:124::-;;;;:::o;27705:200::-;27758:7;27774:8;27814:5;27795:15;;27786:6;:24;;;;:::i;:::-;27785:34;;;;:::i;:::-;27774:45;;27836:10;;27830:3;:16;27826:57;;;27865:10;;27859:16;;27826:57;27896:3;27889:10;;;27705:200;;;:::o;12932:105::-;12990:7;13017:12;;13010:19;;12932:105;:::o;13284:111::-;13345:7;13372:15;;13365:22;;13284:111;:::o;11605:263::-;11749:7;11797:8;11807;11817:11;11830:13;11853:4;11786:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;11776:84;;;;;;11769:91;;11605:263;;;;;:::o;3182:65::-;2163:13;;;;;;;;;;;:30;;;;2181:12;;;;;;;;;;2180:13;2163:30;2155:89;;;;;;;;;;;;:::i;:::-;;;;;;;;;2257:19;2280:13;;;;;;;;;;;2279:14;2257:36;;2308:14;2304:101;;;2355:4;2339:13;;:20;;;;;;;;;;;;;;;;;;2389:4;2374:12;;:19;;;;;;;;;;;;;;;;;;2304:101;2435:14;2431:68;;;2482:5;2466:13;;:21;;;;;;;;;;;;;;;;;;2431:68;3182:65;:::o;5147:99::-;2163:13;;;;;;;;;;;:30;;;;2181:12;;;;;;;;;;2180:13;2163:30;2155:89;;;;;;;;;;;;:::i;:::-;;;;;;;;;2257:19;2280:13;;;;;;;;;;;2279:14;2257:36;;2308:14;2304:101;;;2355:4;2339:13;;:20;;;;;;;;;;;;;;;;;;2389:4;2374:12;;:19;;;;;;;;;;;;;;;;;;2304:101;5215:23:::1;5225:12;:10;:12::i;:::-;5215:9;:23::i;:::-;2435:14:::0;2431:68;;;2482:5;2466:13;;:21;;;;;;;;;;;;;;;;;;2431:68;5147:99;:::o;26170:157::-;2163:13;;;;;;;;;;;:30;;;;2181:12;;;;;;;;;;2180:13;2163:30;2155:89;;;;;;;;;;;;:::i;:::-;;;;;;;;;2257:19;2280:13;;;;;;;;;;;2279:14;2257:36;;2308:14;2304:101;;;2355:4;2339:13;;:20;;;;;;;;;;;;;;;;;;2389:4;2374:12;;:19;;;;;;;;;;;;;;;;;;2304:101;26286:5:::1;26278;:13;;;;;;;;;;;;:::i;:::-;;26312:7;26302;:17;;;;;;;;;;;;:::i;:::-;;2435:14:::0;2431:68;;;2482:5;2466:13;;:21;;;;;;;;;;;;;;;;;;2431:68;26170:157;;;:::o;11047:297::-;2163:13;;;;;;;;;;;:30;;;;2181:12;;;;;;;;;;2180:13;2163:30;2155:89;;;;;;;;;;;;:::i;:::-;;;;;;;;;2257:19;2280:13;;;;;;;;;;;2279:14;2257:36;;2308:14;2304:101;;;2355:4;2339:13;;:20;;;;;;;;;;;;;;;;;;2389:4;2374:12;;:19;;;;;;;;;;;;;;;;;;2304:101;11155:18:::1;11192:4;11176:22;;;;;;11155:43;;11209:21;11249:7;11233:25;;;;;;11209:49;;11284:10;11269:12;:25;;;;11323:13;11305:15;:31;;;;2417:1;;2435:14:::0;2431:68;;;2482:5;2466:13;;:21;;;;;;;;;;;;;;;;;;2431:68;11047:297;;;:::o;38860:188::-;2163:13;;;;;;;;;;;:30;;;;2181:12;;;;;;;;;;2180:13;2163:30;2155:89;;;;;;;;;;;;:::i;:::-;;;;;;;;;2257:19;2280:13;;;;;;;;;;;2279:14;2257:36;;2308:14;2304:101;;;2355:4;2339:13;;:20;;;;;;;;;;;;;;;;;;2389:4;2374:12;;:19;;;;;;;;;;;;;;;;;;2304:101;38951:95:::1;38932:16;:114;;;;2435:14:::0;2431:68;;;2482:5;2466:13;;:21;;;;;;;;;;;;;;;;;;2431:68;38860:188;:::o;20232:127::-;20339:1;20321:7;:14;;;:19;;;;;;;;;;;20232:127;:::o;19163:196::-;19256:7;19322:15;19339:10;19293:57;;;;;;;;;:::i;:::-;;;;;;;;;;;;;19283:68;;;;;;19276:75;;19163:196;;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;24:622:1:-;;145:80;160:64;217:6;160:64;:::i;:::-;145:80;:::i;:::-;136:89;;245:5;273:6;266:5;259:21;299:4;292:5;288:16;281:23;;324:6;374:3;366:4;358:6;354:17;349:3;345:27;342:36;339:2;;;391:1;388;381:12;339:2;419:1;404:236;429:6;426:1;423:13;404:236;;;496:3;524:37;557:3;545:10;524:37;:::i;:::-;519:3;512:50;591:4;586:3;582:14;575:21;;625:4;620:3;616:14;609:21;;464:176;451:1;448;444:9;439:14;;404:236;;;408:14;126:520;;;;;;;:::o;669:622::-;;790:80;805:64;862:6;805:64;:::i;:::-;790:80;:::i;:::-;781:89;;890:5;918:6;911:5;904:21;944:4;937:5;933:16;926:23;;969:6;1019:3;1011:4;1003:6;999:17;994:3;990:27;987:36;984:2;;;1036:1;1033;1026:12;984:2;1064:1;1049:236;1074:6;1071:1;1068:13;1049:236;;;1141:3;1169:37;1202:3;1190:10;1169:37;:::i;:::-;1164:3;1157:50;1236:4;1231:3;1227:14;1220:21;;1270:4;1265:3;1261:14;1254:21;;1109:176;1096:1;1093;1089:9;1084:14;;1049:236;;;1053:14;771:520;;;;;;;:::o;1297:139::-;;1381:6;1368:20;1359:29;;1397:33;1424:5;1397:33;:::i;:::-;1349:87;;;;:::o;1459:303::-;;1579:3;1572:4;1564:6;1560:17;1556:27;1546:2;;1597:1;1594;1587:12;1546:2;1637:6;1624:20;1662:94;1752:3;1744:6;1737:4;1729:6;1725:17;1662:94;:::i;:::-;1653:103;;1536:226;;;;;:::o;1785:303::-;;1905:3;1898:4;1890:6;1886:17;1882:27;1872:2;;1923:1;1920;1913:12;1872:2;1963:6;1950:20;1988:94;2078:3;2070:6;2063:4;2055:6;2051:17;1988:94;:::i;:::-;1979:103;;1862:226;;;;;:::o;2094:139::-;;2178:6;2165:20;2156:29;;2194:33;2221:5;2194:33;:::i;:::-;2146:87;;;;:::o;2239:139::-;;2323:6;2310:20;2301:29;;2339:33;2366:5;2339:33;:::i;:::-;2291:87;;;;:::o;2384:135::-;;2466:6;2453:20;2444:29;;2482:31;2507:5;2482:31;:::i;:::-;2434:85;;;;:::o;2525:262::-;;2633:2;2621:9;2612:7;2608:23;2604:32;2601:2;;;2649:1;2646;2639:12;2601:2;2692:1;2717:53;2762:7;2753:6;2742:9;2738:22;2717:53;:::i;:::-;2707:63;;2663:117;2591:196;;;;:::o;2793:407::-;;;2918:2;2906:9;2897:7;2893:23;2889:32;2886:2;;;2934:1;2931;2924:12;2886:2;2977:1;3002:53;3047:7;3038:6;3027:9;3023:22;3002:53;:::i;:::-;2992:63;;2948:117;3104:2;3130:53;3175:7;3166:6;3155:9;3151:22;3130:53;:::i;:::-;3120:63;;3075:118;2876:324;;;;;:::o;3206:552::-;;;;3348:2;3336:9;3327:7;3323:23;3319:32;3316:2;;;3364:1;3361;3354:12;3316:2;3407:1;3432:53;3477:7;3468:6;3457:9;3453:22;3432:53;:::i;:::-;3422:63;;3378:117;3534:2;3560:53;3605:7;3596:6;3585:9;3581:22;3560:53;:::i;:::-;3550:63;;3505:118;3662:2;3688:53;3733:7;3724:6;3713:9;3709:22;3688:53;:::i;:::-;3678:63;;3633:118;3306:452;;;;;:::o;3764:1132::-;;;;;;;;3972:3;3960:9;3951:7;3947:23;3943:33;3940:2;;;3989:1;3986;3979:12;3940:2;4032:1;4057:53;4102:7;4093:6;4082:9;4078:22;4057:53;:::i;:::-;4047:63;;4003:117;4159:2;4185:53;4230:7;4221:6;4210:9;4206:22;4185:53;:::i;:::-;4175:63;;4130:118;4287:2;4313:53;4358:7;4349:6;4338:9;4334:22;4313:53;:::i;:::-;4303:63;;4258:118;4415:2;4441:53;4486:7;4477:6;4466:9;4462:22;4441:53;:::i;:::-;4431:63;;4386:118;4543:3;4570:51;4613:7;4604:6;4593:9;4589:22;4570:51;:::i;:::-;4560:61;;4514:117;4670:3;4697:53;4742:7;4733:6;4722:9;4718:22;4697:53;:::i;:::-;4687:63;;4641:119;4799:3;4826:53;4871:7;4862:6;4851:9;4847:22;4826:53;:::i;:::-;4816:63;;4770:119;3930:966;;;;;;;;;;:::o;4902:407::-;;;5027:2;5015:9;5006:7;5002:23;4998:32;4995:2;;;5043:1;5040;5033:12;4995:2;5086:1;5111:53;5156:7;5147:6;5136:9;5132:22;5111:53;:::i;:::-;5101:63;;5057:117;5213:2;5239:53;5284:7;5275:6;5264:9;5260:22;5239:53;:::i;:::-;5229:63;;5184:118;4985:324;;;;;:::o;5315:693::-;;;5490:2;5478:9;5469:7;5465:23;5461:32;5458:2;;;5506:1;5503;5496:12;5458:2;5577:1;5566:9;5562:17;5549:31;5607:18;5599:6;5596:30;5593:2;;;5639:1;5636;5629:12;5593:2;5667:78;5737:7;5728:6;5717:9;5713:22;5667:78;:::i;:::-;5657:88;;5520:235;5822:2;5811:9;5807:18;5794:32;5853:18;5845:6;5842:30;5839:2;;;5885:1;5882;5875:12;5839:2;5913:78;5983:7;5974:6;5963:9;5959:22;5913:78;:::i;:::-;5903:88;;5765:236;5448:560;;;;;:::o;6014:262::-;;6122:2;6110:9;6101:7;6097:23;6093:32;6090:2;;;6138:1;6135;6128:12;6090:2;6181:1;6206:53;6251:7;6242:6;6231:9;6227:22;6206:53;:::i;:::-;6196:63;;6152:117;6080:196;;;;:::o;6282:407::-;;;6407:2;6395:9;6386:7;6382:23;6378:32;6375:2;;;6423:1;6420;6413:12;6375:2;6466:1;6491:53;6536:7;6527:6;6516:9;6512:22;6491:53;:::i;:::-;6481:63;;6437:117;6593:2;6619:53;6664:7;6655:6;6644:9;6640:22;6619:53;:::i;:::-;6609:63;;6564:118;6365:324;;;;;:::o;6695:118::-;6782:24;6800:5;6782:24;:::i;:::-;6777:3;6770:37;6760:53;;:::o;6819:109::-;6900:21;6915:5;6900:21;:::i;:::-;6895:3;6888:34;6878:50;;:::o;6934:118::-;7021:24;7039:5;7021:24;:::i;:::-;7016:3;7009:37;6999:53;;:::o;7058:157::-;7163:45;7183:24;7201:5;7183:24;:::i;:::-;7163:45;:::i;:::-;7158:3;7151:58;7141:74;;:::o;7221:364::-;;7337:39;7370:5;7337:39;:::i;:::-;7392:71;7456:6;7451:3;7392:71;:::i;:::-;7385:78;;7472:52;7517:6;7512:3;7505:4;7498:5;7494:16;7472:52;:::i;:::-;7549:29;7571:6;7549:29;:::i;:::-;7544:3;7540:39;7533:46;;7313:272;;;;;:::o;7591:322::-;;7754:67;7818:2;7813:3;7754:67;:::i;:::-;7747:74;;7851:26;7847:1;7842:3;7838:11;7831:47;7904:2;7899:3;7895:12;7888:19;;7737:176;;;:::o;7919:367::-;;8082:67;8146:2;8141:3;8082:67;:::i;:::-;8075:74;;8179:34;8175:1;8170:3;8166:11;8159:55;8245:5;8240:2;8235:3;8231:12;8224:27;8277:2;8272:3;8268:12;8261:19;;8065:221;;;:::o;8292:366::-;;8455:67;8519:2;8514:3;8455:67;:::i;:::-;8448:74;;8552:34;8548:1;8543:3;8539:11;8532:55;8618:4;8613:2;8608:3;8604:12;8597:26;8649:2;8644:3;8640:12;8633:19;;8438:220;;;:::o;8664:370::-;;8827:67;8891:2;8886:3;8827:67;:::i;:::-;8820:74;;8924:34;8920:1;8915:3;8911:11;8904:55;8990:8;8985:2;8980:3;8976:12;8969:30;9025:2;9020:3;9016:12;9009:19;;8810:224;;;:::o;9040:366::-;;9203:67;9267:2;9262:3;9203:67;:::i;:::-;9196:74;;9300:34;9296:1;9291:3;9287:11;9280:55;9366:4;9361:2;9356:3;9352:12;9345:26;9397:2;9392:3;9388:12;9381:19;;9186:220;;;:::o;9412:396::-;;9593:84;9675:1;9670:3;9593:84;:::i;:::-;9586:91;;9707:66;9703:1;9698:3;9694:11;9687:87;9800:1;9795:3;9791:11;9784:18;;9576:232;;;:::o;9814:327::-;;9977:67;10041:2;10036:3;9977:67;:::i;:::-;9970:74;;10074:31;10070:1;10065:3;10061:11;10054:52;10132:2;10127:3;10123:12;10116:19;;9960:181;;;:::o;10147:370::-;;10310:67;10374:2;10369:3;10310:67;:::i;:::-;10303:74;;10407:34;10403:1;10398:3;10394:11;10387:55;10473:8;10468:2;10463:3;10459:12;10452:30;10508:2;10503:3;10499:12;10492:19;;10293:224;;;:::o;10523:366::-;;10686:67;10750:2;10745:3;10686:67;:::i;:::-;10679:74;;10783:34;10779:1;10774:3;10770:11;10763:55;10849:4;10844:2;10839:3;10835:12;10828:26;10880:2;10875:3;10871:12;10864:19;;10669:220;;;:::o;10895:371::-;;11058:67;11122:2;11117:3;11058:67;:::i;:::-;11051:74;;11155:34;11151:1;11146:3;11142:11;11135:55;11221:9;11216:2;11211:3;11207:12;11200:31;11257:2;11252:3;11248:12;11241:19;;11041:225;;;:::o;11272:378::-;;11435:67;11499:2;11494:3;11435:67;:::i;:::-;11428:74;;11532:34;11528:1;11523:3;11519:11;11512:55;11598:16;11593:2;11588:3;11584:12;11577:38;11641:2;11636:3;11632:12;11625:19;;11418:232;;;:::o;11656:366::-;;11819:67;11883:2;11878:3;11819:67;:::i;:::-;11812:74;;11916:34;11912:1;11907:3;11903:11;11896:55;11982:4;11977:2;11972:3;11968:12;11961:26;12013:2;12008:3;12004:12;11997:19;;11802:220;;;:::o;12028:372::-;;12191:67;12255:2;12250:3;12191:67;:::i;:::-;12184:74;;12288:34;12284:1;12279:3;12275:11;12268:55;12354:10;12349:2;12344:3;12340:12;12333:32;12391:2;12386:3;12382:12;12375:19;;12174:226;;;:::o;12406:371::-;;12569:67;12633:2;12628:3;12569:67;:::i;:::-;12562:74;;12666:34;12662:1;12657:3;12653:11;12646:55;12732:9;12727:2;12722:3;12718:12;12711:31;12768:2;12763:3;12759:12;12752:19;;12552:225;;;:::o;12783:328::-;;12946:67;13010:2;13005:3;12946:67;:::i;:::-;12939:74;;13043:32;13039:1;13034:3;13030:11;13023:53;13102:2;13097:3;13093:12;13086:19;;12929:182;;;:::o;13117:372::-;;13280:67;13344:2;13339:3;13280:67;:::i;:::-;13273:74;;13377:34;13373:1;13368:3;13364:11;13357:55;13443:10;13438:2;13433:3;13429:12;13422:32;13480:2;13475:3;13471:12;13464:19;;13263:226;;;:::o;13495:330::-;;13658:67;13722:2;13717:3;13658:67;:::i;:::-;13651:74;;13755:34;13751:1;13746:3;13742:11;13735:55;13816:2;13811:3;13807:12;13800:19;;13641:184;;;:::o;13831:365::-;;13994:67;14058:2;14053:3;13994:67;:::i;:::-;13987:74;;14091:34;14087:1;14082:3;14078:11;14071:55;14157:3;14152:2;14147:3;14143:12;14136:25;14187:2;14182:3;14178:12;14171:19;;13977:219;;;:::o;14202:369::-;;14365:67;14429:2;14424:3;14365:67;:::i;:::-;14358:74;;14462:34;14458:1;14453:3;14449:11;14442:55;14528:7;14523:2;14518:3;14514:12;14507:29;14562:2;14557:3;14553:12;14546:19;;14348:223;;;:::o;14577:368::-;;14740:67;14804:2;14799:3;14740:67;:::i;:::-;14733:74;;14837:34;14833:1;14828:3;14824:11;14817:55;14903:6;14898:2;14893:3;14889:12;14882:28;14936:2;14931:3;14927:12;14920:19;;14723:222;;;:::o;14951:327::-;;15114:67;15178:2;15173:3;15114:67;:::i;:::-;15107:74;;15211:31;15207:1;15202:3;15198:11;15191:52;15269:2;15264:3;15260:12;15253:19;;15097:181;;;:::o;15284:369::-;;15447:67;15511:2;15506:3;15447:67;:::i;:::-;15440:74;;15544:34;15540:1;15535:3;15531:11;15524:55;15610:7;15605:2;15600:3;15596:12;15589:29;15644:2;15639:3;15635:12;15628:19;;15430:223;;;:::o;15659:329::-;;15822:67;15886:2;15881:3;15822:67;:::i;:::-;15815:74;;15919:33;15915:1;15910:3;15906:11;15899:54;15979:2;15974:3;15970:12;15963:19;;15805:183;;;:::o;15994:118::-;16081:24;16099:5;16081:24;:::i;:::-;16076:3;16069:37;16059:53;;:::o;16118:112::-;16201:22;16217:5;16201:22;:::i;:::-;16196:3;16189:35;16179:51;;:::o;16236:663::-;;16499:148;16643:3;16499:148;:::i;:::-;16492:155;;16657:75;16728:3;16719:6;16657:75;:::i;:::-;16757:2;16752:3;16748:12;16741:19;;16770:75;16841:3;16832:6;16770:75;:::i;:::-;16870:2;16865:3;16861:12;16854:19;;16890:3;16883:10;;16481:418;;;;;:::o;16905:222::-;;17036:2;17025:9;17021:18;17013:26;;17049:71;17117:1;17106:9;17102:17;17093:6;17049:71;:::i;:::-;17003:124;;;;:::o;17133:210::-;;17258:2;17247:9;17243:18;17235:26;;17271:65;17333:1;17322:9;17318:17;17309:6;17271:65;:::i;:::-;17225:118;;;;:::o;17349:222::-;;17480:2;17469:9;17465:18;17457:26;;17493:71;17561:1;17550:9;17546:17;17537:6;17493:71;:::i;:::-;17447:124;;;;:::o;17577:775::-;;17848:3;17837:9;17833:19;17825:27;;17862:71;17930:1;17919:9;17915:17;17906:6;17862:71;:::i;:::-;17943:72;18011:2;18000:9;17996:18;17987:6;17943:72;:::i;:::-;18025;18093:2;18082:9;18078:18;18069:6;18025:72;:::i;:::-;18107;18175:2;18164:9;18160:18;18151:6;18107:72;:::i;:::-;18189:73;18257:3;18246:9;18242:19;18233:6;18189:73;:::i;:::-;18272;18340:3;18329:9;18325:19;18316:6;18272:73;:::i;:::-;17815:537;;;;;;;;;:::o;18358:664::-;;18601:3;18590:9;18586:19;18578:27;;18615:71;18683:1;18672:9;18668:17;18659:6;18615:71;:::i;:::-;18696:72;18764:2;18753:9;18749:18;18740:6;18696:72;:::i;:::-;18778;18846:2;18835:9;18831:18;18822:6;18778:72;:::i;:::-;18860;18928:2;18917:9;18913:18;18904:6;18860:72;:::i;:::-;18942:73;19010:3;18999:9;18995:19;18986:6;18942:73;:::i;:::-;18568:454;;;;;;;;:::o;19028:545::-;;19239:3;19228:9;19224:19;19216:27;;19253:71;19321:1;19310:9;19306:17;19297:6;19253:71;:::i;:::-;19334:68;19398:2;19387:9;19383:18;19374:6;19334:68;:::i;:::-;19412:72;19480:2;19469:9;19465:18;19456:6;19412:72;:::i;:::-;19494;19562:2;19551:9;19547:18;19538:6;19494:72;:::i;:::-;19206:367;;;;;;;:::o;19579:313::-;;19730:2;19719:9;19715:18;19707:26;;19779:9;19773:4;19769:20;19765:1;19754:9;19750:17;19743:47;19807:78;19880:4;19871:6;19807:78;:::i;:::-;19799:86;;19697:195;;;;:::o;19898:419::-;;20102:2;20091:9;20087:18;20079:26;;20151:9;20145:4;20141:20;20137:1;20126:9;20122:17;20115:47;20179:131;20305:4;20179:131;:::i;:::-;20171:139;;20069:248;;;:::o;20323:419::-;;20527:2;20516:9;20512:18;20504:26;;20576:9;20570:4;20566:20;20562:1;20551:9;20547:17;20540:47;20604:131;20730:4;20604:131;:::i;:::-;20596:139;;20494:248;;;:::o;20748:419::-;;20952:2;20941:9;20937:18;20929:26;;21001:9;20995:4;20991:20;20987:1;20976:9;20972:17;20965:47;21029:131;21155:4;21029:131;:::i;:::-;21021:139;;20919:248;;;:::o;21173:419::-;;21377:2;21366:9;21362:18;21354:26;;21426:9;21420:4;21416:20;21412:1;21401:9;21397:17;21390:47;21454:131;21580:4;21454:131;:::i;:::-;21446:139;;21344:248;;;:::o;21598:419::-;;21802:2;21791:9;21787:18;21779:26;;21851:9;21845:4;21841:20;21837:1;21826:9;21822:17;21815:47;21879:131;22005:4;21879:131;:::i;:::-;21871:139;;21769:248;;;:::o;22023:419::-;;22227:2;22216:9;22212:18;22204:26;;22276:9;22270:4;22266:20;22262:1;22251:9;22247:17;22240:47;22304:131;22430:4;22304:131;:::i;:::-;22296:139;;22194:248;;;:::o;22448:419::-;;22652:2;22641:9;22637:18;22629:26;;22701:9;22695:4;22691:20;22687:1;22676:9;22672:17;22665:47;22729:131;22855:4;22729:131;:::i;:::-;22721:139;;22619:248;;;:::o;22873:419::-;;23077:2;23066:9;23062:18;23054:26;;23126:9;23120:4;23116:20;23112:1;23101:9;23097:17;23090:47;23154:131;23280:4;23154:131;:::i;:::-;23146:139;;23044:248;;;:::o;23298:419::-;;23502:2;23491:9;23487:18;23479:26;;23551:9;23545:4;23541:20;23537:1;23526:9;23522:17;23515:47;23579:131;23705:4;23579:131;:::i;:::-;23571:139;;23469:248;;;:::o;23723:419::-;;23927:2;23916:9;23912:18;23904:26;;23976:9;23970:4;23966:20;23962:1;23951:9;23947:17;23940:47;24004:131;24130:4;24004:131;:::i;:::-;23996:139;;23894:248;;;:::o;24148:419::-;;24352:2;24341:9;24337:18;24329:26;;24401:9;24395:4;24391:20;24387:1;24376:9;24372:17;24365:47;24429:131;24555:4;24429:131;:::i;:::-;24421:139;;24319:248;;;:::o;24573:419::-;;24777:2;24766:9;24762:18;24754:26;;24826:9;24820:4;24816:20;24812:1;24801:9;24797:17;24790:47;24854:131;24980:4;24854:131;:::i;:::-;24846:139;;24744:248;;;:::o;24998:419::-;;25202:2;25191:9;25187:18;25179:26;;25251:9;25245:4;25241:20;25237:1;25226:9;25222:17;25215:47;25279:131;25405:4;25279:131;:::i;:::-;25271:139;;25169:248;;;:::o;25423:419::-;;25627:2;25616:9;25612:18;25604:26;;25676:9;25670:4;25666:20;25662:1;25651:9;25647:17;25640:47;25704:131;25830:4;25704:131;:::i;:::-;25696:139;;25594:248;;;:::o;25848:419::-;;26052:2;26041:9;26037:18;26029:26;;26101:9;26095:4;26091:20;26087:1;26076:9;26072:17;26065:47;26129:131;26255:4;26129:131;:::i;:::-;26121:139;;26019:248;;;:::o;26273:419::-;;26477:2;26466:9;26462:18;26454:26;;26526:9;26520:4;26516:20;26512:1;26501:9;26497:17;26490:47;26554:131;26680:4;26554:131;:::i;:::-;26546:139;;26444:248;;;:::o;26698:419::-;;26902:2;26891:9;26887:18;26879:26;;26951:9;26945:4;26941:20;26937:1;26926:9;26922:17;26915:47;26979:131;27105:4;26979:131;:::i;:::-;26971:139;;26869:248;;;:::o;27123:419::-;;27327:2;27316:9;27312:18;27304:26;;27376:9;27370:4;27366:20;27362:1;27351:9;27347:17;27340:47;27404:131;27530:4;27404:131;:::i;:::-;27396:139;;27294:248;;;:::o;27548:419::-;;27752:2;27741:9;27737:18;27729:26;;27801:9;27795:4;27791:20;27787:1;27776:9;27772:17;27765:47;27829:131;27955:4;27829:131;:::i;:::-;27821:139;;27719:248;;;:::o;27973:419::-;;28177:2;28166:9;28162:18;28154:26;;28226:9;28220:4;28216:20;28212:1;28201:9;28197:17;28190:47;28254:131;28380:4;28254:131;:::i;:::-;28246:139;;28144:248;;;:::o;28398:419::-;;28602:2;28591:9;28587:18;28579:26;;28651:9;28645:4;28641:20;28637:1;28626:9;28622:17;28615:47;28679:131;28805:4;28679:131;:::i;:::-;28671:139;;28569:248;;;:::o;28823:419::-;;29027:2;29016:9;29012:18;29004:26;;29076:9;29070:4;29066:20;29062:1;29051:9;29047:17;29040:47;29104:131;29230:4;29104:131;:::i;:::-;29096:139;;28994:248;;;:::o;29248:222::-;;29379:2;29368:9;29364:18;29356:26;;29392:71;29460:1;29449:9;29445:17;29436:6;29392:71;:::i;:::-;29346:124;;;;:::o;29476:332::-;;29635:2;29624:9;29620:18;29612:26;;29648:71;29716:1;29705:9;29701:17;29692:6;29648:71;:::i;:::-;29729:72;29797:2;29786:9;29782:18;29773:6;29729:72;:::i;:::-;29602:206;;;;;:::o;29814:214::-;;29941:2;29930:9;29926:18;29918:26;;29954:67;30018:1;30007:9;30003:17;29994:6;29954:67;:::i;:::-;29908:120;;;;:::o;30034:283::-;;30100:2;30094:9;30084:19;;30142:4;30134:6;30130:17;30249:6;30237:10;30234:22;30213:18;30201:10;30198:34;30195:62;30192:2;;;30260:18;;:::i;:::-;30192:2;30300:10;30296:2;30289:22;30074:243;;;;:::o;30323:311::-;;30490:18;30482:6;30479:30;30476:2;;;30512:18;;:::i;:::-;30476:2;30562:4;30554:6;30550:17;30542:25;;30622:4;30616;30612:15;30604:23;;30405:229;;;:::o;30640:311::-;;30807:18;30799:6;30796:30;30793:2;;;30829:18;;:::i;:::-;30793:2;30879:4;30871:6;30867:17;30859:25;;30939:4;30933;30929:15;30921:23;;30722:229;;;:::o;30957:99::-;;31043:5;31037:12;31027:22;;31016:40;;;:::o;31062:169::-;;31180:6;31175:3;31168:19;31220:4;31215:3;31211:14;31196:29;;31158:73;;;;:::o;31237:148::-;;31376:3;31361:18;;31351:34;;;;:::o;31391:305::-;;31450:20;31468:1;31450:20;:::i;:::-;31445:25;;31484:20;31502:1;31484:20;:::i;:::-;31479:25;;31638:1;31570:66;31566:74;31563:1;31560:81;31557:2;;;31644:18;;:::i;:::-;31557:2;31688:1;31685;31681:9;31674:16;;31435:261;;;;:::o;31702:185::-;;31759:20;31777:1;31759:20;:::i;:::-;31754:25;;31793:20;31811:1;31793:20;:::i;:::-;31788:25;;31832:1;31822:2;;31837:18;;:::i;:::-;31822:2;31879:1;31876;31872:9;31867:14;;31744:143;;;;:::o;31893:848::-;;;31985:6;31976:15;;32009:5;32000:14;;32023:712;32044:1;32034:8;32031:15;32023:712;;;32139:4;32134:3;32130:14;32124:4;32121:24;32118:2;;;32148:18;;:::i;:::-;32118:2;32198:1;32188:8;32184:16;32181:2;;;32613:4;32606:5;32602:16;32593:25;;32181:2;32663:4;32657;32653:15;32645:23;;32693:32;32716:8;32693:32;:::i;:::-;32681:44;;32023:712;;;31966:775;;;;;;;:::o;32747:281::-;;32829:23;32847:4;32829:23;:::i;:::-;32821:31;;32873:25;32889:8;32873:25;:::i;:::-;32861:37;;32917:104;32954:66;32944:8;32938:4;32917:104;:::i;:::-;32908:113;;32811:217;;;;:::o;33034:1073::-;;33279:8;33269:2;;33300:1;33291:10;;33302:5;;33269:2;33328:4;33318:2;;33345:1;33336:10;;33347:5;;33318:2;33414:4;33462:1;33457:27;;;;33498:1;33493:191;;;;33407:277;;33457:27;33475:1;33466:10;;33477:5;;;33493:191;33538:3;33528:8;33525:17;33522:2;;;33545:18;;:::i;:::-;33522:2;33594:8;33591:1;33587:16;33578:25;;33629:3;33622:5;33619:14;33616:2;;;33636:18;;:::i;:::-;33616:2;33669:5;;;33407:277;;33793:2;33783:8;33780:16;33774:3;33768:4;33765:13;33761:36;33743:2;33733:8;33730:16;33725:2;33719:4;33716:12;33712:35;33696:111;33693:2;;;33849:8;33843:4;33839:19;33830:28;;33884:3;33877:5;33874:14;33871:2;;;33891:18;;:::i;:::-;33871:2;33924:5;;33693:2;33964:42;34002:3;33992:8;33986:4;33983:1;33964:42;:::i;:::-;33949:57;;;;34038:4;34033:3;34029:14;34022:5;34019:25;34016:2;;;34047:18;;:::i;:::-;34016:2;34096:4;34089:5;34085:16;34076:25;;33094:1013;;;;;;:::o;34113:348::-;;34176:20;34194:1;34176:20;:::i;:::-;34171:25;;34210:20;34228:1;34210:20;:::i;:::-;34205:25;;34398:1;34330:66;34326:74;34323:1;34320:81;34315:1;34308:9;34301:17;34297:105;34294:2;;;34405:18;;:::i;:::-;34294:2;34453:1;34450;34446:9;34435:20;;34161:300;;;;:::o;34467:191::-;;34527:20;34545:1;34527:20;:::i;:::-;34522:25;;34561:20;34579:1;34561:20;:::i;:::-;34556:25;;34600:1;34597;34594:8;34591:2;;;34605:18;;:::i;:::-;34591:2;34650:1;34647;34643:9;34635:17;;34512:146;;;;:::o;34664:96::-;;34730:24;34748:5;34730:24;:::i;:::-;34719:35;;34709:51;;;:::o;34766:90::-;;34843:5;34836:13;34829:21;34818:32;;34808:48;;;:::o;34862:77::-;;34928:5;34917:16;;34907:32;;;:::o;34945:126::-;;35022:42;35015:5;35011:54;35000:65;;34990:81;;;:::o;35077:77::-;;35143:5;35132:16;;35122:32;;;:::o;35160:86::-;;35235:4;35228:5;35224:16;35213:27;;35203:43;;;:::o;35252:307::-;35320:1;35330:113;35344:6;35341:1;35338:13;35330:113;;;35429:1;35424:3;35420:11;35414:18;35410:1;35405:3;35401:11;35394:39;35366:2;35363:1;35359:10;35354:15;;35330:113;;;35461:6;35458:1;35455:13;35452:2;;;35541:1;35532:6;35527:3;35523:16;35516:27;35452:2;35301:258;;;;:::o;35565:320::-;;35646:1;35640:4;35636:12;35626:22;;35693:1;35687:4;35683:12;35714:18;35704:2;;35770:4;35762:6;35758:17;35748:27;;35704:2;35832;35824:6;35821:14;35801:18;35798:38;35795:2;;;35851:18;;:::i;:::-;35795:2;35616:269;;;;:::o;35891:233::-;;35953:24;35971:5;35953:24;:::i;:::-;35944:33;;35999:66;35992:5;35989:77;35986:2;;;36069:18;;:::i;:::-;35986:2;36116:1;36109:5;36105:13;36098:20;;35934:190;;;:::o;36130:79::-;;36198:5;36187:16;;36177:32;;;:::o;36215:180::-;36263:77;36260:1;36253:88;36360:4;36357:1;36350:15;36384:4;36381:1;36374:15;36401:180;36449:77;36446:1;36439:88;36546:4;36543:1;36536:15;36570:4;36567:1;36560:15;36587:180;36635:77;36632:1;36625:88;36732:4;36729:1;36722:15;36756:4;36753:1;36746:15;36773:180;36821:77;36818:1;36811:88;36918:4;36915:1;36908:15;36942:4;36939:1;36932:15;36959:102;;37051:2;37047:7;37042:2;37035:5;37031:14;37027:28;37017:38;;37007:54;;;:::o;37067:102::-;;37156:5;37153:1;37149:13;37128:34;;37118:51;;;:::o;37175:122::-;37248:24;37266:5;37248:24;:::i;:::-;37241:5;37238:35;37228:2;;37287:1;37284;37277:12;37228:2;37218:79;:::o;37303:122::-;37376:24;37394:5;37376:24;:::i;:::-;37369:5;37366:35;37356:2;;37415:1;37412;37405:12;37356:2;37346:79;:::o;37431:122::-;37504:24;37522:5;37504:24;:::i;:::-;37497:5;37494:35;37484:2;;37543:1;37540;37533:12;37484:2;37474:79;:::o;37559:118::-;37630:22;37646:5;37630:22;:::i;:::-;37623:5;37620:33;37610:2;;37667:1;37664;37657:12;37610:2;37600:77;:::o
Swarm Source
ipfs://cbcb39092425ebc871514739020b335fee2db4fac874a3998a60bd2e1d4f8937
Age | Block | Fee Address | BC Fee Address | Voting Power | Jailed | Incoming |
---|
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.