Polygon Sponsored slots available. Book your slot here!
Contract Overview
Balance:
0 MATIC
MATIC Value:
$0.00
My Name Tag:
Not Available, login to update
Txn Hash |
Method
|
Block
|
From
|
To
|
Value | [Txn Fee] | |||
---|---|---|---|---|---|---|---|---|---|
0x0c5b47b2190530ae94701b702e0cf2bfb723517bc2beb57ecfcd550edd63b092 | 0x60806040 | 27071509 | 350 days 52 mins ago | 0xfdcbf476b286796706e273f86ac51163da737fa8 | IN | Create: NFToken | 0 MATIC | 0.153106098415 |
[ Download CSV Export ]
Contract Name:
NFToken
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at polygonscan.com on 2022-09-14 */ pragma solidity ^0.8.0; library SafeMath { /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * - Subtraction cannot overflow. * * _Available since v2.4.0._ */ function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @dev Returns the integer division of two unsigned integers. Reverts on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } /** * @dev Returns the integer division of two unsigned integers. Reverts with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * - The divisor cannot be zero. * * _Available since v2.4.0._ */ function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { // Solidity only automatically asserts when dividing by 0 require(b > 0, errorMessage); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return mod(a, b, "SafeMath: modulo by zero"); } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts with custom message when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * - The divisor cannot be zero. * * _Available since v2.4.0._ */ function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } } library Address { /** * @dev Returns true if `account` is a contract. * * This test is non-exhaustive, and there may be false-negatives: during the * execution of a contract's constructor, its address will be reported as * not containing a contract. * * > It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. */ function isContract(address account) internal view returns (bool) { // This method relies in extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; // solhint-disable-next-line no-inline-assembly assembly { size := extcodesize(account) } return size > 0; } } library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol 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); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } library Counters { using SafeMath for uint256; struct Counter { // This variable should never be directly accessed by users of the library: interactions must be restricted to // the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add // this feature: see https://github.com/ethereum/solidity/issues/4637 uint256 _value; // default: 0 } function current(Counter storage counter) internal view returns (uint256) { return counter._value; } function increment(Counter storage counter) internal { counter._value += 1; } function decrement(Counter storage counter) internal { counter._value = counter._value.sub(1); } } library Roles { struct Role { mapping (address => bool) bearer; } /** * @dev Give an account access to this role. */ function add(Role storage role, address account) internal { require(!has(role, account), "Roles: account already has role"); role.bearer[account] = true; } /** * @dev Remove an account's access to this role. */ function remove(Role storage role, address account) internal { require(has(role, account), "Roles: account does not have role"); role.bearer[account] = false; } /** * @dev Check if an account has this role. * @return bool */ function has(Role storage role, address account) internal view returns (bool) { require(account != address(0), "Roles: account is the zero address"); return role.bearer[account]; } } 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 { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); function owner() public view virtual returns (address) { return _owner; } modifier onlyOwner() { require(owner() == msg.sender, "Ownable: caller is not the owner"); _; } function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } abstract contract MinterRole { using Roles for Roles.Role; event MinterAdded(address indexed account); event MinterRemoved(address indexed account); Roles.Role private _minters; modifier onlyMinter() { require(isMinter(msg.sender), "MinterRole: caller does not have the Minter role"); _; } function isMinter(address account) public view returns (bool) { return _minters.has(account); } function addMinter(address account) public onlyMinter { _addMinter(account); } function renounceMinter() public { _removeMinter(msg.sender); } function _addMinter(address account) internal { _minters.add(account); emit MinterAdded(account); } function _removeMinter(address account) internal { _minters.remove(account); emit MinterRemoved(account); } } abstract contract PauserRole { using Roles for Roles.Role; event PauserAdded(address indexed account); event PauserRemoved(address indexed account); Roles.Role private _pausers; modifier onlyPauser() { require(isPauser(msg.sender), "PauserRole: caller does not have the Pauser role"); _; } function isPauser(address account) public view returns (bool) { return _pausers.has(account); } function addPauser(address account) public onlyPauser { _addPauser(account); } function renouncePauser() public { _removePauser(msg.sender); } function _addPauser(address account) internal { _pausers.add(account); emit PauserAdded(account); } function _removePauser(address account) internal { _pausers.remove(account); emit PauserRemoved(account); } } abstract contract Pausable is PauserRole { /** * @dev Emitted when the pause is triggered by a pauser (`account`). */ event Paused(address account); /** * @dev Emitted when the pause is lifted by a pauser (`account`). */ event Unpaused(address account); bool private _paused; /** * @dev Initializes the contract in unpaused state. Assigns the Pauser role * to the deployer. */ constructor() { _paused = false; } /** * @dev Returns true if the contract is paused, and false otherwise. */ function paused() public view returns (bool) { return _paused; } /** * @dev Modifier to make a function callable only when the contract is not paused. */ modifier whenNotPaused() { require(!_paused, "Pausable: paused"); _; } /** * @dev Modifier to make a function callable only when the contract is paused. */ modifier whenPaused() { require(_paused, "Pausable: not paused"); _; } /** * @dev Called by a pauser to pause, triggers stopped state. */ function pause() public onlyPauser whenNotPaused { _paused = true; emit Paused(msg.sender); } /** * @dev Called by a pauser to unpause, returns to normal state. */ function unpause() public onlyPauser whenPaused { _paused = false; emit Unpaused(msg.sender); } } interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; } 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); } interface IERC721Enumerable is IERC721 { /** * @dev Returns the total amount of tokens stored by the contract. */ function totalSupply() external view returns (uint256); /** * @dev Returns a token ID owned by `owner` at a given `index` of its token list. * Use along with {balanceOf} to enumerate all of ``owner``'s tokens. */ function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId); /** * @dev Returns a token ID at a given `index` of all the tokens stored by the contract. * Use along with {totalSupply} to enumerate all tokens. */ function tokenByIndex(uint256 index) external view returns (uint256); } abstract contract ERC165 is IERC165 { /** * @dev Mapping of interface ids to whether or not it's supported. */ mapping(bytes4 => bool) private _supportedInterfaces; /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return supportsInterface(interfaceId) || _supportedInterfaces[interfaceId]; } /** * @dev Registers the contract as an implementer of the interface defined by * `interfaceId`. Support of the actual ERC165 interface is automatic and * registering its interface id is not required. * * See {IERC165-supportsInterface}. * * Requirements: * * - `interfaceId` cannot be the ERC165 invalid interface (`0xffffffff`). */ function _registerInterface(bytes4 interfaceId) internal virtual { require(interfaceId != 0xffffffff, "ERC165: invalid interface id"); _supportedInterfaces[interfaceId] = true; } } abstract contract ERC721 is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; // Token name string private _name; // Token symbol string private _symbol; // Optional mapping for token URIs mapping(uint256 => string) private _tokenURIs; // 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; bytes4 private constant _INTERFACE_ID_EIP721_METADATA = 0x5b5e139f; constructor() { _registerInterface(_INTERFACE_ID_EIP721_METADATA); } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view virtual override returns (uint256) { require(owner != address(0), "ERC721: balance query for the 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: owner query for nonexistent token"); return owner; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "EIP721Metadata: URI query for nonexistent token"); return _tokenURIs[tokenId]; } /** * @dev Internal function to set the token URI for a given token. * Reverts if the token ID does not exist. * @param tokenId uint256 ID of the token to set its URI * @param uri string URI to assign */ function _setTokenURI(uint256 tokenId, string memory uri) internal { require(_exists(tokenId), "EIP721Metadata: URI set of nonexistent token"); _tokenURIs[tokenId] = uri; } function _setMetadata(string memory name_, string memory symbol_) internal { _name = name_; _symbol = symbol_; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overriden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { require(_exists(tokenId), "ERC721: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { _setApprovalForAll(_msgSender(), 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 { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public virtual override { require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor 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), "ERC721: transfer to non ERC721Receiver implementer"); } /** * @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: operator query for nonexistent token"); address owner = ERC721.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), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @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); _afterTokenTransfer(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 = ERC721.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); _balances[owner] -= 1; delete _owners[tokenId]; if (bytes(_tokenURIs[tokenId]).length != 0) { delete _tokenURIs[tokenId]; } emit Transfer(owner, address(0), tokenId); _afterTokenTransfer(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(ERC721.ownerOf(tokenId) == from, "ERC721: transfer from incorrect owner"); require(to != address(0), "ERC721: transfer to the zero 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); _afterTokenTransfer(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(ERC721.ownerOf(tokenId), to, tokenId); } /** * @dev Approve `operator` to operate on all of `owner` tokens * * Emits a {ApprovalForAll} event. */ function _setApprovalForAll( address owner, address operator, bool approved ) internal virtual { require(owner != operator, "ERC721: approve to caller"); _operatorApprovals[owner][operator] = approved; emit ApprovalForAll(owner, operator, approved); } /** * @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(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver.onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("ERC721: transfer to non ERC721Receiver implementer"); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @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 {} /** * @dev Hook that is called after any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _afterTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} } abstract contract ERC721Enumerable is ERC721, IERC721Enumerable { // Mapping from owner to list of owned token IDs mapping(address => mapping(uint256 => uint256)) private _ownedTokens; // Mapping from token ID to index of the owner tokens list mapping(uint256 => uint256) private _ownedTokensIndex; // Array with all token ids, used for enumeration uint256[] private _allTokens; // Mapping from token id to position in the allTokens array mapping(uint256 => uint256) private _allTokensIndex; /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165, ERC721) returns (bool) { return interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}. */ function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) { require(index < ERC721.balanceOf(owner), "ERC721Enumerable: owner index out of bounds"); return _ownedTokens[owner][index]; } /** * @dev See {IERC721Enumerable-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _allTokens.length; } function getOwnerTokenList(address owner) public view returns(uint256[] memory) { require(owner != address(0), "getOwnerTokenList: account is the zero address"); uint256 balanceOfOwner = ERC721.balanceOf(owner); uint256[] memory ownersTokens = new uint256[](balanceOfOwner); for(uint i=0; i<balanceOfOwner; ++i) { ownersTokens[i] = (tokenOfOwnerByIndex(owner, i)); } return ownersTokens; } function getURIListFromTokenList(uint256[] memory tokenList) public view returns(string[] memory) { require(tokenList.length != 0, "getURIListFromTokenList: tokenList is empty"); uint256 lengthOfList = tokenList.length; string[] memory uriList = new string[](lengthOfList); for(uint i=0; i<lengthOfList; ++i) { uriList[i] = ERC721.tokenURI(tokenList[i]); } return uriList; } /** * @dev See {IERC721Enumerable-tokenByIndex}. */ function tokenByIndex(uint256 index) public view virtual override returns (uint256) { require(index < ERC721Enumerable.totalSupply(), "ERC721Enumerable: global index out of bounds"); return _allTokens[index]; } /** * @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` cannot be the zero address. * - `to` cannot be the zero address. * * 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 override { super._beforeTokenTransfer(from, to, tokenId); if (from == address(0)) { _addTokenToAllTokensEnumeration(tokenId); } else if (from != to) { _removeTokenFromOwnerEnumeration(from, tokenId); } if (to == address(0)) { _removeTokenFromAllTokensEnumeration(tokenId); } else if (to != from) { _addTokenToOwnerEnumeration(to, tokenId); } } /** * @dev Private function to add a token to this extension's ownership-tracking data structures. * @param to address representing the new owner of the given token ID * @param tokenId uint256 ID of the token to be added to the tokens list of the given address */ function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private { uint256 length = ERC721.balanceOf(to); _ownedTokens[to][length] = tokenId; _ownedTokensIndex[tokenId] = length; } /** * @dev Private function to add a token to this extension's token tracking data structures. * @param tokenId uint256 ID of the token to be added to the tokens list */ function _addTokenToAllTokensEnumeration(uint256 tokenId) private { _allTokensIndex[tokenId] = _allTokens.length; _allTokens.push(tokenId); } /** * @dev Private function to remove a token from this extension's ownership-tracking data structures. Note that * while the token is not assigned a new owner, the `_ownedTokensIndex` mapping is _not_ updated: this allows for * gas optimizations e.g. when performing a transfer operation (avoiding double writes). * This has O(1) time complexity, but alters the order of the _ownedTokens array. * @param from address representing the previous owner of the given token ID * @param tokenId uint256 ID of the token to be removed from the tokens list of the given address */ function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private { // To prevent a gap in from's tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = ERC721.balanceOf(from) - 1; uint256 tokenIndex = _ownedTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary if (tokenIndex != lastTokenIndex) { uint256 lastTokenId = _ownedTokens[from][lastTokenIndex]; _ownedTokens[from][tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _ownedTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index } // This also deletes the contents at the last position of the array delete _ownedTokensIndex[tokenId]; delete _ownedTokens[from][lastTokenIndex]; } /** * @dev Private function to remove a token from this extension's token tracking data structures. * This has O(1) time complexity, but alters the order of the _allTokens array. * @param tokenId uint256 ID of the token to be removed from the tokens list */ function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private { // To prevent a gap in the tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = _allTokens.length - 1; uint256 tokenIndex = _allTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary. However, since this occurs so // rarely (when the last minted token is burnt) that we still do the swap here to avoid the gas cost of adding // an 'if' statement (like in _removeTokenFromOwnerEnumeration) uint256 lastTokenId = _allTokens[lastTokenIndex]; _allTokens[tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _allTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index // This also deletes the contents at the last position of the array delete _allTokensIndex[tokenId]; _allTokens.pop(); } } abstract contract ERC721Pausable is ERC721Enumerable, Pausable { /* * bytes4(keccak256('paused()')) == 0x5c975abb * bytes4(keccak256('pause()')) == 0x8456cb59 * bytes4(keccak256('unpause()')) == 0x3f4ba83a * bytes4(keccak256('isPauser(address)')) == 0x46fbf68e * bytes4(keccak256('addPauser(address)')) == 0x82dc1ec4 * bytes4(keccak256('renouncePauser()')) == 0x6ef8d66d * * => 0x5c975abb ^ 0x8456cb59 ^ 0x3f4ba83a ^ 0x46fbf68e ^ 0x82dc1ec4 ^ 0x6ef8d66d == 0x4d5507ff */ bytes4 private constant _INTERFACE_ID_EIP721_PAUSABLE = 0x4d5507ff; /** * @dev Constructor function. */ constructor () { // register the supported interface to conform to EIP721Pausable via EIP165 _registerInterface(_INTERFACE_ID_EIP721_PAUSABLE); } function approve(address to, uint256 tokenId) public override whenNotPaused { super.approve(to, tokenId); } function setApprovalForAll(address to, bool approved) public override whenNotPaused { super.setApprovalForAll(to, approved); } function transferFrom(address from, address to, uint256 tokenId) public override whenNotPaused { super.transferFrom(from, to, tokenId); } } abstract contract ERC721MintAndBurn is ERC721Pausable, MinterRole { /* * bytes4(keccak256('isMinter(address)')) == 0xaa271e1a * bytes4(keccak256('addMinter(address)')) == 0x983b2d56 * bytes4(keccak256('renounceMinter()')) == 0x98650275 * bytes4(keccak256('mint(address,uint256)')) == 0x40c10f19 * * => 0xaa271e1a ^ 0x983b2d56 ^ 0x98650275 ^ 0x40c10f19 == 0xeab83e20 */ bytes4 private constant _INTERFACE_ID_EIP721_MINTABLE = 0xeab83e20; bytes4 private constant _INTERFACE_ID_EIP721_BURNABLE = 0x42966c68; /** * @dev Constructor function. */ constructor () { // register the supported interface to conform to EIP721Mintable via EIP165 _registerInterface(_INTERFACE_ID_EIP721_MINTABLE); _registerInterface(_INTERFACE_ID_EIP721_BURNABLE); } /** * @dev Function to mint tokens. * @param to The address that will receive the minted tokens. * @param tokenId The token id to mint. * @return A boolean that indicates if the operation was successful. */ function mint(address to, uint256 tokenId) public onlyMinter returns (bool) { _mint(to, tokenId); return true; } function burn(uint256 tokenId) public { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(msg.sender, tokenId), "EIP721Burnable: caller is not owner nor approved"); _burn(tokenId); } } abstract contract ERC721MetadataMintable is ERC721MintAndBurn { /* * bytes4(keccak256('mintWithTokenURI(address,uint256,string)')) == 0x50bb4e7f * bytes4(keccak256('isMinter(address)')) == 0xaa271e1a * bytes4(keccak256('addMinter(address)')) == 0x983b2d56 * bytes4(keccak256('renounceMinter()')) == 0x98650275 * * => 0x50bb4e7f ^ 0xaa271e1a ^ 0x983b2d56 ^ 0x98650275 == 0xfac27f46 */ bytes4 private constant _INTERFACE_ID_EIP721_METADATA_MINTABLE = 0xfac27f46; /** * @dev Constructor function. */ constructor () { // register the supported interface to conform to EIP721Mintable via EIP165 _registerInterface(_INTERFACE_ID_EIP721_METADATA_MINTABLE); } /** * @dev Function to mint tokens. * @param to The address that will receive the minted tokens. * @param tokenId The token id to mint. * @param tokenURI The token URI of the minted token. * @return A boolean that indicates if the operation was successful. */ function mintWithTokenURI(address to, uint256 tokenId, string memory tokenURI) public onlyMinter returns (bool) { _mint(to, tokenId); _setTokenURI(tokenId, tokenURI); return true; } } contract NFToken is ERC721MetadataMintable, Ownable { bool private initialized; string internal constant ALREADY_INITIALIZED = "already initialized"; function initialize(address owner_, string memory name_, string memory symbol_) public { require(!initialized, ALREADY_INITIALIZED); _transferOwnership(owner_); _addPauser(owner_); _addMinter(owner_); _setMetadata(name_, symbol_); initialized = true; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"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":"account","type":"address"}],"name":"MinterAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"}],"name":"MinterRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"}],"name":"PauserAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"}],"name":"PauserRemoved","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"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"addMinter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"addPauser","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":"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":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"getOwnerTokenList","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"tokenList","type":"uint256[]"}],"name":"getURIListFromTokenList","outputs":[{"internalType":"string[]","name":"","type":"string[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner_","type":"address"},{"internalType":"string","name":"name_","type":"string"},{"internalType":"string","name":"symbol_","type":"string"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","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":"account","type":"address"}],"name":"isMinter","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isPauser","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"mint","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"string","name":"tokenURI","type":"string"}],"name":"mintWithTokenURI","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","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":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceMinter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renouncePauser","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":"to","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","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":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":[{"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":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040523480156200001157600080fd5b506200002a635b5e139f60e01b620000ab60201b60201c565b6000600d60006101000a81548160ff0219169083151502179055506200005d634d5507ff60e01b620000ab60201b60201c565b6200007563eab83e2060e01b620000ab60201b60201c565b6200008d6342966c6860e01b620000ab60201b60201c565b620000a563fac27f4660e01b620000ab60201b60201c565b62000206565b63ffffffff60e01b817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916141562000117576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200010e90620001aa565b60405180910390fd5b6001600080837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600062000192601c83620001cc565b91506200019f82620001dd565b602082019050919050565b60006020820190508181036000830152620001c58162000183565b9050919050565b600082825260208201905092915050565b7f4552433136353a20696e76616c696420696e7465726661636520696400000000600082015250565b614bc380620002166000396000f3fe608060405234801561001057600080fd5b50600436106102065760003560e01c806370a082311161011a57806395d89b41116100ad578063aa271e1a1161007c578063aa271e1a146105c3578063b88d4fde146105f3578063c87b56dd1461060f578063e985e9c51461063f578063f2fde38b1461066f57610206565b806395d89b4114610563578063983b2d5614610581578063986502751461059d578063a22cb465146105a757610206565b80638456cb59116100e95780638456cb59146104ef5780638da5cb5b146104f95780639065714714610517578063907656651461053357610206565b806370a0823114610469578063715018a61461049957806382727863146104a357806382dc1ec4146104d357610206565b806340c10f191161019d5780634f6ccce71161016c5780634f6ccce7146103b157806350bb4e7f146103e15780635c975abb146104115780636352211e1461042f5780636ef8d66d1461045f57610206565b806340c10f191461031957806342842e0e1461034957806342966c681461036557806346fbf68e1461038157610206565b806318160ddd116101d957806318160ddd146102a557806323b872dd146102c35780632f745c59146102df5780633f4ba83a1461030f57610206565b806301ffc9a71461020b57806306fdde031461023b578063081812fc14610259578063095ea7b314610289575b600080fd5b610225600480360381019061022091906133d2565b61068b565b6040516102329190613ae1565b60405180910390f35b610243610705565b6040516102509190613afc565b60405180910390f35b610273600480360381019061026e919061342c565b610797565b6040516102809190613a36565b60405180910390f35b6102a3600480360381019061029e91906132da565b61081c565b005b6102ad61087a565b6040516102ba9190613ebe565b60405180910390f35b6102dd60048036038101906102d89190613139565b610887565b005b6102f960048036038101906102f491906132da565b6108e7565b6040516103069190613ebe565b60405180910390f35b61031761098c565b005b610333600480360381019061032e91906132da565b610a77565b6040516103409190613ae1565b60405180910390f35b610363600480360381019061035e9190613139565b610ad5565b005b61037f600480360381019061037a919061342c565b610af5565b005b61039b600480360381019061039691906130cc565b610b4a565b6040516103a89190613ae1565b60405180910390f35b6103cb60048036038101906103c6919061342c565b610b67565b6040516103d89190613ebe565b60405180910390f35b6103fb60048036038101906103f6919061331a565b610bd8565b6040516104089190613ae1565b60405180910390f35b610419610c41565b6040516104269190613ae1565b60405180910390f35b6104496004803603810190610444919061342c565b610c58565b6040516104569190613a36565b60405180910390f35b610467610d0a565b005b610483600480360381019061047e91906130cc565b610d15565b6040516104909190613ebe565b60405180910390f35b6104a1610dcd565b005b6104bd60048036038101906104b89190613389565b610e4e565b6040516104ca9190613a9d565b60405180910390f35b6104ed60048036038101906104e891906130cc565b610f55565b005b6104f7610fa9565b005b610501611095565b60405161050e9190613a36565b60405180910390f35b610531600480360381019061052c919061324f565b6110bf565b005b61054d600480360381019061054891906130cc565b61118d565b60405161055a9190613abf565b60405180910390f35b61056b6112a9565b6040516105789190613afc565b60405180910390f35b61059b600480360381019061059691906130cc565b61133b565b005b6105a561138f565b005b6105c160048036038101906105bc919061320f565b61139a565b005b6105dd60048036038101906105d891906130cc565b6113f8565b6040516105ea9190613ae1565b60405180910390f35b61060d6004803603810190610608919061318c565b611415565b005b6106296004803603810190610624919061342c565b611477565b6040516106369190613afc565b60405180910390f35b610659600480360381019061065491906130f9565b611564565b6040516106669190613ae1565b60405180910390f35b610689600480360381019061068491906130cc565b6115f8565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806106fe57506106fd826116e9565b5b9050919050565b60606001805461071490614187565b80601f016020809104026020016040519081016040528092919081815260200182805461074090614187565b801561078d5780601f106107625761010080835404028352916020019161078d565b820191906000526020600020905b81548152906001019060200180831161077057829003601f168201915b5050505050905090565b60006107a2826117cb565b6107e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107d890613dde565b60405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600d60009054906101000a900460ff161561086c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161086390613cbe565b60405180910390fd5b6108768282611837565b5050565b6000600a80549050905090565b600d60009054906101000a900460ff16156108d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108ce90613cbe565b60405180910390fd5b6108e283838361194f565b505050565b60006108f283610d15565b8210610933576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161092a90613b7e565b60405180910390fd5b600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b61099533610b4a565b6109d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109cb90613bbe565b60405180910390fd5b600d60009054906101000a900460ff16610a23576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a1a90613b1e565b60405180910390fd5b6000600d60006101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa33604051610a6d9190613a36565b60405180910390a1565b6000610a82336113f8565b610ac1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ab890613d3e565b60405180910390fd5b610acb83836119af565b6001905092915050565b610af083838360405180602001604052806000815250611415565b505050565b610aff3382611b89565b610b3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b3590613d5e565b60405180910390fd5b610b4781611c67565b50565b6000610b6082600c611dcb90919063ffffffff16565b9050919050565b6000610b7161087a565b8210610bb2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ba990613e7e565b60405180910390fd5b600a8281548110610bc657610bc56142c0565b5b90600052602060002001549050919050565b6000610be3336113f8565b610c22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c1990613d3e565b60405180910390fd5b610c2c84846119af565b610c368383611e93565b600190509392505050565b6000600d60009054906101000a900460ff16905090565b6000806004600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610d01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cf890613d1e565b60405180910390fd5b80915050919050565b610d1333611f07565b565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610d86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d7d90613cfe565b60405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b3373ffffffffffffffffffffffffffffffffffffffff16610dec611095565b73ffffffffffffffffffffffffffffffffffffffff1614610e42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e3990613dfe565b60405180910390fd5b610e4c6000611f61565b565b6060600082511415610e95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e8c90613bfe565b60405180910390fd5b60008251905060008167ffffffffffffffff811115610eb757610eb66142ef565b5b604051908082528060200260200182016040528015610eea57816020015b6060815260200190600190039081610ed55790505b50905060005b82811015610f4a57610f1b858281518110610f0e57610f0d6142c0565b5b6020026020010151611477565b828281518110610f2e57610f2d6142c0565b5b602002602001018190525080610f43906141ea565b9050610ef0565b508092505050919050565b610f5e33610b4a565b610f9d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9490613bbe565b60405180910390fd5b610fa681612027565b50565b610fb233610b4a565b610ff1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fe890613bbe565b60405180910390fd5b600d60009054906101000a900460ff1615611041576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103890613cbe565b60405180910390fd5b6001600d60006101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2583360405161108b9190613a36565b60405180910390a1565b6000600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600f60149054906101000a900460ff16156040518060400160405280601381526020017f616c726561647920696e697469616c697a65640000000000000000000000000081525090611147576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113e9190613afc565b60405180910390fd5b5061115183611f61565b61115a83612027565b61116383612081565b61116d82826120db565b6001600f60146101000a81548160ff021916908315150217905550505050565b6060600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156111ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111f690613e9e565b60405180910390fd5b600061120a83610d15565b905060008167ffffffffffffffff811115611228576112276142ef565b5b6040519080825280602002602001820160405280156112565781602001602082028036833780820191505090505b50905060005b8281101561129e5761126e85826108e7565b828281518110611281576112806142c0565b5b60200260200101818152505080611297906141ea565b905061125c565b508092505050919050565b6060600280546112b890614187565b80601f01602080910402602001604051908101604052809291908181526020018280546112e490614187565b80156113315780601f1061130657610100808354040283529160200191611331565b820191906000526020600020905b81548152906001019060200180831161131457829003601f168201915b5050505050905090565b611344336113f8565b611383576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137a90613d3e565b60405180910390fd5b61138c81612081565b50565b6113983361210d565b565b600d60009054906101000a900460ff16156113ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113e190613cbe565b60405180910390fd5b6113f48282612167565b5050565b600061140e82600e611dcb90919063ffffffff16565b9050919050565b61142661142061217d565b83611b89565b611465576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145c90613e5e565b60405180910390fd5b61147184848484612185565b50505050565b6060611482826117cb565b6114c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114b890613dbe565b60405180910390fd5b6003600083815260200190815260200160002080546114df90614187565b80601f016020809104026020016040519081016040528092919081815260200182805461150b90614187565b80156115585780601f1061152d57610100808354040283529160200191611558565b820191906000526020600020905b81548152906001019060200180831161153b57829003601f168201915b50505050509050919050565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b3373ffffffffffffffffffffffffffffffffffffffff16611617611095565b73ffffffffffffffffffffffffffffffffffffffff161461166d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166490613dfe565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156116dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116d490613bde565b60405180910390fd5b6116e681611f61565b50565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806117b457507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806117c457506117c3826121e1565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166004600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600061184282610c58565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156118b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118aa90613e3e565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166118d261217d565b73ffffffffffffffffffffffffffffffffffffffff1614806119015750611900816118fb61217d565b611564565b5b611940576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161193790613cde565b60405180910390fd5b61194a8383612258565b505050565b61196061195a61217d565b82611b89565b61199f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199690613e5e565b60405180910390fd5b6119aa838383612311565b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611a1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a1690613d9e565b60405180910390fd5b611a28816117cb565b15611a68576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a5f90613c3e565b60405180910390fd5b611a7460008383612578565b6001600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611ac49190614047565b92505081905550816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611b856000838361268c565b5050565b6000611b94826117cb565b611bd3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bca90613c9e565b60405180910390fd5b6000611bde83610c58565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611c4d57508373ffffffffffffffffffffffffffffffffffffffff16611c3584610797565b73ffffffffffffffffffffffffffffffffffffffff16145b80611c5e5750611c5d8185611564565b5b91505092915050565b6000611c7282610c58565b9050611c8081600084612578565b611c8b600083612258565b6001600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611cdb919061409d565b925050819055506004600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556000600360008481526020019081526020016000208054611d3890614187565b905014611d5f57600360008381526020019081526020016000206000611d5e9190612e02565b5b81600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611dc78160008461268c565b5050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611e3c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e3390613e1e565b60405180910390fd5b8260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611e9c826117cb565b611edb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ed290613b5e565b60405180910390fd5b80600360008481526020019081526020016000209080519060200190611f02929190612e42565b505050565b611f1b81600c61269190919063ffffffff16565b8073ffffffffffffffffffffffffffffffffffffffff167fcd265ebaf09df2871cc7bd4133404a235ba12eff2041bb89d9c714a2621c7c7e60405160405180910390a250565b6000600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b61203b81600c61273890919063ffffffff16565b8073ffffffffffffffffffffffffffffffffffffffff167f6719d08c1888103bea251a4ed56406bd0c3e69723c8a1686e017e7bbe159b6f860405160405180910390a250565b61209581600e61273890919063ffffffff16565b8073ffffffffffffffffffffffffffffffffffffffff167f6ae172837ea30b801fbfcdd4108aa1d5bf8ff775444fd70256b44e6bf3dfc3f660405160405180910390a250565b81600190805190602001906120f1929190612e42565b508060029080519060200190612108929190612e42565b505050565b61212181600e61269190919063ffffffff16565b8073ffffffffffffffffffffffffffffffffffffffff167fe94479a9f7e1952cc78f2d6baab678adc1b772d936c6583def489e524cb6669260405160405180910390a250565b61217961217261217d565b83836127e0565b5050565b600033905090565b612190848484612311565b61219c8484848461294d565b6121db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121d290613b9e565b60405180910390fd5b50505050565b60006121ec8261068b565b806122515750600080837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060009054906101000a900460ff165b9050919050565b816006600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166122cb83610c58565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b8273ffffffffffffffffffffffffffffffffffffffff1661233182610c58565b73ffffffffffffffffffffffffffffffffffffffff1614612387576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161237e90613c1e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156123f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123ee90613c5e565b60405180910390fd5b612402838383612578565b61240d600082612258565b6001600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461245d919061409d565b925050819055506001600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546124b49190614047565b92505081905550816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461257383838361268c565b505050565b612583838383612ae4565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156125c6576125c181612ae9565b612605565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612604576126038382612b32565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156126485761264381612c9f565b612687565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612686576126858282612d70565b5b5b505050565b505050565b61269b8282611dcb565b6126da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126d190613d7e565b60405180910390fd5b60008260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6127428282611dcb565b15612782576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161277990613b3e565b60405180910390fd5b60018260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561284f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161284690613c7e565b60405180910390fd5b80600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516129409190613ae1565b60405180910390a3505050565b600061296e8473ffffffffffffffffffffffffffffffffffffffff16612def565b15612ad7578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261299761217d565b8786866040518563ffffffff1660e01b81526004016129b99493929190613a51565b602060405180830381600087803b1580156129d357600080fd5b505af1925050508015612a0457506040513d601f19601f82011682018060405250810190612a0191906133ff565b60015b612a87573d8060008114612a34576040519150601f19603f3d011682016040523d82523d6000602084013e612a39565b606091505b50600081511415612a7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a7690613b9e565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612adc565b600190505b949350505050565b505050565b600a80549050600b600083815260200190815260200160002081905550600a81908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001612b3f84610d15565b612b49919061409d565b9050600060096000848152602001908152602001600020549050818114612c2e576000600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816009600083815260200190815260200160002081905550505b6009600084815260200190815260200160002060009055600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600a80549050612cb3919061409d565b90506000600b60008481526020019081526020016000205490506000600a8381548110612ce357612ce26142c0565b5b9060005260206000200154905080600a8381548110612d0557612d046142c0565b5b906000526020600020018190555081600b600083815260200190815260200160002081905550600b600085815260200190815260200160002060009055600a805480612d5457612d53614291565b5b6001900381819060005260206000200160009055905550505050565b6000612d7b83610d15565b905081600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806009600084815260200190815260200160002081905550505050565b600080823b905060008111915050919050565b508054612e0e90614187565b6000825580601f10612e205750612e3f565b601f016020900490600052602060002090810190612e3e9190612ec8565b5b50565b828054612e4e90614187565b90600052602060002090601f016020900481019282612e705760008555612eb7565b82601f10612e8957805160ff1916838001178555612eb7565b82800160010185558215612eb7579182015b82811115612eb6578251825591602001919060010190612e9b565b5b509050612ec49190612ec8565b5090565b5b80821115612ee1576000816000905550600101612ec9565b5090565b6000612ef8612ef384613efe565b613ed9565b90508083825260208201905082856020860282011115612f1b57612f1a614323565b5b60005b85811015612f4b5781612f3188826130b7565b845260208401935060208301925050600181019050612f1e565b5050509392505050565b6000612f68612f6384613f2a565b613ed9565b905082815260208101848484011115612f8457612f83614328565b5b612f8f848285614145565b509392505050565b6000612faa612fa584613f5b565b613ed9565b905082815260208101848484011115612fc657612fc5614328565b5b612fd1848285614145565b509392505050565b600081359050612fe881614b31565b92915050565b600082601f8301126130035761300261431e565b5b8135613013848260208601612ee5565b91505092915050565b60008135905061302b81614b48565b92915050565b60008135905061304081614b5f565b92915050565b60008151905061305581614b5f565b92915050565b600082601f8301126130705761306f61431e565b5b8135613080848260208601612f55565b91505092915050565b600082601f83011261309e5761309d61431e565b5b81356130ae848260208601612f97565b91505092915050565b6000813590506130c681614b76565b92915050565b6000602082840312156130e2576130e1614332565b5b60006130f084828501612fd9565b91505092915050565b600080604083850312156131105761310f614332565b5b600061311e85828601612fd9565b925050602061312f85828601612fd9565b9150509250929050565b60008060006060848603121561315257613151614332565b5b600061316086828701612fd9565b935050602061317186828701612fd9565b9250506040613182868287016130b7565b9150509250925092565b600080600080608085870312156131a6576131a5614332565b5b60006131b487828801612fd9565b94505060206131c587828801612fd9565b93505060406131d6878288016130b7565b925050606085013567ffffffffffffffff8111156131f7576131f661432d565b5b6132038782880161305b565b91505092959194509250565b6000806040838503121561322657613225614332565b5b600061323485828601612fd9565b92505060206132458582860161301c565b9150509250929050565b60008060006060848603121561326857613267614332565b5b600061327686828701612fd9565b935050602084013567ffffffffffffffff8111156132975761329661432d565b5b6132a386828701613089565b925050604084013567ffffffffffffffff8111156132c4576132c361432d565b5b6132d086828701613089565b9150509250925092565b600080604083850312156132f1576132f0614332565b5b60006132ff85828601612fd9565b9250506020613310858286016130b7565b9150509250929050565b60008060006060848603121561333357613332614332565b5b600061334186828701612fd9565b9350506020613352868287016130b7565b925050604084013567ffffffffffffffff8111156133735761337261432d565b5b61337f86828701613089565b9150509250925092565b60006020828403121561339f5761339e614332565b5b600082013567ffffffffffffffff8111156133bd576133bc61432d565b5b6133c984828501612fee565b91505092915050565b6000602082840312156133e8576133e7614332565b5b60006133f684828501613031565b91505092915050565b60006020828403121561341557613414614332565b5b600061342384828501613046565b91505092915050565b60006020828403121561344257613441614332565b5b6000613450848285016130b7565b91505092915050565b600061346583836135af565b905092915050565b60006134798383613a18565b60208301905092915050565b61348e816140d1565b82525050565b600061349f82613fac565b6134a98185613ff2565b9350836020820285016134bb85613f8c565b8060005b858110156134f757848403895281516134d88582613459565b94506134e383613fd8565b925060208a019950506001810190506134bf565b50829750879550505050505092915050565b600061351482613fb7565b61351e8185614003565b935061352983613f9c565b8060005b8381101561355a578151613541888261346d565b975061354c83613fe5565b92505060018101905061352d565b5085935050505092915050565b613570816140e3565b82525050565b600061358182613fc2565b61358b8185614014565b935061359b818560208601614154565b6135a481614337565b840191505092915050565b60006135ba82613fcd565b6135c48185614025565b93506135d4818560208601614154565b6135dd81614337565b840191505092915050565b60006135f382613fcd565b6135fd8185614036565b935061360d818560208601614154565b61361681614337565b840191505092915050565b600061362e601483614036565b915061363982614348565b602082019050919050565b6000613651601f83614036565b915061365c82614371565b602082019050919050565b6000613674602c83614036565b915061367f8261439a565b604082019050919050565b6000613697602b83614036565b91506136a2826143e9565b604082019050919050565b60006136ba603283614036565b91506136c582614438565b604082019050919050565b60006136dd603083614036565b91506136e882614487565b604082019050919050565b6000613700602683614036565b915061370b826144d6565b604082019050919050565b6000613723602b83614036565b915061372e82614525565b604082019050919050565b6000613746602583614036565b915061375182614574565b604082019050919050565b6000613769601c83614036565b9150613774826145c3565b602082019050919050565b600061378c602483614036565b9150613797826145ec565b604082019050919050565b60006137af601983614036565b91506137ba8261463b565b602082019050919050565b60006137d2602c83614036565b91506137dd82614664565b604082019050919050565b60006137f5601083614036565b9150613800826146b3565b602082019050919050565b6000613818603883614036565b9150613823826146dc565b604082019050919050565b600061383b602a83614036565b91506138468261472b565b604082019050919050565b600061385e602983614036565b91506138698261477a565b604082019050919050565b6000613881603083614036565b915061388c826147c9565b604082019050919050565b60006138a4603083614036565b91506138af82614818565b604082019050919050565b60006138c7602183614036565b91506138d282614867565b604082019050919050565b60006138ea602083614036565b91506138f5826148b6565b602082019050919050565b600061390d602f83614036565b9150613918826148df565b604082019050919050565b6000613930602c83614036565b915061393b8261492e565b604082019050919050565b6000613953602083614036565b915061395e8261497d565b602082019050919050565b6000613976602283614036565b9150613981826149a6565b604082019050919050565b6000613999602183614036565b91506139a4826149f5565b604082019050919050565b60006139bc603183614036565b91506139c782614a44565b604082019050919050565b60006139df602c83614036565b91506139ea82614a93565b604082019050919050565b6000613a02602e83614036565b9150613a0d82614ae2565b604082019050919050565b613a218161413b565b82525050565b613a308161413b565b82525050565b6000602082019050613a4b6000830184613485565b92915050565b6000608082019050613a666000830187613485565b613a736020830186613485565b613a806040830185613a27565b8181036060830152613a928184613576565b905095945050505050565b60006020820190508181036000830152613ab78184613494565b905092915050565b60006020820190508181036000830152613ad98184613509565b905092915050565b6000602082019050613af66000830184613567565b92915050565b60006020820190508181036000830152613b1681846135e8565b905092915050565b60006020820190508181036000830152613b3781613621565b9050919050565b60006020820190508181036000830152613b5781613644565b9050919050565b60006020820190508181036000830152613b7781613667565b9050919050565b60006020820190508181036000830152613b978161368a565b9050919050565b60006020820190508181036000830152613bb7816136ad565b9050919050565b60006020820190508181036000830152613bd7816136d0565b9050919050565b60006020820190508181036000830152613bf7816136f3565b9050919050565b60006020820190508181036000830152613c1781613716565b9050919050565b60006020820190508181036000830152613c3781613739565b9050919050565b60006020820190508181036000830152613c578161375c565b9050919050565b60006020820190508181036000830152613c778161377f565b9050919050565b60006020820190508181036000830152613c97816137a2565b9050919050565b60006020820190508181036000830152613cb7816137c5565b9050919050565b60006020820190508181036000830152613cd7816137e8565b9050919050565b60006020820190508181036000830152613cf78161380b565b9050919050565b60006020820190508181036000830152613d178161382e565b9050919050565b60006020820190508181036000830152613d3781613851565b9050919050565b60006020820190508181036000830152613d5781613874565b9050919050565b60006020820190508181036000830152613d7781613897565b9050919050565b60006020820190508181036000830152613d97816138ba565b9050919050565b60006020820190508181036000830152613db7816138dd565b9050919050565b60006020820190508181036000830152613dd781613900565b9050919050565b60006020820190508181036000830152613df781613923565b9050919050565b60006020820190508181036000830152613e1781613946565b9050919050565b60006020820190508181036000830152613e3781613969565b9050919050565b60006020820190508181036000830152613e578161398c565b9050919050565b60006020820190508181036000830152613e77816139af565b9050919050565b60006020820190508181036000830152613e97816139d2565b9050919050565b60006020820190508181036000830152613eb7816139f5565b9050919050565b6000602082019050613ed36000830184613a27565b92915050565b6000613ee3613ef4565b9050613eef82826141b9565b919050565b6000604051905090565b600067ffffffffffffffff821115613f1957613f186142ef565b5b602082029050602081019050919050565b600067ffffffffffffffff821115613f4557613f446142ef565b5b613f4e82614337565b9050602081019050919050565b600067ffffffffffffffff821115613f7657613f756142ef565b5b613f7f82614337565b9050602081019050919050565b6000819050602082019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b60006140528261413b565b915061405d8361413b565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561409257614091614233565b5b828201905092915050565b60006140a88261413b565b91506140b38361413b565b9250828210156140c6576140c5614233565b5b828203905092915050565b60006140dc8261411b565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015614172578082015181840152602081019050614157565b83811115614181576000848401525b50505050565b6000600282049050600182168061419f57607f821691505b602082108114156141b3576141b2614262565b5b50919050565b6141c282614337565b810181811067ffffffffffffffff821117156141e1576141e06142ef565b5b80604052505050565b60006141f58261413b565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561422857614227614233565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f5061757361626c653a206e6f7420706175736564000000000000000000000000600082015250565b7f526f6c65733a206163636f756e7420616c72656164792068617320726f6c6500600082015250565b7f4549503732314d657461646174613a2055524920736574206f66206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f506175736572526f6c653a2063616c6c657220646f6573206e6f74206861766560008201527f207468652050617573657220726f6c6500000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f6765745552494c69737446726f6d546f6b656e4c6973743a20746f6b656e4c6960008201527f737420697320656d707479000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4d696e746572526f6c653a2063616c6c657220646f6573206e6f74206861766560008201527f20746865204d696e74657220726f6c6500000000000000000000000000000000602082015250565b7f4549503732314275726e61626c653a2063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656400000000000000000000000000000000602082015250565b7f526f6c65733a206163636f756e7420646f6573206e6f74206861766520726f6c60008201527f6500000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4549503732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f526f6c65733a206163636f756e7420697320746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f6765744f776e6572546f6b656e4c6973743a206163636f756e7420697320746860008201527f65207a65726f2061646472657373000000000000000000000000000000000000602082015250565b614b3a816140d1565b8114614b4557600080fd5b50565b614b51816140e3565b8114614b5c57600080fd5b50565b614b68816140ef565b8114614b7357600080fd5b50565b614b7f8161413b565b8114614b8a57600080fd5b5056fea26469706673582212205bdf014695135f77aa79c46cd30ee6bcd44f3a4d38185bd4449c300e0a622b2764736f6c63430008070033
Deployed ByteCode Sourcemap
48353:484:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37159:224;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23797:100;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25823:221;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45128:121;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37799:113;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45401:151;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37467:256;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13641:118;;;:::i;:::-;;46675:135;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26991:185;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46816:235;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11697:109;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38947:233;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48133:213;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12858:78;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23491:239;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11910:77;;;:::i;:::-;;23221:208;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9962:97;;;:::i;:::-;;38409:459;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11812:92;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13432:116;;;:::i;:::-;;9761:81;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48523:311;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37920:481;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23966:104;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10906:92;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11004:77;;;:::i;:::-;;45255:140;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10791:109;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27247:328;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24141:220;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26342:164;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10065:191;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37159:224;37261:4;37300:35;37285:50;;;:11;:50;;;;:90;;;;37339:36;37363:11;37339:23;:36::i;:::-;37285:90;37278:97;;37159:224;;;:::o;23797:100::-;23851:13;23884:5;23877:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23797:100;:::o;25823:221::-;25899:7;25927:16;25935:7;25927;:16::i;:::-;25919:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;26012:15;:24;26028:7;26012:24;;;;;;;;;;;;;;;;;;;;;26005:31;;25823:221;;;:::o;45128:121::-;13093:7;;;;;;;;;;;13092:8;13084:37;;;;;;;;;;;;:::i;:::-;;;;;;;;;45215:26:::1;45229:2;45233:7;45215:13;:26::i;:::-;45128:121:::0;;:::o;37799:113::-;37860:7;37887:10;:17;;;;37880:24;;37799:113;:::o;45401:151::-;13093:7;;;;;;;;;;;13092:8;13084:37;;;;;;;;;;;;:::i;:::-;;;;;;;;;45507::::1;45526:4;45532:2;45536:7;45507:18;:37::i;:::-;45401:151:::0;;;:::o;37467:256::-;37564:7;37600:23;37617:5;37600:16;:23::i;:::-;37592:5;:31;37584:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;37689:12;:19;37702:5;37689:19;;;;;;;;;;;;;;;:26;37709:5;37689:26;;;;;;;;;;;;37682:33;;37467:256;;;;:::o;13641:118::-;11598:20;11607:10;11598:8;:20::i;:::-;11590:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;13290:7:::1;;;;;;;;;;;13282:40;;;;;;;;;;;;:::i;:::-;;;;;;;;;13710:5:::2;13700:7;;:15;;;;;;;;;;;;;;;;;;13731:20;13740:10;13731:20;;;;;;:::i;:::-;;;;;;;;13641:118::o:0;46675:135::-;46745:4;10692:20;10701:10;10692:8;:20::i;:::-;10684:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;46762:18:::1;46768:2;46772:7;46762:5;:18::i;:::-;46798:4;46791:11;;46675:135:::0;;;;:::o;26991:185::-;27129:39;27146:4;27152:2;27156:7;27129:39;;;;;;;;;;;;:16;:39::i;:::-;26991:185;;;:::o;46816:235::-;46926:39;46945:10;46957:7;46926:18;:39::i;:::-;46918:100;;;;;;;;;;;;:::i;:::-;;;;;;;;;47029:14;47035:7;47029:5;:14::i;:::-;46816:235;:::o;11697:109::-;11753:4;11777:21;11790:7;11777:8;:12;;:21;;;;:::i;:::-;11770:28;;11697:109;;;:::o;38947:233::-;39022:7;39058:30;:28;:30::i;:::-;39050:5;:38;39042:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;39155:10;39166:5;39155:17;;;;;;;;:::i;:::-;;;;;;;;;;39148:24;;38947:233;;;:::o;48133:213::-;48239:4;10692:20;10701:10;10692:8;:20::i;:::-;10684:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;48256:18:::1;48262:2;48266:7;48256:5;:18::i;:::-;48285:31;48298:7;48307:8;48285:12;:31::i;:::-;48334:4;48327:11;;48133:213:::0;;;;;:::o;12858:78::-;12897:4;12921:7;;;;;;;;;;;12914:14;;12858:78;:::o;23491:239::-;23563:7;23583:13;23599:7;:16;23607:7;23599:16;;;;;;;;;;;;;;;;;;;;;23583:32;;23651:1;23634:19;;:5;:19;;;;23626:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;23717:5;23710:12;;;23491:239;;;:::o;11910:77::-;11954:25;11968:10;11954:13;:25::i;:::-;11910:77::o;23221:208::-;23293:7;23338:1;23321:19;;:5;:19;;;;23313:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;23405:9;:16;23415:5;23405:16;;;;;;;;;;;;;;;;23398:23;;23221:208;;;:::o;9962:97::-;9895:10;9884:21;;:7;:5;:7::i;:::-;:21;;;9876:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;10023:30:::1;10050:1;10023:18;:30::i;:::-;9962:97::o:0;38409:459::-;38490:15;38546:1;38526:9;:16;:21;;38518:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;38606:20;38629:9;:16;38606:39;;38656:23;38695:12;38682:26;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38656:52;;38725:6;38721:104;38737:12;38735:1;:14;38721:104;;;38784:29;38800:9;38810:1;38800:12;;;;;;;;:::i;:::-;;;;;;;;38784:15;:29::i;:::-;38771:7;38779:1;38771:10;;;;;;;;:::i;:::-;;;;;;;:42;;;;38751:3;;;;:::i;:::-;;;38721:104;;;;38853:7;38846:14;;;;38409:459;;;:::o;11812:92::-;11598:20;11607:10;11598:8;:20::i;:::-;11590:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;11877:19:::1;11888:7;11877:10;:19::i;:::-;11812:92:::0;:::o;13432:116::-;11598:20;11607:10;11598:8;:20::i;:::-;11590:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;13093:7:::1;;;;;;;;;;;13092:8;13084:37;;;;;;;;;;;;:::i;:::-;;;;;;;;;13502:4:::2;13492:7;;:14;;;;;;;;;;;;;;;;;;13522:18;13529:10;13522:18;;;;;;:::i;:::-;;;;;;;;13432:116::o:0;9761:81::-;9807:7;9830:6;;;;;;;;;;;9823:13;;9761:81;:::o;48523:311::-;48630:11;;;;;;;;;;;48629:12;48643:19;;;;;;;;;;;;;;;;;48621:42;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;48674:26;48693:6;48674:18;:26::i;:::-;48711:18;48722:6;48711:10;:18::i;:::-;48740;48751:6;48740:10;:18::i;:::-;48769:28;48782:5;48789:7;48769:12;:28::i;:::-;48822:4;48808:11;;:18;;;;;;;;;;;;;;;;;;48523:311;;;:::o;37920:481::-;37982:16;38036:1;38019:19;;:5;:19;;;;38011:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;38100:22;38125:23;38142:5;38125:16;:23::i;:::-;38100:48;;38159:29;38205:14;38191:29;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38159:61;;38245:6;38241:113;38257:14;38255:1;:16;38241:113;;;38312:29;38332:5;38339:1;38312:19;:29::i;:::-;38293:12;38306:1;38293:15;;;;;;;;:::i;:::-;;;;;;;:49;;;;;38273:3;;;;:::i;:::-;;;38241:113;;;;38381:12;38374:19;;;;37920:481;;;:::o;23966:104::-;24022:13;24055:7;24048:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23966:104;:::o;10906:92::-;10692:20;10701:10;10692:8;:20::i;:::-;10684:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;10971:19:::1;10982:7;10971:10;:19::i;:::-;10906:92:::0;:::o;11004:77::-;11048:25;11062:10;11048:13;:25::i;:::-;11004:77::o;45255:140::-;13093:7;;;;;;;;;;;13092:8;13084:37;;;;;;;;;;;;:::i;:::-;;;;;;;;;45350::::1;45374:2;45378:8;45350:23;:37::i;:::-;45255:140:::0;;:::o;10791:109::-;10847:4;10871:21;10884:7;10871:8;:12;;:21;;;;:::i;:::-;10864:28;;10791:109;;;:::o;27247:328::-;27422:41;27441:12;:10;:12::i;:::-;27455:7;27422:18;:41::i;:::-;27414:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;27528:39;27542:4;27548:2;27552:7;27561:5;27528:13;:39::i;:::-;27247:328;;;;:::o;24141:220::-;24214:13;24248:16;24256:7;24248;:16::i;:::-;24240:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;24334:10;:19;24345:7;24334:19;;;;;;;;;;;24327:26;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24141:220;;;:::o;26342:164::-;26439:4;26463:18;:25;26482:5;26463:25;;;;;;;;;;;;;;;:35;26489:8;26463:35;;;;;;;;;;;;;;;;;;;;;;;;;26456:42;;26342:164;;;;:::o;10065:191::-;9895:10;9884:21;;:7;:5;:7::i;:::-;:21;;;9876:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;10170:1:::1;10150:22;;:8;:22;;;;10142:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;10222:28;10241:8;10222:18;:28::i;:::-;10065:191:::0;:::o;22852:305::-;22954:4;23006:25;22991:40;;;:11;:40;;;;:105;;;;23063:33;23048:48;;;:11;:48;;;;22991:105;:158;;;;23113:36;23137:11;23113:23;:36::i;:::-;22991:158;22971:178;;22852:305;;;:::o;29085:127::-;29150:4;29202:1;29174:30;;:7;:16;29182:7;29174:16;;;;;;;;;;;;;;;;;;;;;:30;;;;29167:37;;29085:127;;;:::o;25346:411::-;25427:13;25443:23;25458:7;25443:14;:23::i;:::-;25427:39;;25491:5;25485:11;;:2;:11;;;;25477:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;25585:5;25569:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;25594:37;25611:5;25618:12;:10;:12::i;:::-;25594:16;:37::i;:::-;25569:62;25547:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;25728:21;25737:2;25741:7;25728:8;:21::i;:::-;25416:341;25346:411;;:::o;26573:347::-;26768:41;26787:12;:10;:12::i;:::-;26801:7;26768:18;:41::i;:::-;26760:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;26884:28;26894:4;26900:2;26904:7;26884:9;:28::i;:::-;26573:347;;;:::o;31063:439::-;31157:1;31143:16;;:2;:16;;;;31135:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;31216:16;31224:7;31216;:16::i;:::-;31215:17;31207:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;31278:45;31307:1;31311:2;31315:7;31278:20;:45::i;:::-;31353:1;31336:9;:13;31346:2;31336:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;31384:2;31365:7;:16;31373:7;31365:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;31429:7;31425:2;31404:33;;31421:1;31404:33;;;;;;;;;;;;31450:44;31478:1;31482:2;31486:7;31450:19;:44::i;:::-;31063:439;;:::o;29379:348::-;29472:4;29497:16;29505:7;29497;:16::i;:::-;29489:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;29573:13;29589:23;29604:7;29589:14;:23::i;:::-;29573:39;;29642:5;29631:16;;:7;:16;;;:51;;;;29675:7;29651:31;;:20;29663:7;29651:11;:20::i;:::-;:31;;;29631:51;:87;;;;29686:32;29703:5;29710:7;29686:16;:32::i;:::-;29631:87;29623:96;;;29379:348;;;;:::o;31731:529::-;31791:13;31807:23;31822:7;31807:14;:23::i;:::-;31791:39;;31843:48;31864:5;31879:1;31883:7;31843:20;:48::i;:::-;31932:29;31949:1;31953:7;31932:8;:29::i;:::-;31994:1;31974:9;:16;31984:5;31974:16;;;;;;;;;;;;;;;;:21;;;;;;;:::i;:::-;;;;;;;;32013:7;:16;32021:7;32013:16;;;;;;;;;;;;32006:23;;;;;;;;;;;32083:1;32052:10;:19;32063:7;32052:19;;;;;;;;;;;32046:33;;;;;:::i;:::-;;;:38;32042:97;;32108:10;:19;32119:7;32108:19;;;;;;;;;;;;32101:26;;;;:::i;:::-;32042:97;32184:7;32180:1;32156:36;;32165:5;32156:36;;;;;;;;;;;;32205:47;32225:5;32240:1;32244:7;32205:19;:47::i;:::-;31780:480;31731:529;:::o;9154:203::-;9226:4;9270:1;9251:21;;:7;:21;;;;9243:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;9329:4;:11;;:20;9341:7;9329:20;;;;;;;;;;;;;;;;;;;;;;;;;9322:27;;9154:203;;;;:::o;24608:195::-;24694:16;24702:7;24694;:16::i;:::-;24686:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;24792:3;24770:10;:19;24781:7;24770:19;;;;;;;;;;;:25;;;;;;;;;;;;:::i;:::-;;24608:195;;:::o;12121:130::-;12181:24;12197:7;12181:8;:15;;:24;;;;:::i;:::-;12235:7;12221:22;;;;;;;;;;;;12121:130;:::o;10262:177::-;10332:16;10351:6;;;;;;;;;;;10332:25;;10373:8;10364:6;;:17;;;;;;;;;;;;;;;;;;10424:8;10393:40;;10414:8;10393:40;;;;;;;;;;;;10325:114;10262:177;:::o;11993:122::-;12050:21;12063:7;12050:8;:12;;:21;;;;:::i;:::-;12099:7;12087:20;;;;;;;;;;;;11993:122;:::o;11087:::-;11144:21;11157:7;11144:8;:12;;:21;;;;:::i;:::-;11193:7;11181:20;;;;;;;;;;;;11087:122;:::o;24811:131::-;24903:5;24895;:13;;;;;;;;;;;;:::i;:::-;;24927:7;24917;:17;;;;;;;;;;;;:::i;:::-;;24811:131;;:::o;11215:130::-;11275:24;11291:7;11275:8;:15;;:24;;;;:::i;:::-;11329:7;11315:22;;;;;;;;;;;;11215:130;:::o;26116:155::-;26211:52;26230:12;:10;:12::i;:::-;26244:8;26254;26211:18;:52::i;:::-;26116:155;;:::o;9397:98::-;9450:7;9477:10;9470:17;;9397:98;:::o;28457:315::-;28614:28;28624:4;28630:2;28634:7;28614:9;:28::i;:::-;28661:48;28684:4;28690:2;28694:7;28703:5;28661:22;:48::i;:::-;28653:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;28457:315;;;;:::o;21042:184::-;21127:4;21151:30;21169:11;21151:17;:30::i;:::-;:67;;;;21185:20;:33;21206:11;21185:33;;;;;;;;;;;;;;;;;;;;;;;;;;;21151:67;21144:74;;21042:184;;;:::o;33340:174::-;33442:2;33415:15;:24;33431:7;33415:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;33498:7;33494:2;33460:46;;33469:23;33484:7;33469:14;:23::i;:::-;33460:46;;;;;;;;;;;;33340:174;;:::o;32597:625::-;32756:4;32729:31;;:23;32744:7;32729:14;:23::i;:::-;:31;;;32721:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;32835:1;32821:16;;:2;:16;;;;32813:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;32891:39;32912:4;32918:2;32922:7;32891:20;:39::i;:::-;32995:29;33012:1;33016:7;32995:8;:29::i;:::-;33056:1;33037:9;:15;33047:4;33037:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;33085:1;33068:9;:13;33078:2;33068:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;33116:2;33097:7;:16;33105:7;33097:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;33155:7;33151:2;33136:27;;33145:4;33136:27;;;;;;;;;;;;33176:38;33196:4;33202:2;33206:7;33176:19;:38::i;:::-;32597:625;;;:::o;39793:589::-;39937:45;39964:4;39970:2;39974:7;39937:26;:45::i;:::-;40015:1;39999:18;;:4;:18;;;39995:187;;;40034:40;40066:7;40034:31;:40::i;:::-;39995:187;;;40104:2;40096:10;;:4;:10;;;40092:90;;40123:47;40156:4;40162:7;40123:32;:47::i;:::-;40092:90;39995:187;40210:1;40196:16;;:2;:16;;;40192:183;;;40229:45;40266:7;40229:36;:45::i;:::-;40192:183;;;40302:4;40296:10;;:2;:10;;;40292:83;;40323:40;40351:2;40355:7;40323:27;:40::i;:::-;40292:83;40192:183;39793:589;;;:::o;36418:125::-;;;;:::o;8878:183::-;8958:18;8962:4;8968:7;8958:3;:18::i;:::-;8950:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;9048:5;9025:4;:11;;:20;9037:7;9025:20;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;8878:183;;:::o;8622:178::-;8700:18;8704:4;8710:7;8700:3;:18::i;:::-;8699:19;8691:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;8788:4;8765;:11;;:20;8777:7;8765:20;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;8622:178;;:::o;33656:315::-;33811:8;33802:17;;:5;:17;;;;33794:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;33898:8;33860:18;:25;33879:5;33860:25;;;;;;;;;;;;;;;:35;33886:8;33860:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;33944:8;33922:41;;33937:5;33922:41;;;33954:8;33922:41;;;;;;:::i;:::-;;;;;;;;33656:315;;;:::o;34536:799::-;34691:4;34712:15;:2;:13;;;:15::i;:::-;34708:620;;;34764:2;34748:36;;;34785:12;:10;:12::i;:::-;34799:4;34805:7;34814:5;34748:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;34744:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35007:1;34990:6;:13;:18;34986:272;;;35033:60;;;;;;;;;;:::i;:::-;;;;;;;;34986:272;35208:6;35202:13;35193:6;35189:2;35185:15;35178:38;34744:529;34881:41;;;34871:51;;;:6;:51;;;;34864:58;;;;;34708:620;35312:4;35305:11;;34536:799;;;;;;;:::o;35907:126::-;;;;:::o;41105:164::-;41209:10;:17;;;;41182:15;:24;41198:7;41182:24;;;;;;;;;;;:44;;;;41237:10;41253:7;41237:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41105:164;:::o;41896:988::-;42162:22;42212:1;42187:22;42204:4;42187:16;:22::i;:::-;:26;;;;:::i;:::-;42162:51;;42224:18;42245:17;:26;42263:7;42245:26;;;;;;;;;;;;42224:47;;42392:14;42378:10;:28;42374:328;;42423:19;42445:12;:18;42458:4;42445:18;;;;;;;;;;;;;;;:34;42464:14;42445:34;;;;;;;;;;;;42423:56;;42529:11;42496:12;:18;42509:4;42496:18;;;;;;;;;;;;;;;:30;42515:10;42496:30;;;;;;;;;;;:44;;;;42646:10;42613:17;:30;42631:11;42613:30;;;;;;;;;;;:43;;;;42408:294;42374:328;42798:17;:26;42816:7;42798:26;;;;;;;;;;;42791:33;;;42842:12;:18;42855:4;42842:18;;;;;;;;;;;;;;;:34;42861:14;42842:34;;;;;;;;;;;42835:41;;;41977:907;;41896:988;;:::o;43179:1079::-;43432:22;43477:1;43457:10;:17;;;;:21;;;;:::i;:::-;43432:46;;43489:18;43510:15;:24;43526:7;43510:24;;;;;;;;;;;;43489:45;;43861:19;43883:10;43894:14;43883:26;;;;;;;;:::i;:::-;;;;;;;;;;43861:48;;43947:11;43922:10;43933;43922:22;;;;;;;;:::i;:::-;;;;;;;;;:36;;;;44058:10;44027:15;:28;44043:11;44027:28;;;;;;;;;;;:41;;;;44199:15;:24;44215:7;44199:24;;;;;;;;;;;44192:31;;;44234:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;43250:1008;;;43179:1079;:::o;40683:221::-;40768:14;40785:20;40802:2;40785:16;:20::i;:::-;40768:37;;40843:7;40816:12;:16;40829:2;40816:16;;;;;;;;;;;;;;;:24;40833:6;40816:24;;;;;;;;;;;:34;;;;40890:6;40861:17;:26;40879:7;40861:26;;;;;;;;;;;:35;;;;40757:147;40683:221;;:::o;5314:420::-;5374:4;5580:12;5691:7;5679:20;5671:28;;5725:1;5718:4;:8;5711:15;;;5314:420;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;24:722:1:-;120:5;145:81;161:64;218:6;161:64;:::i;:::-;145:81;:::i;:::-;136:90;;246:5;275:6;268:5;261:21;309:4;302:5;298:16;291:23;;335:6;385:3;377:4;369:6;365:17;360:3;356:27;353:36;350:143;;;404:79;;:::i;:::-;350:143;517:1;502:238;527:6;524:1;521:13;502:238;;;595:3;624:37;657:3;645:10;624:37;:::i;:::-;619:3;612:50;691:4;686:3;682:14;675:21;;725:4;720:3;716:14;709:21;;562:178;549:1;546;542:9;537:14;;502:238;;;506:14;126:620;;24:722;;;;;:::o;752:410::-;829:5;854:65;870:48;911:6;870:48;:::i;:::-;854:65;:::i;:::-;845:74;;942:6;935:5;928:21;980:4;973:5;969:16;1018:3;1009:6;1004:3;1000:16;997:25;994:112;;;1025:79;;:::i;:::-;994:112;1115:41;1149:6;1144:3;1139;1115:41;:::i;:::-;835:327;752:410;;;;;:::o;1168:412::-;1246:5;1271:66;1287:49;1329:6;1287:49;:::i;:::-;1271:66;:::i;:::-;1262:75;;1360:6;1353:5;1346:21;1398:4;1391:5;1387:16;1436:3;1427:6;1422:3;1418:16;1415:25;1412:112;;;1443:79;;:::i;:::-;1412:112;1533:41;1567:6;1562:3;1557;1533:41;:::i;:::-;1252:328;1168:412;;;;;:::o;1586:139::-;1632:5;1670:6;1657:20;1648:29;;1686:33;1713:5;1686:33;:::i;:::-;1586:139;;;;:::o;1748:370::-;1819:5;1868:3;1861:4;1853:6;1849:17;1845:27;1835:122;;1876:79;;:::i;:::-;1835:122;1993:6;1980:20;2018:94;2108:3;2100:6;2093:4;2085:6;2081:17;2018:94;:::i;:::-;2009:103;;1825:293;1748:370;;;;:::o;2124:133::-;2167:5;2205:6;2192:20;2183:29;;2221:30;2245:5;2221:30;:::i;:::-;2124:133;;;;:::o;2263:137::-;2308:5;2346:6;2333:20;2324:29;;2362:32;2388:5;2362:32;:::i;:::-;2263:137;;;;:::o;2406:141::-;2462:5;2493:6;2487:13;2478:22;;2509:32;2535:5;2509:32;:::i;:::-;2406:141;;;;:::o;2566:338::-;2621:5;2670:3;2663:4;2655:6;2651:17;2647:27;2637:122;;2678:79;;:::i;:::-;2637:122;2795:6;2782:20;2820:78;2894:3;2886:6;2879:4;2871:6;2867:17;2820:78;:::i;:::-;2811:87;;2627:277;2566:338;;;;:::o;2924:340::-;2980:5;3029:3;3022:4;3014:6;3010:17;3006:27;2996:122;;3037:79;;:::i;:::-;2996:122;3154:6;3141:20;3179:79;3254:3;3246:6;3239:4;3231:6;3227:17;3179:79;:::i;:::-;3170:88;;2986:278;2924:340;;;;:::o;3270:139::-;3316:5;3354:6;3341:20;3332:29;;3370:33;3397:5;3370:33;:::i;:::-;3270:139;;;;:::o;3415:329::-;3474:6;3523:2;3511:9;3502:7;3498:23;3494:32;3491:119;;;3529:79;;:::i;:::-;3491:119;3649:1;3674:53;3719:7;3710:6;3699:9;3695:22;3674:53;:::i;:::-;3664:63;;3620:117;3415:329;;;;:::o;3750:474::-;3818:6;3826;3875:2;3863:9;3854:7;3850:23;3846:32;3843:119;;;3881:79;;:::i;:::-;3843:119;4001:1;4026:53;4071:7;4062:6;4051:9;4047:22;4026:53;:::i;:::-;4016:63;;3972:117;4128:2;4154:53;4199:7;4190:6;4179:9;4175:22;4154:53;:::i;:::-;4144:63;;4099:118;3750:474;;;;;:::o;4230:619::-;4307:6;4315;4323;4372:2;4360:9;4351:7;4347:23;4343:32;4340:119;;;4378:79;;:::i;:::-;4340:119;4498:1;4523:53;4568:7;4559:6;4548:9;4544:22;4523:53;:::i;:::-;4513:63;;4469:117;4625:2;4651:53;4696:7;4687:6;4676:9;4672:22;4651:53;:::i;:::-;4641:63;;4596:118;4753:2;4779:53;4824:7;4815:6;4804:9;4800:22;4779:53;:::i;:::-;4769:63;;4724:118;4230:619;;;;;:::o;4855:943::-;4950:6;4958;4966;4974;5023:3;5011:9;5002:7;4998:23;4994:33;4991:120;;;5030:79;;:::i;:::-;4991:120;5150:1;5175:53;5220:7;5211:6;5200:9;5196:22;5175:53;:::i;:::-;5165:63;;5121:117;5277:2;5303:53;5348:7;5339:6;5328:9;5324:22;5303:53;:::i;:::-;5293:63;;5248:118;5405:2;5431:53;5476:7;5467:6;5456:9;5452:22;5431:53;:::i;:::-;5421:63;;5376:118;5561:2;5550:9;5546:18;5533:32;5592:18;5584:6;5581:30;5578:117;;;5614:79;;:::i;:::-;5578:117;5719:62;5773:7;5764:6;5753:9;5749:22;5719:62;:::i;:::-;5709:72;;5504:287;4855:943;;;;;;;:::o;5804:468::-;5869:6;5877;5926:2;5914:9;5905:7;5901:23;5897:32;5894:119;;;5932:79;;:::i;:::-;5894:119;6052:1;6077:53;6122:7;6113:6;6102:9;6098:22;6077:53;:::i;:::-;6067:63;;6023:117;6179:2;6205:50;6247:7;6238:6;6227:9;6223:22;6205:50;:::i;:::-;6195:60;;6150:115;5804:468;;;;;:::o;6278:979::-;6375:6;6383;6391;6440:2;6428:9;6419:7;6415:23;6411:32;6408:119;;;6446:79;;:::i;:::-;6408:119;6566:1;6591:53;6636:7;6627:6;6616:9;6612:22;6591:53;:::i;:::-;6581:63;;6537:117;6721:2;6710:9;6706:18;6693:32;6752:18;6744:6;6741:30;6738:117;;;6774:79;;:::i;:::-;6738:117;6879:63;6934:7;6925:6;6914:9;6910:22;6879:63;:::i;:::-;6869:73;;6664:288;7019:2;7008:9;7004:18;6991:32;7050:18;7042:6;7039:30;7036:117;;;7072:79;;:::i;:::-;7036:117;7177:63;7232:7;7223:6;7212:9;7208:22;7177:63;:::i;:::-;7167:73;;6962:288;6278:979;;;;;:::o;7263:474::-;7331:6;7339;7388:2;7376:9;7367:7;7363:23;7359:32;7356:119;;;7394:79;;:::i;:::-;7356:119;7514:1;7539:53;7584:7;7575:6;7564:9;7560:22;7539:53;:::i;:::-;7529:63;;7485:117;7641:2;7667:53;7712:7;7703:6;7692:9;7688:22;7667:53;:::i;:::-;7657:63;;7612:118;7263:474;;;;;:::o;7743:799::-;7830:6;7838;7846;7895:2;7883:9;7874:7;7870:23;7866:32;7863:119;;;7901:79;;:::i;:::-;7863:119;8021:1;8046:53;8091:7;8082:6;8071:9;8067:22;8046:53;:::i;:::-;8036:63;;7992:117;8148:2;8174:53;8219:7;8210:6;8199:9;8195:22;8174:53;:::i;:::-;8164:63;;8119:118;8304:2;8293:9;8289:18;8276:32;8335:18;8327:6;8324:30;8321:117;;;8357:79;;:::i;:::-;8321:117;8462:63;8517:7;8508:6;8497:9;8493:22;8462:63;:::i;:::-;8452:73;;8247:288;7743:799;;;;;:::o;8548:539::-;8632:6;8681:2;8669:9;8660:7;8656:23;8652:32;8649:119;;;8687:79;;:::i;:::-;8649:119;8835:1;8824:9;8820:17;8807:31;8865:18;8857:6;8854:30;8851:117;;;8887:79;;:::i;:::-;8851:117;8992:78;9062:7;9053:6;9042:9;9038:22;8992:78;:::i;:::-;8982:88;;8778:302;8548:539;;;;:::o;9093:327::-;9151:6;9200:2;9188:9;9179:7;9175:23;9171:32;9168:119;;;9206:79;;:::i;:::-;9168:119;9326:1;9351:52;9395:7;9386:6;9375:9;9371:22;9351:52;:::i;:::-;9341:62;;9297:116;9093:327;;;;:::o;9426:349::-;9495:6;9544:2;9532:9;9523:7;9519:23;9515:32;9512:119;;;9550:79;;:::i;:::-;9512:119;9670:1;9695:63;9750:7;9741:6;9730:9;9726:22;9695:63;:::i;:::-;9685:73;;9641:127;9426:349;;;;:::o;9781:329::-;9840:6;9889:2;9877:9;9868:7;9864:23;9860:32;9857:119;;;9895:79;;:::i;:::-;9857:119;10015:1;10040:53;10085:7;10076:6;10065:9;10061:22;10040:53;:::i;:::-;10030:63;;9986:117;9781:329;;;;:::o;10116:196::-;10205:10;10240:66;10302:3;10294:6;10240:66;:::i;:::-;10226:80;;10116:196;;;;:::o;10318:179::-;10387:10;10408:46;10450:3;10442:6;10408:46;:::i;:::-;10486:4;10481:3;10477:14;10463:28;;10318:179;;;;:::o;10503:118::-;10590:24;10608:5;10590:24;:::i;:::-;10585:3;10578:37;10503:118;;:::o;10655:991::-;10794:3;10823:64;10881:5;10823:64;:::i;:::-;10903:96;10992:6;10987:3;10903:96;:::i;:::-;10896:103;;11025:3;11070:4;11062:6;11058:17;11053:3;11049:27;11100:66;11160:5;11100:66;:::i;:::-;11189:7;11220:1;11205:396;11230:6;11227:1;11224:13;11205:396;;;11301:9;11295:4;11291:20;11286:3;11279:33;11352:6;11346:13;11380:84;11459:4;11444:13;11380:84;:::i;:::-;11372:92;;11487:70;11550:6;11487:70;:::i;:::-;11477:80;;11586:4;11581:3;11577:14;11570:21;;11265:336;11252:1;11249;11245:9;11240:14;;11205:396;;;11209:14;11617:4;11610:11;;11637:3;11630:10;;10799:847;;;;;10655:991;;;;:::o;11682:732::-;11801:3;11830:54;11878:5;11830:54;:::i;:::-;11900:86;11979:6;11974:3;11900:86;:::i;:::-;11893:93;;12010:56;12060:5;12010:56;:::i;:::-;12089:7;12120:1;12105:284;12130:6;12127:1;12124:13;12105:284;;;12206:6;12200:13;12233:63;12292:3;12277:13;12233:63;:::i;:::-;12226:70;;12319:60;12372:6;12319:60;:::i;:::-;12309:70;;12165:224;12152:1;12149;12145:9;12140:14;;12105:284;;;12109:14;12405:3;12398:10;;11806:608;;;11682:732;;;;:::o;12420:109::-;12501:21;12516:5;12501:21;:::i;:::-;12496:3;12489:34;12420:109;;:::o;12535:360::-;12621:3;12649:38;12681:5;12649:38;:::i;:::-;12703:70;12766:6;12761:3;12703:70;:::i;:::-;12696:77;;12782:52;12827:6;12822:3;12815:4;12808:5;12804:16;12782:52;:::i;:::-;12859:29;12881:6;12859:29;:::i;:::-;12854:3;12850:39;12843:46;;12625:270;12535:360;;;;:::o;12901:344::-;12979:3;13007:39;13040:5;13007:39;:::i;:::-;13062:61;13116:6;13111:3;13062:61;:::i;:::-;13055:68;;13132:52;13177:6;13172:3;13165:4;13158:5;13154:16;13132:52;:::i;:::-;13209:29;13231:6;13209:29;:::i;:::-;13204:3;13200:39;13193:46;;12983:262;12901:344;;;;:::o;13251:364::-;13339:3;13367:39;13400:5;13367:39;:::i;:::-;13422:71;13486:6;13481:3;13422:71;:::i;:::-;13415:78;;13502:52;13547:6;13542:3;13535:4;13528:5;13524:16;13502:52;:::i;:::-;13579:29;13601:6;13579:29;:::i;:::-;13574:3;13570:39;13563:46;;13343:272;13251:364;;;;:::o;13621:366::-;13763:3;13784:67;13848:2;13843:3;13784:67;:::i;:::-;13777:74;;13860:93;13949:3;13860:93;:::i;:::-;13978:2;13973:3;13969:12;13962:19;;13621:366;;;:::o;13993:::-;14135:3;14156:67;14220:2;14215:3;14156:67;:::i;:::-;14149:74;;14232:93;14321:3;14232:93;:::i;:::-;14350:2;14345:3;14341:12;14334:19;;13993:366;;;:::o;14365:::-;14507:3;14528:67;14592:2;14587:3;14528:67;:::i;:::-;14521:74;;14604:93;14693:3;14604:93;:::i;:::-;14722:2;14717:3;14713:12;14706:19;;14365:366;;;:::o;14737:::-;14879:3;14900:67;14964:2;14959:3;14900:67;:::i;:::-;14893:74;;14976:93;15065:3;14976:93;:::i;:::-;15094:2;15089:3;15085:12;15078:19;;14737:366;;;:::o;15109:::-;15251:3;15272:67;15336:2;15331:3;15272:67;:::i;:::-;15265:74;;15348:93;15437:3;15348:93;:::i;:::-;15466:2;15461:3;15457:12;15450:19;;15109:366;;;:::o;15481:::-;15623:3;15644:67;15708:2;15703:3;15644:67;:::i;:::-;15637:74;;15720:93;15809:3;15720:93;:::i;:::-;15838:2;15833:3;15829:12;15822:19;;15481:366;;;:::o;15853:::-;15995:3;16016:67;16080:2;16075:3;16016:67;:::i;:::-;16009:74;;16092:93;16181:3;16092:93;:::i;:::-;16210:2;16205:3;16201:12;16194:19;;15853:366;;;:::o;16225:::-;16367:3;16388:67;16452:2;16447:3;16388:67;:::i;:::-;16381:74;;16464:93;16553:3;16464:93;:::i;:::-;16582:2;16577:3;16573:12;16566:19;;16225:366;;;:::o;16597:::-;16739:3;16760:67;16824:2;16819:3;16760:67;:::i;:::-;16753:74;;16836:93;16925:3;16836:93;:::i;:::-;16954:2;16949:3;16945:12;16938:19;;16597:366;;;:::o;16969:::-;17111:3;17132:67;17196:2;17191:3;17132:67;:::i;:::-;17125:74;;17208:93;17297:3;17208:93;:::i;:::-;17326:2;17321:3;17317:12;17310:19;;16969:366;;;:::o;17341:::-;17483:3;17504:67;17568:2;17563:3;17504:67;:::i;:::-;17497:74;;17580:93;17669:3;17580:93;:::i;:::-;17698:2;17693:3;17689:12;17682:19;;17341:366;;;:::o;17713:::-;17855:3;17876:67;17940:2;17935:3;17876:67;:::i;:::-;17869:74;;17952:93;18041:3;17952:93;:::i;:::-;18070:2;18065:3;18061:12;18054:19;;17713:366;;;:::o;18085:::-;18227:3;18248:67;18312:2;18307:3;18248:67;:::i;:::-;18241:74;;18324:93;18413:3;18324:93;:::i;:::-;18442:2;18437:3;18433:12;18426:19;;18085:366;;;:::o;18457:::-;18599:3;18620:67;18684:2;18679:3;18620:67;:::i;:::-;18613:74;;18696:93;18785:3;18696:93;:::i;:::-;18814:2;18809:3;18805:12;18798:19;;18457:366;;;:::o;18829:::-;18971:3;18992:67;19056:2;19051:3;18992:67;:::i;:::-;18985:74;;19068:93;19157:3;19068:93;:::i;:::-;19186:2;19181:3;19177:12;19170:19;;18829:366;;;:::o;19201:::-;19343:3;19364:67;19428:2;19423:3;19364:67;:::i;:::-;19357:74;;19440:93;19529:3;19440:93;:::i;:::-;19558:2;19553:3;19549:12;19542:19;;19201:366;;;:::o;19573:::-;19715:3;19736:67;19800:2;19795:3;19736:67;:::i;:::-;19729:74;;19812:93;19901:3;19812:93;:::i;:::-;19930:2;19925:3;19921:12;19914:19;;19573:366;;;:::o;19945:::-;20087:3;20108:67;20172:2;20167:3;20108:67;:::i;:::-;20101:74;;20184:93;20273:3;20184:93;:::i;:::-;20302:2;20297:3;20293:12;20286:19;;19945:366;;;:::o;20317:::-;20459:3;20480:67;20544:2;20539:3;20480:67;:::i;:::-;20473:74;;20556:93;20645:3;20556:93;:::i;:::-;20674:2;20669:3;20665:12;20658:19;;20317:366;;;:::o;20689:::-;20831:3;20852:67;20916:2;20911:3;20852:67;:::i;:::-;20845:74;;20928:93;21017:3;20928:93;:::i;:::-;21046:2;21041:3;21037:12;21030:19;;20689:366;;;:::o;21061:::-;21203:3;21224:67;21288:2;21283:3;21224:67;:::i;:::-;21217:74;;21300:93;21389:3;21300:93;:::i;:::-;21418:2;21413:3;21409:12;21402:19;;21061:366;;;:::o;21433:::-;21575:3;21596:67;21660:2;21655:3;21596:67;:::i;:::-;21589:74;;21672:93;21761:3;21672:93;:::i;:::-;21790:2;21785:3;21781:12;21774:19;;21433:366;;;:::o;21805:::-;21947:3;21968:67;22032:2;22027:3;21968:67;:::i;:::-;21961:74;;22044:93;22133:3;22044:93;:::i;:::-;22162:2;22157:3;22153:12;22146:19;;21805:366;;;:::o;22177:::-;22319:3;22340:67;22404:2;22399:3;22340:67;:::i;:::-;22333:74;;22416:93;22505:3;22416:93;:::i;:::-;22534:2;22529:3;22525:12;22518:19;;22177:366;;;:::o;22549:::-;22691:3;22712:67;22776:2;22771:3;22712:67;:::i;:::-;22705:74;;22788:93;22877:3;22788:93;:::i;:::-;22906:2;22901:3;22897:12;22890:19;;22549:366;;;:::o;22921:::-;23063:3;23084:67;23148:2;23143:3;23084:67;:::i;:::-;23077:74;;23160:93;23249:3;23160:93;:::i;:::-;23278:2;23273:3;23269:12;23262:19;;22921:366;;;:::o;23293:::-;23435:3;23456:67;23520:2;23515:3;23456:67;:::i;:::-;23449:74;;23532:93;23621:3;23532:93;:::i;:::-;23650:2;23645:3;23641:12;23634:19;;23293:366;;;:::o;23665:::-;23807:3;23828:67;23892:2;23887:3;23828:67;:::i;:::-;23821:74;;23904:93;23993:3;23904:93;:::i;:::-;24022:2;24017:3;24013:12;24006:19;;23665:366;;;:::o;24037:::-;24179:3;24200:67;24264:2;24259:3;24200:67;:::i;:::-;24193:74;;24276:93;24365:3;24276:93;:::i;:::-;24394:2;24389:3;24385:12;24378:19;;24037:366;;;:::o;24409:108::-;24486:24;24504:5;24486:24;:::i;:::-;24481:3;24474:37;24409:108;;:::o;24523:118::-;24610:24;24628:5;24610:24;:::i;:::-;24605:3;24598:37;24523:118;;:::o;24647:222::-;24740:4;24778:2;24767:9;24763:18;24755:26;;24791:71;24859:1;24848:9;24844:17;24835:6;24791:71;:::i;:::-;24647:222;;;;:::o;24875:640::-;25070:4;25108:3;25097:9;25093:19;25085:27;;25122:71;25190:1;25179:9;25175:17;25166:6;25122:71;:::i;:::-;25203:72;25271:2;25260:9;25256:18;25247:6;25203:72;:::i;:::-;25285;25353:2;25342:9;25338:18;25329:6;25285:72;:::i;:::-;25404:9;25398:4;25394:20;25389:2;25378:9;25374:18;25367:48;25432:76;25503:4;25494:6;25432:76;:::i;:::-;25424:84;;24875:640;;;;;;;:::o;25521:413::-;25684:4;25722:2;25711:9;25707:18;25699:26;;25771:9;25765:4;25761:20;25757:1;25746:9;25742:17;25735:47;25799:128;25922:4;25913:6;25799:128;:::i;:::-;25791:136;;25521:413;;;;:::o;25940:373::-;26083:4;26121:2;26110:9;26106:18;26098:26;;26170:9;26164:4;26160:20;26156:1;26145:9;26141:17;26134:47;26198:108;26301:4;26292:6;26198:108;:::i;:::-;26190:116;;25940:373;;;;:::o;26319:210::-;26406:4;26444:2;26433:9;26429:18;26421:26;;26457:65;26519:1;26508:9;26504:17;26495:6;26457:65;:::i;:::-;26319:210;;;;:::o;26535:313::-;26648:4;26686:2;26675:9;26671:18;26663:26;;26735:9;26729:4;26725:20;26721:1;26710:9;26706:17;26699:47;26763:78;26836:4;26827:6;26763:78;:::i;:::-;26755:86;;26535:313;;;;:::o;26854:419::-;27020:4;27058:2;27047:9;27043:18;27035:26;;27107:9;27101:4;27097:20;27093:1;27082:9;27078:17;27071:47;27135:131;27261:4;27135:131;:::i;:::-;27127:139;;26854:419;;;:::o;27279:::-;27445:4;27483:2;27472:9;27468:18;27460:26;;27532:9;27526:4;27522:20;27518:1;27507:9;27503:17;27496:47;27560:131;27686:4;27560:131;:::i;:::-;27552:139;;27279:419;;;:::o;27704:::-;27870:4;27908:2;27897:9;27893:18;27885:26;;27957:9;27951:4;27947:20;27943:1;27932:9;27928:17;27921:47;27985:131;28111:4;27985:131;:::i;:::-;27977:139;;27704:419;;;:::o;28129:::-;28295:4;28333:2;28322:9;28318:18;28310:26;;28382:9;28376:4;28372:20;28368:1;28357:9;28353:17;28346:47;28410:131;28536:4;28410:131;:::i;:::-;28402:139;;28129:419;;;:::o;28554:::-;28720:4;28758:2;28747:9;28743:18;28735:26;;28807:9;28801:4;28797:20;28793:1;28782:9;28778:17;28771:47;28835:131;28961:4;28835:131;:::i;:::-;28827:139;;28554:419;;;:::o;28979:::-;29145:4;29183:2;29172:9;29168:18;29160:26;;29232:9;29226:4;29222:20;29218:1;29207:9;29203:17;29196:47;29260:131;29386:4;29260:131;:::i;:::-;29252:139;;28979:419;;;:::o;29404:::-;29570:4;29608:2;29597:9;29593:18;29585:26;;29657:9;29651:4;29647:20;29643:1;29632:9;29628:17;29621:47;29685:131;29811:4;29685:131;:::i;:::-;29677:139;;29404:419;;;:::o;29829:::-;29995:4;30033:2;30022:9;30018:18;30010:26;;30082:9;30076:4;30072:20;30068:1;30057:9;30053:17;30046:47;30110:131;30236:4;30110:131;:::i;:::-;30102:139;;29829:419;;;:::o;30254:::-;30420:4;30458:2;30447:9;30443:18;30435:26;;30507:9;30501:4;30497:20;30493:1;30482:9;30478:17;30471:47;30535:131;30661:4;30535:131;:::i;:::-;30527:139;;30254:419;;;:::o;30679:::-;30845:4;30883:2;30872:9;30868:18;30860:26;;30932:9;30926:4;30922:20;30918:1;30907:9;30903:17;30896:47;30960:131;31086:4;30960:131;:::i;:::-;30952:139;;30679:419;;;:::o;31104:::-;31270:4;31308:2;31297:9;31293:18;31285:26;;31357:9;31351:4;31347:20;31343:1;31332:9;31328:17;31321:47;31385:131;31511:4;31385:131;:::i;:::-;31377:139;;31104:419;;;:::o;31529:::-;31695:4;31733:2;31722:9;31718:18;31710:26;;31782:9;31776:4;31772:20;31768:1;31757:9;31753:17;31746:47;31810:131;31936:4;31810:131;:::i;:::-;31802:139;;31529:419;;;:::o;31954:::-;32120:4;32158:2;32147:9;32143:18;32135:26;;32207:9;32201:4;32197:20;32193:1;32182:9;32178:17;32171:47;32235:131;32361:4;32235:131;:::i;:::-;32227:139;;31954:419;;;:::o;32379:::-;32545:4;32583:2;32572:9;32568:18;32560:26;;32632:9;32626:4;32622:20;32618:1;32607:9;32603:17;32596:47;32660:131;32786:4;32660:131;:::i;:::-;32652:139;;32379:419;;;:::o;32804:::-;32970:4;33008:2;32997:9;32993:18;32985:26;;33057:9;33051:4;33047:20;33043:1;33032:9;33028:17;33021:47;33085:131;33211:4;33085:131;:::i;:::-;33077:139;;32804:419;;;:::o;33229:::-;33395:4;33433:2;33422:9;33418:18;33410:26;;33482:9;33476:4;33472:20;33468:1;33457:9;33453:17;33446:47;33510:131;33636:4;33510:131;:::i;:::-;33502:139;;33229:419;;;:::o;33654:::-;33820:4;33858:2;33847:9;33843:18;33835:26;;33907:9;33901:4;33897:20;33893:1;33882:9;33878:17;33871:47;33935:131;34061:4;33935:131;:::i;:::-;33927:139;;33654:419;;;:::o;34079:::-;34245:4;34283:2;34272:9;34268:18;34260:26;;34332:9;34326:4;34322:20;34318:1;34307:9;34303:17;34296:47;34360:131;34486:4;34360:131;:::i;:::-;34352:139;;34079:419;;;:::o;34504:::-;34670:4;34708:2;34697:9;34693:18;34685:26;;34757:9;34751:4;34747:20;34743:1;34732:9;34728:17;34721:47;34785:131;34911:4;34785:131;:::i;:::-;34777:139;;34504:419;;;:::o;34929:::-;35095:4;35133:2;35122:9;35118:18;35110:26;;35182:9;35176:4;35172:20;35168:1;35157:9;35153:17;35146:47;35210:131;35336:4;35210:131;:::i;:::-;35202:139;;34929:419;;;:::o;35354:::-;35520:4;35558:2;35547:9;35543:18;35535:26;;35607:9;35601:4;35597:20;35593:1;35582:9;35578:17;35571:47;35635:131;35761:4;35635:131;:::i;:::-;35627:139;;35354:419;;;:::o;35779:::-;35945:4;35983:2;35972:9;35968:18;35960:26;;36032:9;36026:4;36022:20;36018:1;36007:9;36003:17;35996:47;36060:131;36186:4;36060:131;:::i;:::-;36052:139;;35779:419;;;:::o;36204:::-;36370:4;36408:2;36397:9;36393:18;36385:26;;36457:9;36451:4;36447:20;36443:1;36432:9;36428:17;36421:47;36485:131;36611:4;36485:131;:::i;:::-;36477:139;;36204:419;;;:::o;36629:::-;36795:4;36833:2;36822:9;36818:18;36810:26;;36882:9;36876:4;36872:20;36868:1;36857:9;36853:17;36846:47;36910:131;37036:4;36910:131;:::i;:::-;36902:139;;36629:419;;;:::o;37054:::-;37220:4;37258:2;37247:9;37243:18;37235:26;;37307:9;37301:4;37297:20;37293:1;37282:9;37278:17;37271:47;37335:131;37461:4;37335:131;:::i;:::-;37327:139;;37054:419;;;:::o;37479:::-;37645:4;37683:2;37672:9;37668:18;37660:26;;37732:9;37726:4;37722:20;37718:1;37707:9;37703:17;37696:47;37760:131;37886:4;37760:131;:::i;:::-;37752:139;;37479:419;;;:::o;37904:::-;38070:4;38108:2;38097:9;38093:18;38085:26;;38157:9;38151:4;38147:20;38143:1;38132:9;38128:17;38121:47;38185:131;38311:4;38185:131;:::i;:::-;38177:139;;37904:419;;;:::o;38329:::-;38495:4;38533:2;38522:9;38518:18;38510:26;;38582:9;38576:4;38572:20;38568:1;38557:9;38553:17;38546:47;38610:131;38736:4;38610:131;:::i;:::-;38602:139;;38329:419;;;:::o;38754:::-;38920:4;38958:2;38947:9;38943:18;38935:26;;39007:9;39001:4;38997:20;38993:1;38982:9;38978:17;38971:47;39035:131;39161:4;39035:131;:::i;:::-;39027:139;;38754:419;;;:::o;39179:222::-;39272:4;39310:2;39299:9;39295:18;39287:26;;39323:71;39391:1;39380:9;39376:17;39367:6;39323:71;:::i;:::-;39179:222;;;;:::o;39407:129::-;39441:6;39468:20;;:::i;:::-;39458:30;;39497:33;39525:4;39517:6;39497:33;:::i;:::-;39407:129;;;:::o;39542:75::-;39575:6;39608:2;39602:9;39592:19;;39542:75;:::o;39623:311::-;39700:4;39790:18;39782:6;39779:30;39776:56;;;39812:18;;:::i;:::-;39776:56;39862:4;39854:6;39850:17;39842:25;;39922:4;39916;39912:15;39904:23;;39623:311;;;:::o;39940:307::-;40001:4;40091:18;40083:6;40080:30;40077:56;;;40113:18;;:::i;:::-;40077:56;40151:29;40173:6;40151:29;:::i;:::-;40143:37;;40235:4;40229;40225:15;40217:23;;39940:307;;;:::o;40253:308::-;40315:4;40405:18;40397:6;40394:30;40391:56;;;40427:18;;:::i;:::-;40391:56;40465:29;40487:6;40465:29;:::i;:::-;40457:37;;40549:4;40543;40539:15;40531:23;;40253:308;;;:::o;40567:142::-;40644:4;40667:3;40659:11;;40697:4;40692:3;40688:14;40680:22;;40567:142;;;:::o;40715:132::-;40782:4;40805:3;40797:11;;40835:4;40830:3;40826:14;40818:22;;40715:132;;;:::o;40853:124::-;40930:6;40964:5;40958:12;40948:22;;40853:124;;;:::o;40983:114::-;41050:6;41084:5;41078:12;41068:22;;40983:114;;;:::o;41103:98::-;41154:6;41188:5;41182:12;41172:22;;41103:98;;;:::o;41207:99::-;41259:6;41293:5;41287:12;41277:22;;41207:99;;;:::o;41312:123::-;41392:4;41424;41419:3;41415:14;41407:22;;41312:123;;;:::o;41441:113::-;41511:4;41543;41538:3;41534:14;41526:22;;41441:113;;;:::o;41560:194::-;41669:11;41703:6;41698:3;41691:19;41743:4;41738:3;41734:14;41719:29;;41560:194;;;;:::o;41760:184::-;41859:11;41893:6;41888:3;41881:19;41933:4;41928:3;41924:14;41909:29;;41760:184;;;;:::o;41950:168::-;42033:11;42067:6;42062:3;42055:19;42107:4;42102:3;42098:14;42083:29;;41950:168;;;;:::o;42124:159::-;42198:11;42232:6;42227:3;42220:19;42272:4;42267:3;42263:14;42248:29;;42124:159;;;;:::o;42289:169::-;42373:11;42407:6;42402:3;42395:19;42447:4;42442:3;42438:14;42423:29;;42289:169;;;;:::o;42464:305::-;42504:3;42523:20;42541:1;42523:20;:::i;:::-;42518:25;;42557:20;42575:1;42557:20;:::i;:::-;42552:25;;42711:1;42643:66;42639:74;42636:1;42633:81;42630:107;;;42717:18;;:::i;:::-;42630:107;42761:1;42758;42754:9;42747:16;;42464:305;;;;:::o;42775:191::-;42815:4;42835:20;42853:1;42835:20;:::i;:::-;42830:25;;42869:20;42887:1;42869:20;:::i;:::-;42864:25;;42908:1;42905;42902:8;42899:34;;;42913:18;;:::i;:::-;42899:34;42958:1;42955;42951:9;42943:17;;42775:191;;;;:::o;42972:96::-;43009:7;43038:24;43056:5;43038:24;:::i;:::-;43027:35;;42972:96;;;:::o;43074:90::-;43108:7;43151:5;43144:13;43137:21;43126:32;;43074:90;;;:::o;43170:149::-;43206:7;43246:66;43239:5;43235:78;43224:89;;43170:149;;;:::o;43325:126::-;43362:7;43402:42;43395:5;43391:54;43380:65;;43325:126;;;:::o;43457:77::-;43494:7;43523:5;43512:16;;43457:77;;;:::o;43540:154::-;43624:6;43619:3;43614;43601:30;43686:1;43677:6;43672:3;43668:16;43661:27;43540:154;;;:::o;43700:307::-;43768:1;43778:113;43792:6;43789:1;43786:13;43778:113;;;43877:1;43872:3;43868:11;43862:18;43858:1;43853:3;43849:11;43842:39;43814:2;43811:1;43807:10;43802:15;;43778:113;;;43909:6;43906:1;43903:13;43900:101;;;43989:1;43980:6;43975:3;43971:16;43964:27;43900:101;43749:258;43700:307;;;:::o;44013:320::-;44057:6;44094:1;44088:4;44084:12;44074:22;;44141:1;44135:4;44131:12;44162:18;44152:81;;44218:4;44210:6;44206:17;44196:27;;44152:81;44280:2;44272:6;44269:14;44249:18;44246:38;44243:84;;;44299:18;;:::i;:::-;44243:84;44064:269;44013:320;;;:::o;44339:281::-;44422:27;44444:4;44422:27;:::i;:::-;44414:6;44410:40;44552:6;44540:10;44537:22;44516:18;44504:10;44501:34;44498:62;44495:88;;;44563:18;;:::i;:::-;44495:88;44603:10;44599:2;44592:22;44382:238;44339:281;;:::o;44626:233::-;44665:3;44688:24;44706:5;44688:24;:::i;:::-;44679:33;;44734:66;44727:5;44724:77;44721:103;;;44804:18;;:::i;:::-;44721:103;44851:1;44844:5;44840:13;44833:20;;44626:233;;;:::o;44865:180::-;44913:77;44910:1;44903:88;45010:4;45007:1;45000:15;45034:4;45031:1;45024:15;45051:180;45099:77;45096:1;45089:88;45196:4;45193:1;45186:15;45220:4;45217:1;45210:15;45237:180;45285:77;45282:1;45275:88;45382:4;45379:1;45372:15;45406:4;45403:1;45396:15;45423:180;45471:77;45468:1;45461:88;45568:4;45565:1;45558:15;45592:4;45589:1;45582:15;45609:180;45657:77;45654:1;45647:88;45754:4;45751:1;45744:15;45778:4;45775:1;45768:15;45795:117;45904:1;45901;45894:12;45918:117;46027:1;46024;46017:12;46041:117;46150:1;46147;46140:12;46164:117;46273:1;46270;46263:12;46287:117;46396:1;46393;46386:12;46410:102;46451:6;46502:2;46498:7;46493:2;46486:5;46482:14;46478:28;46468:38;;46410:102;;;:::o;46518:170::-;46658:22;46654:1;46646:6;46642:14;46635:46;46518:170;:::o;46694:181::-;46834:33;46830:1;46822:6;46818:14;46811:57;46694:181;:::o;46881:231::-;47021:34;47017:1;47009:6;47005:14;46998:58;47090:14;47085:2;47077:6;47073:15;47066:39;46881:231;:::o;47118:230::-;47258:34;47254:1;47246:6;47242:14;47235:58;47327:13;47322:2;47314:6;47310:15;47303:38;47118:230;:::o;47354:237::-;47494:34;47490:1;47482:6;47478:14;47471:58;47563:20;47558:2;47550:6;47546:15;47539:45;47354:237;:::o;47597:235::-;47737:34;47733:1;47725:6;47721:14;47714:58;47806:18;47801:2;47793:6;47789:15;47782:43;47597:235;:::o;47838:225::-;47978:34;47974:1;47966:6;47962:14;47955:58;48047:8;48042:2;48034:6;48030:15;48023:33;47838:225;:::o;48069:230::-;48209:34;48205:1;48197:6;48193:14;48186:58;48278:13;48273:2;48265:6;48261:15;48254:38;48069:230;:::o;48305:224::-;48445:34;48441:1;48433:6;48429:14;48422:58;48514:7;48509:2;48501:6;48497:15;48490:32;48305:224;:::o;48535:178::-;48675:30;48671:1;48663:6;48659:14;48652:54;48535:178;:::o;48719:223::-;48859:34;48855:1;48847:6;48843:14;48836:58;48928:6;48923:2;48915:6;48911:15;48904:31;48719:223;:::o;48948:175::-;49088:27;49084:1;49076:6;49072:14;49065:51;48948:175;:::o;49129:231::-;49269:34;49265:1;49257:6;49253:14;49246:58;49338:14;49333:2;49325:6;49321:15;49314:39;49129:231;:::o;49366:166::-;49506:18;49502:1;49494:6;49490:14;49483:42;49366:166;:::o;49538:243::-;49678:34;49674:1;49666:6;49662:14;49655:58;49747:26;49742:2;49734:6;49730:15;49723:51;49538:243;:::o;49787:229::-;49927:34;49923:1;49915:6;49911:14;49904:58;49996:12;49991:2;49983:6;49979:15;49972:37;49787:229;:::o;50022:228::-;50162:34;50158:1;50150:6;50146:14;50139:58;50231:11;50226:2;50218:6;50214:15;50207:36;50022:228;:::o;50256:235::-;50396:34;50392:1;50384:6;50380:14;50373:58;50465:18;50460:2;50452:6;50448:15;50441:43;50256:235;:::o;50497:::-;50637:34;50633:1;50625:6;50621:14;50614:58;50706:18;50701:2;50693:6;50689:15;50682:43;50497:235;:::o;50738:220::-;50878:34;50874:1;50866:6;50862:14;50855:58;50947:3;50942:2;50934:6;50930:15;50923:28;50738:220;:::o;50964:182::-;51104:34;51100:1;51092:6;51088:14;51081:58;50964:182;:::o;51152:234::-;51292:34;51288:1;51280:6;51276:14;51269:58;51361:17;51356:2;51348:6;51344:15;51337:42;51152:234;:::o;51392:231::-;51532:34;51528:1;51520:6;51516:14;51509:58;51601:14;51596:2;51588:6;51584:15;51577:39;51392:231;:::o;51629:182::-;51769:34;51765:1;51757:6;51753:14;51746:58;51629:182;:::o;51817:221::-;51957:34;51953:1;51945:6;51941:14;51934:58;52026:4;52021:2;52013:6;52009:15;52002:29;51817:221;:::o;52044:220::-;52184:34;52180:1;52172:6;52168:14;52161:58;52253:3;52248:2;52240:6;52236:15;52229:28;52044:220;:::o;52270:236::-;52410:34;52406:1;52398:6;52394:14;52387:58;52479:19;52474:2;52466:6;52462:15;52455:44;52270:236;:::o;52512:231::-;52652:34;52648:1;52640:6;52636:14;52629:58;52721:14;52716:2;52708:6;52704:15;52697:39;52512:231;:::o;52749:233::-;52889:34;52885:1;52877:6;52873:14;52866:58;52958:16;52953:2;52945:6;52941:15;52934:41;52749:233;:::o;52988:122::-;53061:24;53079:5;53061:24;:::i;:::-;53054:5;53051:35;53041:63;;53100:1;53097;53090:12;53041:63;52988:122;:::o;53116:116::-;53186:21;53201:5;53186:21;:::i;:::-;53179:5;53176:32;53166:60;;53222:1;53219;53212:12;53166:60;53116:116;:::o;53238:120::-;53310:23;53327:5;53310:23;:::i;:::-;53303:5;53300:34;53290:62;;53348:1;53345;53338:12;53290:62;53238:120;:::o;53364:122::-;53437:24;53455:5;53437:24;:::i;:::-;53430:5;53427:35;53417:63;;53476:1;53473;53466:12;53417:63;53364:122;:::o
Swarm Source
ipfs://5bdf014695135f77aa79c46cd30ee6bcd44f3a4d38185bd4449c300e0a622b27
Age | Block | Fee Address | BC Fee Address | Voting Power | Jailed | Incoming |
---|
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.