Feature Tip: Add private address tag to any address under My Name Tag !
Overview
Max Total Supply
3,869,350.1147368420958 BCUG
Holders
2,841 (0.00%)
Market
Price
$0.03 @ 0.000013 ETH (-0.73%)
Onchain Market Cap
$125,957.14
Circulating Supply Market Cap
$22,575.00
Other Info
Token Contract (WITH 18 Decimals)
Balance
100 BCUGValue
$3.26 ( ~0.00129069156512628 Eth) [0.0026%]Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
BCUG
Compiler Version
v0.8.1+commit.df193b15
Contract Source Code (Solidity)Audit Report
/** *Submitted for verification at Etherscan.io on 2021-03-14 */ // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); } /* * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with GSN meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } /** * @dev Implementation of the {IERC20} interface. * * This implementation is agnostic to the way tokens are created. This means * that a supply mechanism has to be added in a derived contract using {_mint}. * For a generic mechanism see {ERC20PresetMinterPauser}. * * TIP: For a detailed writeup see our guide * https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How * to implement supply mechanisms]. * * We have followed general OpenZeppelin guidelines: functions revert instead * of returning `false` on failure. This behavior is nonetheless conventional * and does not conflict with the expectations of ERC20 applications. * * Additionally, an {Approval} event is emitted on calls to {transferFrom}. * This allows applications to reconstruct the allowance for all accounts just * by listening to said events. Other implementations of the EIP may not emit * these events, as it isn't required by the specification. * * Finally, the non-standard {decreaseAllowance} and {increaseAllowance} * functions have been added to mitigate the well-known issues around setting * allowances. See {IERC20-approve}. */ contract ERC20 is Context, IERC20 { 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 three of these values are immutable: they can only be set once during * construction. */ constructor (string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev Returns the name of the token. */ function name() public view virtual returns (string memory) { return _name; } /** * @dev Returns the symbol of the token, usually a shorter version of the * name. */ function symbol() public view virtual 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 * overloaded; * * 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 returns (uint8) { return 18; } /** * @dev See {IERC20-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _totalSupply; } /** * @dev See {IERC20-balanceOf}. */ function balanceOf(address account) public view virtual override returns (uint256) { return _balances[account]; } /** * @dev See {IERC20-transfer}. * * Requirements: * * - `recipient` cannot be the zero address. * - the caller must have a balance of at least `amount`. */ function transfer(address recipient, uint256 amount) public virtual override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } /** * @dev See {IERC20-allowance}. */ function allowance(address owner, address spender) public view virtual override returns (uint256) { return _allowances[owner][spender]; } /** * @dev See {IERC20-approve}. * * Requirements: * * - `spender` cannot be the zero address. */ function approve(address spender, uint256 amount) public virtual override returns (bool) { _approve(_msgSender(), spender, amount); return true; } /** * @dev See {IERC20-transferFrom}. * * Emits an {Approval} event indicating the updated allowance. This is not * required by the EIP. See the note at the beginning of {ERC20}. * * Requirements: * * - `sender` and `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. * - the caller must have allowance for ``sender``'s tokens of at least * `amount`. */ function transferFrom(address sender, address recipient, uint256 amount) public virtual override returns (bool) { _transfer(sender, recipient, amount); uint256 currentAllowance = _allowances[sender][_msgSender()]; require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance"); _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"); _approve(_msgSender(), spender, currentAllowance - subtractedValue); return true; } /** * @dev Moves tokens `amount` from `sender` to `recipient`. * * This is internal function is equivalent to {transfer}, and can be used to * e.g. implement automatic token fees, slashing mechanisms, etc. * * Emits a {Transfer} event. * * Requirements: * * - `sender` cannot be the zero address. * - `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. */ function _transfer(address sender, address recipient, uint256 amount) internal virtual { require(sender != address(0), "ERC20: transfer from the zero address"); require(recipient != address(0), "ERC20: transfer to the zero address"); _beforeTokenTransfer(sender, recipient, amount); uint256 senderBalance = _balances[sender]; require(senderBalance >= amount, "ERC20: transfer amount exceeds balance"); _balances[sender] = senderBalance - amount; _balances[recipient] += amount; emit Transfer(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: * * - `to` 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); } /** * @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"); _balances[account] = accountBalance - amount; _totalSupply -= amount; emit Transfer(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 to transferred to `to`. * - when `from` is zero, `amount` tokens will be minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual { } } interface IERC20Bulk { function transferBulk(address[] calldata to, uint[] calldata tokens) external; function approveBulk(address[] calldata spender, uint[] calldata tokens) external; } interface IERC223 { function transfer(address _to, uint _value, bytes calldata _data) external returns (bool success); } interface IERC827 { function approveAndCall(address _spender, uint256 _value, bytes memory _data) external returns (bool); } // https://github.com/ethereum/EIPs/issues/223 interface TokenFallback { function tokenFallback(address _from, uint _value, bytes calldata _data) external; } // ---------------------------------------------------------------------------- // Contract function to receive approval and execute function in one call // interface TokenRecipientInterface { function receiveApproval(address _from, uint256 _value, address _token, bytes calldata _extraData) external; } /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom(address from, address to, uint256 tokenId) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom(address from, address to, uint256 tokenId) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom(address from, address to, uint256 tokenId, bytes calldata data) external; } /** * @dev Required interface of an ERC1155 compliant contract, as defined in the * https://eips.ethereum.org/EIPS/eip-1155[EIP]. * * _Available since v3.1._ */ interface IERC1155 is IERC165 { /** * @dev Emitted when `value` tokens of token type `id` are transferred from `from` to `to` by `operator`. */ event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value); /** * @dev Equivalent to multiple {TransferSingle} events, where `operator`, `from` and `to` are the same for all * transfers. */ event TransferBatch(address indexed operator, address indexed from, address indexed to, uint256[] ids, uint256[] values); /** * @dev Emitted when `account` grants or revokes permission to `operator` to transfer their tokens, according to * `approved`. */ event ApprovalForAll(address indexed account, address indexed operator, bool approved); /** * @dev Emitted when the URI for token type `id` changes to `value`, if it is a non-programmatic URI. * * If an {URI} event was emitted for `id`, the standard * https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[guarantees] that `value` will equal the value * returned by {IERC1155MetadataURI-uri}. */ event URI(string value, uint256 indexed id); /** * @dev Returns the amount of tokens of token type `id` owned by `account`. * * Requirements: * * - `account` cannot be the zero address. */ function balanceOf(address account, uint256 id) external view returns (uint256); /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {balanceOf}. * * Requirements: * * - `accounts` and `ids` must have the same length. */ function balanceOfBatch(address[] calldata accounts, uint256[] calldata ids) external view returns (uint256[] memory); /** * @dev Grants or revokes permission to `operator` to transfer the caller's tokens, according to `approved`, * * Emits an {ApprovalForAll} event. * * Requirements: * * - `operator` cannot be the caller. */ function setApprovalForAll(address operator, bool approved) external; /** * @dev Returns true if `operator` is approved to transfer ``account``'s tokens. * * See {setApprovalForAll}. */ function isApprovedForAll(address account, address operator) external view returns (bool); /** * @dev Transfers `amount` tokens of token type `id` from `from` to `to`. * * Emits a {TransferSingle} event. * * Requirements: * * - `to` cannot be the zero address. * - If the caller is not `from`, it must be have been approved to spend ``from``'s tokens via {setApprovalForAll}. * - `from` must have a balance of tokens of type `id` of at least `amount`. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the * acceptance magic value. */ function safeTransferFrom(address from, address to, uint256 id, uint256 amount, bytes calldata data) external; /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {safeTransferFrom}. * * Emits a {TransferBatch} event. * * Requirements: * * - `ids` and `amounts` must have the same length. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the * acceptance magic value. */ function safeBatchTransferFrom(address from, address to, uint256[] calldata ids, uint256[] calldata amounts, bytes calldata data) external; } /** * @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 ECDSA { /** * @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. */ function recover(bytes32 hash, bytes memory signature) internal pure returns (address) { // Check the signature length if (signature.length != 65) { revert("ECDSA: invalid signature length"); } // Divide the signature in r, s and v variables bytes32 r; bytes32 s; uint8 v; // ecrecover takes the signature parameters, and the only way to get them // currently is to use assembly. // solhint-disable-next-line no-inline-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); } /** * @dev Overload of {ECDSA-recover-bytes32-bytes-} 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 * replicates the behavior of the * https://github.com/ethereum/wiki/wiki/JSON-RPC#eth_sign[`eth_sign`] * JSON-RPC method. * * 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)); } } /** * Access control holds contract signers (board members) and frozen accounts. * Have utility modifiers for method safe access. */ contract AccessControl { // The addresses that can co-sign transactions on the wallet mapping(address => bool) signers; // Frozen account that cant move funds mapping (address => bool) private _frozen; event Frozen(address target); event Unfrozen(address target); /** * Set up multi-sig access by specifying the signers allowed to be used on this contract. * 3 signers will be required to send a transaction from this wallet. * Note: The sender is NOT automatically added to the list of signers. * * @param allowedSigners An array of signers on the wallet */ constructor(address[] memory allowedSigners) { require(allowedSigners.length == 5, "AccessControl: Invalid number of signers"); for (uint8 i = 0; i < allowedSigners.length; i++) { require(allowedSigners[i] != address(0), "AccessControl: Invalid signer address"); require(!signers[allowedSigners[i]], "AccessControl: Signer address duplication"); signers[allowedSigners[i]] = true; } } /** * @dev Throws if called by any account other than the signer. */ modifier onlySigner() { require(signers[msg.sender], "AccessControl: Access denied"); _; } /** * @dev Checks if provided address has signer permissions. */ function isSigner(address _addr) public view returns (bool) { return signers[_addr]; } /** * @dev Returns true if the target account is frozen. */ function isFrozen(address target) public view returns (bool) { return _frozen[target]; } function _freeze(address target) internal { require(!_frozen[target], "AccessControl: Target account is already frozen"); _frozen[target] = true; emit Frozen(target); } /** * @dev Mark target account as unfrozen. * Can be called even if the contract doesn't allow to freeze accounts. */ function _unfreeze(address target) internal { require(_frozen[target], "AccessControl: Target account is not frozen"); delete _frozen[target]; emit Unfrozen(target); } /** * @dev Allow to withdraw ERC20 tokens from contract itself */ function withdrawERC20(IERC20 _tokenContract) external onlySigner { uint256 balance = _tokenContract.balanceOf(address(this)); _tokenContract.transfer(msg.sender, balance); } /** * @dev Allow to withdraw ERC721 tokens from contract itself */ function approveERC721(IERC721 _tokenContract) external onlySigner { _tokenContract.setApprovalForAll(msg.sender, true); } /** * @dev Allow to withdraw ERC1155 tokens from contract itself */ function approveERC1155(IERC1155 _tokenContract) external onlySigner { _tokenContract.setApprovalForAll(msg.sender, true); } /** * @dev Allow to withdraw ETH from contract itself */ function withdrawEth(address payable _receiver) external onlySigner { if (address(this).balance > 0) { _receiver.transfer(address(this).balance); } } } interface IFungibleToken is IERC20, IERC827, IERC223, IERC20Bulk { } /** * @dev Extension of {ERC20} that allows token holders to destroy both their own * tokens and those that they have an allowance for, in a way that can be * recognized off-chain (via event analysis). */ abstract contract ERC20Burnable is Context, ERC20 { /** * @dev Destroys `amount` tokens from the caller. * * See {ERC20-_burn}. */ function burn(uint256 amount) public virtual { _burn(_msgSender(), amount); } /** * @dev Destroys `amount` tokens from `account`, deducting from the caller's * allowance. * * See {ERC20-_burn} and {ERC20-allowance}. * * Requirements: * * - the caller must have allowance for ``accounts``'s tokens of at least * `amount`. */ function burnFrom(address account, uint256 amount) public virtual { uint256 currentAllowance = allowance(account, _msgSender()); require(currentAllowance >= amount, "BCUG: burn amount exceeds allowance"); _approve(account, _msgSender(), currentAllowance - amount); _burn(account, amount); } } /** * @dev Extension of {ERC20} that adds a cap to the supply of tokens. */ abstract contract ERC20Capped is ERC20 { uint256 private _cap; /** * @dev Sets the value of the `cap`. This value is immutable, it can only be * set once during construction. */ constructor (uint256 cap_) { require(cap_ > 0, "ERC20Capped: cap is 0"); _cap = cap_; } /** * @dev Returns the cap on the token's total supply. */ function cap() public view virtual returns (uint256) { return _cap; } /** * @dev See {ERC20-_beforeTokenTransfer}. * * Requirements: * * - minted tokens must not cause the total supply to go over the cap. */ function _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual override { super._beforeTokenTransfer(from, to, amount); if (from == address(0)) { // When minting tokens require(totalSupply() + amount <= cap(), "ERC20Capped: cap exceeded"); } } } /** * @dev Contract module which allows children to implement an emergency stop * mechanism that can be triggered by an authorized account. * * This module is used through inheritance. It will make available the * modifiers `whenNotPaused` and `whenPaused`, which can be applied to * the functions of your contract. Note that they will not be pausable by * simply including this module, only once the modifiers are put in place. */ abstract contract Pausable is Context { /** * @dev Emitted when the pause is triggered by `account`. */ event Paused(address account); /** * @dev Emitted when the pause is lifted by `account`. */ event Unpaused(address account); bool private _paused; /** * @dev Initializes the contract in unpaused state. */ constructor () { _paused = false; } /** * @dev Returns true if the contract is paused, and false otherwise. */ function paused() public view virtual returns (bool) { return _paused; } /** * @dev Modifier to make a function callable only when the contract is not paused. * * Requirements: * * - The contract must not be paused. */ modifier whenNotPaused() { require(!paused(), "Pausable: paused"); _; } /** * @dev Modifier to make a function callable only when the contract is paused. * * Requirements: * * - The contract must be paused. */ modifier whenPaused() { require(paused(), "Pausable: not paused"); _; } /** * @dev Triggers stopped state. * * Requirements: * * - The contract must not be paused. */ function _pause() internal virtual whenNotPaused { _paused = true; emit Paused(_msgSender()); } /** * @dev Returns to normal state. * * Requirements: * * - The contract must be paused. */ function _unpause() internal virtual whenPaused { _paused = false; emit Unpaused(_msgSender()); } } /** * Governance Token contract includes multisig protected actions. * It includes: * - minting methods * - freeze methods * - pause methods * * For each call must be provided valid signatures from contract signers (defined in AccessControl) * and the transaction itself must be sent from the signer address. * Every succeeded transaction will contain signer addresses for action proof in logs. * * It is possible to pause contract transfers in case an exchange is hacked and there is a risk for token holders to lose * their tokens, delegated to an exchange. After freezing suspicious accounts the contract can be unpaused. * Board members can burn tokens on frozen accounts to mint new tokens to holders as a recovery after a hacking attack. */ abstract contract GovernanceToken is ERC20Capped, ERC20Burnable, IFungibleToken, AccessControl, Pausable { using ECDSA for bytes32; // keccak256("mint(address target, uint256 amount, bytes[] signatures)") bytes32 constant MINT_TYPEHASH = 0xdaef0006354e6aca5b14786fab16e27867b1ac002611e2fa58e0aa486080141f; // keccak256("mintBulk(address[] target, uint256[] amount, bytes[] signatures)") bytes32 constant MINT_BULK_TYPEHASH = 0x84bbfaa2e4384c51c0e71108356af77f996f8a1f97dc229b15ad088f887071c7; // keccak256("freeze/unfreeze(address target, bytes[] memory signatures)") bytes32 constant FREEZE_TYPEHASH = 0x0101de85040f7616ce3d91b0b3b5279925bff5ba3cbdc18c318483eec213aba5; // keccak256("freezeBulk/unfreezeBulk(address[] calldata target, bytes[] memory signatures)") bytes32 constant FREEZE_BULK_TYPEHASH = 0xfbe23759ad6142178865544766ded4220dd6951de831ca9f926f385026c83a2b; // keccak256("burnFrozenTokens(address target, bytes[] memory signatures)") bytes32 constant BURN_FROZEN_TYPEHASH = 0x642bcc36d46a724c301cb6a1e74f954db2da04e41cf92613260aa926b0cc663c; // keccak256("freezeAndBurnTokens(address target, bytes[] memory signatures)") bytes32 constant FREEZE_AND_BURN_TYPEHASH = 0xb17ffba690b680e166aba321cd5d08ac8256fa93afb6a8f0573d02ecbfa33e11; // keccak256("pause/unpause(bytes[] memory signatures)") bytes32 constant PAUSE_TYPEHASH = 0x4f10db4bd06c1a9ea1a64e78bc5c096dc4b14436b0cdf60a6252f82113e0a57e; uint public nonce = 0; event SignedBy(address signer); constructor (string memory name_, string memory symbol_, uint256 cap_, address[] memory allowedSigners) ERC20Capped(cap_) ERC20(name_, symbol_) AccessControl(allowedSigners) {} /** * @dev Mint some tokens to target account * MultiSig check is used - verifies that contract signers approve minting. * During minting applied check for the max token cap. */ function mint(address target, uint256 amount, bytes[] memory signatures) external onlySigner { bytes32 operationHash = getOperationHash(MINT_TYPEHASH, target, amount).toEthSignedMessageHash(); _verifySignatures(signatures, operationHash); _mint(target, amount); } /** * @dev Bulk operation to mint tokens to target accounts. There is a check for the cap inside. */ function mintBulk(address[] calldata target, uint256[] calldata amount, bytes[] memory signatures) external onlySigner { require(target.length > 1, "GovernanceToken: cannot perform bulk with single target"); require(target.length == amount.length, "GovernanceToken: target.length != amount.length"); bytes32 operationHash = getOperationHash(MINT_BULK_TYPEHASH, target[0], target.length).toEthSignedMessageHash(); _verifySignatures(signatures, operationHash); for (uint i = 0; i < target.length; i++) { _mint(target[i], amount[i]); } } /** * @dev Mark target account as frozen. Frozen accounts can't perform transfers. */ function freeze(address target, bytes[] memory signatures) external onlySigner { bytes32 operationHash = getOperationHash(FREEZE_TYPEHASH, target, 1).toEthSignedMessageHash(); _verifySignatures(signatures, operationHash); _freeze(target); } /** * @dev Mark target account as unfrozen. */ function unfreeze(address target, bytes[] memory signatures) external onlySigner { bytes32 operationHash = getOperationHash(FREEZE_TYPEHASH, target, 1).toEthSignedMessageHash(); _verifySignatures(signatures, operationHash); _unfreeze(target); } function freezeBulk(address[] calldata target, bytes[] memory signatures) external onlySigner { require(target.length > 1, "GovernanceToken: cannot perform bulk with single target"); bytes32 operationHash = getOperationHash(FREEZE_BULK_TYPEHASH, target[0], target.length).toEthSignedMessageHash(); _verifySignatures(signatures, operationHash); for (uint i = 0; i < target.length; i++) { _freeze(target[i]); } } function unfreezeBulk(address[] calldata target, bytes[] memory signatures) external onlySigner { require(target.length > 1, "GovernanceToken: cannot perform bulk with single target"); bytes32 operationHash = getOperationHash(FREEZE_BULK_TYPEHASH, target[0], target.length).toEthSignedMessageHash(); _verifySignatures(signatures, operationHash); for (uint i = 0; i < target.length; i++) { _unfreeze(target[i]); } } /** * @dev Burn tokens on frozen account. */ function burnFrozenTokens(address target, bytes[] memory signatures) external onlySigner { require(isFrozen(target), "GovernanceToken: target account is not frozen"); bytes32 operationHash = getOperationHash(BURN_FROZEN_TYPEHASH, target, 1).toEthSignedMessageHash(); _verifySignatures(signatures, operationHash); _burn(target, balanceOf(target)); } /** * @dev Freeze and burn tokens in a single transaction. */ function freezeAndBurnTokens(address target, bytes[] memory signatures) external onlySigner { bytes32 operationHash = getOperationHash(FREEZE_AND_BURN_TYPEHASH, target, 1).toEthSignedMessageHash(); _verifySignatures(signatures, operationHash); _freeze(target); _burn(target, balanceOf(target)); } /** * @dev Triggers stopped state. * - The contract must not be paused and pause should be allowed. */ function pause(bytes[] memory signatures) external onlySigner { bytes32 operationHash = getOperationHash(PAUSE_TYPEHASH, msg.sender, 1).toEthSignedMessageHash(); _verifySignatures(signatures, operationHash); _pause(); } /** * @dev Returns to normal state. * - The contract must be paused. */ function unpause(bytes[] memory signatures) external onlySigner { bytes32 operationHash = getOperationHash(PAUSE_TYPEHASH, msg.sender, 1).toEthSignedMessageHash(); _verifySignatures(signatures, operationHash); _unpause(); } /** * @dev Get operation hash for multisig operation * Nonce used to ensure that signature used only once. * Use unique typehash for each operation. */ function getOperationHash(bytes32 typehash, address target, uint256 value) public view returns (bytes32) { return keccak256(abi.encodePacked(address(this), typehash, target, value, nonce)); } /** * @dev See {ERC20-_beforeTokenTransfer}. * * Requirements: * * - do not allow the transfer of funds to the token contract itself. Usually such a call is a mistake. * - do not allow transfers when contract is paused. * - only allow to burn frozen tokens. */ function _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual override(ERC20Capped, ERC20) { super._beforeTokenTransfer(from, to, amount); require(to != address(this), "GovernanceToken: can't transfer to token contract self"); require(!paused(), "GovernanceToken: token transfer while paused"); require(!isFrozen(from) || to == address(0x0), "GovernanceToken: source address was frozen"); } /** * @dev Verify provided signatures according to the operation hash * Ensure that each signature belongs to contract known signer and is unique */ function _verifySignatures(bytes[] memory signatures, bytes32 operationHash) internal { require(signatures.length >= 2, "AccessControl: not enough confirmations"); address[] memory recovered = new address[](signatures.length + 1); recovered[0] = msg.sender; emit SignedBy(msg.sender); for (uint i = 0; i < signatures.length; i++) { address addr = operationHash.recover(signatures[i]); require(isSigner(addr), "AccessControl: recovered address is not signer"); for (uint j = 0; j < recovered.length; j++) { require(recovered[j] != addr, "AccessControl: signer address used more than once"); } recovered[i + 1] = addr; emit SignedBy(addr); } require(recovered.length >= 3, "AccessControl: not enough confirmations"); nonce++; } } /** * @title Blockchain Cuties Universe fungible token base contract * @dev Implementation of the {IERC20}, {IERC827} and {IERC223} interfaces. * Token holders can burn their tokens. * * We have followed general OpenZeppelin guidelines: functions revert instead * of returning `false` on failure. This behavior is nonetheless conventional * and does not conflict with the expectations of ERC20 applications. * * Additionally, an {Approval} event is emitted on calls to {transferFrom}. * This allows applications to reconstruct the allowance for all accounts just * by listening to said events. Other implementations of the EIP may not emit * these events, as it isn't required by the specification. * * Finally, the non-standard {decreaseAllowance} and {increaseAllowance} * functions have been added to mitigate the well-known issues around setting * allowances. See {IERC20-approve}. */ contract BCUG is GovernanceToken { constructor (address[] memory allowedSigners) GovernanceToken("Blockchain Cuties Universe Governance Token", "BCUG", 10000000 ether, allowedSigners) {} // @dev Transfers to _withdrawToAddress all tokens controlled by // contract _tokenContract. function withdrawTokenFromBalance(IERC20 _tokenContract, address _withdrawToAddress) external onlySigner { uint256 balance = _tokenContract.balanceOf(address(this)); _tokenContract.transfer(_withdrawToAddress, balance); } // ---------------------------- ERC827 approveAndCall ---------------------------- // ------------------------------------------------------------------------ // Token owner can approve for `spender` to transferFrom(...) `tokens` // from the token owner's account. The `spender` contract function // `receiveApproval(...)` is then executed // ------------------------------------------------------------------------ function approveAndCall(address spender, uint tokens, bytes calldata data) external override returns (bool success) { _approve(msg.sender, spender, tokens); TokenRecipientInterface(spender).receiveApproval(msg.sender, tokens, address(this), data); return true; } // ---------------------------- ERC20 Bulk Operations ---------------------------- function transferBulk(address[] calldata to, uint[] calldata tokens) external override { require(to.length == tokens.length, "transferBulk: to.length != tokens.length"); for (uint i = 0; i < to.length; i++) { _transfer(msg.sender, to[i], tokens[i]); } } function approveBulk(address[] calldata spender, uint[] calldata tokens) external override { require(spender.length == tokens.length, "approveBulk: spender.length != tokens.length"); for (uint i = 0; i < spender.length; i++) { _approve(msg.sender, spender[i], tokens[i]); } } // ---------------------------- ERC223 ---------------------------- event Transfer(address indexed from, address indexed to, uint256 value, bytes data); // Function that is called when a user or another contract wants to transfer funds . function transfer(address _to, uint _value, bytes calldata _data) external override returns (bool success) { return transferWithData(_to, _value, _data); } function transferWithData(address _to, uint _value, bytes calldata _data) public returns (bool success) { if (_isContract(_to)) { return transferToContract(_to, _value, _data); } else { return transferToAddress(_to, _value, _data); } } // function that is called when transaction target is a contract function transferToContract(address _to, uint _value, bytes calldata _data) public returns (bool success) { _transfer(msg.sender, _to, _value); emit Transfer(msg.sender, _to, _value, _data); TokenFallback receiver = TokenFallback(_to); receiver.tokenFallback(msg.sender, _value, _data); return true; } // assemble the given address bytecode. If bytecode exists then the _addr is a contract. function _isContract(address _addr) private view returns (bool is_contract) { uint length; assembly { //retrieve the size of the code on target address, this needs assembly length := extcodesize(_addr) } return length > 0; } // function that is called when transaction target is an address function transferToAddress(address _to, uint tokens, bytes calldata _data) public returns (bool success) { _transfer(msg.sender, _to, tokens); emit Transfer(msg.sender, _to, tokens, _data); return true; } }
Contract Security Audit
- Coinbae - March 15th, 2021 - Security Audit Report
[{"inputs":[{"internalType":"address[]","name":"allowedSigners","type":"address[]"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"target","type":"address"}],"name":"Frozen","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"signer","type":"address"}],"name":"SignedBy","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"},{"indexed":false,"internalType":"bytes","name":"data","type":"bytes"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"target","type":"address"}],"name":"Unfrozen","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"tokens","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"approveAndCall","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"spender","type":"address[]"},{"internalType":"uint256[]","name":"tokens","type":"uint256[]"}],"name":"approveBulk","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC1155","name":"_tokenContract","type":"address"}],"name":"approveERC1155","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC721","name":"_tokenContract","type":"address"}],"name":"approveERC721","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burnFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"target","type":"address"},{"internalType":"bytes[]","name":"signatures","type":"bytes[]"}],"name":"burnFrozenTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"cap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"target","type":"address"},{"internalType":"bytes[]","name":"signatures","type":"bytes[]"}],"name":"freeze","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"target","type":"address"},{"internalType":"bytes[]","name":"signatures","type":"bytes[]"}],"name":"freezeAndBurnTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"target","type":"address[]"},{"internalType":"bytes[]","name":"signatures","type":"bytes[]"}],"name":"freezeBulk","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"typehash","type":"bytes32"},{"internalType":"address","name":"target","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"getOperationHash","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"target","type":"address"}],"name":"isFrozen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"isSigner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"target","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes[]","name":"signatures","type":"bytes[]"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"target","type":"address[]"},{"internalType":"uint256[]","name":"amount","type":"uint256[]"},{"internalType":"bytes[]","name":"signatures","type":"bytes[]"}],"name":"mintBulk","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nonce","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes[]","name":"signatures","type":"bytes[]"}],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":"_to","type":"address"},{"internalType":"uint256","name":"_value","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"transfer","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"to","type":"address[]"},{"internalType":"uint256[]","name":"tokens","type":"uint256[]"}],"name":"transferBulk","outputs":[],"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":"_to","type":"address"},{"internalType":"uint256","name":"tokens","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"transferToAddress","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_value","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"transferToContract","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_value","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"transferWithData","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"target","type":"address"},{"internalType":"bytes[]","name":"signatures","type":"bytes[]"}],"name":"unfreeze","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"target","type":"address[]"},{"internalType":"bytes[]","name":"signatures","type":"bytes[]"}],"name":"unfreezeBulk","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes[]","name":"signatures","type":"bytes[]"}],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"_tokenContract","type":"address"}],"name":"withdrawERC20","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"_receiver","type":"address"}],"name":"withdrawEth","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"_tokenContract","type":"address"},{"internalType":"address","name":"_withdrawToAddress","type":"address"}],"name":"withdrawTokenFromBalance","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
608060405260006009553480156200001657600080fd5b50604051620064d8380380620064d883398181016040528101906200003c919062000544565b6040518060600160405280602b8152602001620064ad602b91396040518060400160405280600481526020017f42435547000000000000000000000000000000000000000000000000000000008152506a084595161401484a00000083808285858160039080519060200190620000b5929190620003db565b508060049080519060200190620000ce929190620003db565b5050506000811162000117576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200010e9062000625565b60405180910390fd5b8060058190555050600581511462000166576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200015d906200068b565b60405180910390fd5b60005b81518160ff161015620003b357600073ffffffffffffffffffffffffffffffffffffffff16828260ff1681518110620001cb577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1614156200022d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620002249062000669565b60405180910390fd5b60066000838360ff16815181106200026e577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161562000301576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620002f89062000647565b60405180910390fd5b600160066000848460ff168151811062000344577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080620003aa90620007c3565b91505062000169565b50506000600860006101000a81548160ff0219169083151502179055505050505050620009c0565b828054620003e99062000757565b90600052602060002090601f0160209004810192826200040d576000855562000459565b82601f106200042857805160ff191683800117855562000459565b8280016001018555821562000459579182015b82811115620004585782518255916020019190600101906200043b565b5b5090506200046891906200046c565b5090565b5b80821115620004875760008160009055506001016200046d565b5090565b6000620004a26200049c84620006d6565b620006ad565b90508083825260208201905082856020860282011115620004c257600080fd5b60005b85811015620004f65781620004db888262000500565b845260208401935060208301925050600181019050620004c5565b5050509392505050565b6000815190506200051181620009a6565b92915050565b600082601f8301126200052957600080fd5b81516200053b8482602086016200048b565b91505092915050565b6000602082840312156200055757600080fd5b600082015167ffffffffffffffff8111156200057257600080fd5b620005808482850162000517565b91505092915050565b60006200059860158362000705565b9150620005a58262000890565b602082019050919050565b6000620005bf60298362000705565b9150620005cc82620008b9565b604082019050919050565b6000620005e660258362000705565b9150620005f38262000908565b604082019050919050565b60006200060d60288362000705565b91506200061a8262000957565b604082019050919050565b60006020820190508181036000830152620006408162000589565b9050919050565b600060208201905081810360008301526200066281620005b0565b9050919050565b600060208201905081810360008301526200068481620005d7565b9050919050565b60006020820190508181036000830152620006a681620005fe565b9050919050565b6000620006b9620006cc565b9050620006c782826200078d565b919050565b6000604051905090565b600067ffffffffffffffff821115620006f457620006f362000850565b5b602082029050602081019050919050565b600082825260208201905092915050565b600062000723826200072a565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600060ff82169050919050565b600060028204905060018216806200077057607f821691505b6020821081141562000787576200078662000821565b5b50919050565b62000798826200087f565b810181811067ffffffffffffffff82111715620007ba57620007b962000850565b5b80604052505050565b6000620007d0826200074a565b915060ff821415620007e757620007e6620007f2565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f45524332304361707065643a2063617020697320300000000000000000000000600082015250565b7f416363657373436f6e74726f6c3a205369676e6572206164647265737320647560008201527f706c69636174696f6e0000000000000000000000000000000000000000000000602082015250565b7f416363657373436f6e74726f6c3a20496e76616c6964207369676e657220616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f416363657373436f6e74726f6c3a20496e76616c6964206e756d626572206f6660008201527f207369676e657273000000000000000000000000000000000000000000000000602082015250565b620009b18162000716565b8114620009bd57600080fd5b50565b615add80620009d06000396000f3fe608060405234801561001057600080fd5b50600436106102535760003560e01c80637df73e2711610146578063be45fd62116100c3578063da63bac611610087578063da63bac61461072a578063dd62ed3e14610746578063e583983614610776578063ead8c595146107a6578063f4f3b200146107c2578063fa312b3b146107de57610253565b8063be45fd6214610676578063c6b72a1f146106a6578063caa7d950146106c2578063cae9ca51146106de578063cda8c7151461070e57610253565b806395d89b411161010a57806395d89b41146105be578063a457c2d7146105dc578063a9059cbb1461060c578063affed0e01461063c578063b9edf9111461065a57610253565b80637df73e271461051e5780638ea769f61461054e5780639316c3e71461056a578063936550551461058657806393a02744146105a257610253565b806335e9d83b116101d4578063536db4cb11610198578063536db4cb1461047c578063561e8319146104985780635c975abb146104b457806370a08231146104d257806379cc67901461050257610253565b806335e9d83b146103b457806339509351146103e45780633f35d0331461041457806342966c681461044457806346195c121461046057610253565b806323b872dd1161021b57806323b872dd146102fc5780632535f7621461032c57806325e160631461035c578063313ce56714610378578063355274ea1461039657610253565b806306fdde0314610258578063091413d114610276578063095ea7b3146102925780631716d0f1146102c257806318160ddd146102de575b600080fd5b61026061080e565b60405161026d91906148aa565b60405180910390f35b610290600480360381019061028b9190613ed3565b6108a0565b005b6102ac60048036038101906102a79190613cdf565b610b0f565b6040516102b9919061482f565b60405180910390f35b6102dc60048036038101906102d79190613d1b565b610b2d565b005b6102e6610c0d565b6040516102f39190614ccc565b60405180910390f35b61031660048036038101906103119190613c3c565b610c17565b604051610323919061482f565b60405180910390f35b61034660048036038101906103419190613d82565b610d18565b604051610353919061482f565b60405180910390f35b61037660048036038101906103719190613bd7565b610d52565b005b610380610e32565b60405161038d9190614d19565b60405180910390f35b61039e610e3b565b6040516103ab9190614ccc565b60405180910390f35b6103ce60048036038101906103c99190613d82565b610e45565b6040516103db919061482f565b60405180910390f35b6103fe60048036038101906103f99190613cdf565b610ec7565b60405161040b919061482f565b60405180910390f35b61042e60048036038101906104299190613d82565b610f73565b60405161043b919061482f565b60405180910390f35b61045e600480360381019061045991906140e4565b61106c565b005b61047a600480360381019061047591906140bb565b611080565b005b61049660048036038101906104919190613f74565b61117d565b005b6104b260048036038101906104ad9190613f74565b61125a565b005b6104bc611337565b6040516104c9919061482f565b60405180910390f35b6104ec60048036038101906104e79190613bae565b61134e565b6040516104f99190614ccc565b60405180910390f35b61051c60048036038101906105179190613cdf565b611396565b005b61053860048036038101906105339190613bae565b61141a565b604051610545919061482f565b60405180910390f35b61056860048036038101906105639190613dee565b611470565b005b610584600480360381019061057f9190613e5e565b611655565b005b6105a0600480360381019061059b9190613c8b565b61175c565b005b6105bc60048036038101906105b79190613dee565b61183b565b005b6105c6611a20565b6040516105d391906148aa565b60405180910390f35b6105f660048036038101906105f19190613cdf565b611ab2565b604051610603919061482f565b60405180910390f35b61062660048036038101906106219190613cdf565b611ba6565b604051610633919061482f565b60405180910390f35b610644611bc4565b6040516106519190614ccc565b60405180910390f35b610674600480360381019061066f9190613e5e565b611bca565b005b610690600480360381019061068b9190613d82565b611cd1565b60405161069d919061482f565b60405180910390f35b6106c060048036038101906106bb919061402d565b611ce9565b005b6106dc60048036038101906106d79190613c8b565b611de6565b005b6106f860048036038101906106f39190613d82565b611f16565b604051610705919061482f565b60405180910390f35b6107286004803603810190610723919061407f565b611fa2565b005b610744600480360381019061073f9190613c8b565b61214e565b005b610760600480360381019061075b9190613c00565b61222d565b60405161076d9190614ccc565b60405180910390f35b610790600480360381019061078b9190613bae565b6122b4565b60405161079d919061482f565b60405180910390f35b6107c060048036038101906107bb9190613c8b565b61230a565b005b6107dc60048036038101906107d79190614056565b6123fb565b005b6107f860048036038101906107f39190613fde565b6125a6565b604051610805919061484a565b60405180910390f35b60606003805461081d90614f61565b80601f016020809104026020016040519081016040528092919081815260200182805461084990614f61565b80156108965780601f1061086b57610100808354040283529160200191610896565b820191906000526020600020905b81548152906001019060200180831161087957829003601f168201915b5050505050905090565b600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661092c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161092390614a0c565b60405180910390fd5b60018585905011610972576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161096990614aec565b60405180910390fd5b8282905085859050146109ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109b190614c0c565b60405180910390fd5b6000610a43610a3e7f84bbfaa2e4384c51c0e71108356af77f996f8a1f97dc229b15ad088f887071c760001b88886000818110610a20577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9050602002016020810190610a359190613bae565b898990506125a6565b6125e2565b9050610a4f8282612612565b60005b86869050811015610b0657610af3878783818110610a99577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9050602002016020810190610aae9190613bae565b868684818110610ae7577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90506020020135612a2b565b8080610afe90614fc4565b915050610a52565b50505050505050565b6000610b23610b1c612b7f565b8484612b87565b6001905092915050565b600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610bb9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bb090614a0c565b60405180910390fd5b6000610bf1610bec7fdaef0006354e6aca5b14786fab16e27867b1ac002611e2fa58e0aa486080141f60001b86866125a6565b6125e2565b9050610bfd8282612612565b610c078484612a2b565b50505050565b6000600254905090565b6000610c24848484612d52565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610c6f612b7f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610cef576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ce690614b4c565b60405180910390fd5b610d0c85610cfb612b7f565b8584610d079190614e44565b612b87565b60019150509392505050565b6000610d2385612fd1565b15610d3b57610d3485858585610f73565b9050610d4a565b610d4785858585610e45565b90505b949350505050565b600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610dde576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dd590614a0c565b60405180910390fd5b6000471115610e2f578073ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015610e2d573d6000803e3d6000fd5b505b50565b60006012905090565b6000600554905090565b6000610e52338686612d52565b8473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fe19260aff97b920c7df27010903aeb9c8d2be5d310a2c67824cf3f15396e4c16868686604051610eb393929190614ce7565b60405180910390a360019050949350505050565b6000610f69610ed4612b7f565b848460016000610ee2612b7f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610f649190614dee565b612b87565b6001905092915050565b6000610f80338686612d52565b8473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fe19260aff97b920c7df27010903aeb9c8d2be5d310a2c67824cf3f15396e4c16868686604051610fe193929190614ce7565b60405180910390a360008590508073ffffffffffffffffffffffffffffffffffffffff1663c0ee0b8a338787876040518563ffffffff1660e01b815260040161102d94939291906147ef565b600060405180830381600087803b15801561104757600080fd5b505af115801561105b573d6000803e3d6000fd5b505050506001915050949350505050565b61107d611077612b7f565b82612fe4565b50565b600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661110c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110390614a0c565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1663a22cb4653360016040518363ffffffff1660e01b815260040161114892919061474f565b600060405180830381600087803b15801561116257600080fd5b505af1158015611176573d6000803e3d6000fd5b5050505050565b600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611209576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120090614a0c565b60405180910390fd5b600061124261123d7f4f10db4bd06c1a9ea1a64e78bc5c096dc4b14436b0cdf60a6252f82113e0a57e60001b3360016125a6565b6125e2565b905061124e8282612612565b6112566131b8565b5050565b600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166112e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112dd90614a0c565b60405180910390fd5b600061131f61131a7f4f10db4bd06c1a9ea1a64e78bc5c096dc4b14436b0cdf60a6252f82113e0a57e60001b3360016125a6565b6125e2565b905061132b8282612612565b61133361325b565b5050565b6000600860009054906101000a900460ff16905090565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60006113a9836113a4612b7f565b61222d565b9050818110156113ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113e590614c2c565b60405180910390fd5b61140b836113fa612b7f565b84846114069190614e44565b612b87565b6114158383612fe4565b505050565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166114fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114f390614a0c565b60405180910390fd5b60018383905011611542576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153990614aec565b60405180910390fd5b60006115cb6115c67ffbe23759ad6142178865544766ded4220dd6951de831ca9f926f385026c83a2b60001b868660008181106115a8577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90506020020160208101906115bd9190613bae565b878790506125a6565b6125e2565b90506115d78282612612565b60005b8484905081101561164e5761163b858583818110611621577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90506020020160208101906116369190613bae565b6132fd565b808061164690614fc4565b9150506115da565b5050505050565b81819050848490501461169d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161169490614c6c565b60405180910390fd5b60005b8484905081101561175557611742338686848181106116e8577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90506020020160208101906116fd9190613bae565b858585818110611736577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90506020020135612d52565b808061174d90614fc4565b9150506116a0565b5050505050565b600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166117e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117df90614a0c565b60405180910390fd5b600061182161181c7f0101de85040f7616ce3d91b0b3b5279925bff5ba3cbdc18c318483eec213aba560001b8560016125a6565b6125e2565b905061182d8282612612565b6118368361341c565b505050565b600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166118c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118be90614a0c565b60405180910390fd5b6001838390501161190d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190490614aec565b60405180910390fd5b60006119966119917ffbe23759ad6142178865544766ded4220dd6951de831ca9f926f385026c83a2b60001b86866000818110611973577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90506020020160208101906119889190613bae565b878790506125a6565b6125e2565b90506119a28282612612565b60005b84849050811015611a1957611a068585838181106119ec577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9050602002016020810190611a019190613bae565b61341c565b8080611a1190614fc4565b9150506119a5565b5050505050565b606060048054611a2f90614f61565b80601f0160208091040260200160405190810160405280929190818152602001828054611a5b90614f61565b8015611aa85780601f10611a7d57610100808354040283529160200191611aa8565b820191906000526020600020905b815481529060010190602001808311611a8b57829003601f168201915b5050505050905090565b60008060016000611ac1612b7f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611b7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b7590614c8c565b60405180910390fd5b611b9b611b89612b7f565b858584611b969190614e44565b612b87565b600191505092915050565b6000611bba611bb3612b7f565b8484612d52565b6001905092915050565b60095481565b818190508484905014611c12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c0990614aac565b60405180910390fd5b60005b84849050811015611cca57611cb733868684818110611c5d577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9050602002016020810190611c729190613bae565b858585818110611cab577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90506020020135612b87565b8080611cc290614fc4565b915050611c15565b5050505050565b6000611cdf85858585610d18565b9050949350505050565b600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611d75576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d6c90614a0c565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1663a22cb4653360016040518363ffffffff1660e01b8152600401611db192919061474f565b600060405180830381600087803b158015611dcb57600080fd5b505af1158015611ddf573d6000803e3d6000fd5b5050505050565b600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611e72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e6990614a0c565b60405180910390fd5b611e7b826122b4565b611eba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eb190614a6c565b60405180910390fd5b6000611ef3611eee7f642bcc36d46a724c301cb6a1e74f954db2da04e41cf92613260aa926b0cc663c60001b8560016125a6565b6125e2565b9050611eff8282612612565b611f1183611f0c8561134e565b612fe4565b505050565b6000611f23338686612b87565b8473ffffffffffffffffffffffffffffffffffffffff16638f4ffcb133863087876040518663ffffffff1660e01b8152600401611f649594939291906147a1565b600060405180830381600087803b158015611f7e57600080fd5b505af1158015611f92573d6000803e3d6000fd5b5050505060019050949350505050565b600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661202e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161202590614a0c565b60405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016120699190614734565b60206040518083038186803b15801561208157600080fd5b505afa158015612095573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120b9919061410d565b90508273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b81526004016120f6929190614778565b602060405180830381600087803b15801561211057600080fd5b505af1158015612124573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121489190613fb5565b50505050565b600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166121da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121d190614a0c565b60405180910390fd5b600061221361220e7f0101de85040f7616ce3d91b0b3b5279925bff5ba3cbdc18c318483eec213aba560001b8560016125a6565b6125e2565b905061221f8282612612565b612228836132fd565b505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612396576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161238d90614a0c565b60405180910390fd5b60006123cf6123ca7fb17ffba690b680e166aba321cd5d08ac8256fa93afb6a8f0573d02ecbfa33e1160001b8560016125a6565b6125e2565b90506123db8282612612565b6123e4836132fd565b6123f6836123f18561134e565b612fe4565b505050565b600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612487576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161247e90614a0c565b60405180910390fd5b60008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016124c29190614734565b60206040518083038186803b1580156124da57600080fd5b505afa1580156124ee573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612512919061410d565b90508173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b815260040161254f929190614778565b602060405180830381600087803b15801561256957600080fd5b505af115801561257d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125a19190613fb5565b505050565b6000308484846009546040516020016125c39594939291906146af565b6040516020818303038152906040528051906020012090509392505050565b6000816040516020016125f5919061470e565b604051602081830303815290604052805190602001209050919050565b600282511015612657576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161264e90614bec565b60405180910390fd5b6000600183516126679190614dee565b67ffffffffffffffff8111156126a6577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280602002602001820160405280156126d45781602001602082028036833780820191505090505b5090503381600081518110612712577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f16d0bc037ab8c610c70861ff797d0f28a881c4fbd1d5b4df28115575d18351803360405161277b9190614734565b60405180910390a160005b83518110156129c85760006127e48583815181106127cd577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101518561353190919063ffffffff16565b90506127ef8161141a565b61282e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161282590614b0c565b60405180910390fd5b60005b83518110156128fc578173ffffffffffffffffffffffffffffffffffffffff1684828151811061288a577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1614156128e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128e090614c4c565b60405180910390fd5b80806128f490614fc4565b915050612831565b50808360018461290c9190614dee565b81518110612943577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f16d0bc037ab8c610c70861ff797d0f28a881c4fbd1d5b4df28115575d1835180816040516129ac9190614734565b60405180910390a15080806129c090614fc4565b915050612786565b50600381511015612a0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a0590614bec565b60405180910390fd5b60096000815480929190612a2190614fc4565b9190505550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612a9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a9290614cac565b60405180910390fd5b612aa7600083836135ab565b8060026000828254612ab99190614dee565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612b0e9190614dee565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612b739190614ccc565b60405180910390a35050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612bf7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bee90614bcc565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612c67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c5e906149ac565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612d459190614ccc565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612dc2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612db990614b8c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612e32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e299061490c565b60405180910390fd5b612e3d8383836135ab565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612ec3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612eba906149ec565b60405180910390fd5b8181612ecf9190614e44565b6000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612f5f9190614dee565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612fc39190614ccc565b60405180910390a350505050565b600080823b905060008111915050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613054576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161304b90614b6c565b60405180910390fd5b613060826000836135ab565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156130e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130dd9061494c565b60405180910390fd5b81816130f29190614e44565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600260008282546131469190614e44565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516131ab9190614ccc565b60405180910390a3505050565b6131c0611337565b15613200576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131f790614a8c565b60405180910390fd5b6001600860006101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258613244612b7f565b6040516132519190614734565b60405180910390a1565b613263611337565b6132a2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132999061492c565b60405180910390fd5b6000600860006101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6132e6612b7f565b6040516132f39190614734565b60405180910390a1565b600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561338a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613381906148ec565b60405180910390fd5b6001600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f8a5c4736a33c7b7f29a2c34ea9ff9608afc5718d56f6fd6dcbd2d3711a1a4913816040516134119190614734565b60405180910390a150565b600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166134a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161349f9061496c565b60405180910390fd5b600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81549060ff02191690557f4feb53e305297ab8fb8f3420c95ea04737addc254a7270d8fc4605d2b9c61dba816040516135269190614734565b60405180910390a150565b60006041825114613577576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161356e9061498c565b60405180910390fd5b60008060006020850151925060408501519150606085015160001a90506135a0868285856136f2565b935050505092915050565b6135b683838361387d565b3073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613625576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161361c90614a2c565b60405180910390fd5b61362d611337565b1561366d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161366490614acc565b60405180910390fd5b613676836122b4565b15806136ae5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b6136ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136e4906149cc565b60405180910390fd5b505050565b60007f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08260001c111561375a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161375190614a4c565b60405180910390fd5b601b8460ff16148061376f5750601c8460ff16145b6137ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137a590614b2c565b60405180910390fd5b6000600186868686604051600081526020016040526040516137d39493929190614865565b6020604051602081039080840390855afa1580156137f5573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415613871576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613868906148cc565b60405180910390fd5b80915050949350505050565b61388883838361391f565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561391a576138c5610e3b565b816138ce610c0d565b6138d89190614dee565b1115613919576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161391090614bac565b60405180910390fd5b5b505050565b505050565b600061393761393284614d59565b614d34565b9050808382526020820190508260005b85811015613977578135850161395d8882613b1b565b845260208401935060208301925050600181019050613947565b5050509392505050565b600061399461398f84614d85565b614d34565b9050828152602081018484840111156139ac57600080fd5b6139b7848285614f1f565b509392505050565b6000813590506139ce816159ef565b92915050565b6000813590506139e381615a06565b92915050565b60008083601f8401126139fb57600080fd5b8235905067ffffffffffffffff811115613a1457600080fd5b602083019150836020820283011115613a2c57600080fd5b9250929050565b600082601f830112613a4457600080fd5b8135613a54848260208601613924565b91505092915050565b60008083601f840112613a6f57600080fd5b8235905067ffffffffffffffff811115613a8857600080fd5b602083019150836020820283011115613aa057600080fd5b9250929050565b600081519050613ab681615a1d565b92915050565b600081359050613acb81615a34565b92915050565b60008083601f840112613ae357600080fd5b8235905067ffffffffffffffff811115613afc57600080fd5b602083019150836001820283011115613b1457600080fd5b9250929050565b600082601f830112613b2c57600080fd5b8135613b3c848260208601613981565b91505092915050565b600081359050613b5481615a4b565b92915050565b600081359050613b6981615a62565b92915050565b600081359050613b7e81615a79565b92915050565b600081359050613b9381615a90565b92915050565b600081519050613ba881615a90565b92915050565b600060208284031215613bc057600080fd5b6000613bce848285016139bf565b91505092915050565b600060208284031215613be957600080fd5b6000613bf7848285016139d4565b91505092915050565b60008060408385031215613c1357600080fd5b6000613c21858286016139bf565b9250506020613c32858286016139bf565b9150509250929050565b600080600060608486031215613c5157600080fd5b6000613c5f868287016139bf565b9350506020613c70868287016139bf565b9250506040613c8186828701613b84565b9150509250925092565b60008060408385031215613c9e57600080fd5b6000613cac858286016139bf565b925050602083013567ffffffffffffffff811115613cc957600080fd5b613cd585828601613a33565b9150509250929050565b60008060408385031215613cf257600080fd5b6000613d00858286016139bf565b9250506020613d1185828601613b84565b9150509250929050565b600080600060608486031215613d3057600080fd5b6000613d3e868287016139bf565b9350506020613d4f86828701613b84565b925050604084013567ffffffffffffffff811115613d6c57600080fd5b613d7886828701613a33565b9150509250925092565b60008060008060608587031215613d9857600080fd5b6000613da6878288016139bf565b9450506020613db787828801613b84565b935050604085013567ffffffffffffffff811115613dd457600080fd5b613de087828801613ad1565b925092505092959194509250565b600080600060408486031215613e0357600080fd5b600084013567ffffffffffffffff811115613e1d57600080fd5b613e29868287016139e9565b9350935050602084013567ffffffffffffffff811115613e4857600080fd5b613e5486828701613a33565b9150509250925092565b60008060008060408587031215613e7457600080fd5b600085013567ffffffffffffffff811115613e8e57600080fd5b613e9a878288016139e9565b9450945050602085013567ffffffffffffffff811115613eb957600080fd5b613ec587828801613a5d565b925092505092959194509250565b600080600080600060608688031215613eeb57600080fd5b600086013567ffffffffffffffff811115613f0557600080fd5b613f11888289016139e9565b9550955050602086013567ffffffffffffffff811115613f3057600080fd5b613f3c88828901613a5d565b9350935050604086013567ffffffffffffffff811115613f5b57600080fd5b613f6788828901613a33565b9150509295509295909350565b600060208284031215613f8657600080fd5b600082013567ffffffffffffffff811115613fa057600080fd5b613fac84828501613a33565b91505092915050565b600060208284031215613fc757600080fd5b6000613fd584828501613aa7565b91505092915050565b600080600060608486031215613ff357600080fd5b600061400186828701613abc565b9350506020614012868287016139bf565b925050604061402386828701613b84565b9150509250925092565b60006020828403121561403f57600080fd5b600061404d84828501613b45565b91505092915050565b60006020828403121561406857600080fd5b600061407684828501613b5a565b91505092915050565b6000806040838503121561409257600080fd5b60006140a085828601613b5a565b92505060206140b1858286016139bf565b9150509250929050565b6000602082840312156140cd57600080fd5b60006140db84828501613b6f565b91505092915050565b6000602082840312156140f657600080fd5b600061410484828501613b84565b91505092915050565b60006020828403121561411f57600080fd5b600061412d84828501613b99565b91505092915050565b61413f81614e78565b82525050565b61415661415182614e78565b61500d565b82525050565b61416581614e9c565b82525050565b61417481614ea8565b82525050565b61418b61418682614ea8565b61501f565b82525050565b600061419d8385614dc1565b93506141aa838584614f1f565b6141b3836150d2565b840190509392505050565b60006141c982614db6565b6141d38185614dd2565b93506141e3818560208601614f2e565b6141ec816150d2565b840191505092915050565b6000614204601883614dd2565b915061420f826150f0565b602082019050919050565b6000614227602f83614dd2565b915061423282615119565b604082019050919050565b600061424a602383614dd2565b915061425582615168565b604082019050919050565b600061426d601483614dd2565b9150614278826151b7565b602082019050919050565b6000614290602283614dd2565b915061429b826151e0565b604082019050919050565b60006142b3602b83614dd2565b91506142be8261522f565b604082019050919050565b60006142d6601f83614dd2565b91506142e18261527e565b602082019050919050565b60006142f9601c83614de3565b9150614304826152a7565b601c82019050919050565b600061431c602283614dd2565b9150614327826152d0565b604082019050919050565b600061433f602a83614dd2565b915061434a8261531f565b604082019050919050565b6000614362602683614dd2565b915061436d8261536e565b604082019050919050565b6000614385601c83614dd2565b9150614390826153bd565b602082019050919050565b60006143a8603683614dd2565b91506143b3826153e6565b604082019050919050565b60006143cb602283614dd2565b91506143d682615435565b604082019050919050565b60006143ee602d83614dd2565b91506143f982615484565b604082019050919050565b6000614411601083614dd2565b915061441c826154d3565b602082019050919050565b6000614434602c83614dd2565b915061443f826154fc565b604082019050919050565b6000614457602c83614dd2565b91506144628261554b565b604082019050919050565b600061447a603783614dd2565b91506144858261559a565b604082019050919050565b600061449d602e83614dd2565b91506144a8826155e9565b604082019050919050565b60006144c0602283614dd2565b91506144cb82615638565b604082019050919050565b60006144e3602883614dd2565b91506144ee82615687565b604082019050919050565b6000614506602183614dd2565b9150614511826156d6565b604082019050919050565b6000614529602583614dd2565b915061453482615725565b604082019050919050565b600061454c601983614dd2565b915061455782615774565b602082019050919050565b600061456f602483614dd2565b915061457a8261579d565b604082019050919050565b6000614592602783614dd2565b915061459d826157ec565b604082019050919050565b60006145b5602f83614dd2565b91506145c08261583b565b604082019050919050565b60006145d8602383614dd2565b91506145e38261588a565b604082019050919050565b60006145fb603183614dd2565b9150614606826158d9565b604082019050919050565b600061461e602883614dd2565b915061462982615928565b604082019050919050565b6000614641602583614dd2565b915061464c82615977565b604082019050919050565b6000614664601f83614dd2565b915061466f826159c6565b602082019050919050565b61468381614f08565b82525050565b61469a61469582614f08565b61503b565b82525050565b6146a981614f12565b82525050565b60006146bb8288614145565b6014820191506146cb828761417a565b6020820191506146db8286614145565b6014820191506146eb8285614689565b6020820191506146fb8284614689565b6020820191508190509695505050505050565b6000614719826142ec565b9150614725828461417a565b60208201915081905092915050565b60006020820190506147496000830184614136565b92915050565b60006040820190506147646000830185614136565b614771602083018461415c565b9392505050565b600060408201905061478d6000830185614136565b61479a602083018461467a565b9392505050565b60006080820190506147b66000830188614136565b6147c3602083018761467a565b6147d06040830186614136565b81810360608301526147e3818486614191565b90509695505050505050565b60006060820190506148046000830187614136565b614811602083018661467a565b8181036040830152614824818486614191565b905095945050505050565b6000602082019050614844600083018461415c565b92915050565b600060208201905061485f600083018461416b565b92915050565b600060808201905061487a600083018761416b565b61488760208301866146a0565b614894604083018561416b565b6148a1606083018461416b565b95945050505050565b600060208201905081810360008301526148c481846141be565b905092915050565b600060208201905081810360008301526148e5816141f7565b9050919050565b600060208201905081810360008301526149058161421a565b9050919050565b600060208201905081810360008301526149258161423d565b9050919050565b6000602082019050818103600083015261494581614260565b9050919050565b6000602082019050818103600083015261496581614283565b9050919050565b60006020820190508181036000830152614985816142a6565b9050919050565b600060208201905081810360008301526149a5816142c9565b9050919050565b600060208201905081810360008301526149c58161430f565b9050919050565b600060208201905081810360008301526149e581614332565b9050919050565b60006020820190508181036000830152614a0581614355565b9050919050565b60006020820190508181036000830152614a2581614378565b9050919050565b60006020820190508181036000830152614a458161439b565b9050919050565b60006020820190508181036000830152614a65816143be565b9050919050565b60006020820190508181036000830152614a85816143e1565b9050919050565b60006020820190508181036000830152614aa581614404565b9050919050565b60006020820190508181036000830152614ac581614427565b9050919050565b60006020820190508181036000830152614ae58161444a565b9050919050565b60006020820190508181036000830152614b058161446d565b9050919050565b60006020820190508181036000830152614b2581614490565b9050919050565b60006020820190508181036000830152614b45816144b3565b9050919050565b60006020820190508181036000830152614b65816144d6565b9050919050565b60006020820190508181036000830152614b85816144f9565b9050919050565b60006020820190508181036000830152614ba58161451c565b9050919050565b60006020820190508181036000830152614bc58161453f565b9050919050565b60006020820190508181036000830152614be581614562565b9050919050565b60006020820190508181036000830152614c0581614585565b9050919050565b60006020820190508181036000830152614c25816145a8565b9050919050565b60006020820190508181036000830152614c45816145cb565b9050919050565b60006020820190508181036000830152614c65816145ee565b9050919050565b60006020820190508181036000830152614c8581614611565b9050919050565b60006020820190508181036000830152614ca581614634565b9050919050565b60006020820190508181036000830152614cc581614657565b9050919050565b6000602082019050614ce1600083018461467a565b92915050565b6000604082019050614cfc600083018661467a565b8181036020830152614d0f818486614191565b9050949350505050565b6000602082019050614d2e60008301846146a0565b92915050565b6000614d3e614d4f565b9050614d4a8282614f93565b919050565b6000604051905090565b600067ffffffffffffffff821115614d7457614d736150a3565b5b602082029050602081019050919050565b600067ffffffffffffffff821115614da057614d9f6150a3565b5b614da9826150d2565b9050602081019050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000614df982614f08565b9150614e0483614f08565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614e3957614e38615045565b5b828201905092915050565b6000614e4f82614f08565b9150614e5a83614f08565b925082821015614e6d57614e6c615045565b5b828203905092915050565b6000614e8382614ee8565b9050919050565b6000614e9582614ee8565b9050919050565b60008115159050919050565b6000819050919050565b6000614ebd82614e78565b9050919050565b6000614ecf82614e78565b9050919050565b6000614ee182614e78565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b82818337600083830152505050565b60005b83811015614f4c578082015181840152602081019050614f31565b83811115614f5b576000848401525b50505050565b60006002820490506001821680614f7957607f821691505b60208210811415614f8d57614f8c615074565b5b50919050565b614f9c826150d2565b810181811067ffffffffffffffff82111715614fbb57614fba6150a3565b5b80604052505050565b6000614fcf82614f08565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561500257615001615045565b5b600182019050919050565b600061501882615029565b9050919050565b6000819050919050565b6000615034826150e3565b9050919050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f45434453413a20696e76616c6964207369676e61747572650000000000000000600082015250565b7f416363657373436f6e74726f6c3a20546172676574206163636f756e7420697360008201527f20616c72656164792066726f7a656e0000000000000000000000000000000000602082015250565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f5061757361626c653a206e6f7420706175736564000000000000000000000000600082015250565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b7f416363657373436f6e74726f6c3a20546172676574206163636f756e7420697360008201527f206e6f742066726f7a656e000000000000000000000000000000000000000000602082015250565b7f45434453413a20696e76616c6964207369676e6174757265206c656e67746800600082015250565b7f19457468657265756d205369676e6564204d6573736167653a0a333200000000600082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f476f7665726e616e6365546f6b656e3a20736f7572636520616464726573732060008201527f7761732066726f7a656e00000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b7f416363657373436f6e74726f6c3a204163636573732064656e69656400000000600082015250565b7f476f7665726e616e6365546f6b656e3a2063616e2774207472616e736665722060008201527f746f20746f6b656e20636f6e74726163742073656c6600000000000000000000602082015250565b7f45434453413a20696e76616c6964207369676e6174757265202773272076616c60008201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b7f476f7665726e616e6365546f6b656e3a20746172676574206163636f756e742060008201527f6973206e6f742066726f7a656e00000000000000000000000000000000000000602082015250565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b7f617070726f766542756c6b3a207370656e6465722e6c656e67746820213d207460008201527f6f6b656e732e6c656e6774680000000000000000000000000000000000000000602082015250565b7f476f7665726e616e6365546f6b656e3a20746f6b656e207472616e736665722060008201527f7768696c65207061757365640000000000000000000000000000000000000000602082015250565b7f476f7665726e616e6365546f6b656e3a2063616e6e6f7420706572666f726d2060008201527f62756c6b20776974682073696e676c6520746172676574000000000000000000602082015250565b7f416363657373436f6e74726f6c3a207265636f7665726564206164647265737360008201527f206973206e6f74207369676e6572000000000000000000000000000000000000602082015250565b7f45434453413a20696e76616c6964207369676e6174757265202776272076616c60008201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45524332304361707065643a2063617020657863656564656400000000000000600082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f416363657373436f6e74726f6c3a206e6f7420656e6f75676820636f6e66697260008201527f6d6174696f6e7300000000000000000000000000000000000000000000000000602082015250565b7f476f7665726e616e6365546f6b656e3a207461726765742e6c656e677468202160008201527f3d20616d6f756e742e6c656e6774680000000000000000000000000000000000602082015250565b7f424355473a206275726e20616d6f756e74206578636565647320616c6c6f776160008201527f6e63650000000000000000000000000000000000000000000000000000000000602082015250565b7f416363657373436f6e74726f6c3a207369676e6572206164647265737320757360008201527f6564206d6f7265207468616e206f6e6365000000000000000000000000000000602082015250565b7f7472616e7366657242756c6b3a20746f2e6c656e67746820213d20746f6b656e60008201527f732e6c656e677468000000000000000000000000000000000000000000000000602082015250565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6159f881614e78565b8114615a0357600080fd5b50565b615a0f81614e8a565b8114615a1a57600080fd5b50565b615a2681614e9c565b8114615a3157600080fd5b50565b615a3d81614ea8565b8114615a4857600080fd5b50565b615a5481614eb2565b8114615a5f57600080fd5b50565b615a6b81614ec4565b8114615a7657600080fd5b50565b615a8281614ed6565b8114615a8d57600080fd5b50565b615a9981614f08565b8114615aa457600080fd5b5056fea2646970667358221220b5a9bf50d6ab20fb6187e0977c4859ef104592e8af65af586f892117edccd45a64736f6c63430008010033426c6f636b636861696e2043757469657320556e69766572736520476f7665726e616e636520546f6b656e00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000005000000000000000000000000ff0d75a60a66b8e15da951945c23db34b45ae35400000000000000000000000063f8d9577cb91aafb79a983724cf2cf1131e2db600000000000000000000000094f02a55b37cbfaccbd4d0f13ebd8e8e3f25a03000000000000000000000000045f254fd3fef54f3a5a8d601d291f2a5bf9d8d670000000000000000000000007290490bc88a0fefc2a2976ea411750836e5d169
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106102535760003560e01c80637df73e2711610146578063be45fd62116100c3578063da63bac611610087578063da63bac61461072a578063dd62ed3e14610746578063e583983614610776578063ead8c595146107a6578063f4f3b200146107c2578063fa312b3b146107de57610253565b8063be45fd6214610676578063c6b72a1f146106a6578063caa7d950146106c2578063cae9ca51146106de578063cda8c7151461070e57610253565b806395d89b411161010a57806395d89b41146105be578063a457c2d7146105dc578063a9059cbb1461060c578063affed0e01461063c578063b9edf9111461065a57610253565b80637df73e271461051e5780638ea769f61461054e5780639316c3e71461056a578063936550551461058657806393a02744146105a257610253565b806335e9d83b116101d4578063536db4cb11610198578063536db4cb1461047c578063561e8319146104985780635c975abb146104b457806370a08231146104d257806379cc67901461050257610253565b806335e9d83b146103b457806339509351146103e45780633f35d0331461041457806342966c681461044457806346195c121461046057610253565b806323b872dd1161021b57806323b872dd146102fc5780632535f7621461032c57806325e160631461035c578063313ce56714610378578063355274ea1461039657610253565b806306fdde0314610258578063091413d114610276578063095ea7b3146102925780631716d0f1146102c257806318160ddd146102de575b600080fd5b61026061080e565b60405161026d91906148aa565b60405180910390f35b610290600480360381019061028b9190613ed3565b6108a0565b005b6102ac60048036038101906102a79190613cdf565b610b0f565b6040516102b9919061482f565b60405180910390f35b6102dc60048036038101906102d79190613d1b565b610b2d565b005b6102e6610c0d565b6040516102f39190614ccc565b60405180910390f35b61031660048036038101906103119190613c3c565b610c17565b604051610323919061482f565b60405180910390f35b61034660048036038101906103419190613d82565b610d18565b604051610353919061482f565b60405180910390f35b61037660048036038101906103719190613bd7565b610d52565b005b610380610e32565b60405161038d9190614d19565b60405180910390f35b61039e610e3b565b6040516103ab9190614ccc565b60405180910390f35b6103ce60048036038101906103c99190613d82565b610e45565b6040516103db919061482f565b60405180910390f35b6103fe60048036038101906103f99190613cdf565b610ec7565b60405161040b919061482f565b60405180910390f35b61042e60048036038101906104299190613d82565b610f73565b60405161043b919061482f565b60405180910390f35b61045e600480360381019061045991906140e4565b61106c565b005b61047a600480360381019061047591906140bb565b611080565b005b61049660048036038101906104919190613f74565b61117d565b005b6104b260048036038101906104ad9190613f74565b61125a565b005b6104bc611337565b6040516104c9919061482f565b60405180910390f35b6104ec60048036038101906104e79190613bae565b61134e565b6040516104f99190614ccc565b60405180910390f35b61051c60048036038101906105179190613cdf565b611396565b005b61053860048036038101906105339190613bae565b61141a565b604051610545919061482f565b60405180910390f35b61056860048036038101906105639190613dee565b611470565b005b610584600480360381019061057f9190613e5e565b611655565b005b6105a0600480360381019061059b9190613c8b565b61175c565b005b6105bc60048036038101906105b79190613dee565b61183b565b005b6105c6611a20565b6040516105d391906148aa565b60405180910390f35b6105f660048036038101906105f19190613cdf565b611ab2565b604051610603919061482f565b60405180910390f35b61062660048036038101906106219190613cdf565b611ba6565b604051610633919061482f565b60405180910390f35b610644611bc4565b6040516106519190614ccc565b60405180910390f35b610674600480360381019061066f9190613e5e565b611bca565b005b610690600480360381019061068b9190613d82565b611cd1565b60405161069d919061482f565b60405180910390f35b6106c060048036038101906106bb919061402d565b611ce9565b005b6106dc60048036038101906106d79190613c8b565b611de6565b005b6106f860048036038101906106f39190613d82565b611f16565b604051610705919061482f565b60405180910390f35b6107286004803603810190610723919061407f565b611fa2565b005b610744600480360381019061073f9190613c8b565b61214e565b005b610760600480360381019061075b9190613c00565b61222d565b60405161076d9190614ccc565b60405180910390f35b610790600480360381019061078b9190613bae565b6122b4565b60405161079d919061482f565b60405180910390f35b6107c060048036038101906107bb9190613c8b565b61230a565b005b6107dc60048036038101906107d79190614056565b6123fb565b005b6107f860048036038101906107f39190613fde565b6125a6565b604051610805919061484a565b60405180910390f35b60606003805461081d90614f61565b80601f016020809104026020016040519081016040528092919081815260200182805461084990614f61565b80156108965780601f1061086b57610100808354040283529160200191610896565b820191906000526020600020905b81548152906001019060200180831161087957829003601f168201915b5050505050905090565b600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661092c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161092390614a0c565b60405180910390fd5b60018585905011610972576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161096990614aec565b60405180910390fd5b8282905085859050146109ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109b190614c0c565b60405180910390fd5b6000610a43610a3e7f84bbfaa2e4384c51c0e71108356af77f996f8a1f97dc229b15ad088f887071c760001b88886000818110610a20577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9050602002016020810190610a359190613bae565b898990506125a6565b6125e2565b9050610a4f8282612612565b60005b86869050811015610b0657610af3878783818110610a99577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9050602002016020810190610aae9190613bae565b868684818110610ae7577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90506020020135612a2b565b8080610afe90614fc4565b915050610a52565b50505050505050565b6000610b23610b1c612b7f565b8484612b87565b6001905092915050565b600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610bb9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bb090614a0c565b60405180910390fd5b6000610bf1610bec7fdaef0006354e6aca5b14786fab16e27867b1ac002611e2fa58e0aa486080141f60001b86866125a6565b6125e2565b9050610bfd8282612612565b610c078484612a2b565b50505050565b6000600254905090565b6000610c24848484612d52565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610c6f612b7f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610cef576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ce690614b4c565b60405180910390fd5b610d0c85610cfb612b7f565b8584610d079190614e44565b612b87565b60019150509392505050565b6000610d2385612fd1565b15610d3b57610d3485858585610f73565b9050610d4a565b610d4785858585610e45565b90505b949350505050565b600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610dde576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dd590614a0c565b60405180910390fd5b6000471115610e2f578073ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015610e2d573d6000803e3d6000fd5b505b50565b60006012905090565b6000600554905090565b6000610e52338686612d52565b8473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fe19260aff97b920c7df27010903aeb9c8d2be5d310a2c67824cf3f15396e4c16868686604051610eb393929190614ce7565b60405180910390a360019050949350505050565b6000610f69610ed4612b7f565b848460016000610ee2612b7f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610f649190614dee565b612b87565b6001905092915050565b6000610f80338686612d52565b8473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fe19260aff97b920c7df27010903aeb9c8d2be5d310a2c67824cf3f15396e4c16868686604051610fe193929190614ce7565b60405180910390a360008590508073ffffffffffffffffffffffffffffffffffffffff1663c0ee0b8a338787876040518563ffffffff1660e01b815260040161102d94939291906147ef565b600060405180830381600087803b15801561104757600080fd5b505af115801561105b573d6000803e3d6000fd5b505050506001915050949350505050565b61107d611077612b7f565b82612fe4565b50565b600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661110c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110390614a0c565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1663a22cb4653360016040518363ffffffff1660e01b815260040161114892919061474f565b600060405180830381600087803b15801561116257600080fd5b505af1158015611176573d6000803e3d6000fd5b5050505050565b600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611209576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120090614a0c565b60405180910390fd5b600061124261123d7f4f10db4bd06c1a9ea1a64e78bc5c096dc4b14436b0cdf60a6252f82113e0a57e60001b3360016125a6565b6125e2565b905061124e8282612612565b6112566131b8565b5050565b600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166112e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112dd90614a0c565b60405180910390fd5b600061131f61131a7f4f10db4bd06c1a9ea1a64e78bc5c096dc4b14436b0cdf60a6252f82113e0a57e60001b3360016125a6565b6125e2565b905061132b8282612612565b61133361325b565b5050565b6000600860009054906101000a900460ff16905090565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60006113a9836113a4612b7f565b61222d565b9050818110156113ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113e590614c2c565b60405180910390fd5b61140b836113fa612b7f565b84846114069190614e44565b612b87565b6114158383612fe4565b505050565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166114fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114f390614a0c565b60405180910390fd5b60018383905011611542576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153990614aec565b60405180910390fd5b60006115cb6115c67ffbe23759ad6142178865544766ded4220dd6951de831ca9f926f385026c83a2b60001b868660008181106115a8577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90506020020160208101906115bd9190613bae565b878790506125a6565b6125e2565b90506115d78282612612565b60005b8484905081101561164e5761163b858583818110611621577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90506020020160208101906116369190613bae565b6132fd565b808061164690614fc4565b9150506115da565b5050505050565b81819050848490501461169d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161169490614c6c565b60405180910390fd5b60005b8484905081101561175557611742338686848181106116e8577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90506020020160208101906116fd9190613bae565b858585818110611736577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90506020020135612d52565b808061174d90614fc4565b9150506116a0565b5050505050565b600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166117e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117df90614a0c565b60405180910390fd5b600061182161181c7f0101de85040f7616ce3d91b0b3b5279925bff5ba3cbdc18c318483eec213aba560001b8560016125a6565b6125e2565b905061182d8282612612565b6118368361341c565b505050565b600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166118c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118be90614a0c565b60405180910390fd5b6001838390501161190d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190490614aec565b60405180910390fd5b60006119966119917ffbe23759ad6142178865544766ded4220dd6951de831ca9f926f385026c83a2b60001b86866000818110611973577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90506020020160208101906119889190613bae565b878790506125a6565b6125e2565b90506119a28282612612565b60005b84849050811015611a1957611a068585838181106119ec577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9050602002016020810190611a019190613bae565b61341c565b8080611a1190614fc4565b9150506119a5565b5050505050565b606060048054611a2f90614f61565b80601f0160208091040260200160405190810160405280929190818152602001828054611a5b90614f61565b8015611aa85780601f10611a7d57610100808354040283529160200191611aa8565b820191906000526020600020905b815481529060010190602001808311611a8b57829003601f168201915b5050505050905090565b60008060016000611ac1612b7f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611b7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b7590614c8c565b60405180910390fd5b611b9b611b89612b7f565b858584611b969190614e44565b612b87565b600191505092915050565b6000611bba611bb3612b7f565b8484612d52565b6001905092915050565b60095481565b818190508484905014611c12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c0990614aac565b60405180910390fd5b60005b84849050811015611cca57611cb733868684818110611c5d577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9050602002016020810190611c729190613bae565b858585818110611cab577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90506020020135612b87565b8080611cc290614fc4565b915050611c15565b5050505050565b6000611cdf85858585610d18565b9050949350505050565b600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611d75576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d6c90614a0c565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1663a22cb4653360016040518363ffffffff1660e01b8152600401611db192919061474f565b600060405180830381600087803b158015611dcb57600080fd5b505af1158015611ddf573d6000803e3d6000fd5b5050505050565b600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611e72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e6990614a0c565b60405180910390fd5b611e7b826122b4565b611eba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eb190614a6c565b60405180910390fd5b6000611ef3611eee7f642bcc36d46a724c301cb6a1e74f954db2da04e41cf92613260aa926b0cc663c60001b8560016125a6565b6125e2565b9050611eff8282612612565b611f1183611f0c8561134e565b612fe4565b505050565b6000611f23338686612b87565b8473ffffffffffffffffffffffffffffffffffffffff16638f4ffcb133863087876040518663ffffffff1660e01b8152600401611f649594939291906147a1565b600060405180830381600087803b158015611f7e57600080fd5b505af1158015611f92573d6000803e3d6000fd5b5050505060019050949350505050565b600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661202e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161202590614a0c565b60405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016120699190614734565b60206040518083038186803b15801561208157600080fd5b505afa158015612095573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120b9919061410d565b90508273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b81526004016120f6929190614778565b602060405180830381600087803b15801561211057600080fd5b505af1158015612124573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121489190613fb5565b50505050565b600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166121da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121d190614a0c565b60405180910390fd5b600061221361220e7f0101de85040f7616ce3d91b0b3b5279925bff5ba3cbdc18c318483eec213aba560001b8560016125a6565b6125e2565b905061221f8282612612565b612228836132fd565b505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612396576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161238d90614a0c565b60405180910390fd5b60006123cf6123ca7fb17ffba690b680e166aba321cd5d08ac8256fa93afb6a8f0573d02ecbfa33e1160001b8560016125a6565b6125e2565b90506123db8282612612565b6123e4836132fd565b6123f6836123f18561134e565b612fe4565b505050565b600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612487576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161247e90614a0c565b60405180910390fd5b60008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016124c29190614734565b60206040518083038186803b1580156124da57600080fd5b505afa1580156124ee573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612512919061410d565b90508173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b815260040161254f929190614778565b602060405180830381600087803b15801561256957600080fd5b505af115801561257d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125a19190613fb5565b505050565b6000308484846009546040516020016125c39594939291906146af565b6040516020818303038152906040528051906020012090509392505050565b6000816040516020016125f5919061470e565b604051602081830303815290604052805190602001209050919050565b600282511015612657576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161264e90614bec565b60405180910390fd5b6000600183516126679190614dee565b67ffffffffffffffff8111156126a6577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280602002602001820160405280156126d45781602001602082028036833780820191505090505b5090503381600081518110612712577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f16d0bc037ab8c610c70861ff797d0f28a881c4fbd1d5b4df28115575d18351803360405161277b9190614734565b60405180910390a160005b83518110156129c85760006127e48583815181106127cd577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101518561353190919063ffffffff16565b90506127ef8161141a565b61282e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161282590614b0c565b60405180910390fd5b60005b83518110156128fc578173ffffffffffffffffffffffffffffffffffffffff1684828151811061288a577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1614156128e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128e090614c4c565b60405180910390fd5b80806128f490614fc4565b915050612831565b50808360018461290c9190614dee565b81518110612943577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f16d0bc037ab8c610c70861ff797d0f28a881c4fbd1d5b4df28115575d1835180816040516129ac9190614734565b60405180910390a15080806129c090614fc4565b915050612786565b50600381511015612a0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a0590614bec565b60405180910390fd5b60096000815480929190612a2190614fc4565b9190505550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612a9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a9290614cac565b60405180910390fd5b612aa7600083836135ab565b8060026000828254612ab99190614dee565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612b0e9190614dee565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612b739190614ccc565b60405180910390a35050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612bf7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bee90614bcc565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612c67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c5e906149ac565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612d459190614ccc565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612dc2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612db990614b8c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612e32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e299061490c565b60405180910390fd5b612e3d8383836135ab565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612ec3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612eba906149ec565b60405180910390fd5b8181612ecf9190614e44565b6000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612f5f9190614dee565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612fc39190614ccc565b60405180910390a350505050565b600080823b905060008111915050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613054576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161304b90614b6c565b60405180910390fd5b613060826000836135ab565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156130e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130dd9061494c565b60405180910390fd5b81816130f29190614e44565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600260008282546131469190614e44565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516131ab9190614ccc565b60405180910390a3505050565b6131c0611337565b15613200576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131f790614a8c565b60405180910390fd5b6001600860006101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258613244612b7f565b6040516132519190614734565b60405180910390a1565b613263611337565b6132a2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132999061492c565b60405180910390fd5b6000600860006101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6132e6612b7f565b6040516132f39190614734565b60405180910390a1565b600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561338a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613381906148ec565b60405180910390fd5b6001600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f8a5c4736a33c7b7f29a2c34ea9ff9608afc5718d56f6fd6dcbd2d3711a1a4913816040516134119190614734565b60405180910390a150565b600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166134a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161349f9061496c565b60405180910390fd5b600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81549060ff02191690557f4feb53e305297ab8fb8f3420c95ea04737addc254a7270d8fc4605d2b9c61dba816040516135269190614734565b60405180910390a150565b60006041825114613577576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161356e9061498c565b60405180910390fd5b60008060006020850151925060408501519150606085015160001a90506135a0868285856136f2565b935050505092915050565b6135b683838361387d565b3073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613625576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161361c90614a2c565b60405180910390fd5b61362d611337565b1561366d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161366490614acc565b60405180910390fd5b613676836122b4565b15806136ae5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b6136ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136e4906149cc565b60405180910390fd5b505050565b60007f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08260001c111561375a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161375190614a4c565b60405180910390fd5b601b8460ff16148061376f5750601c8460ff16145b6137ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137a590614b2c565b60405180910390fd5b6000600186868686604051600081526020016040526040516137d39493929190614865565b6020604051602081039080840390855afa1580156137f5573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415613871576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613868906148cc565b60405180910390fd5b80915050949350505050565b61388883838361391f565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561391a576138c5610e3b565b816138ce610c0d565b6138d89190614dee565b1115613919576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161391090614bac565b60405180910390fd5b5b505050565b505050565b600061393761393284614d59565b614d34565b9050808382526020820190508260005b85811015613977578135850161395d8882613b1b565b845260208401935060208301925050600181019050613947565b5050509392505050565b600061399461398f84614d85565b614d34565b9050828152602081018484840111156139ac57600080fd5b6139b7848285614f1f565b509392505050565b6000813590506139ce816159ef565b92915050565b6000813590506139e381615a06565b92915050565b60008083601f8401126139fb57600080fd5b8235905067ffffffffffffffff811115613a1457600080fd5b602083019150836020820283011115613a2c57600080fd5b9250929050565b600082601f830112613a4457600080fd5b8135613a54848260208601613924565b91505092915050565b60008083601f840112613a6f57600080fd5b8235905067ffffffffffffffff811115613a8857600080fd5b602083019150836020820283011115613aa057600080fd5b9250929050565b600081519050613ab681615a1d565b92915050565b600081359050613acb81615a34565b92915050565b60008083601f840112613ae357600080fd5b8235905067ffffffffffffffff811115613afc57600080fd5b602083019150836001820283011115613b1457600080fd5b9250929050565b600082601f830112613b2c57600080fd5b8135613b3c848260208601613981565b91505092915050565b600081359050613b5481615a4b565b92915050565b600081359050613b6981615a62565b92915050565b600081359050613b7e81615a79565b92915050565b600081359050613b9381615a90565b92915050565b600081519050613ba881615a90565b92915050565b600060208284031215613bc057600080fd5b6000613bce848285016139bf565b91505092915050565b600060208284031215613be957600080fd5b6000613bf7848285016139d4565b91505092915050565b60008060408385031215613c1357600080fd5b6000613c21858286016139bf565b9250506020613c32858286016139bf565b9150509250929050565b600080600060608486031215613c5157600080fd5b6000613c5f868287016139bf565b9350506020613c70868287016139bf565b9250506040613c8186828701613b84565b9150509250925092565b60008060408385031215613c9e57600080fd5b6000613cac858286016139bf565b925050602083013567ffffffffffffffff811115613cc957600080fd5b613cd585828601613a33565b9150509250929050565b60008060408385031215613cf257600080fd5b6000613d00858286016139bf565b9250506020613d1185828601613b84565b9150509250929050565b600080600060608486031215613d3057600080fd5b6000613d3e868287016139bf565b9350506020613d4f86828701613b84565b925050604084013567ffffffffffffffff811115613d6c57600080fd5b613d7886828701613a33565b9150509250925092565b60008060008060608587031215613d9857600080fd5b6000613da6878288016139bf565b9450506020613db787828801613b84565b935050604085013567ffffffffffffffff811115613dd457600080fd5b613de087828801613ad1565b925092505092959194509250565b600080600060408486031215613e0357600080fd5b600084013567ffffffffffffffff811115613e1d57600080fd5b613e29868287016139e9565b9350935050602084013567ffffffffffffffff811115613e4857600080fd5b613e5486828701613a33565b9150509250925092565b60008060008060408587031215613e7457600080fd5b600085013567ffffffffffffffff811115613e8e57600080fd5b613e9a878288016139e9565b9450945050602085013567ffffffffffffffff811115613eb957600080fd5b613ec587828801613a5d565b925092505092959194509250565b600080600080600060608688031215613eeb57600080fd5b600086013567ffffffffffffffff811115613f0557600080fd5b613f11888289016139e9565b9550955050602086013567ffffffffffffffff811115613f3057600080fd5b613f3c88828901613a5d565b9350935050604086013567ffffffffffffffff811115613f5b57600080fd5b613f6788828901613a33565b9150509295509295909350565b600060208284031215613f8657600080fd5b600082013567ffffffffffffffff811115613fa057600080fd5b613fac84828501613a33565b91505092915050565b600060208284031215613fc757600080fd5b6000613fd584828501613aa7565b91505092915050565b600080600060608486031215613ff357600080fd5b600061400186828701613abc565b9350506020614012868287016139bf565b925050604061402386828701613b84565b9150509250925092565b60006020828403121561403f57600080fd5b600061404d84828501613b45565b91505092915050565b60006020828403121561406857600080fd5b600061407684828501613b5a565b91505092915050565b6000806040838503121561409257600080fd5b60006140a085828601613b5a565b92505060206140b1858286016139bf565b9150509250929050565b6000602082840312156140cd57600080fd5b60006140db84828501613b6f565b91505092915050565b6000602082840312156140f657600080fd5b600061410484828501613b84565b91505092915050565b60006020828403121561411f57600080fd5b600061412d84828501613b99565b91505092915050565b61413f81614e78565b82525050565b61415661415182614e78565b61500d565b82525050565b61416581614e9c565b82525050565b61417481614ea8565b82525050565b61418b61418682614ea8565b61501f565b82525050565b600061419d8385614dc1565b93506141aa838584614f1f565b6141b3836150d2565b840190509392505050565b60006141c982614db6565b6141d38185614dd2565b93506141e3818560208601614f2e565b6141ec816150d2565b840191505092915050565b6000614204601883614dd2565b915061420f826150f0565b602082019050919050565b6000614227602f83614dd2565b915061423282615119565b604082019050919050565b600061424a602383614dd2565b915061425582615168565b604082019050919050565b600061426d601483614dd2565b9150614278826151b7565b602082019050919050565b6000614290602283614dd2565b915061429b826151e0565b604082019050919050565b60006142b3602b83614dd2565b91506142be8261522f565b604082019050919050565b60006142d6601f83614dd2565b91506142e18261527e565b602082019050919050565b60006142f9601c83614de3565b9150614304826152a7565b601c82019050919050565b600061431c602283614dd2565b9150614327826152d0565b604082019050919050565b600061433f602a83614dd2565b915061434a8261531f565b604082019050919050565b6000614362602683614dd2565b915061436d8261536e565b604082019050919050565b6000614385601c83614dd2565b9150614390826153bd565b602082019050919050565b60006143a8603683614dd2565b91506143b3826153e6565b604082019050919050565b60006143cb602283614dd2565b91506143d682615435565b604082019050919050565b60006143ee602d83614dd2565b91506143f982615484565b604082019050919050565b6000614411601083614dd2565b915061441c826154d3565b602082019050919050565b6000614434602c83614dd2565b915061443f826154fc565b604082019050919050565b6000614457602c83614dd2565b91506144628261554b565b604082019050919050565b600061447a603783614dd2565b91506144858261559a565b604082019050919050565b600061449d602e83614dd2565b91506144a8826155e9565b604082019050919050565b60006144c0602283614dd2565b91506144cb82615638565b604082019050919050565b60006144e3602883614dd2565b91506144ee82615687565b604082019050919050565b6000614506602183614dd2565b9150614511826156d6565b604082019050919050565b6000614529602583614dd2565b915061453482615725565b604082019050919050565b600061454c601983614dd2565b915061455782615774565b602082019050919050565b600061456f602483614dd2565b915061457a8261579d565b604082019050919050565b6000614592602783614dd2565b915061459d826157ec565b604082019050919050565b60006145b5602f83614dd2565b91506145c08261583b565b604082019050919050565b60006145d8602383614dd2565b91506145e38261588a565b604082019050919050565b60006145fb603183614dd2565b9150614606826158d9565b604082019050919050565b600061461e602883614dd2565b915061462982615928565b604082019050919050565b6000614641602583614dd2565b915061464c82615977565b604082019050919050565b6000614664601f83614dd2565b915061466f826159c6565b602082019050919050565b61468381614f08565b82525050565b61469a61469582614f08565b61503b565b82525050565b6146a981614f12565b82525050565b60006146bb8288614145565b6014820191506146cb828761417a565b6020820191506146db8286614145565b6014820191506146eb8285614689565b6020820191506146fb8284614689565b6020820191508190509695505050505050565b6000614719826142ec565b9150614725828461417a565b60208201915081905092915050565b60006020820190506147496000830184614136565b92915050565b60006040820190506147646000830185614136565b614771602083018461415c565b9392505050565b600060408201905061478d6000830185614136565b61479a602083018461467a565b9392505050565b60006080820190506147b66000830188614136565b6147c3602083018761467a565b6147d06040830186614136565b81810360608301526147e3818486614191565b90509695505050505050565b60006060820190506148046000830187614136565b614811602083018661467a565b8181036040830152614824818486614191565b905095945050505050565b6000602082019050614844600083018461415c565b92915050565b600060208201905061485f600083018461416b565b92915050565b600060808201905061487a600083018761416b565b61488760208301866146a0565b614894604083018561416b565b6148a1606083018461416b565b95945050505050565b600060208201905081810360008301526148c481846141be565b905092915050565b600060208201905081810360008301526148e5816141f7565b9050919050565b600060208201905081810360008301526149058161421a565b9050919050565b600060208201905081810360008301526149258161423d565b9050919050565b6000602082019050818103600083015261494581614260565b9050919050565b6000602082019050818103600083015261496581614283565b9050919050565b60006020820190508181036000830152614985816142a6565b9050919050565b600060208201905081810360008301526149a5816142c9565b9050919050565b600060208201905081810360008301526149c58161430f565b9050919050565b600060208201905081810360008301526149e581614332565b9050919050565b60006020820190508181036000830152614a0581614355565b9050919050565b60006020820190508181036000830152614a2581614378565b9050919050565b60006020820190508181036000830152614a458161439b565b9050919050565b60006020820190508181036000830152614a65816143be565b9050919050565b60006020820190508181036000830152614a85816143e1565b9050919050565b60006020820190508181036000830152614aa581614404565b9050919050565b60006020820190508181036000830152614ac581614427565b9050919050565b60006020820190508181036000830152614ae58161444a565b9050919050565b60006020820190508181036000830152614b058161446d565b9050919050565b60006020820190508181036000830152614b2581614490565b9050919050565b60006020820190508181036000830152614b45816144b3565b9050919050565b60006020820190508181036000830152614b65816144d6565b9050919050565b60006020820190508181036000830152614b85816144f9565b9050919050565b60006020820190508181036000830152614ba58161451c565b9050919050565b60006020820190508181036000830152614bc58161453f565b9050919050565b60006020820190508181036000830152614be581614562565b9050919050565b60006020820190508181036000830152614c0581614585565b9050919050565b60006020820190508181036000830152614c25816145a8565b9050919050565b60006020820190508181036000830152614c45816145cb565b9050919050565b60006020820190508181036000830152614c65816145ee565b9050919050565b60006020820190508181036000830152614c8581614611565b9050919050565b60006020820190508181036000830152614ca581614634565b9050919050565b60006020820190508181036000830152614cc581614657565b9050919050565b6000602082019050614ce1600083018461467a565b92915050565b6000604082019050614cfc600083018661467a565b8181036020830152614d0f818486614191565b9050949350505050565b6000602082019050614d2e60008301846146a0565b92915050565b6000614d3e614d4f565b9050614d4a8282614f93565b919050565b6000604051905090565b600067ffffffffffffffff821115614d7457614d736150a3565b5b602082029050602081019050919050565b600067ffffffffffffffff821115614da057614d9f6150a3565b5b614da9826150d2565b9050602081019050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000614df982614f08565b9150614e0483614f08565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614e3957614e38615045565b5b828201905092915050565b6000614e4f82614f08565b9150614e5a83614f08565b925082821015614e6d57614e6c615045565b5b828203905092915050565b6000614e8382614ee8565b9050919050565b6000614e9582614ee8565b9050919050565b60008115159050919050565b6000819050919050565b6000614ebd82614e78565b9050919050565b6000614ecf82614e78565b9050919050565b6000614ee182614e78565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b82818337600083830152505050565b60005b83811015614f4c578082015181840152602081019050614f31565b83811115614f5b576000848401525b50505050565b60006002820490506001821680614f7957607f821691505b60208210811415614f8d57614f8c615074565b5b50919050565b614f9c826150d2565b810181811067ffffffffffffffff82111715614fbb57614fba6150a3565b5b80604052505050565b6000614fcf82614f08565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561500257615001615045565b5b600182019050919050565b600061501882615029565b9050919050565b6000819050919050565b6000615034826150e3565b9050919050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f45434453413a20696e76616c6964207369676e61747572650000000000000000600082015250565b7f416363657373436f6e74726f6c3a20546172676574206163636f756e7420697360008201527f20616c72656164792066726f7a656e0000000000000000000000000000000000602082015250565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f5061757361626c653a206e6f7420706175736564000000000000000000000000600082015250565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b7f416363657373436f6e74726f6c3a20546172676574206163636f756e7420697360008201527f206e6f742066726f7a656e000000000000000000000000000000000000000000602082015250565b7f45434453413a20696e76616c6964207369676e6174757265206c656e67746800600082015250565b7f19457468657265756d205369676e6564204d6573736167653a0a333200000000600082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f476f7665726e616e6365546f6b656e3a20736f7572636520616464726573732060008201527f7761732066726f7a656e00000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b7f416363657373436f6e74726f6c3a204163636573732064656e69656400000000600082015250565b7f476f7665726e616e6365546f6b656e3a2063616e2774207472616e736665722060008201527f746f20746f6b656e20636f6e74726163742073656c6600000000000000000000602082015250565b7f45434453413a20696e76616c6964207369676e6174757265202773272076616c60008201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b7f476f7665726e616e6365546f6b656e3a20746172676574206163636f756e742060008201527f6973206e6f742066726f7a656e00000000000000000000000000000000000000602082015250565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b7f617070726f766542756c6b3a207370656e6465722e6c656e67746820213d207460008201527f6f6b656e732e6c656e6774680000000000000000000000000000000000000000602082015250565b7f476f7665726e616e6365546f6b656e3a20746f6b656e207472616e736665722060008201527f7768696c65207061757365640000000000000000000000000000000000000000602082015250565b7f476f7665726e616e6365546f6b656e3a2063616e6e6f7420706572666f726d2060008201527f62756c6b20776974682073696e676c6520746172676574000000000000000000602082015250565b7f416363657373436f6e74726f6c3a207265636f7665726564206164647265737360008201527f206973206e6f74207369676e6572000000000000000000000000000000000000602082015250565b7f45434453413a20696e76616c6964207369676e6174757265202776272076616c60008201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45524332304361707065643a2063617020657863656564656400000000000000600082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f416363657373436f6e74726f6c3a206e6f7420656e6f75676820636f6e66697260008201527f6d6174696f6e7300000000000000000000000000000000000000000000000000602082015250565b7f476f7665726e616e6365546f6b656e3a207461726765742e6c656e677468202160008201527f3d20616d6f756e742e6c656e6774680000000000000000000000000000000000602082015250565b7f424355473a206275726e20616d6f756e74206578636565647320616c6c6f776160008201527f6e63650000000000000000000000000000000000000000000000000000000000602082015250565b7f416363657373436f6e74726f6c3a207369676e6572206164647265737320757360008201527f6564206d6f7265207468616e206f6e6365000000000000000000000000000000602082015250565b7f7472616e7366657242756c6b3a20746f2e6c656e67746820213d20746f6b656e60008201527f732e6c656e677468000000000000000000000000000000000000000000000000602082015250565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6159f881614e78565b8114615a0357600080fd5b50565b615a0f81614e8a565b8114615a1a57600080fd5b50565b615a2681614e9c565b8114615a3157600080fd5b50565b615a3d81614ea8565b8114615a4857600080fd5b50565b615a5481614eb2565b8114615a5f57600080fd5b50565b615a6b81614ec4565b8114615a7657600080fd5b50565b615a8281614ed6565b8114615a8d57600080fd5b50565b615a9981614f08565b8114615aa457600080fd5b5056fea2646970667358221220b5a9bf50d6ab20fb6187e0977c4859ef104592e8af65af586f892117edccd45a64736f6c63430008010033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000005000000000000000000000000ff0d75a60a66b8e15da951945c23db34b45ae35400000000000000000000000063f8d9577cb91aafb79a983724cf2cf1131e2db600000000000000000000000094f02a55b37cbfaccbd4d0f13ebd8e8e3f25a03000000000000000000000000045f254fd3fef54f3a5a8d601d291f2a5bf9d8d670000000000000000000000007290490bc88a0fefc2a2976ea411750836e5d169
-----Decoded View---------------
Arg [0] : allowedSigners (address[]): 0xFF0D75A60a66b8e15da951945c23DB34b45AE354,0x63f8d9577Cb91aAFb79A983724Cf2cf1131e2Db6,0x94f02A55B37cbfAccBd4D0F13EBD8E8e3F25a030,0x45F254FD3fef54F3a5A8D601D291F2A5bf9d8d67,0x7290490BC88A0Fefc2A2976EA411750836e5d169
-----Encoded View---------------
7 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000020
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000005
Arg [2] : 000000000000000000000000ff0d75a60a66b8e15da951945c23db34b45ae354
Arg [3] : 00000000000000000000000063f8d9577cb91aafb79a983724cf2cf1131e2db6
Arg [4] : 00000000000000000000000094f02a55b37cbfaccbd4d0f13ebd8e8e3f25a030
Arg [5] : 00000000000000000000000045f254fd3fef54f3a5a8d601d291f2a5bf9d8d67
Arg [6] : 0000000000000000000000007290490bc88a0fefc2a2976ea411750836e5d169
Deployed Bytecode Sourcemap
46609:3921:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6373:91;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39464:610;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8513:169;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39043:295;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7466:108;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9164:422;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49093:302;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31635:185;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7317:84;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33515:83;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50291:236;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9995:215;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49473:351;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32279:91;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31186:136;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42804:253;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43160:257;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35092:86;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7637:127;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32689:331;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29963:100;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40815:477;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48009:307;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40529:278;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41300:481;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6583:95;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10713:377;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7977:175;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38556:21;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48324:329;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48916:169;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31415:138;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41851:393;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47617:294;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46913:244;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40183:274;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8215:151;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30148:102;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42331:339;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30897:197;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43602:205;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6373:91;6418:13;6451:5;6444:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6373:91;:::o;39464:610::-;29801:7;:19;29809:10;29801:19;;;;;;;;;;;;;;;;;;;;;;;;;29793:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;39618:1:::1;39602:6;;:13;;:17;39594:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;39715:6;;:13;;39698:6;;:13;;:30;39690:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;39793:21;39817:87;:62;37507:66;39834:18;;39854:6;;39861:1;39854:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;39865:6;;:13;;39817:16;:62::i;:::-;:85;:87::i;:::-;39793:111;;39915:44;39933:10;39945:13;39915:17;:44::i;:::-;39977:6;39972:95;39993:6;;:13;;39989:1;:17;39972:95;;;40028:27;40034:6;;40041:1;40034:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;40045:6;;40052:1;40045:9;;;;;;;;;;;;;;;;;;;;;40028:5;:27::i;:::-;40008:3;;;;;:::i;:::-;;;;39972:95;;;;29864:1;39464:610:::0;;;;;:::o;8513:169::-;8596:4;8613:39;8622:12;:10;:12::i;:::-;8636:7;8645:6;8613:8;:39::i;:::-;8670:4;8663:11;;8513:169;;;;:::o;39043:295::-;29801:7;:19;29809:10;29801:19;;;;;;;;;;;;;;;;;;;;;;;;;29793:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;39147:21:::1;39171:72;:47;37308:66;39188:13;;39203:6;39211;39171:16;:47::i;:::-;:70;:72::i;:::-;39147:96;;39254:44;39272:10;39284:13;39254:17;:44::i;:::-;39309:21;39315:6;39323;39309:5;:21::i;:::-;29864:1;39043:295:::0;;;:::o;7466:108::-;7527:7;7554:12;;7547:19;;7466:108;:::o;9164:422::-;9270:4;9287:36;9297:6;9305:9;9316:6;9287:9;:36::i;:::-;9336:24;9363:11;:19;9375:6;9363:19;;;;;;;;;;;;;;;:33;9383:12;:10;:12::i;:::-;9363:33;;;;;;;;;;;;;;;;9336:60;;9435:6;9415:16;:26;;9407:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;9497:57;9506:6;9514:12;:10;:12::i;:::-;9547:6;9528:16;:25;;;;:::i;:::-;9497:8;:57::i;:::-;9574:4;9567:11;;;9164:422;;;;;:::o;49093:302::-;49183:12;49212:16;49224:3;49212:11;:16::i;:::-;49208:180;;;49252:38;49271:3;49276:6;49284:5;;49252:18;:38::i;:::-;49245:45;;;;49208:180;49339:37;49357:3;49362:6;49370:5;;49339:17;:37::i;:::-;49332:44;;49093:302;;;;;;;:::o;31635:185::-;29801:7;:19;29809:10;29801:19;;;;;;;;;;;;;;;;;;;;;;;;;29793:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;31742:1:::1;31718:21;:25;31714:99;;;31760:9;:18;;:41;31779:21;31760:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;31714:99;31635:185:::0;:::o;7317:84::-;7366:5;7391:2;7384:9;;7317:84;:::o;33515:83::-;33559:7;33586:4;;33579:11;;33515:83;:::o;50291:236::-;50382:12;50407:34;50417:10;50429:3;50434:6;50407:9;:34::i;:::-;50478:3;50457:40;;50466:10;50457:40;;;50483:6;50491:5;;50457:40;;;;;;;;:::i;:::-;;;;;;;;50515:4;50508:11;;50291:236;;;;;;:::o;9995:215::-;10083:4;10100:80;10109:12;:10;:12::i;:::-;10123:7;10169:10;10132:11;:25;10144:12;:10;:12::i;:::-;10132:25;;;;;;;;;;;;;;;:34;10158:7;10132:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;10100:8;:80::i;:::-;10198:4;10191:11;;9995:215;;;;:::o;49473:351::-;49565:12;49590:34;49600:10;49612:3;49617:6;49590:9;:34::i;:::-;49661:3;49640:40;;49649:10;49640:40;;;49666:6;49674:5;;49640:40;;;;;;;;:::i;:::-;;;;;;;;49691:22;49730:3;49691:43;;49745:8;:22;;;49768:10;49780:6;49788:5;;49745:49;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49812:4;49805:11;;;49473:351;;;;;;:::o;32279:91::-;32335:27;32341:12;:10;:12::i;:::-;32355:6;32335:5;:27::i;:::-;32279:91;:::o;31186:136::-;29801:7;:19;29809:10;29801:19;;;;;;;;;;;;;;;;;;;;;;;;;29793:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;31264:14:::1;:32;;;31297:10;31309:4;31264:50;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;31186:136:::0;:::o;42804:253::-;29801:7;:19;29809:10;29801:19;;;;;;;;;;;;;;;;;;;;;;;;;29793:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;42877:21:::1;42901:72;:47;38481:66;42918:14;;42934:10;42946:1;42901:16;:47::i;:::-;:70;:72::i;:::-;42877:96;;42984:44;43002:10;43014:13;42984:17;:44::i;:::-;43041:8;:6;:8::i;:::-;29864:1;42804:253:::0;:::o;43160:257::-;29801:7;:19;29809:10;29801:19;;;;;;;;;;;;;;;;;;;;;;;;;29793:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;43235:21:::1;43259:72;:47;38481:66;43276:14;;43292:10;43304:1;43259:16;:47::i;:::-;:70;:72::i;:::-;43235:96;;43342:44;43360:10;43372:13;43342:17;:44::i;:::-;43399:10;:8;:10::i;:::-;29864:1;43160:257:::0;:::o;35092:86::-;35139:4;35163:7;;;;;;;;;;;35156:14;;35092:86;:::o;7637:127::-;7711:7;7738:9;:18;7748:7;7738:18;;;;;;;;;;;;;;;;7731:25;;7637:127;;;:::o;32689:331::-;32766:24;32793:32;32803:7;32812:12;:10;:12::i;:::-;32793:9;:32::i;:::-;32766:59;;32864:6;32844:16;:26;;32836:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;32921:58;32930:7;32939:12;:10;:12::i;:::-;32972:6;32953:16;:25;;;;:::i;:::-;32921:8;:58::i;:::-;32990:22;32996:7;33005:6;32990:5;:22::i;:::-;32689:331;;;:::o;29963:100::-;30017:4;30041:7;:14;30049:5;30041:14;;;;;;;;;;;;;;;;;;;;;;;;;30034:21;;29963:100;;;:::o;40815:477::-;29801:7;:19;29809:10;29801:19;;;;;;;;;;;;;;;;;;;;;;;;;29793:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;40944:1:::1;40928:6;;:13;;:17;40920:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;41018:21;41042:89;:64;37911:66;41059:20;;41081:6;;41088:1;41081:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;41092:6;;:13;;41042:16;:64::i;:::-;:87;:89::i;:::-;41018:113;;41142:44;41160:10;41172:13;41142:17;:44::i;:::-;41204:6;41199:86;41220:6;;:13;;41216:1;:17;41199:86;;;41255:18;41263:6;;41270:1;41263:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;41255:7;:18::i;:::-;41235:3;;;;;:::i;:::-;;;;41199:86;;;;29864:1;40815:477:::0;;;:::o;48009:307::-;48128:6;;:13;;48115:2;;:9;;:26;48107:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;48202:6;48197:112;48218:2;;:9;;48214:1;:13;48197:112;;;48258:39;48268:10;48280:2;;48283:1;48280:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;48287:6;;48294:1;48287:9;;;;;;;;;;;;;;;;;;;;;48258;:39::i;:::-;48229:3;;;;;:::i;:::-;;;;48197:112;;;;48009:307;;;;:::o;40529:278::-;29801:7;:19;29809:10;29801:19;;;;;;;;;;;;;;;;;;;;;;;;;29793:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;40621:21:::1;40645:69;:44;37697:66;40662:15;;40679:6;40687:1;40645:16;:44::i;:::-;:67;:69::i;:::-;40621:93;;40725:44;40743:10;40755:13;40725:17;:44::i;:::-;40782:17;40792:6;40782:9;:17::i;:::-;29864:1;40529:278:::0;;:::o;41300:481::-;29801:7;:19;29809:10;29801:19;;;;;;;;;;;;;;;;;;;;;;;;;29793:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;41431:1:::1;41415:6;;:13;;:17;41407:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;41505:21;41529:89;:64;37911:66;41546:20;;41568:6;;41575:1;41568:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;41579:6;;:13;;41529:16;:64::i;:::-;:87;:89::i;:::-;41505:113;;41629:44;41647:10;41659:13;41629:17;:44::i;:::-;41691:6;41686:88;41707:6;;:13;;41703:1;:17;41686:88;;;41742:20;41752:6;;41759:1;41752:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;41742;:20::i;:::-;41722:3;;;;;:::i;:::-;;;;41686:88;;;;29864:1;41300:481:::0;;;:::o;6583:95::-;6630:13;6663:7;6656:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6583:95;:::o;10713:377::-;10806:4;10823:24;10850:11;:25;10862:12;:10;:12::i;:::-;10850:25;;;;;;;;;;;;;;;:34;10876:7;10850:34;;;;;;;;;;;;;;;;10823:61;;10923:15;10903:16;:35;;10895:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;10991:67;11000:12;:10;:12::i;:::-;11014:7;11042:15;11023:16;:34;;;;:::i;:::-;10991:8;:67::i;:::-;11078:4;11071:11;;;10713:377;;;;:::o;7977:175::-;8063:4;8080:42;8090:12;:10;:12::i;:::-;8104:9;8115:6;8080:9;:42::i;:::-;8140:4;8133:11;;7977:175;;;;:::o;38556:21::-;;;;:::o;48324:329::-;48452:6;;:13;;48434:7;;:14;;:31;48426:88;;;;;;;;;;;;:::i;:::-;;;;;;;;;48530:6;48525:121;48546:7;;:14;;48542:1;:18;48525:121;;;48591:43;48600:10;48612:7;;48620:1;48612:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;48624:6;;48631:1;48624:9;;;;;;;;;;;;;;;;;;;;;48591:8;:43::i;:::-;48562:3;;;;;:::i;:::-;;;;48525:121;;;;48324:329;;;;:::o;48916:169::-;49009:12;49041:36;49058:3;49063:6;49071:5;;49041:16;:36::i;:::-;49034:43;;48916:169;;;;;;:::o;31415:138::-;29801:7;:19;29809:10;29801:19;;;;;;;;;;;;;;;;;;;;;;;;;29793:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;31495:14:::1;:32;;;31528:10;31540:4;31495:50;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;31415:138:::0;:::o;41851:393::-;29801:7;:19;29809:10;29801:19;;;;;;;;;;;;;;;;;;;;;;;;;29793:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;41959:16:::1;41968:6;41959:8;:16::i;:::-;41951:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;42038:21;42062:74;:49;38107:66;42079:20;;42101:6;42109:1;42062:16;:49::i;:::-;:72;:74::i;:::-;42038:98;;42147:44;42165:10;42177:13;42147:17;:44::i;:::-;42204:32;42210:6;42218:17;42228:6;42218:9;:17::i;:::-;42204:5;:32::i;:::-;29864:1;41851:393:::0;;:::o;47617:294::-;47719:12;47744:37;47753:10;47765:7;47774:6;47744:8;:37::i;:::-;47816:7;47792:48;;;47841:10;47853:6;47869:4;47876;;47792:89;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47899:4;47892:11;;47617:294;;;;;;:::o;46913:244::-;29801:7;:19;29809:10;29801:19;;;;;;;;;;;;;;;;;;;;;;;;;29793:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;47029:15:::1;47047:14;:24;;;47080:4;47047:39;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;47029:57;;47097:14;:23;;;47121:18;47141:7;47097:52;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;29864:1;46913:244:::0;;:::o;40183:274::-;29801:7;:19;29809:10;29801:19;;;;;;;;;;;;;;;;;;;;;;;;;29793:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;40273:21:::1;40297:69;:44;37697:66;40314:15;;40331:6;40339:1;40297:16;:44::i;:::-;:67;:69::i;:::-;40273:93;;40377:44;40395:10;40407:13;40377:17;:44::i;:::-;40434:15;40442:6;40434:7;:15::i;:::-;29864:1;40183:274:::0;;:::o;8215:151::-;8304:7;8331:11;:18;8343:5;8331:18;;;;;;;;;;;;;;;:27;8350:7;8331:27;;;;;;;;;;;;;;;;8324:34;;8215:151;;;;:::o;30148:102::-;30203:4;30227:7;:15;30235:6;30227:15;;;;;;;;;;;;;;;;;;;;;;;;;30220:22;;30148:102;;;:::o;42331:339::-;29801:7;:19;29809:10;29801:19;;;;;;;;;;;;;;;;;;;;;;;;;29793:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;42434:21:::1;42458:78;:53;38310:66;42475:24;;42501:6;42509:1;42458:16;:53::i;:::-;:76;:78::i;:::-;42434:102;;42547:44;42565:10;42577:13;42547:17;:44::i;:::-;42604:15;42612:6;42604:7;:15::i;:::-;42630:32;42636:6;42644:17;42654:6;42644:9;:17::i;:::-;42630:5;:32::i;:::-;29864:1;42331:339:::0;;:::o;30897:197::-;29801:7;:19;29809:10;29801:19;;;;;;;;;;;;;;;;;;;;;;;;;29793:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;30974:15:::1;30992:14;:24;;;31025:4;30992:39;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30974:57;;31042:14;:23;;;31066:10;31078:7;31042:44;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;29864:1;30897:197:::0;:::o;43602:205::-;43698:7;43760:4;43767:8;43777:6;43785:5;43792;;43735:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;43725:74;;;;;;43718:81;;43602:205;;;;;:::o;28159:269::-;28228:7;28414:4;28361:58;;;;;;;;:::i;:::-;;;;;;;;;;;;;28351:69;;;;;;28344:76;;28159:269;;;:::o;44769:909::-;44895:1;44874:10;:17;:22;;44866:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;44953:26;45016:1;44996:10;:17;:21;;;;:::i;:::-;44982:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44953:65;;45044:10;45029:9;45039:1;45029:12;;;;;;;;;;;;;;;;;;;;;:25;;;;;;;;;;;45070:20;45079:10;45070:20;;;;;;:::i;:::-;;;;;;;;45108:6;45103:462;45124:10;:17;45120:1;:21;45103:462;;;45163:12;45178:36;45200:10;45211:1;45200:13;;;;;;;;;;;;;;;;;;;;;;45178;:21;;:36;;;;:::i;:::-;45163:51;;45237:14;45246:4;45237:8;:14::i;:::-;45229:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;45324:6;45319:161;45340:9;:16;45336:1;:20;45319:161;;;45406:4;45390:20;;:9;45400:1;45390:12;;;;;;;;;;;;;;;;;;;;;;:20;;;;45382:82;;;;;;;;;;;;:::i;:::-;;;;;;;;;45358:3;;;;;:::i;:::-;;;;45319:161;;;;45515:4;45496:9;45510:1;45506;:5;;;;:::i;:::-;45496:16;;;;;;;;;;;;;;;;;;;;;:23;;;;;;;;;;;45539:14;45548:4;45539:14;;;;;;:::i;:::-;;;;;;;;45103:462;45143:3;;;;;:::i;:::-;;;;45103:462;;;;45605:1;45585:9;:16;:21;;45577:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;45663:5;;:7;;;;;;;;;:::i;:::-;;;;;;44769:909;;;:::o;12466:338::-;12569:1;12550:21;;:7;:21;;;;12542:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;12620:49;12649:1;12653:7;12662:6;12620:20;:49::i;:::-;12698:6;12682:12;;:22;;;;;;;:::i;:::-;;;;;;;;12737:6;12715:9;:18;12725:7;12715:18;;;;;;;;;;;;;;;;:28;;;;;;;:::i;:::-;;;;;;;;12780:7;12759:37;;12776:1;12759:37;;;12789:6;12759:37;;;;;;:::i;:::-;;;;;;;;12466:338;;:::o;4068:98::-;4121:7;4148:10;4141:17;;4068:98;:::o;14069:346::-;14188:1;14171:19;;:5;:19;;;;14163:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14269:1;14250:21;;:7;:21;;;;14242:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14353:6;14323:11;:18;14335:5;14323:18;;;;;;;;;;;;;;;:27;14342:7;14323:27;;;;;;;;;;;;;;;:36;;;;14391:7;14375:32;;14384:5;14375:32;;;14400:6;14375:32;;;;;;:::i;:::-;;;;;;;;14069:346;;;:::o;11580:604::-;11704:1;11686:20;;:6;:20;;;;11678:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;11788:1;11767:23;;:9;:23;;;;11759:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;11843:47;11864:6;11872:9;11883:6;11843:20;:47::i;:::-;11903:21;11927:9;:17;11937:6;11927:17;;;;;;;;;;;;;;;;11903:41;;11980:6;11963:13;:23;;11955:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;12076:6;12060:13;:22;;;;:::i;:::-;12040:9;:17;12050:6;12040:17;;;;;;;;;;;;;;;:42;;;;12117:6;12093:9;:20;12103:9;12093:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;12158:9;12141:35;;12150:6;12141:35;;;12169:6;12141:35;;;;;;:::i;:::-;;;;;;;;11580:604;;;;:::o;49926:287::-;49984:16;50013:11;50161:5;50149:18;50139:28;;50204:1;50195:6;:10;50188:17;;;49926:287;;;:::o;13137:494::-;13240:1;13221:21;;:7;:21;;;;13213:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;13293:49;13314:7;13331:1;13335:6;13293:20;:49::i;:::-;13355:22;13380:9;:18;13390:7;13380:18;;;;;;;;;;;;;;;;13355:43;;13435:6;13417:14;:24;;13409:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;13529:6;13512:14;:23;;;;:::i;:::-;13491:9;:18;13501:7;13491:18;;;;;;;;;;;;;;;:44;;;;13562:6;13546:12;;:22;;;;;;;:::i;:::-;;;;;;;;13612:1;13586:37;;13595:7;13586:37;;;13616:6;13586:37;;;;;;:::i;:::-;;;;;;;;13137:494;;;:::o;35892:118::-;35418:8;:6;:8::i;:::-;35417:9;35409:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;35962:4:::1;35952:7;;:14;;;;;;;;;;;;;;;;;;35982:20;35989:12;:10;:12::i;:::-;35982:20;;;;;;:::i;:::-;;;;;;;;35892:118::o:0;36151:120::-;35695:8;:6;:8::i;:::-;35687:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;36220:5:::1;36210:7;;:15;;;;;;;;;;;;;;;;;;36241:22;36250:12;:10;:12::i;:::-;36241:22;;;;;;:::i;:::-;;;;;;;;36151:120::o:0;30258:200::-;30320:7;:15;30328:6;30320:15;;;;;;;;;;;;;;;;;;;;;;;;;30319:16;30311:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;30416:4;30398:7;:15;30406:6;30398:15;;;;;;;;;;;;;;;;:22;;;;;;;;;;;;;;;;;;30436:14;30443:6;30436:14;;;;;;:::i;:::-;;;;;;;;30258:200;:::o;30607:199::-;30670:7;:15;30678:6;30670:15;;;;;;;;;;;;;;;;;;;;;;;;;30662:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;30751:7;:15;30759:6;30751:15;;;;;;;;;;;;;;;;30744:22;;;;;;;;;;;30782:16;30791:6;30782:16;;;;;;:::i;:::-;;;;;;;;30607:199;:::o;25538:761::-;25616:7;25699:2;25679:9;:16;:22;25675:96;;25718:41;;;;;;;;;;:::i;:::-;;;;;;;;25675:96;25840:9;25860;25880:7;26132:4;26121:9;26117:20;26111:27;26106:32;;26178:4;26167:9;26163:20;26157:27;26152:32;;26232:4;26221:9;26217:20;26211:27;26208:1;26203:36;26198:41;;26269:22;26277:4;26283:1;26286;26289;26269:7;:22::i;:::-;26262:29;;;;;25538:761;;;;:::o;44129:460::-;44258:44;44285:4;44291:2;44295:6;44258:26;:44::i;:::-;44337:4;44323:19;;:2;:19;;;;44315:86;;;;;;;;;;;;:::i;:::-;;;;;;;;;44421:8;:6;:8::i;:::-;44420:9;44412:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;44498:14;44507:4;44498:8;:14::i;:::-;44497:15;:37;;;;44530:3;44516:18;;:2;:18;;;44497:37;44489:92;;;;;;;;;;;;:::i;:::-;;;;;;;;;44129:460;;;:::o;26453:1432::-;26538:7;27463:66;27457:1;27449:10;;:80;;27441:127;;;;;;;;;;;;:::i;:::-;;;;;;;;;27592:2;27587:1;:7;;;:18;;;;27603:2;27598:1;:7;;;27587:18;27579:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;27742:14;27759:24;27769:4;27775:1;27778;27781;27759:24;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27742:41;;27820:1;27802:20;;:6;:20;;;;27794:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;27871:6;27864:13;;;26453:1432;;;;;;:::o;33785:316::-;33894:44;33921:4;33927:2;33931:6;33894:26;:44::i;:::-;33971:1;33955:18;;:4;:18;;;33951:143;;;34047:5;:3;:5::i;:::-;34037:6;34021:13;:11;:13::i;:::-;:22;;;;:::i;:::-;:31;;34013:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;33951:143;33785:316;;;:::o;15018:92::-;;;;:::o;22:613:1:-;;152:90;168:73;234:6;168:73;:::i;:::-;152:90;:::i;:::-;143:99;;262:5;290:6;283:5;276:21;316:4;309:5;305:16;298:23;;341:6;372:1;357:272;382:6;379:1;376:13;357:272;;;474:3;461:17;453:6;449:30;504:46;546:3;534:10;504:46;:::i;:::-;499:3;492:59;580:4;575:3;571:14;564:21;;614:4;609:3;605:14;598:21;;417:212;404:1;401;397:9;392:14;;357:272;;;361:14;133:502;;;;;;;:::o;641:343::-;;743:65;759:48;800:6;759:48;:::i;:::-;743:65;:::i;:::-;734:74;;831:6;824:5;817:21;869:4;862:5;858:16;907:3;898:6;893:3;889:16;886:25;883:2;;;924:1;921;914:12;883:2;937:41;971:6;966:3;961;937:41;:::i;:::-;724:260;;;;;;:::o;990:139::-;;1074:6;1061:20;1052:29;;1090:33;1117:5;1090:33;:::i;:::-;1042:87;;;;:::o;1135:155::-;;1227:6;1214:20;1205:29;;1243:41;1278:5;1243:41;:::i;:::-;1195:95;;;;:::o;1313:367::-;;;1446:3;1439:4;1431:6;1427:17;1423:27;1413:2;;1464:1;1461;1454:12;1413:2;1500:6;1487:20;1477:30;;1530:18;1522:6;1519:30;1516:2;;;1562:1;1559;1552:12;1516:2;1599:4;1591:6;1587:17;1575:29;;1653:3;1645:4;1637:6;1633:17;1623:8;1619:32;1616:41;1613:2;;;1670:1;1667;1660:12;1613:2;1403:277;;;;;:::o;1701:321::-;;1830:3;1823:4;1815:6;1811:17;1807:27;1797:2;;1848:1;1845;1838:12;1797:2;1888:6;1875:20;1913:103;2012:3;2004:6;1997:4;1989:6;1985:17;1913:103;:::i;:::-;1904:112;;1787:235;;;;;:::o;2045:367::-;;;2178:3;2171:4;2163:6;2159:17;2155:27;2145:2;;2196:1;2193;2186:12;2145:2;2232:6;2219:20;2209:30;;2262:18;2254:6;2251:30;2248:2;;;2294:1;2291;2284:12;2248:2;2331:4;2323:6;2319:17;2307:29;;2385:3;2377:4;2369:6;2365:17;2355:8;2351:32;2348:41;2345:2;;;2402:1;2399;2392:12;2345:2;2135:277;;;;;:::o;2418:137::-;;2503:6;2497:13;2488:22;;2519:30;2543:5;2519:30;:::i;:::-;2478:77;;;;:::o;2561:139::-;;2645:6;2632:20;2623:29;;2661:33;2688:5;2661:33;:::i;:::-;2613:87;;;;:::o;2719:351::-;;;2836:3;2829:4;2821:6;2817:17;2813:27;2803:2;;2854:1;2851;2844:12;2803:2;2890:6;2877:20;2867:30;;2920:18;2912:6;2909:30;2906:2;;;2952:1;2949;2942:12;2906:2;2989:4;2981:6;2977:17;2965:29;;3043:3;3035:4;3027:6;3023:17;3013:8;3009:32;3006:41;3003:2;;;3060:1;3057;3050:12;3003:2;2793:277;;;;;:::o;3089:271::-;;3193:3;3186:4;3178:6;3174:17;3170:27;3160:2;;3211:1;3208;3201:12;3160:2;3251:6;3238:20;3276:78;3350:3;3342:6;3335:4;3327:6;3323:17;3276:78;:::i;:::-;3267:87;;3150:210;;;;;:::o;3366:171::-;;3466:6;3453:20;3444:29;;3482:49;3525:5;3482:49;:::i;:::-;3434:103;;;;:::o;3543:165::-;;3640:6;3627:20;3618:29;;3656:46;3696:5;3656:46;:::i;:::-;3608:100;;;;:::o;3714:169::-;;3813:6;3800:20;3791:29;;3829:48;3871:5;3829:48;:::i;:::-;3781:102;;;;:::o;3889:139::-;;3973:6;3960:20;3951:29;;3989:33;4016:5;3989:33;:::i;:::-;3941:87;;;;:::o;4034:143::-;;4122:6;4116:13;4107:22;;4138:33;4165:5;4138:33;:::i;:::-;4097:80;;;;:::o;4183:262::-;;4291:2;4279:9;4270:7;4266:23;4262:32;4259:2;;;4307:1;4304;4297:12;4259:2;4350:1;4375:53;4420:7;4411:6;4400:9;4396:22;4375:53;:::i;:::-;4365:63;;4321:117;4249:196;;;;:::o;4451:278::-;;4567:2;4555:9;4546:7;4542:23;4538:32;4535:2;;;4583:1;4580;4573:12;4535:2;4626:1;4651:61;4704:7;4695:6;4684:9;4680:22;4651:61;:::i;:::-;4641:71;;4597:125;4525:204;;;;:::o;4735:407::-;;;4860:2;4848:9;4839:7;4835:23;4831:32;4828:2;;;4876:1;4873;4866:12;4828:2;4919:1;4944:53;4989:7;4980:6;4969:9;4965:22;4944:53;:::i;:::-;4934:63;;4890:117;5046:2;5072:53;5117:7;5108:6;5097:9;5093:22;5072:53;:::i;:::-;5062:63;;5017:118;4818:324;;;;;:::o;5148:552::-;;;;5290:2;5278:9;5269:7;5265:23;5261:32;5258:2;;;5306:1;5303;5296:12;5258:2;5349:1;5374:53;5419:7;5410:6;5399:9;5395:22;5374:53;:::i;:::-;5364:63;;5320:117;5476:2;5502:53;5547:7;5538:6;5527:9;5523:22;5502:53;:::i;:::-;5492:63;;5447:118;5604:2;5630:53;5675:7;5666:6;5655:9;5651:22;5630:53;:::i;:::-;5620:63;;5575:118;5248:452;;;;;:::o;5706:568::-;;;5865:2;5853:9;5844:7;5840:23;5836:32;5833:2;;;5881:1;5878;5871:12;5833:2;5924:1;5949:53;5994:7;5985:6;5974:9;5970:22;5949:53;:::i;:::-;5939:63;;5895:117;6079:2;6068:9;6064:18;6051:32;6110:18;6102:6;6099:30;6096:2;;;6142:1;6139;6132:12;6096:2;6170:87;6249:7;6240:6;6229:9;6225:22;6170:87;:::i;:::-;6160:97;;6022:245;5823:451;;;;;:::o;6280:407::-;;;6405:2;6393:9;6384:7;6380:23;6376:32;6373:2;;;6421:1;6418;6411:12;6373:2;6464:1;6489:53;6534:7;6525:6;6514:9;6510:22;6489:53;:::i;:::-;6479:63;;6435:117;6591:2;6617:53;6662:7;6653:6;6642:9;6638:22;6617:53;:::i;:::-;6607:63;;6562:118;6363:324;;;;;:::o;6693:713::-;;;;6869:2;6857:9;6848:7;6844:23;6840:32;6837:2;;;6885:1;6882;6875:12;6837:2;6928:1;6953:53;6998:7;6989:6;6978:9;6974:22;6953:53;:::i;:::-;6943:63;;6899:117;7055:2;7081:53;7126:7;7117:6;7106:9;7102:22;7081:53;:::i;:::-;7071:63;;7026:118;7211:2;7200:9;7196:18;7183:32;7242:18;7234:6;7231:30;7228:2;;;7274:1;7271;7264:12;7228:2;7302:87;7381:7;7372:6;7361:9;7357:22;7302:87;:::i;:::-;7292:97;;7154:245;6827:579;;;;;:::o;7412:683::-;;;;;7573:2;7561:9;7552:7;7548:23;7544:32;7541:2;;;7589:1;7586;7579:12;7541:2;7632:1;7657:53;7702:7;7693:6;7682:9;7678:22;7657:53;:::i;:::-;7647:63;;7603:117;7759:2;7785:53;7830:7;7821:6;7810:9;7806:22;7785:53;:::i;:::-;7775:63;;7730:118;7915:2;7904:9;7900:18;7887:32;7946:18;7938:6;7935:30;7932:2;;;7978:1;7975;7968:12;7932:2;8014:64;8070:7;8061:6;8050:9;8046:22;8014:64;:::i;:::-;7996:82;;;;7858:230;7531:564;;;;;;;:::o;8101:731::-;;;;8295:2;8283:9;8274:7;8270:23;8266:32;8263:2;;;8311:1;8308;8301:12;8263:2;8382:1;8371:9;8367:17;8354:31;8412:18;8404:6;8401:30;8398:2;;;8444:1;8441;8434:12;8398:2;8480:80;8552:7;8543:6;8532:9;8528:22;8480:80;:::i;:::-;8462:98;;;;8325:245;8637:2;8626:9;8622:18;8609:32;8668:18;8660:6;8657:30;8654:2;;;8700:1;8697;8690:12;8654:2;8728:87;8807:7;8798:6;8787:9;8783:22;8728:87;:::i;:::-;8718:97;;8580:245;8253:579;;;;;:::o;8838:733::-;;;;;9033:2;9021:9;9012:7;9008:23;9004:32;9001:2;;;9049:1;9046;9039:12;9001:2;9120:1;9109:9;9105:17;9092:31;9150:18;9142:6;9139:30;9136:2;;;9182:1;9179;9172:12;9136:2;9218:80;9290:7;9281:6;9270:9;9266:22;9218:80;:::i;:::-;9200:98;;;;9063:245;9375:2;9364:9;9360:18;9347:32;9406:18;9398:6;9395:30;9392:2;;;9438:1;9435;9428:12;9392:2;9474:80;9546:7;9537:6;9526:9;9522:22;9474:80;:::i;:::-;9456:98;;;;9318:246;8991:580;;;;;;;:::o;9577:1039::-;;;;;;9823:2;9811:9;9802:7;9798:23;9794:32;9791:2;;;9839:1;9836;9829:12;9791:2;9910:1;9899:9;9895:17;9882:31;9940:18;9932:6;9929:30;9926:2;;;9972:1;9969;9962:12;9926:2;10008:80;10080:7;10071:6;10060:9;10056:22;10008:80;:::i;:::-;9990:98;;;;9853:245;10165:2;10154:9;10150:18;10137:32;10196:18;10188:6;10185:30;10182:2;;;10228:1;10225;10218:12;10182:2;10264:80;10336:7;10327:6;10316:9;10312:22;10264:80;:::i;:::-;10246:98;;;;10108:246;10421:2;10410:9;10406:18;10393:32;10452:18;10444:6;10441:30;10438:2;;;10484:1;10481;10474:12;10438:2;10512:87;10591:7;10582:6;10571:9;10567:22;10512:87;:::i;:::-;10502:97;;10364:245;9781:835;;;;;;;;:::o;10622:423::-;;10764:2;10752:9;10743:7;10739:23;10735:32;10732:2;;;10780:1;10777;10770:12;10732:2;10851:1;10840:9;10836:17;10823:31;10881:18;10873:6;10870:30;10867:2;;;10913:1;10910;10903:12;10867:2;10941:87;11020:7;11011:6;11000:9;10996:22;10941:87;:::i;:::-;10931:97;;10794:244;10722:323;;;;:::o;11051:278::-;;11167:2;11155:9;11146:7;11142:23;11138:32;11135:2;;;11183:1;11180;11173:12;11135:2;11226:1;11251:61;11304:7;11295:6;11284:9;11280:22;11251:61;:::i;:::-;11241:71;;11197:125;11125:204;;;;:::o;11335:552::-;;;;11477:2;11465:9;11456:7;11452:23;11448:32;11445:2;;;11493:1;11490;11483:12;11445:2;11536:1;11561:53;11606:7;11597:6;11586:9;11582:22;11561:53;:::i;:::-;11551:63;;11507:117;11663:2;11689:53;11734:7;11725:6;11714:9;11710:22;11689:53;:::i;:::-;11679:63;;11634:118;11791:2;11817:53;11862:7;11853:6;11842:9;11838:22;11817:53;:::i;:::-;11807:63;;11762:118;11435:452;;;;;:::o;11893:294::-;;12017:2;12005:9;11996:7;11992:23;11988:32;11985:2;;;12033:1;12030;12023:12;11985:2;12076:1;12101:69;12162:7;12153:6;12142:9;12138:22;12101:69;:::i;:::-;12091:79;;12047:133;11975:212;;;;:::o;12193:288::-;;12314:2;12302:9;12293:7;12289:23;12285:32;12282:2;;;12330:1;12327;12320:12;12282:2;12373:1;12398:66;12456:7;12447:6;12436:9;12432:22;12398:66;:::i;:::-;12388:76;;12344:130;12272:209;;;;:::o;12487:433::-;;;12625:2;12613:9;12604:7;12600:23;12596:32;12593:2;;;12641:1;12638;12631:12;12593:2;12684:1;12709:66;12767:7;12758:6;12747:9;12743:22;12709:66;:::i;:::-;12699:76;;12655:130;12824:2;12850:53;12895:7;12886:6;12875:9;12871:22;12850:53;:::i;:::-;12840:63;;12795:118;12583:337;;;;;:::o;12926:292::-;;13049:2;13037:9;13028:7;13024:23;13020:32;13017:2;;;13065:1;13062;13055:12;13017:2;13108:1;13133:68;13193:7;13184:6;13173:9;13169:22;13133:68;:::i;:::-;13123:78;;13079:132;13007:211;;;;:::o;13224:262::-;;13332:2;13320:9;13311:7;13307:23;13303:32;13300:2;;;13348:1;13345;13338:12;13300:2;13391:1;13416:53;13461:7;13452:6;13441:9;13437:22;13416:53;:::i;:::-;13406:63;;13362:117;13290:196;;;;:::o;13492:284::-;;13611:2;13599:9;13590:7;13586:23;13582:32;13579:2;;;13627:1;13624;13617:12;13579:2;13670:1;13695:64;13751:7;13742:6;13731:9;13727:22;13695:64;:::i;:::-;13685:74;;13641:128;13569:207;;;;:::o;13782:118::-;13869:24;13887:5;13869:24;:::i;:::-;13864:3;13857:37;13847:53;;:::o;13906:157::-;14011:45;14031:24;14049:5;14031:24;:::i;:::-;14011:45;:::i;:::-;14006:3;13999:58;13989:74;;:::o;14069:109::-;14150:21;14165:5;14150:21;:::i;:::-;14145:3;14138:34;14128:50;;:::o;14184:118::-;14271:24;14289:5;14271:24;:::i;:::-;14266:3;14259:37;14249:53;;:::o;14308:157::-;14413:45;14433:24;14451:5;14433:24;:::i;:::-;14413:45;:::i;:::-;14408:3;14401:58;14391:74;;:::o;14493:301::-;;14610:70;14673:6;14668:3;14610:70;:::i;:::-;14603:77;;14690:43;14726:6;14721:3;14714:5;14690:43;:::i;:::-;14758:29;14780:6;14758:29;:::i;:::-;14753:3;14749:39;14742:46;;14593:201;;;;;:::o;14800:364::-;;14916:39;14949:5;14916:39;:::i;:::-;14971:71;15035:6;15030:3;14971:71;:::i;:::-;14964:78;;15051:52;15096:6;15091:3;15084:4;15077:5;15073:16;15051:52;:::i;:::-;15128:29;15150:6;15128:29;:::i;:::-;15123:3;15119:39;15112:46;;14892:272;;;;;:::o;15170:366::-;;15333:67;15397:2;15392:3;15333:67;:::i;:::-;15326:74;;15409:93;15498:3;15409:93;:::i;:::-;15527:2;15522:3;15518:12;15511:19;;15316:220;;;:::o;15542:366::-;;15705:67;15769:2;15764:3;15705:67;:::i;:::-;15698:74;;15781:93;15870:3;15781:93;:::i;:::-;15899:2;15894:3;15890:12;15883:19;;15688:220;;;:::o;15914:366::-;;16077:67;16141:2;16136:3;16077:67;:::i;:::-;16070:74;;16153:93;16242:3;16153:93;:::i;:::-;16271:2;16266:3;16262:12;16255:19;;16060:220;;;:::o;16286:366::-;;16449:67;16513:2;16508:3;16449:67;:::i;:::-;16442:74;;16525:93;16614:3;16525:93;:::i;:::-;16643:2;16638:3;16634:12;16627:19;;16432:220;;;:::o;16658:366::-;;16821:67;16885:2;16880:3;16821:67;:::i;:::-;16814:74;;16897:93;16986:3;16897:93;:::i;:::-;17015:2;17010:3;17006:12;16999:19;;16804:220;;;:::o;17030:366::-;;17193:67;17257:2;17252:3;17193:67;:::i;:::-;17186:74;;17269:93;17358:3;17269:93;:::i;:::-;17387:2;17382:3;17378:12;17371:19;;17176:220;;;:::o;17402:366::-;;17565:67;17629:2;17624:3;17565:67;:::i;:::-;17558:74;;17641:93;17730:3;17641:93;:::i;:::-;17759:2;17754:3;17750:12;17743:19;;17548:220;;;:::o;17774:402::-;;17955:85;18037:2;18032:3;17955:85;:::i;:::-;17948:92;;18049:93;18138:3;18049:93;:::i;:::-;18167:2;18162:3;18158:12;18151:19;;17938:238;;;:::o;18182:366::-;;18345:67;18409:2;18404:3;18345:67;:::i;:::-;18338:74;;18421:93;18510:3;18421:93;:::i;:::-;18539:2;18534:3;18530:12;18523:19;;18328:220;;;:::o;18554:366::-;;18717:67;18781:2;18776:3;18717:67;:::i;:::-;18710:74;;18793:93;18882:3;18793:93;:::i;:::-;18911:2;18906:3;18902:12;18895:19;;18700:220;;;:::o;18926:366::-;;19089:67;19153:2;19148:3;19089:67;:::i;:::-;19082:74;;19165:93;19254:3;19165:93;:::i;:::-;19283:2;19278:3;19274:12;19267:19;;19072:220;;;:::o;19298:366::-;;19461:67;19525:2;19520:3;19461:67;:::i;:::-;19454:74;;19537:93;19626:3;19537:93;:::i;:::-;19655:2;19650:3;19646:12;19639:19;;19444:220;;;:::o;19670:366::-;;19833:67;19897:2;19892:3;19833:67;:::i;:::-;19826:74;;19909:93;19998:3;19909:93;:::i;:::-;20027:2;20022:3;20018:12;20011:19;;19816:220;;;:::o;20042:366::-;;20205:67;20269:2;20264:3;20205:67;:::i;:::-;20198:74;;20281:93;20370:3;20281:93;:::i;:::-;20399:2;20394:3;20390:12;20383:19;;20188:220;;;:::o;20414:366::-;;20577:67;20641:2;20636:3;20577:67;:::i;:::-;20570:74;;20653:93;20742:3;20653:93;:::i;:::-;20771:2;20766:3;20762:12;20755:19;;20560:220;;;:::o;20786:366::-;;20949:67;21013:2;21008:3;20949:67;:::i;:::-;20942:74;;21025:93;21114:3;21025:93;:::i;:::-;21143:2;21138:3;21134:12;21127:19;;20932:220;;;:::o;21158:366::-;;21321:67;21385:2;21380:3;21321:67;:::i;:::-;21314:74;;21397:93;21486:3;21397:93;:::i;:::-;21515:2;21510:3;21506:12;21499:19;;21304:220;;;:::o;21530:366::-;;21693:67;21757:2;21752:3;21693:67;:::i;:::-;21686:74;;21769:93;21858:3;21769:93;:::i;:::-;21887:2;21882:3;21878:12;21871:19;;21676:220;;;:::o;21902:366::-;;22065:67;22129:2;22124:3;22065:67;:::i;:::-;22058:74;;22141:93;22230:3;22141:93;:::i;:::-;22259:2;22254:3;22250:12;22243:19;;22048:220;;;:::o;22274:366::-;;22437:67;22501:2;22496:3;22437:67;:::i;:::-;22430:74;;22513:93;22602:3;22513:93;:::i;:::-;22631:2;22626:3;22622:12;22615:19;;22420:220;;;:::o;22646:366::-;;22809:67;22873:2;22868:3;22809:67;:::i;:::-;22802:74;;22885:93;22974:3;22885:93;:::i;:::-;23003:2;22998:3;22994:12;22987:19;;22792:220;;;:::o;23018:366::-;;23181:67;23245:2;23240:3;23181:67;:::i;:::-;23174:74;;23257:93;23346:3;23257:93;:::i;:::-;23375:2;23370:3;23366:12;23359:19;;23164:220;;;:::o;23390:366::-;;23553:67;23617:2;23612:3;23553:67;:::i;:::-;23546:74;;23629:93;23718:3;23629:93;:::i;:::-;23747:2;23742:3;23738:12;23731:19;;23536:220;;;:::o;23762:366::-;;23925:67;23989:2;23984:3;23925:67;:::i;:::-;23918:74;;24001:93;24090:3;24001:93;:::i;:::-;24119:2;24114:3;24110:12;24103:19;;23908:220;;;:::o;24134:366::-;;24297:67;24361:2;24356:3;24297:67;:::i;:::-;24290:74;;24373:93;24462:3;24373:93;:::i;:::-;24491:2;24486:3;24482:12;24475:19;;24280:220;;;:::o;24506:366::-;;24669:67;24733:2;24728:3;24669:67;:::i;:::-;24662:74;;24745:93;24834:3;24745:93;:::i;:::-;24863:2;24858:3;24854:12;24847:19;;24652:220;;;:::o;24878:366::-;;25041:67;25105:2;25100:3;25041:67;:::i;:::-;25034:74;;25117:93;25206:3;25117:93;:::i;:::-;25235:2;25230:3;25226:12;25219:19;;25024:220;;;:::o;25250:366::-;;25413:67;25477:2;25472:3;25413:67;:::i;:::-;25406:74;;25489:93;25578:3;25489:93;:::i;:::-;25607:2;25602:3;25598:12;25591:19;;25396:220;;;:::o;25622:366::-;;25785:67;25849:2;25844:3;25785:67;:::i;:::-;25778:74;;25861:93;25950:3;25861:93;:::i;:::-;25979:2;25974:3;25970:12;25963:19;;25768:220;;;:::o;25994:366::-;;26157:67;26221:2;26216:3;26157:67;:::i;:::-;26150:74;;26233:93;26322:3;26233:93;:::i;:::-;26351:2;26346:3;26342:12;26335:19;;26140:220;;;:::o;26366:366::-;;26529:67;26593:2;26588:3;26529:67;:::i;:::-;26522:74;;26605:93;26694:3;26605:93;:::i;:::-;26723:2;26718:3;26714:12;26707:19;;26512:220;;;:::o;26738:366::-;;26901:67;26965:2;26960:3;26901:67;:::i;:::-;26894:74;;26977:93;27066:3;26977:93;:::i;:::-;27095:2;27090:3;27086:12;27079:19;;26884:220;;;:::o;27110:366::-;;27273:67;27337:2;27332:3;27273:67;:::i;:::-;27266:74;;27349:93;27438:3;27349:93;:::i;:::-;27467:2;27462:3;27458:12;27451:19;;27256:220;;;:::o;27482:118::-;27569:24;27587:5;27569:24;:::i;:::-;27564:3;27557:37;27547:53;;:::o;27606:157::-;27711:45;27731:24;27749:5;27731:24;:::i;:::-;27711:45;:::i;:::-;27706:3;27699:58;27689:74;;:::o;27769:112::-;27852:22;27868:5;27852:22;:::i;:::-;27847:3;27840:35;27830:51;;:::o;27887:820::-;;28126:75;28197:3;28188:6;28126:75;:::i;:::-;28226:2;28221:3;28217:12;28210:19;;28239:75;28310:3;28301:6;28239:75;:::i;:::-;28339:2;28334:3;28330:12;28323:19;;28352:75;28423:3;28414:6;28352:75;:::i;:::-;28452:2;28447:3;28443:12;28436:19;;28465:75;28536:3;28527:6;28465:75;:::i;:::-;28565:2;28560:3;28556:12;28549:19;;28578:75;28649:3;28640:6;28578:75;:::i;:::-;28678:2;28673:3;28669:12;28662:19;;28698:3;28691:10;;28115:592;;;;;;;;:::o;28713:522::-;;28948:148;29092:3;28948:148;:::i;:::-;28941:155;;29106:75;29177:3;29168:6;29106:75;:::i;:::-;29206:2;29201:3;29197:12;29190:19;;29226:3;29219:10;;28930:305;;;;:::o;29241:222::-;;29372:2;29361:9;29357:18;29349:26;;29385:71;29453:1;29442:9;29438:17;29429:6;29385:71;:::i;:::-;29339:124;;;;:::o;29469:320::-;;29622:2;29611:9;29607:18;29599:26;;29635:71;29703:1;29692:9;29688:17;29679:6;29635:71;:::i;:::-;29716:66;29778:2;29767:9;29763:18;29754:6;29716:66;:::i;:::-;29589:200;;;;;:::o;29795:332::-;;29954:2;29943:9;29939:18;29931:26;;29967:71;30035:1;30024:9;30020:17;30011:6;29967:71;:::i;:::-;30048:72;30116:2;30105:9;30101:18;30092:6;30048:72;:::i;:::-;29921:206;;;;;:::o;30133:660::-;;30376:3;30365:9;30361:19;30353:27;;30390:71;30458:1;30447:9;30443:17;30434:6;30390:71;:::i;:::-;30471:72;30539:2;30528:9;30524:18;30515:6;30471:72;:::i;:::-;30553;30621:2;30610:9;30606:18;30597:6;30553:72;:::i;:::-;30672:9;30666:4;30662:20;30657:2;30646:9;30642:18;30635:48;30700:86;30781:4;30772:6;30764;30700:86;:::i;:::-;30692:94;;30343:450;;;;;;;;:::o;30799:549::-;;31014:2;31003:9;30999:18;30991:26;;31027:71;31095:1;31084:9;31080:17;31071:6;31027:71;:::i;:::-;31108:72;31176:2;31165:9;31161:18;31152:6;31108:72;:::i;:::-;31227:9;31221:4;31217:20;31212:2;31201:9;31197:18;31190:48;31255:86;31336:4;31327:6;31319;31255:86;:::i;:::-;31247:94;;30981:367;;;;;;;:::o;31354:210::-;;31479:2;31468:9;31464:18;31456:26;;31492:65;31554:1;31543:9;31539:17;31530:6;31492:65;:::i;:::-;31446:118;;;;:::o;31570:222::-;;31701:2;31690:9;31686:18;31678:26;;31714:71;31782:1;31771:9;31767:17;31758:6;31714:71;:::i;:::-;31668:124;;;;:::o;31798:545::-;;32009:3;31998:9;31994:19;31986:27;;32023:71;32091:1;32080:9;32076:17;32067:6;32023:71;:::i;:::-;32104:68;32168:2;32157:9;32153:18;32144:6;32104:68;:::i;:::-;32182:72;32250:2;32239:9;32235:18;32226:6;32182:72;:::i;:::-;32264;32332:2;32321:9;32317:18;32308:6;32264:72;:::i;:::-;31976:367;;;;;;;:::o;32349:313::-;;32500:2;32489:9;32485:18;32477:26;;32549:9;32543:4;32539:20;32535:1;32524:9;32520:17;32513:47;32577:78;32650:4;32641:6;32577:78;:::i;:::-;32569:86;;32467:195;;;;:::o;32668:419::-;;32872:2;32861:9;32857:18;32849:26;;32921:9;32915:4;32911:20;32907:1;32896:9;32892:17;32885:47;32949:131;33075:4;32949:131;:::i;:::-;32941:139;;32839:248;;;:::o;33093:419::-;;33297:2;33286:9;33282:18;33274:26;;33346:9;33340:4;33336:20;33332:1;33321:9;33317:17;33310:47;33374:131;33500:4;33374:131;:::i;:::-;33366:139;;33264:248;;;:::o;33518:419::-;;33722:2;33711:9;33707:18;33699:26;;33771:9;33765:4;33761:20;33757:1;33746:9;33742:17;33735:47;33799:131;33925:4;33799:131;:::i;:::-;33791:139;;33689:248;;;:::o;33943:419::-;;34147:2;34136:9;34132:18;34124:26;;34196:9;34190:4;34186:20;34182:1;34171:9;34167:17;34160:47;34224:131;34350:4;34224:131;:::i;:::-;34216:139;;34114:248;;;:::o;34368:419::-;;34572:2;34561:9;34557:18;34549:26;;34621:9;34615:4;34611:20;34607:1;34596:9;34592:17;34585:47;34649:131;34775:4;34649:131;:::i;:::-;34641:139;;34539:248;;;:::o;34793:419::-;;34997:2;34986:9;34982:18;34974:26;;35046:9;35040:4;35036:20;35032:1;35021:9;35017:17;35010:47;35074:131;35200:4;35074:131;:::i;:::-;35066:139;;34964:248;;;:::o;35218:419::-;;35422:2;35411:9;35407:18;35399:26;;35471:9;35465:4;35461:20;35457:1;35446:9;35442:17;35435:47;35499:131;35625:4;35499:131;:::i;:::-;35491:139;;35389:248;;;:::o;35643:419::-;;35847:2;35836:9;35832:18;35824:26;;35896:9;35890:4;35886:20;35882:1;35871:9;35867:17;35860:47;35924:131;36050:4;35924:131;:::i;:::-;35916:139;;35814:248;;;:::o;36068:419::-;;36272:2;36261:9;36257:18;36249:26;;36321:9;36315:4;36311:20;36307:1;36296:9;36292:17;36285:47;36349:131;36475:4;36349:131;:::i;:::-;36341:139;;36239:248;;;:::o;36493:419::-;;36697:2;36686:9;36682:18;36674:26;;36746:9;36740:4;36736:20;36732:1;36721:9;36717:17;36710:47;36774:131;36900:4;36774:131;:::i;:::-;36766:139;;36664:248;;;:::o;36918:419::-;;37122:2;37111:9;37107:18;37099:26;;37171:9;37165:4;37161:20;37157:1;37146:9;37142:17;37135:47;37199:131;37325:4;37199:131;:::i;:::-;37191:139;;37089:248;;;:::o;37343:419::-;;37547:2;37536:9;37532:18;37524:26;;37596:9;37590:4;37586:20;37582:1;37571:9;37567:17;37560:47;37624:131;37750:4;37624:131;:::i;:::-;37616:139;;37514:248;;;:::o;37768:419::-;;37972:2;37961:9;37957:18;37949:26;;38021:9;38015:4;38011:20;38007:1;37996:9;37992:17;37985:47;38049:131;38175:4;38049:131;:::i;:::-;38041:139;;37939:248;;;:::o;38193:419::-;;38397:2;38386:9;38382:18;38374:26;;38446:9;38440:4;38436:20;38432:1;38421:9;38417:17;38410:47;38474:131;38600:4;38474:131;:::i;:::-;38466:139;;38364:248;;;:::o;38618:419::-;;38822:2;38811:9;38807:18;38799:26;;38871:9;38865:4;38861:20;38857:1;38846:9;38842:17;38835:47;38899:131;39025:4;38899:131;:::i;:::-;38891:139;;38789:248;;;:::o;39043:419::-;;39247:2;39236:9;39232:18;39224:26;;39296:9;39290:4;39286:20;39282:1;39271:9;39267:17;39260:47;39324:131;39450:4;39324:131;:::i;:::-;39316:139;;39214:248;;;:::o;39468:419::-;;39672:2;39661:9;39657:18;39649:26;;39721:9;39715:4;39711:20;39707:1;39696:9;39692:17;39685:47;39749:131;39875:4;39749:131;:::i;:::-;39741:139;;39639:248;;;:::o;39893:419::-;;40097:2;40086:9;40082:18;40074:26;;40146:9;40140:4;40136:20;40132:1;40121:9;40117:17;40110:47;40174:131;40300:4;40174:131;:::i;:::-;40166:139;;40064:248;;;:::o;40318:419::-;;40522:2;40511:9;40507:18;40499:26;;40571:9;40565:4;40561:20;40557:1;40546:9;40542:17;40535:47;40599:131;40725:4;40599:131;:::i;:::-;40591:139;;40489:248;;;:::o;40743:419::-;;40947:2;40936:9;40932:18;40924:26;;40996:9;40990:4;40986:20;40982:1;40971:9;40967:17;40960:47;41024:131;41150:4;41024:131;:::i;:::-;41016:139;;40914:248;;;:::o;41168:419::-;;41372:2;41361:9;41357:18;41349:26;;41421:9;41415:4;41411:20;41407:1;41396:9;41392:17;41385:47;41449:131;41575:4;41449:131;:::i;:::-;41441:139;;41339:248;;;:::o;41593:419::-;;41797:2;41786:9;41782:18;41774:26;;41846:9;41840:4;41836:20;41832:1;41821:9;41817:17;41810:47;41874:131;42000:4;41874:131;:::i;:::-;41866:139;;41764:248;;;:::o;42018:419::-;;42222:2;42211:9;42207:18;42199:26;;42271:9;42265:4;42261:20;42257:1;42246:9;42242:17;42235:47;42299:131;42425:4;42299:131;:::i;:::-;42291:139;;42189:248;;;:::o;42443:419::-;;42647:2;42636:9;42632:18;42624:26;;42696:9;42690:4;42686:20;42682:1;42671:9;42667:17;42660:47;42724:131;42850:4;42724:131;:::i;:::-;42716:139;;42614:248;;;:::o;42868:419::-;;43072:2;43061:9;43057:18;43049:26;;43121:9;43115:4;43111:20;43107:1;43096:9;43092:17;43085:47;43149:131;43275:4;43149:131;:::i;:::-;43141:139;;43039:248;;;:::o;43293:419::-;;43497:2;43486:9;43482:18;43474:26;;43546:9;43540:4;43536:20;43532:1;43521:9;43517:17;43510:47;43574:131;43700:4;43574:131;:::i;:::-;43566:139;;43464:248;;;:::o;43718:419::-;;43922:2;43911:9;43907:18;43899:26;;43971:9;43965:4;43961:20;43957:1;43946:9;43942:17;43935:47;43999:131;44125:4;43999:131;:::i;:::-;43991:139;;43889:248;;;:::o;44143:419::-;;44347:2;44336:9;44332:18;44324:26;;44396:9;44390:4;44386:20;44382:1;44371:9;44367:17;44360:47;44424:131;44550:4;44424:131;:::i;:::-;44416:139;;44314:248;;;:::o;44568:419::-;;44772:2;44761:9;44757:18;44749:26;;44821:9;44815:4;44811:20;44807:1;44796:9;44792:17;44785:47;44849:131;44975:4;44849:131;:::i;:::-;44841:139;;44739:248;;;:::o;44993:419::-;;45197:2;45186:9;45182:18;45174:26;;45246:9;45240:4;45236:20;45232:1;45221:9;45217:17;45210:47;45274:131;45400:4;45274:131;:::i;:::-;45266:139;;45164:248;;;:::o;45418:419::-;;45622:2;45611:9;45607:18;45599:26;;45671:9;45665:4;45661:20;45657:1;45646:9;45642:17;45635:47;45699:131;45825:4;45699:131;:::i;:::-;45691:139;;45589:248;;;:::o;45843:419::-;;46047:2;46036:9;46032:18;46024:26;;46096:9;46090:4;46086:20;46082:1;46071:9;46067:17;46060:47;46124:131;46250:4;46124:131;:::i;:::-;46116:139;;46014:248;;;:::o;46268:222::-;;46399:2;46388:9;46384:18;46376:26;;46412:71;46480:1;46469:9;46465:17;46456:6;46412:71;:::i;:::-;46366:124;;;;:::o;46496:439::-;;46683:2;46672:9;46668:18;46660:26;;46696:71;46764:1;46753:9;46749:17;46740:6;46696:71;:::i;:::-;46814:9;46808:4;46804:20;46799:2;46788:9;46784:18;46777:48;46842:86;46923:4;46914:6;46906;46842:86;:::i;:::-;46834:94;;46650:285;;;;;;:::o;46941:214::-;;47068:2;47057:9;47053:18;47045:26;;47081:67;47145:1;47134:9;47130:17;47121:6;47081:67;:::i;:::-;47035:120;;;;:::o;47161:129::-;;47222:20;;:::i;:::-;47212:30;;47251:33;47279:4;47271:6;47251:33;:::i;:::-;47202:88;;;:::o;47296:75::-;;47362:2;47356:9;47346:19;;47336:35;:::o;47377:320::-;;47553:18;47545:6;47542:30;47539:2;;;47575:18;;:::i;:::-;47539:2;47625:4;47617:6;47613:17;47605:25;;47685:4;47679;47675:15;47667:23;;47468:229;;;:::o;47703:307::-;;47854:18;47846:6;47843:30;47840:2;;;47876:18;;:::i;:::-;47840:2;47914:29;47936:6;47914:29;:::i;:::-;47906:37;;47998:4;47992;47988:15;47980:23;;47769:241;;;:::o;48016:99::-;;48102:5;48096:12;48086:22;;48075:40;;;:::o;48121:168::-;;48238:6;48233:3;48226:19;48278:4;48273:3;48269:14;48254:29;;48216:73;;;;:::o;48295:169::-;;48413:6;48408:3;48401:19;48453:4;48448:3;48444:14;48429:29;;48391:73;;;;:::o;48470:148::-;;48609:3;48594:18;;48584:34;;;;:::o;48624:305::-;;48683:20;48701:1;48683:20;:::i;:::-;48678:25;;48717:20;48735:1;48717:20;:::i;:::-;48712:25;;48871:1;48803:66;48799:74;48796:1;48793:81;48790:2;;;48877:18;;:::i;:::-;48790:2;48921:1;48918;48914:9;48907:16;;48668:261;;;;:::o;48935:191::-;;48995:20;49013:1;48995:20;:::i;:::-;48990:25;;49029:20;49047:1;49029:20;:::i;:::-;49024:25;;49068:1;49065;49062:8;49059:2;;;49073:18;;:::i;:::-;49059:2;49118:1;49115;49111:9;49103:17;;48980:146;;;;:::o;49132:96::-;;49198:24;49216:5;49198:24;:::i;:::-;49187:35;;49177:51;;;:::o;49234:104::-;;49308:24;49326:5;49308:24;:::i;:::-;49297:35;;49287:51;;;:::o;49344:90::-;;49421:5;49414:13;49407:21;49396:32;;49386:48;;;:::o;49440:77::-;;49506:5;49495:16;;49485:32;;;:::o;49523:112::-;;49605:24;49623:5;49605:24;:::i;:::-;49594:35;;49584:51;;;:::o;49641:109::-;;49720:24;49738:5;49720:24;:::i;:::-;49709:35;;49699:51;;;:::o;49756:111::-;;49837:24;49855:5;49837:24;:::i;:::-;49826:35;;49816:51;;;:::o;49873:126::-;;49950:42;49943:5;49939:54;49928:65;;49918:81;;;:::o;50005:77::-;;50071:5;50060:16;;50050:32;;;:::o;50088:86::-;;50163:4;50156:5;50152:16;50141:27;;50131:43;;;:::o;50180:154::-;50264:6;50259:3;50254;50241:30;50326:1;50317:6;50312:3;50308:16;50301:27;50231:103;;;:::o;50340:307::-;50408:1;50418:113;50432:6;50429:1;50426:13;50418:113;;;50517:1;50512:3;50508:11;50502:18;50498:1;50493:3;50489:11;50482:39;50454:2;50451:1;50447:10;50442:15;;50418:113;;;50549:6;50546:1;50543:13;50540:2;;;50629:1;50620:6;50615:3;50611:16;50604:27;50540:2;50389:258;;;;:::o;50653:320::-;;50734:1;50728:4;50724:12;50714:22;;50781:1;50775:4;50771:12;50802:18;50792:2;;50858:4;50850:6;50846:17;50836:27;;50792:2;50920;50912:6;50909:14;50889:18;50886:38;50883:2;;;50939:18;;:::i;:::-;50883:2;50704:269;;;;:::o;50979:281::-;51062:27;51084:4;51062:27;:::i;:::-;51054:6;51050:40;51192:6;51180:10;51177:22;51156:18;51144:10;51141:34;51138:62;51135:2;;;51203:18;;:::i;:::-;51135:2;51243:10;51239:2;51232:22;51022:238;;;:::o;51266:233::-;;51328:24;51346:5;51328:24;:::i;:::-;51319:33;;51374:66;51367:5;51364:77;51361:2;;;51444:18;;:::i;:::-;51361:2;51491:1;51484:5;51480:13;51473:20;;51309:190;;;:::o;51505:100::-;;51573:26;51593:5;51573:26;:::i;:::-;51562:37;;51552:53;;;:::o;51611:79::-;;51679:5;51668:16;;51658:32;;;:::o;51696:94::-;;51764:20;51778:5;51764:20;:::i;:::-;51753:31;;51743:47;;;:::o;51796:79::-;;51864:5;51853:16;;51843:32;;;:::o;51881:180::-;51929:77;51926:1;51919:88;52026:4;52023:1;52016:15;52050:4;52047:1;52040:15;52067:180;52115:77;52112:1;52105:88;52212:4;52209:1;52202:15;52236:4;52233:1;52226:15;52253:180;52301:77;52298:1;52291:88;52398:4;52395:1;52388:15;52422:4;52419:1;52412:15;52439:102;;52531:2;52527:7;52522:2;52515:5;52511:14;52507:28;52497:38;;52487:54;;;:::o;52547:94::-;;52628:5;52624:2;52620:14;52599:35;;52589:52;;;:::o;52647:174::-;52787:26;52783:1;52775:6;52771:14;52764:50;52753:68;:::o;52827:234::-;52967:34;52963:1;52955:6;52951:14;52944:58;53036:17;53031:2;53023:6;53019:15;53012:42;52933:128;:::o;53067:222::-;53207:34;53203:1;53195:6;53191:14;53184:58;53276:5;53271:2;53263:6;53259:15;53252:30;53173:116;:::o;53295:170::-;53435:22;53431:1;53423:6;53419:14;53412:46;53401:64;:::o;53471:221::-;53611:34;53607:1;53599:6;53595:14;53588:58;53680:4;53675:2;53667:6;53663:15;53656:29;53577:115;:::o;53698:230::-;53838:34;53834:1;53826:6;53822:14;53815:58;53907:13;53902:2;53894:6;53890:15;53883:38;53804:124;:::o;53934:181::-;54074:33;54070:1;54062:6;54058:14;54051:57;54040:75;:::o;54121:214::-;54261:66;54257:1;54249:6;54245:14;54238:90;54227:108;:::o;54341:221::-;54481:34;54477:1;54469:6;54465:14;54458:58;54550:4;54545:2;54537:6;54533:15;54526:29;54447:115;:::o;54568:229::-;54708:34;54704:1;54696:6;54692:14;54685:58;54777:12;54772:2;54764:6;54760:15;54753:37;54674:123;:::o;54803:225::-;54943:34;54939:1;54931:6;54927:14;54920:58;55012:8;55007:2;54999:6;54995:15;54988:33;54909:119;:::o;55034:178::-;55174:30;55170:1;55162:6;55158:14;55151:54;55140:72;:::o;55218:241::-;55358:34;55354:1;55346:6;55342:14;55335:58;55427:24;55422:2;55414:6;55410:15;55403:49;55324:135;:::o;55465:221::-;55605:34;55601:1;55593:6;55589:14;55582:58;55674:4;55669:2;55661:6;55657:15;55650:29;55571:115;:::o;55692:232::-;55832:34;55828:1;55820:6;55816:14;55809:58;55901:15;55896:2;55888:6;55884:15;55877:40;55798:126;:::o;55930:166::-;56070:18;56066:1;56058:6;56054:14;56047:42;56036:60;:::o;56102:231::-;56242:34;56238:1;56230:6;56226:14;56219:58;56311:14;56306:2;56298:6;56294:15;56287:39;56208:125;:::o;56339:231::-;56479:34;56475:1;56467:6;56463:14;56456:58;56548:14;56543:2;56535:6;56531:15;56524:39;56445:125;:::o;56576:242::-;56716:34;56712:1;56704:6;56700:14;56693:58;56785:25;56780:2;56772:6;56768:15;56761:50;56682:136;:::o;56824:233::-;56964:34;56960:1;56952:6;56948:14;56941:58;57033:16;57028:2;57020:6;57016:15;57009:41;56930:127;:::o;57063:221::-;57203:34;57199:1;57191:6;57187:14;57180:58;57272:4;57267:2;57259:6;57255:15;57248:29;57169:115;:::o;57290:227::-;57430:34;57426:1;57418:6;57414:14;57407:58;57499:10;57494:2;57486:6;57482:15;57475:35;57396:121;:::o;57523:220::-;57663:34;57659:1;57651:6;57647:14;57640:58;57732:3;57727:2;57719:6;57715:15;57708:28;57629:114;:::o;57749:224::-;57889:34;57885:1;57877:6;57873:14;57866:58;57958:7;57953:2;57945:6;57941:15;57934:32;57855:118;:::o;57979:175::-;58119:27;58115:1;58107:6;58103:14;58096:51;58085:69;:::o;58160:223::-;58300:34;58296:1;58288:6;58284:14;58277:58;58369:6;58364:2;58356:6;58352:15;58345:31;58266:117;:::o;58389:226::-;58529:34;58525:1;58517:6;58513:14;58506:58;58598:9;58593:2;58585:6;58581:15;58574:34;58495:120;:::o;58621:234::-;58761:34;58757:1;58749:6;58745:14;58738:58;58830:17;58825:2;58817:6;58813:15;58806:42;58727:128;:::o;58861:222::-;59001:34;58997:1;58989:6;58985:14;58978:58;59070:5;59065:2;59057:6;59053:15;59046:30;58967:116;:::o;59089:236::-;59229:34;59225:1;59217:6;59213:14;59206:58;59298:19;59293:2;59285:6;59281:15;59274:44;59195:130;:::o;59331:227::-;59471:34;59467:1;59459:6;59455:14;59448:58;59540:10;59535:2;59527:6;59523:15;59516:35;59437:121;:::o;59564:224::-;59704:34;59700:1;59692:6;59688:14;59681:58;59773:7;59768:2;59760:6;59756:15;59749:32;59670:118;:::o;59794:181::-;59934:33;59930:1;59922:6;59918:14;59911:57;59900:75;:::o;59981:122::-;60054:24;60072:5;60054:24;:::i;:::-;60047:5;60044:35;60034:2;;60093:1;60090;60083:12;60034:2;60024:79;:::o;60109:138::-;60190:32;60216:5;60190:32;:::i;:::-;60183:5;60180:43;60170:2;;60237:1;60234;60227:12;60170:2;60160:87;:::o;60253:116::-;60323:21;60338:5;60323:21;:::i;:::-;60316:5;60313:32;60303:2;;60359:1;60356;60349:12;60303:2;60293:76;:::o;60375:122::-;60448:24;60466:5;60448:24;:::i;:::-;60441:5;60438:35;60428:2;;60487:1;60484;60477:12;60428:2;60418:79;:::o;60503:154::-;60592:40;60626:5;60592:40;:::i;:::-;60585:5;60582:51;60572:2;;60647:1;60644;60637:12;60572:2;60562:95;:::o;60663:148::-;60749:37;60780:5;60749:37;:::i;:::-;60742:5;60739:48;60729:2;;60801:1;60798;60791:12;60729:2;60719:92;:::o;60817:152::-;60905:39;60938:5;60905:39;:::i;:::-;60898:5;60895:50;60885:2;;60959:1;60956;60949:12;60885:2;60875:94;:::o;60975:122::-;61048:24;61066:5;61048:24;:::i;:::-;61041:5;61038:35;61028:2;;61087:1;61084;61077:12;61028:2;61018:79;:::o
Swarm Source
ipfs://b5a9bf50d6ab20fb6187e0977c4859ef104592e8af65af586f892117edccd45a
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.