Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 54 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Transfer From | 17890954 | 570 days ago | IN | 0 ETH | 0.00095835 | ||||
Transfer From | 17769793 | 587 days ago | IN | 0 ETH | 0.00123413 | ||||
Transfer From | 17727088 | 593 days ago | IN | 0 ETH | 0.00106535 | ||||
Transfer From | 17576851 | 614 days ago | IN | 0 ETH | 0.00111278 | ||||
Transfer From | 17435975 | 634 days ago | IN | 0 ETH | 0.00154128 | ||||
Air Drop | 17434348 | 634 days ago | IN | 0 ETH | 0.03923761 | ||||
Transfer From | 17371680 | 643 days ago | IN | 0 ETH | 0.00237618 | ||||
Transfer From | 17279385 | 656 days ago | IN | 0 ETH | 0.00241944 | ||||
Transfer From | 17279383 | 656 days ago | IN | 0 ETH | 0.00309816 | ||||
Transfer From | 17038537 | 690 days ago | IN | 0 ETH | 0.00169534 | ||||
Air Drop | 16988454 | 697 days ago | IN | 0 ETH | 0.03619316 | ||||
Air Drop | 16739414 | 732 days ago | IN | 0 ETH | 0.10054117 | ||||
Set Approval For... | 16534333 | 761 days ago | IN | 0 ETH | 0.0010994 | ||||
Set Approval For... | 16534296 | 761 days ago | IN | 0 ETH | 0.00099885 | ||||
Set Approval For... | 16534259 | 761 days ago | IN | 0 ETH | 0.00102618 | ||||
Set Approval For... | 16534216 | 761 days ago | IN | 0 ETH | 0.00101983 | ||||
Set Approval For... | 16534186 | 761 days ago | IN | 0 ETH | 0.00096114 | ||||
Set Approval For... | 16534157 | 761 days ago | IN | 0 ETH | 0.00109029 | ||||
Set Approval For... | 16534119 | 761 days ago | IN | 0 ETH | 0.00097189 | ||||
Set Approval For... | 16534098 | 761 days ago | IN | 0 ETH | 0.00089168 | ||||
Set Approval For... | 16534072 | 761 days ago | IN | 0 ETH | 0.00091751 | ||||
Set Approval For... | 16534024 | 761 days ago | IN | 0 ETH | 0.00099167 | ||||
Set Approval For... | 16533981 | 761 days ago | IN | 0 ETH | 0.00103641 | ||||
Set Approval For... | 16533933 | 761 days ago | IN | 0 ETH | 0.00085751 | ||||
Set Approval For... | 16533908 | 761 days ago | IN | 0 ETH | 0.00098596 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
XaraCity
Compiler Version
v0.8.15+commit.e14f2714
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-12-14 */ // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /* Fully commented standard ERC721 Distilled from OpenZeppelin Docs Base for Building ERC721 by Martin McConnell All the utility without the fluff. */ // OPENSEA REGISTRY CODE START interface IOperatorFilterRegistry { function isOperatorAllowed(address registrant, address operator) external view returns (bool); function register(address registrant) external; function registerAndSubscribe(address registrant, address subscription) external; function registerAndCopyEntries(address registrant, address registrantToCopy) external; function unregister(address addr) external; function updateOperator(address registrant, address operator, bool filtered) external; function updateOperators(address registrant, address[] calldata operators, bool filtered) external; function updateCodeHash(address registrant, bytes32 codehash, bool filtered) external; function updateCodeHashes(address registrant, bytes32[] calldata codeHashes, bool filtered) external; function subscribe(address registrant, address registrantToSubscribe) external; function unsubscribe(address registrant, bool copyExistingEntries) external; function subscriptionOf(address addr) external returns (address registrant); function subscribers(address registrant) external returns (address[] memory); function subscriberAt(address registrant, uint256 index) external returns (address); function copyEntriesOf(address registrant, address registrantToCopy) external; function isOperatorFiltered(address registrant, address operator) external returns (bool); function isCodeHashOfFiltered(address registrant, address operatorWithCode) external returns (bool); function isCodeHashFiltered(address registrant, bytes32 codeHash) external returns (bool); function filteredOperators(address addr) external returns (address[] memory); function filteredCodeHashes(address addr) external returns (bytes32[] memory); function filteredOperatorAt(address registrant, uint256 index) external returns (address); function filteredCodeHashAt(address registrant, uint256 index) external returns (bytes32); function isRegistered(address addr) external returns (bool); function codeHashOf(address addr) external returns (bytes32); } abstract contract OperatorFilterer { error OperatorNotAllowed(address operator); IOperatorFilterRegistry public constant OPERATOR_FILTER_REGISTRY = IOperatorFilterRegistry(0x000000000000AAeB6D7670E522A718067333cd4E); constructor(address subscriptionOrRegistrantToCopy, bool subscribe) { // If an inheriting token contract is deployed to a network without the registry deployed, the modifier // will not revert, but the contract will need to be registered with the registry once it is deployed in // order for the modifier to filter addresses. if (address(OPERATOR_FILTER_REGISTRY).code.length > 0) { if (subscribe) { OPERATOR_FILTER_REGISTRY.registerAndSubscribe(address(this), subscriptionOrRegistrantToCopy); } else { if (subscriptionOrRegistrantToCopy != address(0)) { OPERATOR_FILTER_REGISTRY.registerAndCopyEntries(address(this), subscriptionOrRegistrantToCopy); } else { OPERATOR_FILTER_REGISTRY.register(address(this)); } } } } modifier onlyAllowedOperator(address from) virtual { // Allow spending tokens from addresses with balance // Note that this still allows listings and marketplaces with escrow to transfer tokens if transferred // from an EOA. if (from != msg.sender) { _checkFilterOperator(msg.sender); } _; } modifier onlyAllowedOperatorApproval(address operator) virtual { _checkFilterOperator(operator); _; } function _checkFilterOperator(address operator) internal view virtual { // Check registry code length to facilitate testing in environments without a deployed registry. if (address(OPERATOR_FILTER_REGISTRY).code.length > 0) { if (!OPERATOR_FILTER_REGISTRY.isOperatorAllowed(address(this), operator)) { revert OperatorNotAllowed(operator); } } } } abstract contract DefaultOperatorFilterer is OperatorFilterer { address constant DEFAULT_SUBSCRIPTION = address(0x3cc6CddA760b79bAfa08dF41ECFA224f810dCeB6); constructor() OperatorFilterer(DEFAULT_SUBSCRIPTION, true) {} } // OPENSEA REGISTRY CODE END interface IERC165 { function supportsInterface(bytes4 interfaceId) external view returns (bool); } 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`. 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; } interface IERC721Metadata is IERC721 { //@dev Returns the token collection name. function name() external view returns (string memory); //@dev Returns the token collection symbol. function symbol() external view returns (string memory); //@dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. function tokenURI(uint256 tokenId) external view returns (string memory); } interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`. */ function onERC721Received(address operator, address from, uint256 tokenId, bytes calldata data) external returns (bytes4); } library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Addr: cant send val, rcpt revert"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Addr: low-level call value fail"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Addr: insufficient balance call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return _verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Addr: low-level static call fail"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Addr: static call non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return _verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Addr: low-level del call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Addr: delegate call non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return _verifyCallResult(success, returndata, errorMessage); } function _verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) private pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _setOwner(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _setOwner(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is 0x address"); _setOwner(newOwner); } function _setOwner(address newOwner) private { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } abstract contract Proxy is Ownable { mapping(address => bool) private _isProxy; constructor() { _isProxy[_msgSender()] = true; } function assignProxy(address newProxy) external onlyOwner { _isProxy[newProxy] = true; } function revokeProxy(address badProxy) external onlyOwner { _isProxy[badProxy] = false; } function isProxy(address checkProxy) external view returns (bool) { return _isProxy[checkProxy]; } modifier proxyAccess { require(_isProxy[_msgSender()]); _; } } abstract contract Functional { function toString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } bool private _reentryKey = false; modifier reentryLock { require(!_reentryKey, "attempt reenter locked function"); _reentryKey = true; _; _reentryKey = false; } } // ****************************************************************************************************************************** // ************************************************** Start of Main Contract *************************************************** // ****************************************************************************************************************************** contract XaraCity is DefaultOperatorFilterer, IERC721, Proxy, Functional { using Address for address; // Token name string private _name; // Token symbol string private _symbol; // URI Root Location for Json Files string private _baseURI; // Mapping from token ID to owner address mapping(uint256 => address) private _owners; // Mapping owner address to token count mapping(address => uint256) private _balances; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; // Specific Functionality bool public revealed; //for URI redirects uint256 public totalTokens; uint256 public numberMinted; address public payoutWallet; /** * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection. */ constructor() { // This smart contract will be proxy accessible by the market smart contract // which will handle all of the transactions for this contract. _name = "Xara City"; _symbol = "XaraB"; //B for buildings _baseURI = "https://bafybeihe32xfqkx2ysoohn3s62jf7bxnx73oa4kvmivnwof3noihehvcqm.ipfs.nftstorage.link/"; payoutWallet = 0x516e4BB39632690e674d36691264a6DcD7dF251E; totalTokens = 6000; } //@dev See {IERC165-supportsInterface}. Interfaces Supported by this Standard function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || interfaceId == type(IERC165).interfaceId || interfaceId == XaraCity.onERC721Received.selector; } // Standard Withdraw function for the owner to pull the contract function withdraw() external onlyOwner { uint256 sendAmount = address(this).balance; (bool success, ) = payoutWallet.call{value: sendAmount}(""); require(success, "Transaction Unsuccessful"); } function airDrop(address[] memory _to) external onlyOwner { uint256 qty = _to.length; require((numberMinted + qty) > numberMinted, "Math overflow error"); require((numberMinted + qty) <= totalTokens, "Cannot fill order"); uint256 mintSeedValue = numberMinted; for(uint256 i = 0; i < qty; i++) { _safeMint(_to[i], mintSeedValue + i); numberMinted ++; //increment here in case of gas overload } } // allows holders to burn their own tokens if desired function burn(uint256 tokenID) external { require(_msgSender() == ownerOf(tokenID)); _burn(tokenID); } /////////////////// Proxy Access for Staking ///////////////// function proxyTransfer(address _from, address _to, uint256 _tokenId) external proxyAccess { _transfer(_from, _to, _tokenId); } function proxyMint(address _to, uint256 _qty) external proxyAccess { // Checks and balances handled mostly by the proxy contract require((numberMinted + _qty) <= totalTokens, "Cannot fill order"); uint256 mintSeedValue = numberMinted; for(uint256 i = 0; i < _qty; i++) { _safeMint(_to, mintSeedValue + i); numberMinted++; } } ////////////////////////////////////////////////////////////// //////////////////// Setters and Getters ///////////////////// ////////////////////////////////////////////////////////////// function setPayoutWallet(address newWallet) external onlyOwner { payoutWallet = newWallet; } function setBaseURI(string memory newURI) public onlyOwner { _baseURI = newURI; } function setTotalTokens(uint256 numTokens) public onlyOwner { totalTokens = numTokens; } function totalSupply() external view returns (uint256) { return numberMinted; } function reveal() external onlyOwner { revealed = true; } function getBalance(address tokenAddress) view external returns (uint256) { //return _balances[tokenAddress]; //shows 0 on etherscan due to overflow error return _balances[tokenAddress] / (10**15); //temporary fix to report in finneys } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view virtual override returns (uint256) { require(owner != address(0), "ERC721: bal qry for zero address"); return _balances[owner]; } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view virtual override returns (address) { address owner = _owners[tokenId]; require(owner != address(0), "ERC721: own query nonexist tkn"); return owner; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override onlyAllowedOperatorApproval(to){ address owner = ownerOf(tokenId); require(to != owner, "ERC721: approval current owner"); require( msg.sender == owner || isApprovedForAll(owner, msg.sender), "ERC721: caller !owner/!approved" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { require(_exists(tokenId), "ERC721: approved nonexistent tkn"); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override onlyAllowedOperatorApproval(operator){ require(operator != msg.sender, "ERC721: approve to caller"); _operatorApprovals[msg.sender][operator] = approved; emit ApprovalForAll(msg.sender, operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override onlyAllowedOperator(from){ //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(msg.sender, tokenId), "ERC721: txfr !owner/approved"); _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override onlyAllowedOperator(from){ safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public virtual override onlyAllowedOperator(from){ require(_isApprovedOrOwner(msg.sender, tokenId), "ERC721: txfr !owner/approved"); _safeTransfer(from, to, tokenId, _data); } /** * @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. * * `_data` is additional data, it has no specified format and it is sent in call to `to`. * * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g. * implement alternative mechanisms to perform token transfer, such as signature-based. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeTransfer( address from, address to, uint256 tokenId, bytes memory _data ) internal virtual { _transfer(from, to, tokenId); require(_checkOnERC721Received(from, to, tokenId, _data), "txfr to non ERC721Reciever"); } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), * and stop existing when they are burned (`_burn`). */ function _exists(uint256 tokenId) internal view virtual returns (bool) { return _owners[tokenId] != address(0); } /** * @dev Returns whether `spender` is allowed to manage `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { require(_exists(tokenId), "ERC721: op query nonexistent tkn"); address owner = ownerOf(tokenId); return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender)); } /** * @dev Safely mints `tokenId` and transfers it to `to`. * * Requirements: * * - `tokenId` must not exist. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } /** * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ function _safeMint( address to, uint256 tokenId, bytes memory _data ) internal virtual { _mint(to, tokenId); require( _checkOnERC721Received(address(0), to, tokenId, _data), "txfr to non ERC721Reciever" ); } /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); _beforeTokenTransfer(address(0), to, tokenId); _balances[to] += 1; _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual { address owner = ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); _balances[owner] -= 1; delete _owners[tokenId]; emit Transfer(owner, address(0), tokenId); } /** * @dev Transfers `tokenId` from `from` to `to`. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) internal virtual { require(ownerOf(tokenId) == from, "ERC721: txfr token not owned"); require(to != address(0), "ERC721: txfr to 0x0 address"); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _balances[from] -= 1; _balances[to] += 1; _owners[tokenId] = to; emit Transfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ownerOf(tokenId), to, tokenId); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(msg.sender, from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver(to).onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("txfr to non ERC721Reciever"); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } // *********************** ERC721 Token Receiver ********************** /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`. */ function onERC721Received(address _operator, address _from, uint256 _tokenId, bytes calldata _data) external returns(bytes4) { //InterfaceID=0x150b7a02 return this.onERC721Received.selector; } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` 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 tokenId) internal virtual { } // **************************************** Metadata Standard Functions ********** //@dev Returns the token collection name. function name() external view returns (string memory){ return _name; } //@dev Returns the token collection symbol. function symbol() external view returns (string memory){ return _symbol; } //@dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. function tokenURI(uint256 tokenId) external view returns (string memory){ require(_exists(tokenId), "ERC721Metadata: URI 0x0 token"); string memory tokenuri; if (!revealed) { //redirect to mystery box tokenuri = string(abi.encodePacked(_baseURI, "mystery.json")); } else { //Input flag data here to send to reveal URI tokenuri = string(abi.encodePacked(_baseURI, toString(tokenId), ".json")); } return tokenuri; } function contractURI() public view returns (string memory) { return string(abi.encodePacked(_baseURI,"contract.json")); } // ******************************************************************************* receive() external payable {} fallback() external payable {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"operator","type":"address"}],"name":"OperatorNotAllowed","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"stateMutability":"payable","type":"fallback"},{"inputs":[],"name":"OPERATOR_FILTER_REGISTRY","outputs":[{"internalType":"contract IOperatorFilterRegistry","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_to","type":"address[]"}],"name":"airDrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newProxy","type":"address"}],"name":"assignProxy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenID","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"contractURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"}],"name":"getBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"checkProxy","type":"address"}],"name":"isProxy","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"numberMinted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_operator","type":"address"},{"internalType":"address","name":"_from","type":"address"},{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"onERC721Received","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"payoutWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_qty","type":"uint256"}],"name":"proxyMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"proxyTransfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"reveal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"revealed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"badProxy","type":"address"}],"name":"revokeProxy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"newURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"setPayoutWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"numTokens","type":"uint256"}],"name":"setTotalTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60806040526000600260006101000a81548160ff0219169083151502179055503480156200002c57600080fd5b50733cc6cdda760b79bafa08df41ecfa224f810dceb6600160006daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff163b111562000239578015620000ff576daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff16637d3e3dbe30846040518363ffffffff1660e01b8152600401620000c5929190620004ef565b600060405180830381600087803b158015620000e057600080fd5b505af1158015620000f5573d6000803e3d6000fd5b5050505062000238565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614620001b9576daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff1663a0af290330846040518363ffffffff1660e01b81526004016200017f929190620004ef565b600060405180830381600087803b1580156200019a57600080fd5b505af1158015620001af573d6000803e3d6000fd5b5050505062000237565b6daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff16634420e486306040518263ffffffff1660e01b81526004016200020291906200051c565b600060405180830381600087803b1580156200021d57600080fd5b505af115801562000232573d6000803e3d6000fd5b505050505b5b5b50506200025b6200024f620003de60201b60201c565b620003e660201b60201c565b600180600062000270620003de60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506040518060400160405280600981526020017f586172612043697479000000000000000000000000000000000000000000000081525060039081620003079190620007b3565b506040518060400160405280600581526020017f5861726142000000000000000000000000000000000000000000000000000000815250600490816200034e9190620007b3565b5060405180608001604052806059815260200162004daa6059913960059081620003799190620007b3565b5073516e4bb39632690e674d36691264a6dcd7df251e600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550611770600b819055506200089a565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620004d782620004aa565b9050919050565b620004e981620004ca565b82525050565b6000604082019050620005066000830185620004de565b620005156020830184620004de565b9392505050565b6000602082019050620005336000830184620004de565b92915050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620005bb57607f821691505b602082108103620005d157620005d062000573565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026200063b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620005fc565b620006478683620005fc565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620006946200068e62000688846200065f565b62000669565b6200065f565b9050919050565b6000819050919050565b620006b08362000673565b620006c8620006bf826200069b565b84845462000609565b825550505050565b600090565b620006df620006d0565b620006ec818484620006a5565b505050565b5b81811015620007145762000708600082620006d5565b600181019050620006f2565b5050565b601f82111562000763576200072d81620005d7565b6200073884620005ec565b8101602085101562000748578190505b620007606200075785620005ec565b830182620006f1565b50505b505050565b600082821c905092915050565b6000620007886000198460080262000768565b1980831691505092915050565b6000620007a3838362000775565b9150826002028217905092915050565b620007be8262000539565b67ffffffffffffffff811115620007da57620007d962000544565b5b620007e68254620005a2565b620007f382828562000718565b600060209050601f8311600181146200082b576000841562000816578287015190505b62000822858262000795565b86555062000892565b601f1984166200083b86620005d7565b60005b8281101562000865578489015182556001820191506020850194506020810190506200083e565b8683101562000885578489015162000881601f89168262000775565b8355505b6001600288020188555050505b505050505050565b61450080620008aa6000396000f3fe60806040526004361061021d5760003560e01c806355f804b311610123578063a22cb465116100ab578063c89052251161006f578063c8905225146107ae578063e8a3d485146107d7578063e985e9c514610802578063f2fde38b1461083f578063f8b2cb4f1461086857610224565b8063a22cb465146106df578063a475b5dd14610708578063b0b922631461071f578063b88d4fde14610748578063c87b56dd1461077157610224565b8063715018a6116100f2578063715018a61461061c5780637e1c0c09146106335780638488bb4e1461065e5780638da5cb5b1461068957806395d89b41146106b457610224565b806355f804b3146105505780636352211e146105795780636b8f9c43146105b657806370a08231146105df57610224565b806329710388116101a657806342842e0e1161017557806342842e0e1461047f57806342966c68146104a857806349a772b5146104d15780634a92fb3a146104fc578063518302271461052557610224565b806329710388146103d75780633b479d58146104145780633ccfd60b1461043d57806341f434341461045457610224565b8063095ea7b3116101ed578063095ea7b3146102f4578063150b7a021461031d57806318160ddd1461035a5780631f471ad01461038557806323b872dd146103ae57610224565b8062b6849f1461022657806301ffc9a71461024f57806306fdde031461028c578063081812fc146102b757610224565b3661022457005b005b34801561023257600080fd5b5061024d60048036038101906102489190612d0d565b6108a5565b005b34801561025b57600080fd5b5061027660048036038101906102719190612dae565b610a3c565b6040516102839190612df6565b60405180910390f35b34801561029857600080fd5b506102a1610bc5565b6040516102ae9190612e99565b60405180910390f35b3480156102c357600080fd5b506102de60048036038101906102d99190612ef1565b610c57565b6040516102eb9190612f2d565b60405180910390f35b34801561030057600080fd5b5061031b60048036038101906103169190612f48565b610cdc565b005b34801561032957600080fd5b50610344600480360381019061033f9190612fe3565b610df0565b604051610351919061307a565b60405180910390f35b34801561036657600080fd5b5061036f610e05565b60405161037c91906130a4565b60405180910390f35b34801561039157600080fd5b506103ac60048036038101906103a79190612f48565b610e0f565b005b3480156103ba57600080fd5b506103d560048036038101906103d091906130bf565b610f16565b005b3480156103e357600080fd5b506103fe60048036038101906103f99190613112565b610fae565b60405161040b9190612df6565b60405180910390f35b34801561042057600080fd5b5061043b60048036038101906104369190613112565b611004565b005b34801561044957600080fd5b506104526110da565b005b34801561046057600080fd5b5061046961122d565b604051610476919061319e565b60405180910390f35b34801561048b57600080fd5b506104a660048036038101906104a191906130bf565b61123f565b005b3480156104b457600080fd5b506104cf60048036038101906104ca9190612ef1565b61129e565b005b3480156104dd57600080fd5b506104e66112f1565b6040516104f391906130a4565b60405180910390f35b34801561050857600080fd5b50610523600480360381019061051e91906130bf565b6112f7565b005b34801561053157600080fd5b5061053a611364565b6040516105479190612df6565b60405180910390f35b34801561055c57600080fd5b506105776004803603810190610572919061326e565b611377565b005b34801561058557600080fd5b506105a0600480360381019061059b9190612ef1565b611406565b6040516105ad9190612f2d565b60405180910390f35b3480156105c257600080fd5b506105dd60048036038101906105d89190613112565b6114b7565b005b3480156105eb57600080fd5b5061060660048036038101906106019190613112565b611577565b60405161061391906130a4565b60405180910390f35b34801561062857600080fd5b5061063161162e565b005b34801561063f57600080fd5b506106486116b6565b60405161065591906130a4565b60405180910390f35b34801561066a57600080fd5b506106736116bc565b6040516106809190612f2d565b60405180910390f35b34801561069557600080fd5b5061069e6116e2565b6040516106ab9190612f2d565b60405180910390f35b3480156106c057600080fd5b506106c961170b565b6040516106d69190612e99565b60405180910390f35b3480156106eb57600080fd5b50610706600480360381019061070191906132e3565b61179d565b005b34801561071457600080fd5b5061071d611913565b005b34801561072b57600080fd5b5061074660048036038101906107419190612ef1565b6119ac565b005b34801561075457600080fd5b5061076f600480360381019061076a91906133c4565b611a32565b005b34801561077d57600080fd5b5061079860048036038101906107939190612ef1565b611acc565b6040516107a59190612e99565b60405180910390f35b3480156107ba57600080fd5b506107d560048036038101906107d09190613112565b611b8b565b005b3480156107e357600080fd5b506107ec611c62565b6040516107f99190612e99565b60405180910390f35b34801561080e57600080fd5b5061082960048036038101906108249190613447565b611c8a565b6040516108369190612df6565b60405180910390f35b34801561084b57600080fd5b5061086660048036038101906108619190613112565b611d1e565b005b34801561087457600080fd5b5061088f600480360381019061088a9190613112565b611e15565b60405161089c91906130a4565b60405180910390f35b6108ad611e70565b73ffffffffffffffffffffffffffffffffffffffff166108cb6116e2565b73ffffffffffffffffffffffffffffffffffffffff1614610921576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610918906134d3565b60405180910390fd5b600081519050600c5481600c546109389190613522565b11610978576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161096f906135c4565b60405180910390fd5b600b5481600c546109899190613522565b11156109ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109c190613630565b60405180910390fd5b6000600c54905060005b82811015610a3657610a0b8482815181106109f2576109f1613650565b5b60200260200101518284610a069190613522565b611e78565b600c6000815480929190610a1e9061367f565b91905055508080610a2e9061367f565b9150506109d4565b50505050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610b0757507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610b6f57507f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610bbe575063150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b606060038054610bd4906136f6565b80601f0160208091040260200160405190810160405280929190818152602001828054610c00906136f6565b8015610c4d5780601f10610c2257610100808354040283529160200191610c4d565b820191906000526020600020905b815481529060010190602001808311610c3057829003601f168201915b5050505050905090565b6000610c6282611e96565b610ca1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9890613773565b60405180910390fd5b6008600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b81610ce681611f02565b6000610cf183611406565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610d61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d58906137df565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610da15750610da08133611c8a565b5b610de0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dd79061384b565b60405180910390fd5b610dea8484611fff565b50505050565b600063150b7a0260e01b905095945050505050565b6000600c54905090565b60016000610e1b611e70565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610e6c57600080fd5b600b5481600c54610e7d9190613522565b1115610ebe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb590613630565b60405180910390fd5b6000600c54905060005b82811015610f1057610ee5848284610ee09190613522565b611e78565b600c6000815480929190610ef89061367f565b91905055508080610f089061367f565b915050610ec8565b50505050565b823373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610f5457610f5333611f02565b5b610f5e33836120b8565b610f9d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f94906138b7565b60405180910390fd5b610fa8848484612196565b50505050565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b61100c611e70565b73ffffffffffffffffffffffffffffffffffffffff1661102a6116e2565b73ffffffffffffffffffffffffffffffffffffffff1614611080576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611077906134d3565b60405180910390fd5b60018060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6110e2611e70565b73ffffffffffffffffffffffffffffffffffffffff166111006116e2565b73ffffffffffffffffffffffffffffffffffffffff1614611156576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114d906134d3565b60405180910390fd5b60004790506000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16826040516111a390613908565b60006040518083038185875af1925050503d80600081146111e0576040519150601f19603f3d011682016040523d82523d6000602084013e6111e5565b606091505b5050905080611229576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161122090613969565b60405180910390fd5b5050565b6daaeb6d7670e522a718067333cd4e81565b823373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461127d5761127c33611f02565b5b61129884848460405180602001604052806000815250611a32565b50505050565b6112a781611406565b73ffffffffffffffffffffffffffffffffffffffff166112c5611e70565b73ffffffffffffffffffffffffffffffffffffffff16146112e557600080fd5b6112ee816123f1565b50565b600c5481565b60016000611303611e70565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661135457600080fd5b61135f838383612196565b505050565b600a60009054906101000a900460ff1681565b61137f611e70565b73ffffffffffffffffffffffffffffffffffffffff1661139d6116e2565b73ffffffffffffffffffffffffffffffffffffffff16146113f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ea906134d3565b60405180910390fd5b80600590816114029190613b2b565b5050565b6000806006600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036114ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114a590613c49565b60405180910390fd5b80915050919050565b6114bf611e70565b73ffffffffffffffffffffffffffffffffffffffff166114dd6116e2565b73ffffffffffffffffffffffffffffffffffffffff1614611533576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161152a906134d3565b60405180910390fd5b80600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036115e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115de90613cb5565b60405180910390fd5b600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611636611e70565b73ffffffffffffffffffffffffffffffffffffffff166116546116e2565b73ffffffffffffffffffffffffffffffffffffffff16146116aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116a1906134d3565b60405180910390fd5b6116b46000612502565b565b600b5481565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606004805461171a906136f6565b80601f0160208091040260200160405190810160405280929190818152602001828054611746906136f6565b80156117935780601f1061176857610100808354040283529160200191611793565b820191906000526020600020905b81548152906001019060200180831161177657829003601f168201915b5050505050905090565b816117a781611f02565b3373ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611815576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161180c90613d21565b60405180910390fd5b81600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31846040516119069190612df6565b60405180910390a3505050565b61191b611e70565b73ffffffffffffffffffffffffffffffffffffffff166119396116e2565b73ffffffffffffffffffffffffffffffffffffffff161461198f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611986906134d3565b60405180910390fd5b6001600a60006101000a81548160ff021916908315150217905550565b6119b4611e70565b73ffffffffffffffffffffffffffffffffffffffff166119d26116e2565b73ffffffffffffffffffffffffffffffffffffffff1614611a28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a1f906134d3565b60405180910390fd5b80600b8190555050565b833373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611a7057611a6f33611f02565b5b611a7a33846120b8565b611ab9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ab0906138b7565b60405180910390fd5b611ac5858585856125c6565b5050505050565b6060611ad782611e96565b611b16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b0d90613d8d565b60405180910390fd5b6060600a60009054906101000a900460ff16611b54576005604051602001611b3e9190613e87565b6040516020818303038152906040529050611b82565b6005611b5f84612622565b604051602001611b70929190613f26565b60405160208183030381529060405290505b80915050919050565b611b93611e70565b73ffffffffffffffffffffffffffffffffffffffff16611bb16116e2565b73ffffffffffffffffffffffffffffffffffffffff1614611c07576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bfe906134d3565b60405180910390fd5b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60606005604051602001611c769190613fa1565b604051602081830303815290604052905090565b6000600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611d26611e70565b73ffffffffffffffffffffffffffffffffffffffff16611d446116e2565b73ffffffffffffffffffffffffffffffffffffffff1614611d9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d91906134d3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611e09576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e009061400f565b60405180910390fd5b611e1281612502565b50565b600066038d7ea4c68000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611e69919061405e565b9050919050565b600033905090565b611e92828260405180602001604052806000815250612782565b5050565b60008073ffffffffffffffffffffffffffffffffffffffff166006600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b60006daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff163b1115611ffc576daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff1663c617113430836040518363ffffffff1660e01b8152600401611f7992919061408f565b602060405180830381865afa158015611f96573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fba91906140cd565b611ffb57806040517fede71dcc000000000000000000000000000000000000000000000000000000008152600401611ff29190612f2d565b60405180910390fd5b5b50565b816008600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661207283611406565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006120c382611e96565b612102576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120f990614146565b60405180910390fd5b600061210d83611406565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061217c57508373ffffffffffffffffffffffffffffffffffffffff1661216484610c57565b73ffffffffffffffffffffffffffffffffffffffff16145b8061218d575061218c8185611c8a565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166121b682611406565b73ffffffffffffffffffffffffffffffffffffffff161461220c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612203906141b2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361227b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122729061421e565b60405180910390fd5b6122868383836127dd565b612291600082611fff565b6001600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546122e1919061423e565b925050819055506001600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546123389190613522565b92505081905550816006600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b60006123fc82611406565b905061240a816000846127dd565b612415600083611fff565b6001600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612465919061423e565b925050819055506006600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905581600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6125d1848484612196565b6125dd848484846127e2565b61261c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612613906142be565b60405180910390fd5b50505050565b606060008203612669576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061277d565b600082905060005b6000821461269b5780806126849061367f565b915050600a82612694919061405e565b9150612671565b60008167ffffffffffffffff8111156126b7576126b6612b6c565b5b6040519080825280601f01601f1916602001820160405280156126e95781602001600182028036833780820191505090505b5090505b6000851461277657600182612702919061423e565b9150600a8561271191906142de565b603061271d9190613522565b60f81b81838151811061273357612732613650565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561276f919061405e565b94506126ed565b8093505050505b919050565b61278c8383612962565b61279960008484846127e2565b6127d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127cf906142be565b60405180910390fd5b505050565b505050565b60006128038473ffffffffffffffffffffffffffffffffffffffff16612b2f565b15612955578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02338786866040518563ffffffff1660e01b81526004016128479493929190614364565b6020604051808303816000875af192505050801561288357506040513d601f19601f8201168201806040525081019061288091906143c5565b60015b612905573d80600081146128b3576040519150601f19603f3d011682016040523d82523d6000602084013e6128b8565b606091505b5060008151036128fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128f4906142be565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505061295a565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036129d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129c89061443e565b60405180910390fd5b6129da81611e96565b15612a1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a11906144aa565b60405180910390fd5b612a26600083836127dd565b6001600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612a769190613522565b92505081905550816006600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b6000604051905090565b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b612ba482612b5b565b810181811067ffffffffffffffff82111715612bc357612bc2612b6c565b5b80604052505050565b6000612bd6612b42565b9050612be28282612b9b565b919050565b600067ffffffffffffffff821115612c0257612c01612b6c565b5b602082029050602081019050919050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612c4382612c18565b9050919050565b612c5381612c38565b8114612c5e57600080fd5b50565b600081359050612c7081612c4a565b92915050565b6000612c89612c8484612be7565b612bcc565b90508083825260208201905060208402830185811115612cac57612cab612c13565b5b835b81811015612cd55780612cc18882612c61565b845260208401935050602081019050612cae565b5050509392505050565b600082601f830112612cf457612cf3612b56565b5b8135612d04848260208601612c76565b91505092915050565b600060208284031215612d2357612d22612b4c565b5b600082013567ffffffffffffffff811115612d4157612d40612b51565b5b612d4d84828501612cdf565b91505092915050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612d8b81612d56565b8114612d9657600080fd5b50565b600081359050612da881612d82565b92915050565b600060208284031215612dc457612dc3612b4c565b5b6000612dd284828501612d99565b91505092915050565b60008115159050919050565b612df081612ddb565b82525050565b6000602082019050612e0b6000830184612de7565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612e4b578082015181840152602081019050612e30565b83811115612e5a576000848401525b50505050565b6000612e6b82612e11565b612e758185612e1c565b9350612e85818560208601612e2d565b612e8e81612b5b565b840191505092915050565b60006020820190508181036000830152612eb38184612e60565b905092915050565b6000819050919050565b612ece81612ebb565b8114612ed957600080fd5b50565b600081359050612eeb81612ec5565b92915050565b600060208284031215612f0757612f06612b4c565b5b6000612f1584828501612edc565b91505092915050565b612f2781612c38565b82525050565b6000602082019050612f426000830184612f1e565b92915050565b60008060408385031215612f5f57612f5e612b4c565b5b6000612f6d85828601612c61565b9250506020612f7e85828601612edc565b9150509250929050565b600080fd5b60008083601f840112612fa357612fa2612b56565b5b8235905067ffffffffffffffff811115612fc057612fbf612f88565b5b602083019150836001820283011115612fdc57612fdb612c13565b5b9250929050565b600080600080600060808688031215612fff57612ffe612b4c565b5b600061300d88828901612c61565b955050602061301e88828901612c61565b945050604061302f88828901612edc565b935050606086013567ffffffffffffffff8111156130505761304f612b51565b5b61305c88828901612f8d565b92509250509295509295909350565b61307481612d56565b82525050565b600060208201905061308f600083018461306b565b92915050565b61309e81612ebb565b82525050565b60006020820190506130b96000830184613095565b92915050565b6000806000606084860312156130d8576130d7612b4c565b5b60006130e686828701612c61565b93505060206130f786828701612c61565b925050604061310886828701612edc565b9150509250925092565b60006020828403121561312857613127612b4c565b5b600061313684828501612c61565b91505092915050565b6000819050919050565b600061316461315f61315a84612c18565b61313f565b612c18565b9050919050565b600061317682613149565b9050919050565b60006131888261316b565b9050919050565b6131988161317d565b82525050565b60006020820190506131b3600083018461318f565b92915050565b600080fd5b600067ffffffffffffffff8211156131d9576131d8612b6c565b5b6131e282612b5b565b9050602081019050919050565b82818337600083830152505050565b600061321161320c846131be565b612bcc565b90508281526020810184848401111561322d5761322c6131b9565b5b6132388482856131ef565b509392505050565b600082601f83011261325557613254612b56565b5b81356132658482602086016131fe565b91505092915050565b60006020828403121561328457613283612b4c565b5b600082013567ffffffffffffffff8111156132a2576132a1612b51565b5b6132ae84828501613240565b91505092915050565b6132c081612ddb565b81146132cb57600080fd5b50565b6000813590506132dd816132b7565b92915050565b600080604083850312156132fa576132f9612b4c565b5b600061330885828601612c61565b9250506020613319858286016132ce565b9150509250929050565b600067ffffffffffffffff82111561333e5761333d612b6c565b5b61334782612b5b565b9050602081019050919050565b600061336761336284613323565b612bcc565b905082815260208101848484011115613383576133826131b9565b5b61338e8482856131ef565b509392505050565b600082601f8301126133ab576133aa612b56565b5b81356133bb848260208601613354565b91505092915050565b600080600080608085870312156133de576133dd612b4c565b5b60006133ec87828801612c61565b94505060206133fd87828801612c61565b935050604061340e87828801612edc565b925050606085013567ffffffffffffffff81111561342f5761342e612b51565b5b61343b87828801613396565b91505092959194509250565b6000806040838503121561345e5761345d612b4c565b5b600061346c85828601612c61565b925050602061347d85828601612c61565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006134bd602083612e1c565b91506134c882613487565b602082019050919050565b600060208201905081810360008301526134ec816134b0565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061352d82612ebb565b915061353883612ebb565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561356d5761356c6134f3565b5b828201905092915050565b7f4d617468206f766572666c6f77206572726f7200000000000000000000000000600082015250565b60006135ae601383612e1c565b91506135b982613578565b602082019050919050565b600060208201905081810360008301526135dd816135a1565b9050919050565b7f43616e6e6f742066696c6c206f72646572000000000000000000000000000000600082015250565b600061361a601183612e1c565b9150613625826135e4565b602082019050919050565b600060208201905081810360008301526136498161360d565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600061368a82612ebb565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036136bc576136bb6134f3565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061370e57607f821691505b602082108103613721576137206136c7565b5b50919050565b7f4552433732313a20617070726f766564206e6f6e6578697374656e7420746b6e600082015250565b600061375d602083612e1c565b915061376882613727565b602082019050919050565b6000602082019050818103600083015261378c81613750565b9050919050565b7f4552433732313a20617070726f76616c2063757272656e74206f776e65720000600082015250565b60006137c9601e83612e1c565b91506137d482613793565b602082019050919050565b600060208201905081810360008301526137f8816137bc565b9050919050565b7f4552433732313a2063616c6c657220216f776e65722f21617070726f76656400600082015250565b6000613835601f83612e1c565b9150613840826137ff565b602082019050919050565b6000602082019050818103600083015261386481613828565b9050919050565b7f4552433732313a207478667220216f776e65722f617070726f76656400000000600082015250565b60006138a1601c83612e1c565b91506138ac8261386b565b602082019050919050565b600060208201905081810360008301526138d081613894565b9050919050565b600081905092915050565b50565b60006138f26000836138d7565b91506138fd826138e2565b600082019050919050565b6000613913826138e5565b9150819050919050565b7f5472616e73616374696f6e20556e7375636365737366756c0000000000000000600082015250565b6000613953601883612e1c565b915061395e8261391d565b602082019050919050565b6000602082019050818103600083015261398281613946565b9050919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026139eb7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826139ae565b6139f586836139ae565b95508019841693508086168417925050509392505050565b6000613a28613a23613a1e84612ebb565b61313f565b612ebb565b9050919050565b6000819050919050565b613a4283613a0d565b613a56613a4e82613a2f565b8484546139bb565b825550505050565b600090565b613a6b613a5e565b613a76818484613a39565b505050565b5b81811015613a9a57613a8f600082613a63565b600181019050613a7c565b5050565b601f821115613adf57613ab081613989565b613ab98461399e565b81016020851015613ac8578190505b613adc613ad48561399e565b830182613a7b565b50505b505050565b600082821c905092915050565b6000613b0260001984600802613ae4565b1980831691505092915050565b6000613b1b8383613af1565b9150826002028217905092915050565b613b3482612e11565b67ffffffffffffffff811115613b4d57613b4c612b6c565b5b613b5782546136f6565b613b62828285613a9e565b600060209050601f831160018114613b955760008415613b83578287015190505b613b8d8582613b0f565b865550613bf5565b601f198416613ba386613989565b60005b82811015613bcb57848901518255600182019150602085019450602081019050613ba6565b86831015613be85784890151613be4601f891682613af1565b8355505b6001600288020188555050505b505050505050565b7f4552433732313a206f776e207175657279206e6f6e657869737420746b6e0000600082015250565b6000613c33601e83612e1c565b9150613c3e82613bfd565b602082019050919050565b60006020820190508181036000830152613c6281613c26565b9050919050565b7f4552433732313a2062616c2071727920666f72207a65726f2061646472657373600082015250565b6000613c9f602083612e1c565b9150613caa82613c69565b602082019050919050565b60006020820190508181036000830152613cce81613c92565b9050919050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b6000613d0b601983612e1c565b9150613d1682613cd5565b602082019050919050565b60006020820190508181036000830152613d3a81613cfe565b9050919050565b7f4552433732314d657461646174613a205552492030783020746f6b656e000000600082015250565b6000613d77601d83612e1c565b9150613d8282613d41565b602082019050919050565b60006020820190508181036000830152613da681613d6a565b9050919050565b600081905092915050565b60008154613dc5816136f6565b613dcf8186613dad565b94506001821660008114613dea5760018114613dff57613e32565b60ff1983168652811515820286019350613e32565b613e0885613989565b60005b83811015613e2a57815481890152600182019150602081019050613e0b565b838801955050505b50505092915050565b7f6d7973746572792e6a736f6e0000000000000000000000000000000000000000600082015250565b6000613e71600c83613dad565b9150613e7c82613e3b565b600c82019050919050565b6000613e938284613db8565b9150613e9e82613e64565b915081905092915050565b6000613eb482612e11565b613ebe8185613dad565b9350613ece818560208601612e2d565b80840191505092915050565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b6000613f10600583613dad565b9150613f1b82613eda565b600582019050919050565b6000613f328285613db8565b9150613f3e8284613ea9565b9150613f4982613f03565b91508190509392505050565b7f636f6e74726163742e6a736f6e00000000000000000000000000000000000000600082015250565b6000613f8b600d83613dad565b9150613f9682613f55565b600d82019050919050565b6000613fad8284613db8565b9150613fb882613f7e565b915081905092915050565b7f4f776e61626c653a206e6577206f776e65722069732030782061646472657373600082015250565b6000613ff9602083612e1c565b915061400482613fc3565b602082019050919050565b6000602082019050818103600083015261402881613fec565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061406982612ebb565b915061407483612ebb565b9250826140845761408361402f565b5b828204905092915050565b60006040820190506140a46000830185612f1e565b6140b16020830184612f1e565b9392505050565b6000815190506140c7816132b7565b92915050565b6000602082840312156140e3576140e2612b4c565b5b60006140f1848285016140b8565b91505092915050565b7f4552433732313a206f70207175657279206e6f6e6578697374656e7420746b6e600082015250565b6000614130602083612e1c565b915061413b826140fa565b602082019050919050565b6000602082019050818103600083015261415f81614123565b9050919050565b7f4552433732313a207478667220746f6b656e206e6f74206f776e656400000000600082015250565b600061419c601c83612e1c565b91506141a782614166565b602082019050919050565b600060208201905081810360008301526141cb8161418f565b9050919050565b7f4552433732313a207478667220746f2030783020616464726573730000000000600082015250565b6000614208601b83612e1c565b9150614213826141d2565b602082019050919050565b60006020820190508181036000830152614237816141fb565b9050919050565b600061424982612ebb565b915061425483612ebb565b925082821015614267576142666134f3565b5b828203905092915050565b7f7478667220746f206e6f6e204552433732315265636965766572000000000000600082015250565b60006142a8601a83612e1c565b91506142b382614272565b602082019050919050565b600060208201905081810360008301526142d78161429b565b9050919050565b60006142e982612ebb565b91506142f483612ebb565b9250826143045761430361402f565b5b828206905092915050565b600081519050919050565b600082825260208201905092915050565b60006143368261430f565b614340818561431a565b9350614350818560208601612e2d565b61435981612b5b565b840191505092915050565b60006080820190506143796000830187612f1e565b6143866020830186612f1e565b6143936040830185613095565b81810360608301526143a5818461432b565b905095945050505050565b6000815190506143bf81612d82565b92915050565b6000602082840312156143db576143da612b4c565b5b60006143e9848285016143b0565b91505092915050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b6000614428602083612e1c565b9150614433826143f2565b602082019050919050565b600060208201905081810360008301526144578161441b565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b6000614494601c83612e1c565b915061449f8261445e565b602082019050919050565b600060208201905081810360008301526144c381614487565b905091905056fea2646970667358221220737eef15ea004b0e82519229305b12501f7150ed8f45800569d97681923b32b364736f6c634300080f003368747470733a2f2f62616679626569686533327866716b783279736f6f686e337336326a663762786e7837336f61346b766d69766e776f66336e6f696865687663716d2e697066732e6e667473746f726167652e6c696e6b2f
Deployed Bytecode
0x60806040526004361061021d5760003560e01c806355f804b311610123578063a22cb465116100ab578063c89052251161006f578063c8905225146107ae578063e8a3d485146107d7578063e985e9c514610802578063f2fde38b1461083f578063f8b2cb4f1461086857610224565b8063a22cb465146106df578063a475b5dd14610708578063b0b922631461071f578063b88d4fde14610748578063c87b56dd1461077157610224565b8063715018a6116100f2578063715018a61461061c5780637e1c0c09146106335780638488bb4e1461065e5780638da5cb5b1461068957806395d89b41146106b457610224565b806355f804b3146105505780636352211e146105795780636b8f9c43146105b657806370a08231146105df57610224565b806329710388116101a657806342842e0e1161017557806342842e0e1461047f57806342966c68146104a857806349a772b5146104d15780634a92fb3a146104fc578063518302271461052557610224565b806329710388146103d75780633b479d58146104145780633ccfd60b1461043d57806341f434341461045457610224565b8063095ea7b3116101ed578063095ea7b3146102f4578063150b7a021461031d57806318160ddd1461035a5780631f471ad01461038557806323b872dd146103ae57610224565b8062b6849f1461022657806301ffc9a71461024f57806306fdde031461028c578063081812fc146102b757610224565b3661022457005b005b34801561023257600080fd5b5061024d60048036038101906102489190612d0d565b6108a5565b005b34801561025b57600080fd5b5061027660048036038101906102719190612dae565b610a3c565b6040516102839190612df6565b60405180910390f35b34801561029857600080fd5b506102a1610bc5565b6040516102ae9190612e99565b60405180910390f35b3480156102c357600080fd5b506102de60048036038101906102d99190612ef1565b610c57565b6040516102eb9190612f2d565b60405180910390f35b34801561030057600080fd5b5061031b60048036038101906103169190612f48565b610cdc565b005b34801561032957600080fd5b50610344600480360381019061033f9190612fe3565b610df0565b604051610351919061307a565b60405180910390f35b34801561036657600080fd5b5061036f610e05565b60405161037c91906130a4565b60405180910390f35b34801561039157600080fd5b506103ac60048036038101906103a79190612f48565b610e0f565b005b3480156103ba57600080fd5b506103d560048036038101906103d091906130bf565b610f16565b005b3480156103e357600080fd5b506103fe60048036038101906103f99190613112565b610fae565b60405161040b9190612df6565b60405180910390f35b34801561042057600080fd5b5061043b60048036038101906104369190613112565b611004565b005b34801561044957600080fd5b506104526110da565b005b34801561046057600080fd5b5061046961122d565b604051610476919061319e565b60405180910390f35b34801561048b57600080fd5b506104a660048036038101906104a191906130bf565b61123f565b005b3480156104b457600080fd5b506104cf60048036038101906104ca9190612ef1565b61129e565b005b3480156104dd57600080fd5b506104e66112f1565b6040516104f391906130a4565b60405180910390f35b34801561050857600080fd5b50610523600480360381019061051e91906130bf565b6112f7565b005b34801561053157600080fd5b5061053a611364565b6040516105479190612df6565b60405180910390f35b34801561055c57600080fd5b506105776004803603810190610572919061326e565b611377565b005b34801561058557600080fd5b506105a0600480360381019061059b9190612ef1565b611406565b6040516105ad9190612f2d565b60405180910390f35b3480156105c257600080fd5b506105dd60048036038101906105d89190613112565b6114b7565b005b3480156105eb57600080fd5b5061060660048036038101906106019190613112565b611577565b60405161061391906130a4565b60405180910390f35b34801561062857600080fd5b5061063161162e565b005b34801561063f57600080fd5b506106486116b6565b60405161065591906130a4565b60405180910390f35b34801561066a57600080fd5b506106736116bc565b6040516106809190612f2d565b60405180910390f35b34801561069557600080fd5b5061069e6116e2565b6040516106ab9190612f2d565b60405180910390f35b3480156106c057600080fd5b506106c961170b565b6040516106d69190612e99565b60405180910390f35b3480156106eb57600080fd5b50610706600480360381019061070191906132e3565b61179d565b005b34801561071457600080fd5b5061071d611913565b005b34801561072b57600080fd5b5061074660048036038101906107419190612ef1565b6119ac565b005b34801561075457600080fd5b5061076f600480360381019061076a91906133c4565b611a32565b005b34801561077d57600080fd5b5061079860048036038101906107939190612ef1565b611acc565b6040516107a59190612e99565b60405180910390f35b3480156107ba57600080fd5b506107d560048036038101906107d09190613112565b611b8b565b005b3480156107e357600080fd5b506107ec611c62565b6040516107f99190612e99565b60405180910390f35b34801561080e57600080fd5b5061082960048036038101906108249190613447565b611c8a565b6040516108369190612df6565b60405180910390f35b34801561084b57600080fd5b5061086660048036038101906108619190613112565b611d1e565b005b34801561087457600080fd5b5061088f600480360381019061088a9190613112565b611e15565b60405161089c91906130a4565b60405180910390f35b6108ad611e70565b73ffffffffffffffffffffffffffffffffffffffff166108cb6116e2565b73ffffffffffffffffffffffffffffffffffffffff1614610921576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610918906134d3565b60405180910390fd5b600081519050600c5481600c546109389190613522565b11610978576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161096f906135c4565b60405180910390fd5b600b5481600c546109899190613522565b11156109ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109c190613630565b60405180910390fd5b6000600c54905060005b82811015610a3657610a0b8482815181106109f2576109f1613650565b5b60200260200101518284610a069190613522565b611e78565b600c6000815480929190610a1e9061367f565b91905055508080610a2e9061367f565b9150506109d4565b50505050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610b0757507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610b6f57507f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610bbe575063150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b606060038054610bd4906136f6565b80601f0160208091040260200160405190810160405280929190818152602001828054610c00906136f6565b8015610c4d5780601f10610c2257610100808354040283529160200191610c4d565b820191906000526020600020905b815481529060010190602001808311610c3057829003601f168201915b5050505050905090565b6000610c6282611e96565b610ca1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9890613773565b60405180910390fd5b6008600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b81610ce681611f02565b6000610cf183611406565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610d61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d58906137df565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610da15750610da08133611c8a565b5b610de0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dd79061384b565b60405180910390fd5b610dea8484611fff565b50505050565b600063150b7a0260e01b905095945050505050565b6000600c54905090565b60016000610e1b611e70565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610e6c57600080fd5b600b5481600c54610e7d9190613522565b1115610ebe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb590613630565b60405180910390fd5b6000600c54905060005b82811015610f1057610ee5848284610ee09190613522565b611e78565b600c6000815480929190610ef89061367f565b91905055508080610f089061367f565b915050610ec8565b50505050565b823373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610f5457610f5333611f02565b5b610f5e33836120b8565b610f9d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f94906138b7565b60405180910390fd5b610fa8848484612196565b50505050565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b61100c611e70565b73ffffffffffffffffffffffffffffffffffffffff1661102a6116e2565b73ffffffffffffffffffffffffffffffffffffffff1614611080576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611077906134d3565b60405180910390fd5b60018060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6110e2611e70565b73ffffffffffffffffffffffffffffffffffffffff166111006116e2565b73ffffffffffffffffffffffffffffffffffffffff1614611156576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114d906134d3565b60405180910390fd5b60004790506000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16826040516111a390613908565b60006040518083038185875af1925050503d80600081146111e0576040519150601f19603f3d011682016040523d82523d6000602084013e6111e5565b606091505b5050905080611229576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161122090613969565b60405180910390fd5b5050565b6daaeb6d7670e522a718067333cd4e81565b823373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461127d5761127c33611f02565b5b61129884848460405180602001604052806000815250611a32565b50505050565b6112a781611406565b73ffffffffffffffffffffffffffffffffffffffff166112c5611e70565b73ffffffffffffffffffffffffffffffffffffffff16146112e557600080fd5b6112ee816123f1565b50565b600c5481565b60016000611303611e70565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661135457600080fd5b61135f838383612196565b505050565b600a60009054906101000a900460ff1681565b61137f611e70565b73ffffffffffffffffffffffffffffffffffffffff1661139d6116e2565b73ffffffffffffffffffffffffffffffffffffffff16146113f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ea906134d3565b60405180910390fd5b80600590816114029190613b2b565b5050565b6000806006600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036114ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114a590613c49565b60405180910390fd5b80915050919050565b6114bf611e70565b73ffffffffffffffffffffffffffffffffffffffff166114dd6116e2565b73ffffffffffffffffffffffffffffffffffffffff1614611533576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161152a906134d3565b60405180910390fd5b80600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036115e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115de90613cb5565b60405180910390fd5b600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611636611e70565b73ffffffffffffffffffffffffffffffffffffffff166116546116e2565b73ffffffffffffffffffffffffffffffffffffffff16146116aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116a1906134d3565b60405180910390fd5b6116b46000612502565b565b600b5481565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606004805461171a906136f6565b80601f0160208091040260200160405190810160405280929190818152602001828054611746906136f6565b80156117935780601f1061176857610100808354040283529160200191611793565b820191906000526020600020905b81548152906001019060200180831161177657829003601f168201915b5050505050905090565b816117a781611f02565b3373ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611815576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161180c90613d21565b60405180910390fd5b81600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31846040516119069190612df6565b60405180910390a3505050565b61191b611e70565b73ffffffffffffffffffffffffffffffffffffffff166119396116e2565b73ffffffffffffffffffffffffffffffffffffffff161461198f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611986906134d3565b60405180910390fd5b6001600a60006101000a81548160ff021916908315150217905550565b6119b4611e70565b73ffffffffffffffffffffffffffffffffffffffff166119d26116e2565b73ffffffffffffffffffffffffffffffffffffffff1614611a28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a1f906134d3565b60405180910390fd5b80600b8190555050565b833373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611a7057611a6f33611f02565b5b611a7a33846120b8565b611ab9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ab0906138b7565b60405180910390fd5b611ac5858585856125c6565b5050505050565b6060611ad782611e96565b611b16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b0d90613d8d565b60405180910390fd5b6060600a60009054906101000a900460ff16611b54576005604051602001611b3e9190613e87565b6040516020818303038152906040529050611b82565b6005611b5f84612622565b604051602001611b70929190613f26565b60405160208183030381529060405290505b80915050919050565b611b93611e70565b73ffffffffffffffffffffffffffffffffffffffff16611bb16116e2565b73ffffffffffffffffffffffffffffffffffffffff1614611c07576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bfe906134d3565b60405180910390fd5b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60606005604051602001611c769190613fa1565b604051602081830303815290604052905090565b6000600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611d26611e70565b73ffffffffffffffffffffffffffffffffffffffff16611d446116e2565b73ffffffffffffffffffffffffffffffffffffffff1614611d9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d91906134d3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611e09576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e009061400f565b60405180910390fd5b611e1281612502565b50565b600066038d7ea4c68000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611e69919061405e565b9050919050565b600033905090565b611e92828260405180602001604052806000815250612782565b5050565b60008073ffffffffffffffffffffffffffffffffffffffff166006600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b60006daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff163b1115611ffc576daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff1663c617113430836040518363ffffffff1660e01b8152600401611f7992919061408f565b602060405180830381865afa158015611f96573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fba91906140cd565b611ffb57806040517fede71dcc000000000000000000000000000000000000000000000000000000008152600401611ff29190612f2d565b60405180910390fd5b5b50565b816008600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661207283611406565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006120c382611e96565b612102576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120f990614146565b60405180910390fd5b600061210d83611406565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061217c57508373ffffffffffffffffffffffffffffffffffffffff1661216484610c57565b73ffffffffffffffffffffffffffffffffffffffff16145b8061218d575061218c8185611c8a565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166121b682611406565b73ffffffffffffffffffffffffffffffffffffffff161461220c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612203906141b2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361227b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122729061421e565b60405180910390fd5b6122868383836127dd565b612291600082611fff565b6001600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546122e1919061423e565b925050819055506001600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546123389190613522565b92505081905550816006600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b60006123fc82611406565b905061240a816000846127dd565b612415600083611fff565b6001600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612465919061423e565b925050819055506006600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905581600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6125d1848484612196565b6125dd848484846127e2565b61261c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612613906142be565b60405180910390fd5b50505050565b606060008203612669576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061277d565b600082905060005b6000821461269b5780806126849061367f565b915050600a82612694919061405e565b9150612671565b60008167ffffffffffffffff8111156126b7576126b6612b6c565b5b6040519080825280601f01601f1916602001820160405280156126e95781602001600182028036833780820191505090505b5090505b6000851461277657600182612702919061423e565b9150600a8561271191906142de565b603061271d9190613522565b60f81b81838151811061273357612732613650565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561276f919061405e565b94506126ed565b8093505050505b919050565b61278c8383612962565b61279960008484846127e2565b6127d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127cf906142be565b60405180910390fd5b505050565b505050565b60006128038473ffffffffffffffffffffffffffffffffffffffff16612b2f565b15612955578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02338786866040518563ffffffff1660e01b81526004016128479493929190614364565b6020604051808303816000875af192505050801561288357506040513d601f19601f8201168201806040525081019061288091906143c5565b60015b612905573d80600081146128b3576040519150601f19603f3d011682016040523d82523d6000602084013e6128b8565b606091505b5060008151036128fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128f4906142be565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505061295a565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036129d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129c89061443e565b60405180910390fd5b6129da81611e96565b15612a1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a11906144aa565b60405180910390fd5b612a26600083836127dd565b6001600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612a769190613522565b92505081905550816006600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b6000604051905090565b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b612ba482612b5b565b810181811067ffffffffffffffff82111715612bc357612bc2612b6c565b5b80604052505050565b6000612bd6612b42565b9050612be28282612b9b565b919050565b600067ffffffffffffffff821115612c0257612c01612b6c565b5b602082029050602081019050919050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612c4382612c18565b9050919050565b612c5381612c38565b8114612c5e57600080fd5b50565b600081359050612c7081612c4a565b92915050565b6000612c89612c8484612be7565b612bcc565b90508083825260208201905060208402830185811115612cac57612cab612c13565b5b835b81811015612cd55780612cc18882612c61565b845260208401935050602081019050612cae565b5050509392505050565b600082601f830112612cf457612cf3612b56565b5b8135612d04848260208601612c76565b91505092915050565b600060208284031215612d2357612d22612b4c565b5b600082013567ffffffffffffffff811115612d4157612d40612b51565b5b612d4d84828501612cdf565b91505092915050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612d8b81612d56565b8114612d9657600080fd5b50565b600081359050612da881612d82565b92915050565b600060208284031215612dc457612dc3612b4c565b5b6000612dd284828501612d99565b91505092915050565b60008115159050919050565b612df081612ddb565b82525050565b6000602082019050612e0b6000830184612de7565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612e4b578082015181840152602081019050612e30565b83811115612e5a576000848401525b50505050565b6000612e6b82612e11565b612e758185612e1c565b9350612e85818560208601612e2d565b612e8e81612b5b565b840191505092915050565b60006020820190508181036000830152612eb38184612e60565b905092915050565b6000819050919050565b612ece81612ebb565b8114612ed957600080fd5b50565b600081359050612eeb81612ec5565b92915050565b600060208284031215612f0757612f06612b4c565b5b6000612f1584828501612edc565b91505092915050565b612f2781612c38565b82525050565b6000602082019050612f426000830184612f1e565b92915050565b60008060408385031215612f5f57612f5e612b4c565b5b6000612f6d85828601612c61565b9250506020612f7e85828601612edc565b9150509250929050565b600080fd5b60008083601f840112612fa357612fa2612b56565b5b8235905067ffffffffffffffff811115612fc057612fbf612f88565b5b602083019150836001820283011115612fdc57612fdb612c13565b5b9250929050565b600080600080600060808688031215612fff57612ffe612b4c565b5b600061300d88828901612c61565b955050602061301e88828901612c61565b945050604061302f88828901612edc565b935050606086013567ffffffffffffffff8111156130505761304f612b51565b5b61305c88828901612f8d565b92509250509295509295909350565b61307481612d56565b82525050565b600060208201905061308f600083018461306b565b92915050565b61309e81612ebb565b82525050565b60006020820190506130b96000830184613095565b92915050565b6000806000606084860312156130d8576130d7612b4c565b5b60006130e686828701612c61565b93505060206130f786828701612c61565b925050604061310886828701612edc565b9150509250925092565b60006020828403121561312857613127612b4c565b5b600061313684828501612c61565b91505092915050565b6000819050919050565b600061316461315f61315a84612c18565b61313f565b612c18565b9050919050565b600061317682613149565b9050919050565b60006131888261316b565b9050919050565b6131988161317d565b82525050565b60006020820190506131b3600083018461318f565b92915050565b600080fd5b600067ffffffffffffffff8211156131d9576131d8612b6c565b5b6131e282612b5b565b9050602081019050919050565b82818337600083830152505050565b600061321161320c846131be565b612bcc565b90508281526020810184848401111561322d5761322c6131b9565b5b6132388482856131ef565b509392505050565b600082601f83011261325557613254612b56565b5b81356132658482602086016131fe565b91505092915050565b60006020828403121561328457613283612b4c565b5b600082013567ffffffffffffffff8111156132a2576132a1612b51565b5b6132ae84828501613240565b91505092915050565b6132c081612ddb565b81146132cb57600080fd5b50565b6000813590506132dd816132b7565b92915050565b600080604083850312156132fa576132f9612b4c565b5b600061330885828601612c61565b9250506020613319858286016132ce565b9150509250929050565b600067ffffffffffffffff82111561333e5761333d612b6c565b5b61334782612b5b565b9050602081019050919050565b600061336761336284613323565b612bcc565b905082815260208101848484011115613383576133826131b9565b5b61338e8482856131ef565b509392505050565b600082601f8301126133ab576133aa612b56565b5b81356133bb848260208601613354565b91505092915050565b600080600080608085870312156133de576133dd612b4c565b5b60006133ec87828801612c61565b94505060206133fd87828801612c61565b935050604061340e87828801612edc565b925050606085013567ffffffffffffffff81111561342f5761342e612b51565b5b61343b87828801613396565b91505092959194509250565b6000806040838503121561345e5761345d612b4c565b5b600061346c85828601612c61565b925050602061347d85828601612c61565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006134bd602083612e1c565b91506134c882613487565b602082019050919050565b600060208201905081810360008301526134ec816134b0565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061352d82612ebb565b915061353883612ebb565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561356d5761356c6134f3565b5b828201905092915050565b7f4d617468206f766572666c6f77206572726f7200000000000000000000000000600082015250565b60006135ae601383612e1c565b91506135b982613578565b602082019050919050565b600060208201905081810360008301526135dd816135a1565b9050919050565b7f43616e6e6f742066696c6c206f72646572000000000000000000000000000000600082015250565b600061361a601183612e1c565b9150613625826135e4565b602082019050919050565b600060208201905081810360008301526136498161360d565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600061368a82612ebb565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036136bc576136bb6134f3565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061370e57607f821691505b602082108103613721576137206136c7565b5b50919050565b7f4552433732313a20617070726f766564206e6f6e6578697374656e7420746b6e600082015250565b600061375d602083612e1c565b915061376882613727565b602082019050919050565b6000602082019050818103600083015261378c81613750565b9050919050565b7f4552433732313a20617070726f76616c2063757272656e74206f776e65720000600082015250565b60006137c9601e83612e1c565b91506137d482613793565b602082019050919050565b600060208201905081810360008301526137f8816137bc565b9050919050565b7f4552433732313a2063616c6c657220216f776e65722f21617070726f76656400600082015250565b6000613835601f83612e1c565b9150613840826137ff565b602082019050919050565b6000602082019050818103600083015261386481613828565b9050919050565b7f4552433732313a207478667220216f776e65722f617070726f76656400000000600082015250565b60006138a1601c83612e1c565b91506138ac8261386b565b602082019050919050565b600060208201905081810360008301526138d081613894565b9050919050565b600081905092915050565b50565b60006138f26000836138d7565b91506138fd826138e2565b600082019050919050565b6000613913826138e5565b9150819050919050565b7f5472616e73616374696f6e20556e7375636365737366756c0000000000000000600082015250565b6000613953601883612e1c565b915061395e8261391d565b602082019050919050565b6000602082019050818103600083015261398281613946565b9050919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026139eb7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826139ae565b6139f586836139ae565b95508019841693508086168417925050509392505050565b6000613a28613a23613a1e84612ebb565b61313f565b612ebb565b9050919050565b6000819050919050565b613a4283613a0d565b613a56613a4e82613a2f565b8484546139bb565b825550505050565b600090565b613a6b613a5e565b613a76818484613a39565b505050565b5b81811015613a9a57613a8f600082613a63565b600181019050613a7c565b5050565b601f821115613adf57613ab081613989565b613ab98461399e565b81016020851015613ac8578190505b613adc613ad48561399e565b830182613a7b565b50505b505050565b600082821c905092915050565b6000613b0260001984600802613ae4565b1980831691505092915050565b6000613b1b8383613af1565b9150826002028217905092915050565b613b3482612e11565b67ffffffffffffffff811115613b4d57613b4c612b6c565b5b613b5782546136f6565b613b62828285613a9e565b600060209050601f831160018114613b955760008415613b83578287015190505b613b8d8582613b0f565b865550613bf5565b601f198416613ba386613989565b60005b82811015613bcb57848901518255600182019150602085019450602081019050613ba6565b86831015613be85784890151613be4601f891682613af1565b8355505b6001600288020188555050505b505050505050565b7f4552433732313a206f776e207175657279206e6f6e657869737420746b6e0000600082015250565b6000613c33601e83612e1c565b9150613c3e82613bfd565b602082019050919050565b60006020820190508181036000830152613c6281613c26565b9050919050565b7f4552433732313a2062616c2071727920666f72207a65726f2061646472657373600082015250565b6000613c9f602083612e1c565b9150613caa82613c69565b602082019050919050565b60006020820190508181036000830152613cce81613c92565b9050919050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b6000613d0b601983612e1c565b9150613d1682613cd5565b602082019050919050565b60006020820190508181036000830152613d3a81613cfe565b9050919050565b7f4552433732314d657461646174613a205552492030783020746f6b656e000000600082015250565b6000613d77601d83612e1c565b9150613d8282613d41565b602082019050919050565b60006020820190508181036000830152613da681613d6a565b9050919050565b600081905092915050565b60008154613dc5816136f6565b613dcf8186613dad565b94506001821660008114613dea5760018114613dff57613e32565b60ff1983168652811515820286019350613e32565b613e0885613989565b60005b83811015613e2a57815481890152600182019150602081019050613e0b565b838801955050505b50505092915050565b7f6d7973746572792e6a736f6e0000000000000000000000000000000000000000600082015250565b6000613e71600c83613dad565b9150613e7c82613e3b565b600c82019050919050565b6000613e938284613db8565b9150613e9e82613e64565b915081905092915050565b6000613eb482612e11565b613ebe8185613dad565b9350613ece818560208601612e2d565b80840191505092915050565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b6000613f10600583613dad565b9150613f1b82613eda565b600582019050919050565b6000613f328285613db8565b9150613f3e8284613ea9565b9150613f4982613f03565b91508190509392505050565b7f636f6e74726163742e6a736f6e00000000000000000000000000000000000000600082015250565b6000613f8b600d83613dad565b9150613f9682613f55565b600d82019050919050565b6000613fad8284613db8565b9150613fb882613f7e565b915081905092915050565b7f4f776e61626c653a206e6577206f776e65722069732030782061646472657373600082015250565b6000613ff9602083612e1c565b915061400482613fc3565b602082019050919050565b6000602082019050818103600083015261402881613fec565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061406982612ebb565b915061407483612ebb565b9250826140845761408361402f565b5b828204905092915050565b60006040820190506140a46000830185612f1e565b6140b16020830184612f1e565b9392505050565b6000815190506140c7816132b7565b92915050565b6000602082840312156140e3576140e2612b4c565b5b60006140f1848285016140b8565b91505092915050565b7f4552433732313a206f70207175657279206e6f6e6578697374656e7420746b6e600082015250565b6000614130602083612e1c565b915061413b826140fa565b602082019050919050565b6000602082019050818103600083015261415f81614123565b9050919050565b7f4552433732313a207478667220746f6b656e206e6f74206f776e656400000000600082015250565b600061419c601c83612e1c565b91506141a782614166565b602082019050919050565b600060208201905081810360008301526141cb8161418f565b9050919050565b7f4552433732313a207478667220746f2030783020616464726573730000000000600082015250565b6000614208601b83612e1c565b9150614213826141d2565b602082019050919050565b60006020820190508181036000830152614237816141fb565b9050919050565b600061424982612ebb565b915061425483612ebb565b925082821015614267576142666134f3565b5b828203905092915050565b7f7478667220746f206e6f6e204552433732315265636965766572000000000000600082015250565b60006142a8601a83612e1c565b91506142b382614272565b602082019050919050565b600060208201905081810360008301526142d78161429b565b9050919050565b60006142e982612ebb565b91506142f483612ebb565b9250826143045761430361402f565b5b828206905092915050565b600081519050919050565b600082825260208201905092915050565b60006143368261430f565b614340818561431a565b9350614350818560208601612e2d565b61435981612b5b565b840191505092915050565b60006080820190506143796000830187612f1e565b6143866020830186612f1e565b6143936040830185613095565b81810360608301526143a5818461432b565b905095945050505050565b6000815190506143bf81612d82565b92915050565b6000602082840312156143db576143da612b4c565b5b60006143e9848285016143b0565b91505092915050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b6000614428602083612e1c565b9150614433826143f2565b602082019050919050565b600060208201905081810360008301526144578161441b565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b6000614494601c83612e1c565b915061449f8261445e565b602082019050919050565b600060208201905081810360008301526144c381614487565b905091905056fea2646970667358221220737eef15ea004b0e82519229305b12501f7150ed8f45800569d97681923b32b364736f6c634300080f0033
Deployed Bytecode Sourcemap
21686:17311:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23971:492;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23294:358;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37816:84;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27376:207;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26907:403;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36788:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25844:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24883:413;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28283:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20288:112;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20067:102;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23734:225;;;;;;;;;;;;;:::i;:::-;;2473:143;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28693:210;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24534:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22536:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24735:140;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22455:20;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25627:95;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26611:228;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25512:103;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26351:198;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19282:94;;;;;;;;;;;;;:::i;:::-;;22503:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22572:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18631:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37957:88;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27655:326;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25945:71;;;;;;;;;;;;;:::i;:::-;;25734:102;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28974:330;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38132:544;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20177:103;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38688:139;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28052:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19531:186;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26028:259;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23971:492;18862:12;:10;:12::i;:::-;18851:23;;:7;:5;:7::i;:::-;:23;;;18843:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24040:11:::1;24054:3;:10;24040:24;;24106:12;;24099:3;24084:12;;:18;;;;:::i;:::-;24083:35;24075:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;24185:11;;24177:3;24162:12;;:18;;;;:::i;:::-;24161:35;;24153:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;24239:21;24263:12;;24239:36;;24292:9;24288:168;24311:3;24307:1;:7;24288:168;;;24336:36;24346:3;24350:1;24346:6;;;;;;;;:::i;:::-;;;;;;;;24370:1;24354:13;:17;;;;:::i;:::-;24336:9;:36::i;:::-;24387:12;;:15;;;;;;;;;:::i;:::-;;;;;;24316:3;;;;;:::i;:::-;;;;24288:168;;;;24029:434;;23971:492:::0;:::o;23294:358::-;23379:4;23419:25;23404:40;;;:11;:40;;;;:109;;;;23480:33;23465:48;;;:11;:48;;;;23404:109;:170;;;;23549:25;23534:40;;;:11;:40;;;;23404:170;:240;;;;23610:34;;;23595:49;;;:11;:49;;;;23404:240;23396:248;;23294:358;;;:::o;37816:84::-;37855:13;37887:5;37880:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37816:84;:::o;27376:207::-;27452:7;27480:16;27488:7;27480;:16::i;:::-;27472:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;27551:15;:24;27567:7;27551:24;;;;;;;;;;;;;;;;;;;;;27544:31;;27376:207;;;:::o;26907:403::-;27005:2;3994:30;4015:8;3994:20;:30::i;:::-;27019:13:::1;27035:16;27043:7;27035;:16::i;:::-;27019:32;;27076:5;27070:11;;:2;:11;;::::0;27062:54:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;27165:5;27151:19;;:10;:19;;;:58;;;;27174:35;27191:5;27198:10;27174:16;:35::i;:::-;27151:58;27129:139;;;;;;;;;;;;:::i;:::-;;;;;;;;;27281:21;27290:2;27294:7;27281:8;:21::i;:::-;27008:302;26907:403:::0;;;:::o;36788:215::-;36905:6;36965:30;;;36958:37;;36788:215;;;;;;;:::o;25844:93::-;25890:7;25917:12;;25910:19;;25844:93;:::o;24883:413::-;20448:8;:22;20457:12;:10;:12::i;:::-;20448:22;;;;;;;;;;;;;;;;;;;;;;;;;20440:31;;;;;;25063:11:::1;;25054:4;25039:12;;:19;;;;:::i;:::-;25038:36;;25030:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;25109:21;25133:12;;25109:36;;25160:9;25156:123;25179:4;25175:1;:8;25156:123;;;25205:33;25215:3;25236:1;25220:13;:17;;;;:::i;:::-;25205:9;:33::i;:::-;25253:12;;:14;;;;;;;;;:::i;:::-;;;;;;25185:3;;;;;:::i;:::-;;;;25156:123;;;;24950:346;24883:413:::0;;:::o;28283:339::-;28426:4;3822:10;3814:18;;:4;:18;;;3810:83;;3849:32;3870:10;3849:20;:32::i;:::-;3810:83;28503:39:::1;28522:10;28534:7;28503:18;:39::i;:::-;28495:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;28586:28;28596:4;28602:2;28606:7;28586:9;:28::i;:::-;28283:339:::0;;;;:::o;20288:112::-;20348:4;20372:8;:20;20381:10;20372:20;;;;;;;;;;;;;;;;;;;;;;;;;20365:27;;20288:112;;;:::o;20067:102::-;18862:12;:10;:12::i;:::-;18851:23;;:7;:5;:7::i;:::-;:23;;;18843:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20157:4:::1;20136:8:::0;:18:::1;20145:8;20136:18;;;;;;;;;;;;;;;;:25;;;;;;;;;;;;;;;;;;20067:102:::0;:::o;23734:225::-;18862:12;:10;:12::i;:::-;18851:23;;:7;:5;:7::i;:::-;:23;;;18843:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23784:18:::1;23805:21;23784:42;;23838:12;23856;;;;;;;;;;;:17;;23881:10;23856:40;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23837:59;;;23915:7;23907:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;23773:186;;23734:225::o:0;2473:143::-;2573:42;2473:143;:::o;28693:210::-;28840:4;3822:10;3814:18;;:4;:18;;;3810:83;;3849:32;3870:10;3849:20;:32::i;:::-;3810:83;28856:39:::1;28873:4;28879:2;28883:7;28856:39;;;;;;;;;;;::::0;:16:::1;:39::i;:::-;28693:210:::0;;;;:::o;24534:125::-;24609:16;24617:7;24609;:16::i;:::-;24593:32;;:12;:10;:12::i;:::-;:32;;;24585:41;;;;;;24637:14;24643:7;24637:5;:14::i;:::-;24534:125;:::o;22536:27::-;;;;:::o;24735:140::-;20448:8;:22;20457:12;:10;:12::i;:::-;20448:22;;;;;;;;;;;;;;;;;;;;;;;;;20440:31;;;;;;24836::::1;24846:5;24853:3;24858:8;24836:9;:31::i;:::-;24735:140:::0;;;:::o;22455:20::-;;;;;;;;;;;;;:::o;25627:95::-;18862:12;:10;:12::i;:::-;18851:23;;:7;:5;:7::i;:::-;:23;;;18843:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25708:6:::1;25697:8;:17;;;;;;:::i;:::-;;25627:95:::0;:::o;26611:228::-;26683:7;26703:13;26719:7;:16;26727:7;26719:16;;;;;;;;;;;;;;;;;;;;;26703:32;;26771:1;26754:19;;:5;:19;;;26746:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;26826:5;26819:12;;;26611:228;;;:::o;25512:103::-;18862:12;:10;:12::i;:::-;18851:23;;:7;:5;:7::i;:::-;:23;;;18843:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25598:9:::1;25583:12;;:24;;;;;;;;;;;;;;;;;;25512:103:::0;:::o;26351:198::-;26423:7;26468:1;26451:19;;:5;:19;;;26443:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;26525:9;:16;26535:5;26525:16;;;;;;;;;;;;;;;;26518:23;;26351:198;;;:::o;19282:94::-;18862:12;:10;:12::i;:::-;18851:23;;:7;:5;:7::i;:::-;:23;;;18843:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19347:21:::1;19365:1;19347:9;:21::i;:::-;19282:94::o:0;22503:26::-;;;;:::o;22572:27::-;;;;;;;;;;;;;:::o;18631:87::-;18677:7;18704:6;;;;;;;;;;;18697:13;;18631:87;:::o;37957:88::-;37998:13;38030:7;38023:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37957:88;:::o;27655:326::-;27767:8;3994:30;4015:8;3994:20;:30::i;:::-;27807:10:::1;27795:22;;:8;:22;;::::0;27787:60:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;27903:8;27860:18;:30;27879:10;27860:30;;;;;;;;;;;;;;;:40;27891:8;27860:40;;;;;;;;;;;;;;;;:51;;;;;;;;;;;;;;;;;;27954:8;27927:46;;27942:10;27927:46;;;27964:8;27927:46;;;;;;:::i;:::-;;;;;;;;27655:326:::0;;;:::o;25945:71::-;18862:12;:10;:12::i;:::-;18851:23;;:7;:5;:7::i;:::-;:23;;;18843:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;26004:4:::1;25993:8;;:15;;;;;;;;;;;;;;;;;;25945:71::o:0;25734:102::-;18862:12;:10;:12::i;:::-;18851:23;;:7;:5;:7::i;:::-;:23;;;18843:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25819:9:::1;25805:11;:23;;;;25734:102:::0;:::o;28974:330::-;29150:4;3822:10;3814:18;;:4;:18;;;3810:83;;3849:32;3870:10;3849:20;:32::i;:::-;3810:83;29174:39:::1;29193:10;29205:7;29174:18;:39::i;:::-;29166:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;29257:39;29271:4;29277:2;29281:7;29290:5;29257:13;:39::i;:::-;28974:330:::0;;;;;:::o;38132:544::-;38190:13;38223:16;38231:7;38223;:16::i;:::-;38215:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;38284:22;38332:8;;;;;;;;;;;38327:306;;38431:8;38414:42;;;;;;;;:::i;:::-;;;;;;;;;;;;;38396:61;;38327:306;;;38583:8;38593:17;38602:7;38593:8;:17::i;:::-;38566:54;;;;;;;;;:::i;:::-;;;;;;;;;;;;;38548:73;;38327:306;38660:8;38653:15;;;38132:544;;;:::o;20177:103::-;18862:12;:10;:12::i;:::-;18851:23;;:7;:5;:7::i;:::-;:23;;;18843:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20267:5:::1;20246:8;:18;20255:8;20246:18;;;;;;;;;;;;;;;;:26;;;;;;;;;;;;;;;;;;20177:103:::0;:::o;38688:139::-;38732:13;38793:8;38776:42;;;;;;;;:::i;:::-;;;;;;;;;;;;;38762:57;;38688:139;:::o;28052:164::-;28149:4;28173:18;:25;28192:5;28173:25;;;;;;;;;;;;;;;:35;28199:8;28173:35;;;;;;;;;;;;;;;;;;;;;;;;;28166:42;;28052:164;;;;:::o;19531:186::-;18862:12;:10;:12::i;:::-;18851:23;;:7;:5;:7::i;:::-;:23;;;18843:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19640:1:::1;19620:22;;:8;:22;;::::0;19612:67:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;19690:19;19700:8;19690:9;:19::i;:::-;19531:186:::0;:::o;26028:259::-;26093:7;26235:6;26208:9;:23;26218:12;26208:23;;;;;;;;;;;;;;;;:34;;;;:::i;:::-;26201:41;;26028:259;;;:::o;18014:98::-;18067:7;18094:10;18087:17;;18014:98;:::o;31755:110::-;31831:26;31841:2;31845:7;31831:26;;;;;;;;;;;;:9;:26::i;:::-;31755:110;;:::o;30790:127::-;30855:4;30907:1;30879:30;;:7;:16;30887:7;30879:16;;;;;;;;;;;;;;;;;;;;;:30;;;;30872:37;;30790:127;;;:::o;4052:419::-;4291:1;2573:42;4243:45;;;:49;4239:225;;;2573:42;4314;;;4365:4;4372:8;4314:67;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4309:144;;4428:8;4409:28;;;;;;;;;;;:::i;:::-;;;;;;;;4309:144;4239:225;4052:419;:::o;34691:167::-;34793:2;34766:15;:24;34782:7;34766:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;34842:7;34838:2;34811:39;;34820:16;34828:7;34820;:16::i;:::-;34811:39;;;;;;;;;;;;34691:167;;:::o;31084:329::-;31177:4;31202:16;31210:7;31202;:16::i;:::-;31194:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;31266:13;31282:16;31290:7;31282;:16::i;:::-;31266:32;;31328:5;31317:16;;:7;:16;;;:51;;;;31361:7;31337:31;;:20;31349:7;31337:11;:20::i;:::-;:31;;;31317:51;:87;;;;31372:32;31389:5;31396:7;31372:16;:32::i;:::-;31317:87;31309:96;;;31084:329;;;;:::o;34026:547::-;34178:4;34158:24;;:16;34166:7;34158;:16::i;:::-;:24;;;34150:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;34248:1;34234:16;;:2;:16;;;34226:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;34293:39;34314:4;34320:2;34324:7;34293:20;:39::i;:::-;34397:29;34414:1;34418:7;34397:8;:29::i;:::-;34458:1;34439:9;:15;34449:4;34439:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;34487:1;34470:9;:13;34480:2;34470:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;34518:2;34499:7;:16;34507:7;34499:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;34557:7;34553:2;34538:27;;34547:4;34538:27;;;;;;;;;;;;34026:547;;;:::o;33336:353::-;33396:13;33412:16;33420:7;33412;:16::i;:::-;33396:32;;33441:48;33462:5;33477:1;33481:7;33441:20;:48::i;:::-;33530:29;33547:1;33551:7;33530:8;:29::i;:::-;33592:1;33572:9;:16;33582:5;33572:16;;;;;;;;;;;;;;;;:21;;;;;;;:::i;:::-;;;;;;;;33611:7;:16;33619:7;33611:16;;;;;;;;;;;;33604:23;;;;;;;;;;;33673:7;33669:1;33645:36;;33654:5;33645:36;;;;;;;;;;;;33385:304;33336:353;:::o;19725:173::-;19781:16;19800:6;;;;;;;;;;;19781:25;;19826:8;19817:6;;:17;;;;;;;;;;;;;;;;;;19881:8;19850:40;;19871:8;19850:40;;;;;;;;;;;;19770:128;19725:173;:::o;30186:291::-;30343:28;30353:4;30359:2;30363:7;30343:9;:28::i;:::-;30390:48;30413:4;30419:2;30423:7;30432:5;30390:22;:48::i;:::-;30382:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;30186:291;;;;:::o;20534:532::-;20590:13;20629:1;20620:5;:10;20616:53;;20647:10;;;;;;;;;;;;;;;;;;;;;20616:53;20679:12;20694:5;20679:20;;20710:14;20735:78;20750:1;20742:4;:9;20735:78;;20768:8;;;;;:::i;:::-;;;;20799:2;20791:10;;;;;:::i;:::-;;;20735:78;;;20823:19;20855:6;20845:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20823:39;;20873:154;20889:1;20880:5;:10;20873:154;;20917:1;20907:11;;;;;:::i;:::-;;;20984:2;20976:5;:10;;;;:::i;:::-;20963:2;:24;;;;:::i;:::-;20950:39;;20933:6;20940;20933:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;21013:2;21004:11;;;;;:::i;:::-;;;20873:154;;;21051:6;21037:21;;;;;20534:532;;;;:::o;32092:297::-;32222:18;32228:2;32232:7;32222:5;:18::i;:::-;32273:54;32304:1;32308:2;32312:7;32321:5;32273:22;:54::i;:::-;32251:130;;;;;;;;;;;;:::i;:::-;;;;;;;;;32092:297;;;:::o;37575:98::-;;;;:::o;35423:777::-;35578:4;35599:15;:2;:13;;;:15::i;:::-;35595:598;;;35651:2;35635:36;;;35672:10;35684:4;35690:7;35699:5;35635:70;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;35631:507;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35896:1;35879:6;:13;:18;35875:248;;35922:36;;;;;;;;;;:::i;:::-;;;;;;;;35875:248;36073:6;36067:13;36058:6;36054:2;36050:15;36043:38;35631:507;35766:45;;;35756:55;;;:6;:55;;;;35749:62;;;;;35595:598;36177:4;36170:11;;35423:777;;;;;;;:::o;32725:382::-;32819:1;32805:16;;:2;:16;;;32797:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;32878:16;32886:7;32878;:16::i;:::-;32877:17;32869:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;32940:45;32969:1;32973:2;32977:7;32940:20;:45::i;:::-;33015:1;32998:9;:13;33008:2;32998:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;33046:2;33027:7;:16;33035:7;33027:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;33091:7;33087:2;33066:33;;33083:1;33066:33;;;;;;;;;;;;32725:382;;:::o;10935:387::-;10995:4;11203:12;11270:7;11258:20;11250:28;;11313:1;11306:4;:8;11299:15;;;10935:387;;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:117;443:1;440;433:12;457:102;498:6;549:2;545:7;540:2;533:5;529:14;525:28;515:38;;457:102;;;:::o;565:180::-;613:77;610:1;603:88;710:4;707:1;700:15;734:4;731:1;724:15;751:281;834:27;856:4;834:27;:::i;:::-;826:6;822:40;964:6;952:10;949:22;928:18;916:10;913:34;910:62;907:88;;;975:18;;:::i;:::-;907:88;1015:10;1011:2;1004:22;794:238;751:281;;:::o;1038:129::-;1072:6;1099:20;;:::i;:::-;1089:30;;1128:33;1156:4;1148:6;1128:33;:::i;:::-;1038:129;;;:::o;1173:311::-;1250:4;1340:18;1332:6;1329:30;1326:56;;;1362:18;;:::i;:::-;1326:56;1412:4;1404:6;1400:17;1392:25;;1472:4;1466;1462:15;1454:23;;1173:311;;;:::o;1490:117::-;1599:1;1596;1589:12;1613:126;1650:7;1690:42;1683:5;1679:54;1668:65;;1613:126;;;:::o;1745:96::-;1782:7;1811:24;1829:5;1811:24;:::i;:::-;1800:35;;1745:96;;;:::o;1847:122::-;1920:24;1938:5;1920:24;:::i;:::-;1913:5;1910:35;1900:63;;1959:1;1956;1949:12;1900:63;1847:122;:::o;1975:139::-;2021:5;2059:6;2046:20;2037:29;;2075:33;2102:5;2075:33;:::i;:::-;1975:139;;;;:::o;2137:710::-;2233:5;2258:81;2274:64;2331:6;2274:64;:::i;:::-;2258:81;:::i;:::-;2249:90;;2359:5;2388:6;2381:5;2374:21;2422:4;2415:5;2411:16;2404:23;;2475:4;2467:6;2463:17;2455:6;2451:30;2504:3;2496:6;2493:15;2490:122;;;2523:79;;:::i;:::-;2490:122;2638:6;2621:220;2655:6;2650:3;2647:15;2621:220;;;2730:3;2759:37;2792:3;2780:10;2759:37;:::i;:::-;2754:3;2747:50;2826:4;2821:3;2817:14;2810:21;;2697:144;2681:4;2676:3;2672:14;2665:21;;2621:220;;;2625:21;2239:608;;2137:710;;;;;:::o;2870:370::-;2941:5;2990:3;2983:4;2975:6;2971:17;2967:27;2957:122;;2998:79;;:::i;:::-;2957:122;3115:6;3102:20;3140:94;3230:3;3222:6;3215:4;3207:6;3203:17;3140:94;:::i;:::-;3131:103;;2947:293;2870:370;;;;:::o;3246:539::-;3330:6;3379:2;3367:9;3358:7;3354:23;3350:32;3347:119;;;3385:79;;:::i;:::-;3347:119;3533:1;3522:9;3518:17;3505:31;3563:18;3555:6;3552:30;3549:117;;;3585:79;;:::i;:::-;3549:117;3690:78;3760:7;3751:6;3740:9;3736:22;3690:78;:::i;:::-;3680:88;;3476:302;3246:539;;;;:::o;3791:149::-;3827:7;3867:66;3860:5;3856:78;3845:89;;3791:149;;;:::o;3946:120::-;4018:23;4035:5;4018:23;:::i;:::-;4011:5;4008:34;3998:62;;4056:1;4053;4046:12;3998:62;3946:120;:::o;4072:137::-;4117:5;4155:6;4142:20;4133:29;;4171:32;4197:5;4171:32;:::i;:::-;4072:137;;;;:::o;4215:327::-;4273:6;4322:2;4310:9;4301:7;4297:23;4293:32;4290:119;;;4328:79;;:::i;:::-;4290:119;4448:1;4473:52;4517:7;4508:6;4497:9;4493:22;4473:52;:::i;:::-;4463:62;;4419:116;4215:327;;;;:::o;4548:90::-;4582:7;4625:5;4618:13;4611:21;4600:32;;4548:90;;;:::o;4644:109::-;4725:21;4740:5;4725:21;:::i;:::-;4720:3;4713:34;4644:109;;:::o;4759:210::-;4846:4;4884:2;4873:9;4869:18;4861:26;;4897:65;4959:1;4948:9;4944:17;4935:6;4897:65;:::i;:::-;4759:210;;;;:::o;4975:99::-;5027:6;5061:5;5055:12;5045:22;;4975:99;;;:::o;5080:169::-;5164:11;5198:6;5193:3;5186:19;5238:4;5233:3;5229:14;5214:29;;5080:169;;;;:::o;5255:307::-;5323:1;5333:113;5347:6;5344:1;5341:13;5333:113;;;5432:1;5427:3;5423:11;5417:18;5413:1;5408:3;5404:11;5397:39;5369:2;5366:1;5362:10;5357:15;;5333:113;;;5464:6;5461:1;5458:13;5455:101;;;5544:1;5535:6;5530:3;5526:16;5519:27;5455:101;5304:258;5255:307;;;:::o;5568:364::-;5656:3;5684:39;5717:5;5684:39;:::i;:::-;5739:71;5803:6;5798:3;5739:71;:::i;:::-;5732:78;;5819:52;5864:6;5859:3;5852:4;5845:5;5841:16;5819:52;:::i;:::-;5896:29;5918:6;5896:29;:::i;:::-;5891:3;5887:39;5880:46;;5660:272;5568:364;;;;:::o;5938:313::-;6051:4;6089:2;6078:9;6074:18;6066:26;;6138:9;6132:4;6128:20;6124:1;6113:9;6109:17;6102:47;6166:78;6239:4;6230:6;6166:78;:::i;:::-;6158:86;;5938:313;;;;:::o;6257:77::-;6294:7;6323:5;6312:16;;6257:77;;;:::o;6340:122::-;6413:24;6431:5;6413:24;:::i;:::-;6406:5;6403:35;6393:63;;6452:1;6449;6442:12;6393:63;6340:122;:::o;6468:139::-;6514:5;6552:6;6539:20;6530:29;;6568:33;6595:5;6568:33;:::i;:::-;6468:139;;;;:::o;6613:329::-;6672:6;6721:2;6709:9;6700:7;6696:23;6692:32;6689:119;;;6727:79;;:::i;:::-;6689:119;6847:1;6872:53;6917:7;6908:6;6897:9;6893:22;6872:53;:::i;:::-;6862:63;;6818:117;6613:329;;;;:::o;6948:118::-;7035:24;7053:5;7035:24;:::i;:::-;7030:3;7023:37;6948:118;;:::o;7072:222::-;7165:4;7203:2;7192:9;7188:18;7180:26;;7216:71;7284:1;7273:9;7269:17;7260:6;7216:71;:::i;:::-;7072:222;;;;:::o;7300:474::-;7368:6;7376;7425:2;7413:9;7404:7;7400:23;7396:32;7393:119;;;7431:79;;:::i;:::-;7393:119;7551:1;7576:53;7621:7;7612:6;7601:9;7597:22;7576:53;:::i;:::-;7566:63;;7522:117;7678:2;7704:53;7749:7;7740:6;7729:9;7725:22;7704:53;:::i;:::-;7694:63;;7649:118;7300:474;;;;;:::o;7780:117::-;7889:1;7886;7879:12;7916:552;7973:8;7983:6;8033:3;8026:4;8018:6;8014:17;8010:27;8000:122;;8041:79;;:::i;:::-;8000:122;8154:6;8141:20;8131:30;;8184:18;8176:6;8173:30;8170:117;;;8206:79;;:::i;:::-;8170:117;8320:4;8312:6;8308:17;8296:29;;8374:3;8366:4;8358:6;8354:17;8344:8;8340:32;8337:41;8334:128;;;8381:79;;:::i;:::-;8334:128;7916:552;;;;;:::o;8474:963::-;8571:6;8579;8587;8595;8603;8652:3;8640:9;8631:7;8627:23;8623:33;8620:120;;;8659:79;;:::i;:::-;8620:120;8779:1;8804:53;8849:7;8840:6;8829:9;8825:22;8804:53;:::i;:::-;8794:63;;8750:117;8906:2;8932:53;8977:7;8968:6;8957:9;8953:22;8932:53;:::i;:::-;8922:63;;8877:118;9034:2;9060:53;9105:7;9096:6;9085:9;9081:22;9060:53;:::i;:::-;9050:63;;9005:118;9190:2;9179:9;9175:18;9162:32;9221:18;9213:6;9210:30;9207:117;;;9243:79;;:::i;:::-;9207:117;9356:64;9412:7;9403:6;9392:9;9388:22;9356:64;:::i;:::-;9338:82;;;;9133:297;8474:963;;;;;;;;:::o;9443:115::-;9528:23;9545:5;9528:23;:::i;:::-;9523:3;9516:36;9443:115;;:::o;9564:218::-;9655:4;9693:2;9682:9;9678:18;9670:26;;9706:69;9772:1;9761:9;9757:17;9748:6;9706:69;:::i;:::-;9564:218;;;;:::o;9788:118::-;9875:24;9893:5;9875:24;:::i;:::-;9870:3;9863:37;9788:118;;:::o;9912:222::-;10005:4;10043:2;10032:9;10028:18;10020:26;;10056:71;10124:1;10113:9;10109:17;10100:6;10056:71;:::i;:::-;9912:222;;;;:::o;10140:619::-;10217:6;10225;10233;10282:2;10270:9;10261:7;10257:23;10253:32;10250:119;;;10288:79;;:::i;:::-;10250:119;10408:1;10433:53;10478:7;10469:6;10458:9;10454:22;10433:53;:::i;:::-;10423:63;;10379:117;10535:2;10561:53;10606:7;10597:6;10586:9;10582:22;10561:53;:::i;:::-;10551:63;;10506:118;10663:2;10689:53;10734:7;10725:6;10714:9;10710:22;10689:53;:::i;:::-;10679:63;;10634:118;10140:619;;;;;:::o;10765:329::-;10824:6;10873:2;10861:9;10852:7;10848:23;10844:32;10841:119;;;10879:79;;:::i;:::-;10841:119;10999:1;11024:53;11069:7;11060:6;11049:9;11045:22;11024:53;:::i;:::-;11014:63;;10970:117;10765:329;;;;:::o;11100:60::-;11128:3;11149:5;11142:12;;11100:60;;;:::o;11166:142::-;11216:9;11249:53;11267:34;11276:24;11294:5;11276:24;:::i;:::-;11267:34;:::i;:::-;11249:53;:::i;:::-;11236:66;;11166:142;;;:::o;11314:126::-;11364:9;11397:37;11428:5;11397:37;:::i;:::-;11384:50;;11314:126;;;:::o;11446:157::-;11527:9;11560:37;11591:5;11560:37;:::i;:::-;11547:50;;11446:157;;;:::o;11609:193::-;11727:68;11789:5;11727:68;:::i;:::-;11722:3;11715:81;11609:193;;:::o;11808:284::-;11932:4;11970:2;11959:9;11955:18;11947:26;;11983:102;12082:1;12071:9;12067:17;12058:6;11983:102;:::i;:::-;11808:284;;;;:::o;12098:117::-;12207:1;12204;12197:12;12221:308;12283:4;12373:18;12365:6;12362:30;12359:56;;;12395:18;;:::i;:::-;12359:56;12433:29;12455:6;12433:29;:::i;:::-;12425:37;;12517:4;12511;12507:15;12499:23;;12221:308;;;:::o;12535:154::-;12619:6;12614:3;12609;12596:30;12681:1;12672:6;12667:3;12663:16;12656:27;12535:154;;;:::o;12695:412::-;12773:5;12798:66;12814:49;12856:6;12814:49;:::i;:::-;12798:66;:::i;:::-;12789:75;;12887:6;12880:5;12873:21;12925:4;12918:5;12914:16;12963:3;12954:6;12949:3;12945:16;12942:25;12939:112;;;12970:79;;:::i;:::-;12939:112;13060:41;13094:6;13089:3;13084;13060:41;:::i;:::-;12779:328;12695:412;;;;;:::o;13127:340::-;13183:5;13232:3;13225:4;13217:6;13213:17;13209:27;13199:122;;13240:79;;:::i;:::-;13199:122;13357:6;13344:20;13382:79;13457:3;13449:6;13442:4;13434:6;13430:17;13382:79;:::i;:::-;13373:88;;13189:278;13127:340;;;;:::o;13473:509::-;13542:6;13591:2;13579:9;13570:7;13566:23;13562:32;13559:119;;;13597:79;;:::i;:::-;13559:119;13745:1;13734:9;13730:17;13717:31;13775:18;13767:6;13764:30;13761:117;;;13797:79;;:::i;:::-;13761:117;13902:63;13957:7;13948:6;13937:9;13933:22;13902:63;:::i;:::-;13892:73;;13688:287;13473:509;;;;:::o;13988:116::-;14058:21;14073:5;14058:21;:::i;:::-;14051:5;14048:32;14038:60;;14094:1;14091;14084:12;14038:60;13988:116;:::o;14110:133::-;14153:5;14191:6;14178:20;14169:29;;14207:30;14231:5;14207:30;:::i;:::-;14110:133;;;;:::o;14249:468::-;14314:6;14322;14371:2;14359:9;14350:7;14346:23;14342:32;14339:119;;;14377:79;;:::i;:::-;14339:119;14497:1;14522:53;14567:7;14558:6;14547:9;14543:22;14522:53;:::i;:::-;14512:63;;14468:117;14624:2;14650:50;14692:7;14683:6;14672:9;14668:22;14650:50;:::i;:::-;14640:60;;14595:115;14249:468;;;;;:::o;14723:307::-;14784:4;14874:18;14866:6;14863:30;14860:56;;;14896:18;;:::i;:::-;14860:56;14934:29;14956:6;14934:29;:::i;:::-;14926:37;;15018:4;15012;15008:15;15000:23;;14723:307;;;:::o;15036:410::-;15113:5;15138:65;15154:48;15195:6;15154:48;:::i;:::-;15138:65;:::i;:::-;15129:74;;15226:6;15219:5;15212:21;15264:4;15257:5;15253:16;15302:3;15293:6;15288:3;15284:16;15281:25;15278:112;;;15309:79;;:::i;:::-;15278:112;15399:41;15433:6;15428:3;15423;15399:41;:::i;:::-;15119:327;15036:410;;;;;:::o;15465:338::-;15520:5;15569:3;15562:4;15554:6;15550:17;15546:27;15536:122;;15577:79;;:::i;:::-;15536:122;15694:6;15681:20;15719:78;15793:3;15785:6;15778:4;15770:6;15766:17;15719:78;:::i;:::-;15710:87;;15526:277;15465:338;;;;:::o;15809:943::-;15904:6;15912;15920;15928;15977:3;15965:9;15956:7;15952:23;15948:33;15945:120;;;15984:79;;:::i;:::-;15945:120;16104:1;16129:53;16174:7;16165:6;16154:9;16150:22;16129:53;:::i;:::-;16119:63;;16075:117;16231:2;16257:53;16302:7;16293:6;16282:9;16278:22;16257:53;:::i;:::-;16247:63;;16202:118;16359:2;16385:53;16430:7;16421:6;16410:9;16406:22;16385:53;:::i;:::-;16375:63;;16330:118;16515:2;16504:9;16500:18;16487:32;16546:18;16538:6;16535:30;16532:117;;;16568:79;;:::i;:::-;16532:117;16673:62;16727:7;16718:6;16707:9;16703:22;16673:62;:::i;:::-;16663:72;;16458:287;15809:943;;;;;;;:::o;16758:474::-;16826:6;16834;16883:2;16871:9;16862:7;16858:23;16854:32;16851:119;;;16889:79;;:::i;:::-;16851:119;17009:1;17034:53;17079:7;17070:6;17059:9;17055:22;17034:53;:::i;:::-;17024:63;;16980:117;17136:2;17162:53;17207:7;17198:6;17187:9;17183:22;17162:53;:::i;:::-;17152:63;;17107:118;16758:474;;;;;:::o;17238:182::-;17378:34;17374:1;17366:6;17362:14;17355:58;17238:182;:::o;17426:366::-;17568:3;17589:67;17653:2;17648:3;17589:67;:::i;:::-;17582:74;;17665:93;17754:3;17665:93;:::i;:::-;17783:2;17778:3;17774:12;17767:19;;17426:366;;;:::o;17798:419::-;17964:4;18002:2;17991:9;17987:18;17979:26;;18051:9;18045:4;18041:20;18037:1;18026:9;18022:17;18015:47;18079:131;18205:4;18079:131;:::i;:::-;18071:139;;17798:419;;;:::o;18223:180::-;18271:77;18268:1;18261:88;18368:4;18365:1;18358:15;18392:4;18389:1;18382:15;18409:305;18449:3;18468:20;18486:1;18468:20;:::i;:::-;18463:25;;18502:20;18520:1;18502:20;:::i;:::-;18497:25;;18656:1;18588:66;18584:74;18581:1;18578:81;18575:107;;;18662:18;;:::i;:::-;18575:107;18706:1;18703;18699:9;18692:16;;18409:305;;;;:::o;18720:169::-;18860:21;18856:1;18848:6;18844:14;18837:45;18720:169;:::o;18895:366::-;19037:3;19058:67;19122:2;19117:3;19058:67;:::i;:::-;19051:74;;19134:93;19223:3;19134:93;:::i;:::-;19252:2;19247:3;19243:12;19236:19;;18895:366;;;:::o;19267:419::-;19433:4;19471:2;19460:9;19456:18;19448:26;;19520:9;19514:4;19510:20;19506:1;19495:9;19491:17;19484:47;19548:131;19674:4;19548:131;:::i;:::-;19540:139;;19267:419;;;:::o;19692:167::-;19832:19;19828:1;19820:6;19816:14;19809:43;19692:167;:::o;19865:366::-;20007:3;20028:67;20092:2;20087:3;20028:67;:::i;:::-;20021:74;;20104:93;20193:3;20104:93;:::i;:::-;20222:2;20217:3;20213:12;20206:19;;19865:366;;;:::o;20237:419::-;20403:4;20441:2;20430:9;20426:18;20418:26;;20490:9;20484:4;20480:20;20476:1;20465:9;20461:17;20454:47;20518:131;20644:4;20518:131;:::i;:::-;20510:139;;20237:419;;;:::o;20662:180::-;20710:77;20707:1;20700:88;20807:4;20804:1;20797:15;20831:4;20828:1;20821:15;20848:233;20887:3;20910:24;20928:5;20910:24;:::i;:::-;20901:33;;20956:66;20949:5;20946:77;20943:103;;21026:18;;:::i;:::-;20943:103;21073:1;21066:5;21062:13;21055:20;;20848:233;;;:::o;21087:180::-;21135:77;21132:1;21125:88;21232:4;21229:1;21222:15;21256:4;21253:1;21246:15;21273:320;21317:6;21354:1;21348:4;21344:12;21334:22;;21401:1;21395:4;21391:12;21422:18;21412:81;;21478:4;21470:6;21466:17;21456:27;;21412:81;21540:2;21532:6;21529:14;21509:18;21506:38;21503:84;;21559:18;;:::i;:::-;21503:84;21324:269;21273:320;;;:::o;21599:182::-;21739:34;21735:1;21727:6;21723:14;21716:58;21599:182;:::o;21787:366::-;21929:3;21950:67;22014:2;22009:3;21950:67;:::i;:::-;21943:74;;22026:93;22115:3;22026:93;:::i;:::-;22144:2;22139:3;22135:12;22128:19;;21787:366;;;:::o;22159:419::-;22325:4;22363:2;22352:9;22348:18;22340:26;;22412:9;22406:4;22402:20;22398:1;22387:9;22383:17;22376:47;22440:131;22566:4;22440:131;:::i;:::-;22432:139;;22159:419;;;:::o;22584:180::-;22724:32;22720:1;22712:6;22708:14;22701:56;22584:180;:::o;22770:366::-;22912:3;22933:67;22997:2;22992:3;22933:67;:::i;:::-;22926:74;;23009:93;23098:3;23009:93;:::i;:::-;23127:2;23122:3;23118:12;23111:19;;22770:366;;;:::o;23142:419::-;23308:4;23346:2;23335:9;23331:18;23323:26;;23395:9;23389:4;23385:20;23381:1;23370:9;23366:17;23359:47;23423:131;23549:4;23423:131;:::i;:::-;23415:139;;23142:419;;;:::o;23567:181::-;23707:33;23703:1;23695:6;23691:14;23684:57;23567:181;:::o;23754:366::-;23896:3;23917:67;23981:2;23976:3;23917:67;:::i;:::-;23910:74;;23993:93;24082:3;23993:93;:::i;:::-;24111:2;24106:3;24102:12;24095:19;;23754:366;;;:::o;24126:419::-;24292:4;24330:2;24319:9;24315:18;24307:26;;24379:9;24373:4;24369:20;24365:1;24354:9;24350:17;24343:47;24407:131;24533:4;24407:131;:::i;:::-;24399:139;;24126:419;;;:::o;24551:178::-;24691:30;24687:1;24679:6;24675:14;24668:54;24551:178;:::o;24735:366::-;24877:3;24898:67;24962:2;24957:3;24898:67;:::i;:::-;24891:74;;24974:93;25063:3;24974:93;:::i;:::-;25092:2;25087:3;25083:12;25076:19;;24735:366;;;:::o;25107:419::-;25273:4;25311:2;25300:9;25296:18;25288:26;;25360:9;25354:4;25350:20;25346:1;25335:9;25331:17;25324:47;25388:131;25514:4;25388:131;:::i;:::-;25380:139;;25107:419;;;:::o;25532:147::-;25633:11;25670:3;25655:18;;25532:147;;;;:::o;25685:114::-;;:::o;25805:398::-;25964:3;25985:83;26066:1;26061:3;25985:83;:::i;:::-;25978:90;;26077:93;26166:3;26077:93;:::i;:::-;26195:1;26190:3;26186:11;26179:18;;25805:398;;;:::o;26209:379::-;26393:3;26415:147;26558:3;26415:147;:::i;:::-;26408:154;;26579:3;26572:10;;26209:379;;;:::o;26594:174::-;26734:26;26730:1;26722:6;26718:14;26711:50;26594:174;:::o;26774:366::-;26916:3;26937:67;27001:2;26996:3;26937:67;:::i;:::-;26930:74;;27013:93;27102:3;27013:93;:::i;:::-;27131:2;27126:3;27122:12;27115:19;;26774:366;;;:::o;27146:419::-;27312:4;27350:2;27339:9;27335:18;27327:26;;27399:9;27393:4;27389:20;27385:1;27374:9;27370:17;27363:47;27427:131;27553:4;27427:131;:::i;:::-;27419:139;;27146:419;;;:::o;27571:141::-;27620:4;27643:3;27635:11;;27666:3;27663:1;27656:14;27700:4;27697:1;27687:18;27679:26;;27571:141;;;:::o;27718:93::-;27755:6;27802:2;27797;27790:5;27786:14;27782:23;27772:33;;27718:93;;;:::o;27817:107::-;27861:8;27911:5;27905:4;27901:16;27880:37;;27817:107;;;;:::o;27930:393::-;27999:6;28049:1;28037:10;28033:18;28072:97;28102:66;28091:9;28072:97;:::i;:::-;28190:39;28220:8;28209:9;28190:39;:::i;:::-;28178:51;;28262:4;28258:9;28251:5;28247:21;28238:30;;28311:4;28301:8;28297:19;28290:5;28287:30;28277:40;;28006:317;;27930:393;;;;;:::o;28329:142::-;28379:9;28412:53;28430:34;28439:24;28457:5;28439:24;:::i;:::-;28430:34;:::i;:::-;28412:53;:::i;:::-;28399:66;;28329:142;;;:::o;28477:75::-;28520:3;28541:5;28534:12;;28477:75;;;:::o;28558:269::-;28668:39;28699:7;28668:39;:::i;:::-;28729:91;28778:41;28802:16;28778:41;:::i;:::-;28770:6;28763:4;28757:11;28729:91;:::i;:::-;28723:4;28716:105;28634:193;28558:269;;;:::o;28833:73::-;28878:3;28833:73;:::o;28912:189::-;28989:32;;:::i;:::-;29030:65;29088:6;29080;29074:4;29030:65;:::i;:::-;28965:136;28912:189;;:::o;29107:186::-;29167:120;29184:3;29177:5;29174:14;29167:120;;;29238:39;29275:1;29268:5;29238:39;:::i;:::-;29211:1;29204:5;29200:13;29191:22;;29167:120;;;29107:186;;:::o;29299:543::-;29400:2;29395:3;29392:11;29389:446;;;29434:38;29466:5;29434:38;:::i;:::-;29518:29;29536:10;29518:29;:::i;:::-;29508:8;29504:44;29701:2;29689:10;29686:18;29683:49;;;29722:8;29707:23;;29683:49;29745:80;29801:22;29819:3;29801:22;:::i;:::-;29791:8;29787:37;29774:11;29745:80;:::i;:::-;29404:431;;29389:446;29299:543;;;:::o;29848:117::-;29902:8;29952:5;29946:4;29942:16;29921:37;;29848:117;;;;:::o;29971:169::-;30015:6;30048:51;30096:1;30092:6;30084:5;30081:1;30077:13;30048:51;:::i;:::-;30044:56;30129:4;30123;30119:15;30109:25;;30022:118;29971:169;;;;:::o;30145:295::-;30221:4;30367:29;30392:3;30386:4;30367:29;:::i;:::-;30359:37;;30429:3;30426:1;30422:11;30416:4;30413:21;30405:29;;30145:295;;;;:::o;30445:1395::-;30562:37;30595:3;30562:37;:::i;:::-;30664:18;30656:6;30653:30;30650:56;;;30686:18;;:::i;:::-;30650:56;30730:38;30762:4;30756:11;30730:38;:::i;:::-;30815:67;30875:6;30867;30861:4;30815:67;:::i;:::-;30909:1;30933:4;30920:17;;30965:2;30957:6;30954:14;30982:1;30977:618;;;;31639:1;31656:6;31653:77;;;31705:9;31700:3;31696:19;31690:26;31681:35;;31653:77;31756:67;31816:6;31809:5;31756:67;:::i;:::-;31750:4;31743:81;31612:222;30947:887;;30977:618;31029:4;31025:9;31017:6;31013:22;31063:37;31095:4;31063:37;:::i;:::-;31122:1;31136:208;31150:7;31147:1;31144:14;31136:208;;;31229:9;31224:3;31220:19;31214:26;31206:6;31199:42;31280:1;31272:6;31268:14;31258:24;;31327:2;31316:9;31312:18;31299:31;;31173:4;31170:1;31166:12;31161:17;;31136:208;;;31372:6;31363:7;31360:19;31357:179;;;31430:9;31425:3;31421:19;31415:26;31473:48;31515:4;31507:6;31503:17;31492:9;31473:48;:::i;:::-;31465:6;31458:64;31380:156;31357:179;31582:1;31578;31570:6;31566:14;31562:22;31556:4;31549:36;30984:611;;;30947:887;;30537:1303;;;30445:1395;;:::o;31846:180::-;31986:32;31982:1;31974:6;31970:14;31963:56;31846:180;:::o;32032:366::-;32174:3;32195:67;32259:2;32254:3;32195:67;:::i;:::-;32188:74;;32271:93;32360:3;32271:93;:::i;:::-;32389:2;32384:3;32380:12;32373:19;;32032:366;;;:::o;32404:419::-;32570:4;32608:2;32597:9;32593:18;32585:26;;32657:9;32651:4;32647:20;32643:1;32632:9;32628:17;32621:47;32685:131;32811:4;32685:131;:::i;:::-;32677:139;;32404:419;;;:::o;32829:182::-;32969:34;32965:1;32957:6;32953:14;32946:58;32829:182;:::o;33017:366::-;33159:3;33180:67;33244:2;33239:3;33180:67;:::i;:::-;33173:74;;33256:93;33345:3;33256:93;:::i;:::-;33374:2;33369:3;33365:12;33358:19;;33017:366;;;:::o;33389:419::-;33555:4;33593:2;33582:9;33578:18;33570:26;;33642:9;33636:4;33632:20;33628:1;33617:9;33613:17;33606:47;33670:131;33796:4;33670:131;:::i;:::-;33662:139;;33389:419;;;:::o;33814:175::-;33954:27;33950:1;33942:6;33938:14;33931:51;33814:175;:::o;33995:366::-;34137:3;34158:67;34222:2;34217:3;34158:67;:::i;:::-;34151:74;;34234:93;34323:3;34234:93;:::i;:::-;34352:2;34347:3;34343:12;34336:19;;33995:366;;;:::o;34367:419::-;34533:4;34571:2;34560:9;34556:18;34548:26;;34620:9;34614:4;34610:20;34606:1;34595:9;34591:17;34584:47;34648:131;34774:4;34648:131;:::i;:::-;34640:139;;34367:419;;;:::o;34792:179::-;34932:31;34928:1;34920:6;34916:14;34909:55;34792:179;:::o;34977:366::-;35119:3;35140:67;35204:2;35199:3;35140:67;:::i;:::-;35133:74;;35216:93;35305:3;35216:93;:::i;:::-;35334:2;35329:3;35325:12;35318:19;;34977:366;;;:::o;35349:419::-;35515:4;35553:2;35542:9;35538:18;35530:26;;35602:9;35596:4;35592:20;35588:1;35577:9;35573:17;35566:47;35630:131;35756:4;35630:131;:::i;:::-;35622:139;;35349:419;;;:::o;35774:148::-;35876:11;35913:3;35898:18;;35774:148;;;;:::o;35952:874::-;36055:3;36092:5;36086:12;36121:36;36147:9;36121:36;:::i;:::-;36173:89;36255:6;36250:3;36173:89;:::i;:::-;36166:96;;36293:1;36282:9;36278:17;36309:1;36304:166;;;;36484:1;36479:341;;;;36271:549;;36304:166;36388:4;36384:9;36373;36369:25;36364:3;36357:38;36450:6;36443:14;36436:22;36428:6;36424:35;36419:3;36415:45;36408:52;;36304:166;;36479:341;36546:38;36578:5;36546:38;:::i;:::-;36606:1;36620:154;36634:6;36631:1;36628:13;36620:154;;;36708:7;36702:14;36698:1;36693:3;36689:11;36682:35;36758:1;36749:7;36745:15;36734:26;;36656:4;36653:1;36649:12;36644:17;;36620:154;;;36803:6;36798:3;36794:16;36787:23;;36486:334;;36271:549;;36059:767;;35952:874;;;;:::o;36832:162::-;36972:14;36968:1;36960:6;36956:14;36949:38;36832:162;:::o;37000:402::-;37160:3;37181:85;37263:2;37258:3;37181:85;:::i;:::-;37174:92;;37275:93;37364:3;37275:93;:::i;:::-;37393:2;37388:3;37384:12;37377:19;;37000:402;;;:::o;37408:535::-;37638:3;37660:92;37748:3;37739:6;37660:92;:::i;:::-;37653:99;;37769:148;37913:3;37769:148;:::i;:::-;37762:155;;37934:3;37927:10;;37408:535;;;;:::o;37949:377::-;38055:3;38083:39;38116:5;38083:39;:::i;:::-;38138:89;38220:6;38215:3;38138:89;:::i;:::-;38131:96;;38236:52;38281:6;38276:3;38269:4;38262:5;38258:16;38236:52;:::i;:::-;38313:6;38308:3;38304:16;38297:23;;38059:267;37949:377;;;;:::o;38332:155::-;38472:7;38468:1;38460:6;38456:14;38449:31;38332:155;:::o;38493:400::-;38653:3;38674:84;38756:1;38751:3;38674:84;:::i;:::-;38667:91;;38767:93;38856:3;38767:93;:::i;:::-;38885:1;38880:3;38876:11;38869:18;;38493:400;;;:::o;38899:695::-;39177:3;39199:92;39287:3;39278:6;39199:92;:::i;:::-;39192:99;;39308:95;39399:3;39390:6;39308:95;:::i;:::-;39301:102;;39420:148;39564:3;39420:148;:::i;:::-;39413:155;;39585:3;39578:10;;38899:695;;;;;:::o;39600:163::-;39740:15;39736:1;39728:6;39724:14;39717:39;39600:163;:::o;39769:402::-;39929:3;39950:85;40032:2;40027:3;39950:85;:::i;:::-;39943:92;;40044:93;40133:3;40044:93;:::i;:::-;40162:2;40157:3;40153:12;40146:19;;39769:402;;;:::o;40177:535::-;40407:3;40429:92;40517:3;40508:6;40429:92;:::i;:::-;40422:99;;40538:148;40682:3;40538:148;:::i;:::-;40531:155;;40703:3;40696:10;;40177:535;;;;:::o;40718:182::-;40858:34;40854:1;40846:6;40842:14;40835:58;40718:182;:::o;40906:366::-;41048:3;41069:67;41133:2;41128:3;41069:67;:::i;:::-;41062:74;;41145:93;41234:3;41145:93;:::i;:::-;41263:2;41258:3;41254:12;41247:19;;40906:366;;;:::o;41278:419::-;41444:4;41482:2;41471:9;41467:18;41459:26;;41531:9;41525:4;41521:20;41517:1;41506:9;41502:17;41495:47;41559:131;41685:4;41559:131;:::i;:::-;41551:139;;41278:419;;;:::o;41703:180::-;41751:77;41748:1;41741:88;41848:4;41845:1;41838:15;41872:4;41869:1;41862:15;41889:185;41929:1;41946:20;41964:1;41946:20;:::i;:::-;41941:25;;41980:20;41998:1;41980:20;:::i;:::-;41975:25;;42019:1;42009:35;;42024:18;;:::i;:::-;42009:35;42066:1;42063;42059:9;42054:14;;41889:185;;;;:::o;42080:332::-;42201:4;42239:2;42228:9;42224:18;42216:26;;42252:71;42320:1;42309:9;42305:17;42296:6;42252:71;:::i;:::-;42333:72;42401:2;42390:9;42386:18;42377:6;42333:72;:::i;:::-;42080:332;;;;;:::o;42418:137::-;42472:5;42503:6;42497:13;42488:22;;42519:30;42543:5;42519:30;:::i;:::-;42418:137;;;;:::o;42561:345::-;42628:6;42677:2;42665:9;42656:7;42652:23;42648:32;42645:119;;;42683:79;;:::i;:::-;42645:119;42803:1;42828:61;42881:7;42872:6;42861:9;42857:22;42828:61;:::i;:::-;42818:71;;42774:125;42561:345;;;;:::o;42912:182::-;43052:34;43048:1;43040:6;43036:14;43029:58;42912:182;:::o;43100:366::-;43242:3;43263:67;43327:2;43322:3;43263:67;:::i;:::-;43256:74;;43339:93;43428:3;43339:93;:::i;:::-;43457:2;43452:3;43448:12;43441:19;;43100:366;;;:::o;43472:419::-;43638:4;43676:2;43665:9;43661:18;43653:26;;43725:9;43719:4;43715:20;43711:1;43700:9;43696:17;43689:47;43753:131;43879:4;43753:131;:::i;:::-;43745:139;;43472:419;;;:::o;43897:178::-;44037:30;44033:1;44025:6;44021:14;44014:54;43897:178;:::o;44081:366::-;44223:3;44244:67;44308:2;44303:3;44244:67;:::i;:::-;44237:74;;44320:93;44409:3;44320:93;:::i;:::-;44438:2;44433:3;44429:12;44422:19;;44081:366;;;:::o;44453:419::-;44619:4;44657:2;44646:9;44642:18;44634:26;;44706:9;44700:4;44696:20;44692:1;44681:9;44677:17;44670:47;44734:131;44860:4;44734:131;:::i;:::-;44726:139;;44453:419;;;:::o;44878:177::-;45018:29;45014:1;45006:6;45002:14;44995:53;44878:177;:::o;45061:366::-;45203:3;45224:67;45288:2;45283:3;45224:67;:::i;:::-;45217:74;;45300:93;45389:3;45300:93;:::i;:::-;45418:2;45413:3;45409:12;45402:19;;45061:366;;;:::o;45433:419::-;45599:4;45637:2;45626:9;45622:18;45614:26;;45686:9;45680:4;45676:20;45672:1;45661:9;45657:17;45650:47;45714:131;45840:4;45714:131;:::i;:::-;45706:139;;45433:419;;;:::o;45858:191::-;45898:4;45918:20;45936:1;45918:20;:::i;:::-;45913:25;;45952:20;45970:1;45952:20;:::i;:::-;45947:25;;45991:1;45988;45985:8;45982:34;;;45996:18;;:::i;:::-;45982:34;46041:1;46038;46034:9;46026:17;;45858:191;;;;:::o;46055:176::-;46195:28;46191:1;46183:6;46179:14;46172:52;46055:176;:::o;46237:366::-;46379:3;46400:67;46464:2;46459:3;46400:67;:::i;:::-;46393:74;;46476:93;46565:3;46476:93;:::i;:::-;46594:2;46589:3;46585:12;46578:19;;46237:366;;;:::o;46609:419::-;46775:4;46813:2;46802:9;46798:18;46790:26;;46862:9;46856:4;46852:20;46848:1;46837:9;46833:17;46826:47;46890:131;47016:4;46890:131;:::i;:::-;46882:139;;46609:419;;;:::o;47034:176::-;47066:1;47083:20;47101:1;47083:20;:::i;:::-;47078:25;;47117:20;47135:1;47117:20;:::i;:::-;47112:25;;47156:1;47146:35;;47161:18;;:::i;:::-;47146:35;47202:1;47199;47195:9;47190:14;;47034:176;;;;:::o;47216:98::-;47267:6;47301:5;47295:12;47285:22;;47216:98;;;:::o;47320:168::-;47403:11;47437:6;47432:3;47425:19;47477:4;47472:3;47468:14;47453:29;;47320:168;;;;:::o;47494:360::-;47580:3;47608:38;47640:5;47608:38;:::i;:::-;47662:70;47725:6;47720:3;47662:70;:::i;:::-;47655:77;;47741:52;47786:6;47781:3;47774:4;47767:5;47763:16;47741:52;:::i;:::-;47818:29;47840:6;47818:29;:::i;:::-;47813:3;47809:39;47802:46;;47584:270;47494:360;;;;:::o;47860:640::-;48055:4;48093:3;48082:9;48078:19;48070:27;;48107:71;48175:1;48164:9;48160:17;48151:6;48107:71;:::i;:::-;48188:72;48256:2;48245:9;48241:18;48232:6;48188:72;:::i;:::-;48270;48338:2;48327:9;48323:18;48314:6;48270:72;:::i;:::-;48389:9;48383:4;48379:20;48374:2;48363:9;48359:18;48352:48;48417:76;48488:4;48479:6;48417:76;:::i;:::-;48409:84;;47860:640;;;;;;;:::o;48506:141::-;48562:5;48593:6;48587:13;48578:22;;48609:32;48635:5;48609:32;:::i;:::-;48506:141;;;;:::o;48653:349::-;48722:6;48771:2;48759:9;48750:7;48746:23;48742:32;48739:119;;;48777:79;;:::i;:::-;48739:119;48897:1;48922:63;48977:7;48968:6;48957:9;48953:22;48922:63;:::i;:::-;48912:73;;48868:127;48653:349;;;;:::o;49008:182::-;49148:34;49144:1;49136:6;49132:14;49125:58;49008:182;:::o;49196:366::-;49338:3;49359:67;49423:2;49418:3;49359:67;:::i;:::-;49352:74;;49435:93;49524:3;49435:93;:::i;:::-;49553:2;49548:3;49544:12;49537:19;;49196:366;;;:::o;49568:419::-;49734:4;49772:2;49761:9;49757:18;49749:26;;49821:9;49815:4;49811:20;49807:1;49796:9;49792:17;49785:47;49849:131;49975:4;49849:131;:::i;:::-;49841:139;;49568:419;;;:::o;49993:178::-;50133:30;50129:1;50121:6;50117:14;50110:54;49993:178;:::o;50177:366::-;50319:3;50340:67;50404:2;50399:3;50340:67;:::i;:::-;50333:74;;50416:93;50505:3;50416:93;:::i;:::-;50534:2;50529:3;50525:12;50518:19;;50177:366;;;:::o;50549:419::-;50715:4;50753:2;50742:9;50738:18;50730:26;;50802:9;50796:4;50792:20;50788:1;50777:9;50773:17;50766:47;50830:131;50956:4;50830:131;:::i;:::-;50822:139;;50549:419;;;:::o
Swarm Source
ipfs://737eef15ea004b0e82519229305b12501f7150ed8f45800569d97681923b32b3
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 31 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.