bear-utils 0.8.13__tar.gz → 0.8.14__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {bear_utils-0.8.13 → bear_utils-0.8.14}/.bumpversion.cfg +1 -1
- {bear_utils-0.8.13 → bear_utils-0.8.14}/PKG-INFO +2 -2
- {bear_utils-0.8.13 → bear_utils-0.8.14}/README.md +1 -1
- {bear_utils-0.8.13 → bear_utils-0.8.14}/pyproject.toml +1 -1
- {bear_utils-0.8.13 → bear_utils-0.8.14}/src/bear_utils/config/settings_manager.py +28 -6
- {bear_utils-0.8.13 → bear_utils-0.8.14}/.gitignore +0 -0
- {bear_utils-0.8.13 → bear_utils-0.8.14}/.python-version +0 -0
- {bear_utils-0.8.13 → bear_utils-0.8.14}/AGENTS.md +0 -0
- {bear_utils-0.8.13 → bear_utils-0.8.14}/config/coverage.ini +0 -0
- {bear_utils-0.8.13 → bear_utils-0.8.14}/config/default.toml +0 -0
- {bear_utils-0.8.13 → bear_utils-0.8.14}/config/git-changelog.toml +0 -0
- {bear_utils-0.8.13 → bear_utils-0.8.14}/config/pytest.ini +0 -0
- {bear_utils-0.8.13 → bear_utils-0.8.14}/config/ruff.toml +0 -0
- {bear_utils-0.8.13 → bear_utils-0.8.14}/config/vscode/launch.json +0 -0
- {bear_utils-0.8.13 → bear_utils-0.8.14}/config/vscode/settings.json +0 -0
- {bear_utils-0.8.13 → bear_utils-0.8.14}/config/vscode/tasks.json +0 -0
- {bear_utils-0.8.13 → bear_utils-0.8.14}/directory_structure.txt +0 -0
- {bear_utils-0.8.13 → bear_utils-0.8.14}/directory_structure.xml +0 -0
- {bear_utils-0.8.13 → bear_utils-0.8.14}/maskfile.md +0 -0
- {bear_utils-0.8.13 → bear_utils-0.8.14}/noxfile.py +0 -0
- {bear_utils-0.8.13 → bear_utils-0.8.14}/src/bear_utils/__init__.py +0 -0
- {bear_utils-0.8.13 → bear_utils-0.8.14}/src/bear_utils/__main__.py +0 -0
- {bear_utils-0.8.13 → bear_utils-0.8.14}/src/bear_utils/_internal/__init__.py +0 -0
- {bear_utils-0.8.13 → bear_utils-0.8.14}/src/bear_utils/_internal/cli.py +0 -0
- {bear_utils-0.8.13 → bear_utils-0.8.14}/src/bear_utils/_internal/debug.py +0 -0
- {bear_utils-0.8.13 → bear_utils-0.8.14}/src/bear_utils/ai/__init__.py +0 -0
- {bear_utils-0.8.13 → bear_utils-0.8.14}/src/bear_utils/ai/ai_helpers/__init__.py +0 -0
- {bear_utils-0.8.13 → bear_utils-0.8.14}/src/bear_utils/ai/ai_helpers/_common.py +0 -0
- {bear_utils-0.8.13 → bear_utils-0.8.14}/src/bear_utils/ai/ai_helpers/_config.py +0 -0
- {bear_utils-0.8.13 → bear_utils-0.8.14}/src/bear_utils/ai/ai_helpers/_parsers.py +0 -0
- {bear_utils-0.8.13 → bear_utils-0.8.14}/src/bear_utils/ai/ai_helpers/_types.py +0 -0
- {bear_utils-0.8.13 → bear_utils-0.8.14}/src/bear_utils/cache/__init__.py +0 -0
- {bear_utils-0.8.13 → bear_utils-0.8.14}/src/bear_utils/cli/__init__.py +0 -0
- {bear_utils-0.8.13 → bear_utils-0.8.14}/src/bear_utils/cli/commands.py +0 -0
- {bear_utils-0.8.13 → bear_utils-0.8.14}/src/bear_utils/cli/prompt_helpers.py +0 -0
- {bear_utils-0.8.13 → bear_utils-0.8.14}/src/bear_utils/cli/shell/__init__.py +0 -0
- {bear_utils-0.8.13 → bear_utils-0.8.14}/src/bear_utils/cli/shell/_base_command.py +0 -0
- {bear_utils-0.8.13 → bear_utils-0.8.14}/src/bear_utils/cli/shell/_base_shell.py +0 -0
- {bear_utils-0.8.13 → bear_utils-0.8.14}/src/bear_utils/cli/shell/_common.py +0 -0
- {bear_utils-0.8.13 → bear_utils-0.8.14}/src/bear_utils/config/__init__.py +0 -0
- {bear_utils-0.8.13 → bear_utils-0.8.14}/src/bear_utils/config/config_manager.py +0 -0
- {bear_utils-0.8.13 → bear_utils-0.8.14}/src/bear_utils/config/dir_manager.py +0 -0
- {bear_utils-0.8.13 → bear_utils-0.8.14}/src/bear_utils/constants/__init__.py +0 -0
- {bear_utils-0.8.13 → bear_utils-0.8.14}/src/bear_utils/constants/_exceptions.py +0 -0
- {bear_utils-0.8.13 → bear_utils-0.8.14}/src/bear_utils/constants/_lazy_typing.py +0 -0
- {bear_utils-0.8.13 → bear_utils-0.8.14}/src/bear_utils/constants/date_related.py +0 -0
- {bear_utils-0.8.13 → bear_utils-0.8.14}/src/bear_utils/constants/server.py +0 -0
- {bear_utils-0.8.13 → bear_utils-0.8.14}/src/bear_utils/constants/time_related.py +0 -0
- {bear_utils-0.8.13 → bear_utils-0.8.14}/src/bear_utils/database/__init__.py +0 -0
- {bear_utils-0.8.13 → bear_utils-0.8.14}/src/bear_utils/database/_db_manager.py +0 -0
- {bear_utils-0.8.13 → bear_utils-0.8.14}/src/bear_utils/events/__init__.py +0 -0
- {bear_utils-0.8.13 → bear_utils-0.8.14}/src/bear_utils/events/events_class.py +0 -0
- {bear_utils-0.8.13 → bear_utils-0.8.14}/src/bear_utils/events/events_module.py +0 -0
- {bear_utils-0.8.13 → bear_utils-0.8.14}/src/bear_utils/extras/__init__.py +0 -0
- {bear_utils-0.8.13 → bear_utils-0.8.14}/src/bear_utils/extras/_async_helpers.py +0 -0
- {bear_utils-0.8.13 → bear_utils-0.8.14}/src/bear_utils/extras/_tools.py +0 -0
- {bear_utils-0.8.13 → bear_utils-0.8.14}/src/bear_utils/extras/platform_utils.py +0 -0
- {bear_utils-0.8.13 → bear_utils-0.8.14}/src/bear_utils/extras/responses/__init__.py +0 -0
- {bear_utils-0.8.13 → bear_utils-0.8.14}/src/bear_utils/extras/responses/function_response.py +0 -0
- {bear_utils-0.8.13 → bear_utils-0.8.14}/src/bear_utils/extras/wrappers/__init__.py +0 -0
- {bear_utils-0.8.13 → bear_utils-0.8.14}/src/bear_utils/extras/wrappers/add_methods.py +0 -0
- {bear_utils-0.8.13 → bear_utils-0.8.14}/src/bear_utils/files/__init__.py +0 -0
- {bear_utils-0.8.13 → bear_utils-0.8.14}/src/bear_utils/files/file_handlers/__init__.py +0 -0
- {bear_utils-0.8.13 → bear_utils-0.8.14}/src/bear_utils/files/file_handlers/_base_file_handler.py +0 -0
- {bear_utils-0.8.13 → bear_utils-0.8.14}/src/bear_utils/files/file_handlers/file_handler_factory.py +0 -0
- {bear_utils-0.8.13 → bear_utils-0.8.14}/src/bear_utils/files/file_handlers/json_file_handler.py +0 -0
- {bear_utils-0.8.13 → bear_utils-0.8.14}/src/bear_utils/files/file_handlers/log_file_handler.py +0 -0
- {bear_utils-0.8.13 → bear_utils-0.8.14}/src/bear_utils/files/file_handlers/toml_file_handler.py +0 -0
- {bear_utils-0.8.13 → bear_utils-0.8.14}/src/bear_utils/files/file_handlers/txt_file_handler.py +0 -0
- {bear_utils-0.8.13 → bear_utils-0.8.14}/src/bear_utils/files/file_handlers/yaml_file_handler.py +0 -0
- {bear_utils-0.8.13 → bear_utils-0.8.14}/src/bear_utils/files/ignore_parser.py +0 -0
- {bear_utils-0.8.13 → bear_utils-0.8.14}/src/bear_utils/graphics/__init__.py +0 -0
- {bear_utils-0.8.13 → bear_utils-0.8.14}/src/bear_utils/graphics/bear_gradient.py +0 -0
- {bear_utils-0.8.13 → bear_utils-0.8.14}/src/bear_utils/graphics/image_helpers.py +0 -0
- {bear_utils-0.8.13 → bear_utils-0.8.14}/src/bear_utils/gui/__init__.py +0 -0
- {bear_utils-0.8.13 → bear_utils-0.8.14}/src/bear_utils/gui/gui_tools/__init__.py +0 -0
- {bear_utils-0.8.13 → bear_utils-0.8.14}/src/bear_utils/gui/gui_tools/_settings.py +0 -0
- {bear_utils-0.8.13 → bear_utils-0.8.14}/src/bear_utils/gui/gui_tools/_types.py +0 -0
- {bear_utils-0.8.13 → bear_utils-0.8.14}/src/bear_utils/gui/gui_tools/qt_app.py +0 -0
- {bear_utils-0.8.13 → bear_utils-0.8.14}/src/bear_utils/gui/gui_tools/qt_color_picker.py +0 -0
- {bear_utils-0.8.13 → bear_utils-0.8.14}/src/bear_utils/gui/gui_tools/qt_file_handler.py +0 -0
- {bear_utils-0.8.13 → bear_utils-0.8.14}/src/bear_utils/gui/gui_tools/qt_input_dialog.py +0 -0
- {bear_utils-0.8.13 → bear_utils-0.8.14}/src/bear_utils/logger_manager/__init__.py +0 -0
- {bear_utils-0.8.13 → bear_utils-0.8.14}/src/bear_utils/logger_manager/_common.py +0 -0
- {bear_utils-0.8.13 → bear_utils-0.8.14}/src/bear_utils/logger_manager/_console_junk.py +0 -0
- {bear_utils-0.8.13 → bear_utils-0.8.14}/src/bear_utils/logger_manager/_log_level.py +0 -0
- {bear_utils-0.8.13 → bear_utils-0.8.14}/src/bear_utils/logger_manager/_styles.py +0 -0
- {bear_utils-0.8.13 → bear_utils-0.8.14}/src/bear_utils/logger_manager/logger_protocol.py +0 -0
- {bear_utils-0.8.13 → bear_utils-0.8.14}/src/bear_utils/logger_manager/loggers/__init__.py +0 -0
- {bear_utils-0.8.13 → bear_utils-0.8.14}/src/bear_utils/logger_manager/loggers/_level_sin.py +0 -0
- {bear_utils-0.8.13 → bear_utils-0.8.14}/src/bear_utils/logger_manager/loggers/base_logger.py +0 -0
- {bear_utils-0.8.13 → bear_utils-0.8.14}/src/bear_utils/logger_manager/loggers/base_logger.pyi +0 -0
- {bear_utils-0.8.13 → bear_utils-0.8.14}/src/bear_utils/logger_manager/loggers/basic_logger/__init__.py +0 -0
- {bear_utils-0.8.13 → bear_utils-0.8.14}/src/bear_utils/logger_manager/loggers/basic_logger/logger.py +0 -0
- {bear_utils-0.8.13 → bear_utils-0.8.14}/src/bear_utils/logger_manager/loggers/basic_logger/logger.pyi +0 -0
- {bear_utils-0.8.13 → bear_utils-0.8.14}/src/bear_utils/logger_manager/loggers/buffer_logger.py +0 -0
- {bear_utils-0.8.13 → bear_utils-0.8.14}/src/bear_utils/logger_manager/loggers/console_logger.py +0 -0
- {bear_utils-0.8.13 → bear_utils-0.8.14}/src/bear_utils/logger_manager/loggers/console_logger.pyi +0 -0
- {bear_utils-0.8.13 → bear_utils-0.8.14}/src/bear_utils/logger_manager/loggers/fastapi_logger.py +0 -0
- {bear_utils-0.8.13 → bear_utils-0.8.14}/src/bear_utils/logger_manager/loggers/file_logger.py +0 -0
- {bear_utils-0.8.13 → bear_utils-0.8.14}/src/bear_utils/logger_manager/loggers/simple_logger.py +0 -0
- {bear_utils-0.8.13 → bear_utils-0.8.14}/src/bear_utils/logger_manager/loggers/sub_logger.py +0 -0
- {bear_utils-0.8.13 → bear_utils-0.8.14}/src/bear_utils/logger_manager/loggers/sub_logger.pyi +0 -0
- {bear_utils-0.8.13 → bear_utils-0.8.14}/src/bear_utils/monitoring/__init__.py +0 -0
- {bear_utils-0.8.13 → bear_utils-0.8.14}/src/bear_utils/monitoring/_common.py +0 -0
- {bear_utils-0.8.13 → bear_utils-0.8.14}/src/bear_utils/monitoring/host_monitor.py +0 -0
- {bear_utils-0.8.13 → bear_utils-0.8.14}/src/bear_utils/time/__init__.py +0 -0
- {bear_utils-0.8.13 → bear_utils-0.8.14}/tests/__init__.py +0 -0
- {bear_utils-0.8.13 → bear_utils-0.8.14}/tests/test_add_ord_suffix.py +0 -0
- {bear_utils-0.8.13 → bear_utils-0.8.14}/tests/test_clipboard.py +0 -0
- {bear_utils-0.8.13 → bear_utils-0.8.14}/tests/test_database_manager.py +0 -0
- {bear_utils-0.8.13 → bear_utils-0.8.14}/tests/test_default_shell.py +0 -0
- {bear_utils-0.8.13 → bear_utils-0.8.14}/tests/test_function_response.py +0 -0
- {bear_utils-0.8.13 → bear_utils-0.8.14}/tests/test_gradient.py +0 -0
- {bear_utils-0.8.13 → bear_utils-0.8.14}/tests/test_logger.py +0 -0
- {bear_utils-0.8.13 → bear_utils-0.8.14}/tests/test_platform_utils.py +0 -0
- {bear_utils-0.8.13 → bear_utils-0.8.14}/tests/test_prompt_helpers.py +0 -0
- {bear_utils-0.8.13 → bear_utils-0.8.14}/uv.lock +0 -0
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: bear-utils
|
3
|
-
Version: 0.8.
|
3
|
+
Version: 0.8.14
|
4
4
|
Summary: Various utilities for Bear programmers, including a rich logging utility, a disk cache, and a SQLite database wrapper amongst other things.
|
5
5
|
Author-email: chaz <bright.lid5647@fastmail.com>
|
6
6
|
Requires-Python: >=3.12
|
@@ -22,7 +22,7 @@ Requires-Dist: toml>=0.10.2
|
|
22
22
|
Requires-Dist: uvicorn>=0.35.0
|
23
23
|
Description-Content-Type: text/markdown
|
24
24
|
|
25
|
-
# Bear Utils v# Bear Utils v0.8.
|
25
|
+
# Bear Utils v# Bear Utils v0.8.14
|
26
26
|
|
27
27
|
Personal set of tools and utilities for Python projects, focusing on modularity and ease of use. This library includes components for caching, database management, logging, time handling, file operations, CLI prompts, image processing, clipboard interaction, gradient utilities, event systems, and async helpers.
|
28
28
|
|
@@ -1,4 +1,4 @@
|
|
1
|
-
# Bear Utils v# Bear Utils v0.8.
|
1
|
+
# Bear Utils v# Bear Utils v0.8.14
|
2
2
|
|
3
3
|
Personal set of tools and utilities for Python projects, focusing on modularity and ease of use. This library includes components for caching, database management, logging, time handling, file operations, CLI prompts, image processing, clipboard interaction, gradient utilities, event systems, and async helpers.
|
4
4
|
|
@@ -1,6 +1,6 @@
|
|
1
1
|
[project]
|
2
2
|
name = "bear-utils"
|
3
|
-
version = "0.8.
|
3
|
+
version = "0.8.14"
|
4
4
|
description = "Various utilities for Bear programmers, including a rich logging utility, a disk cache, and a SQLite database wrapper amongst other things."
|
5
5
|
authors = [{ name = "chaz", email = "bright.lid5647@fastmail.com" }]
|
6
6
|
readme = "README.md"
|
@@ -3,33 +3,44 @@
|
|
3
3
|
import atexit
|
4
4
|
from collections.abc import Generator
|
5
5
|
from contextlib import contextmanager
|
6
|
+
import hashlib
|
6
7
|
from pathlib import Path
|
7
8
|
from typing import Any, Self
|
8
9
|
|
9
10
|
from tinydb import Query, TinyDB
|
10
11
|
|
12
|
+
DEFAULT_PATH: Path = Path.home() / ".config" / "bear_utils"
|
11
13
|
|
12
|
-
|
14
|
+
|
15
|
+
def get_config_folder(path: str | Path | None = None) -> Path:
|
13
16
|
"""Get the path to the bear configuration directory."""
|
14
|
-
config_path: Path = Path
|
17
|
+
config_path: Path = Path(path) if isinstance(path, str) else path or DEFAULT_PATH
|
15
18
|
config_path.mkdir(parents=True, exist_ok=True)
|
16
19
|
return config_path
|
17
20
|
|
18
21
|
|
22
|
+
def get_file_hash(file_path: Path) -> str:
|
23
|
+
"""Return the blake2 hash of the file at the given path."""
|
24
|
+
hasher = hashlib.blake2b()
|
25
|
+
with file_path.open("rb") as file:
|
26
|
+
while chunk := file.read(8192):
|
27
|
+
hasher.update(chunk)
|
28
|
+
return hasher.hexdigest()
|
29
|
+
|
30
|
+
|
19
31
|
class SettingsManager:
|
20
32
|
"""A class to manage settings using TinyDB and an in-memory cache."""
|
21
33
|
|
22
|
-
__slots__ = ("cache", "db", "file_path", "settings_name")
|
34
|
+
__slots__ = ("cache", "db", "file_hash", "file_path", "settings_name")
|
23
35
|
|
24
36
|
def __init__(self, settings_name: str, folder_path: str | Path | None = None) -> None:
|
25
37
|
"""Initialize the SettingsManager with a specific settings name."""
|
26
38
|
self.settings_name: str = settings_name
|
27
39
|
self.cache: dict[str, Any] = {}
|
28
40
|
file_name: str = f"{settings_name}.json"
|
29
|
-
self.file_path: Path =
|
30
|
-
|
41
|
+
self.file_path: Path = get_config_folder(folder_path) / file_name
|
31
42
|
self.db: TinyDB = TinyDB(self.file_path, indent=4, ensure_ascii=False)
|
32
|
-
|
43
|
+
self.file_hash: str = get_file_hash(self.file_path) if self.file_path.exists() else ""
|
33
44
|
atexit.register(self.close)
|
34
45
|
self._load_cache()
|
35
46
|
|
@@ -48,8 +59,19 @@ class SettingsManager:
|
|
48
59
|
return
|
49
60
|
self.set(key=key, value=value)
|
50
61
|
|
62
|
+
def invalidate_cache(self) -> None:
|
63
|
+
"""Invalidate the in-memory cache."""
|
64
|
+
self.cache.clear()
|
65
|
+
self._load_cache()
|
66
|
+
|
51
67
|
def get(self, key: str, default: Any = None) -> Any:
|
52
68
|
"""Get a setting value."""
|
69
|
+
file_hash = get_file_hash(self.file_path)
|
70
|
+
|
71
|
+
if file_hash != self.file_hash:
|
72
|
+
self.invalidate_cache()
|
73
|
+
self.file_hash = file_hash
|
74
|
+
|
53
75
|
if key in self.cache:
|
54
76
|
return self.cache[key]
|
55
77
|
if result := self.db.search(Query().key == key):
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{bear_utils-0.8.13 → bear_utils-0.8.14}/src/bear_utils/extras/responses/function_response.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{bear_utils-0.8.13 → bear_utils-0.8.14}/src/bear_utils/files/file_handlers/_base_file_handler.py
RENAMED
File without changes
|
{bear_utils-0.8.13 → bear_utils-0.8.14}/src/bear_utils/files/file_handlers/file_handler_factory.py
RENAMED
File without changes
|
{bear_utils-0.8.13 → bear_utils-0.8.14}/src/bear_utils/files/file_handlers/json_file_handler.py
RENAMED
File without changes
|
{bear_utils-0.8.13 → bear_utils-0.8.14}/src/bear_utils/files/file_handlers/log_file_handler.py
RENAMED
File without changes
|
{bear_utils-0.8.13 → bear_utils-0.8.14}/src/bear_utils/files/file_handlers/toml_file_handler.py
RENAMED
File without changes
|
{bear_utils-0.8.13 → bear_utils-0.8.14}/src/bear_utils/files/file_handlers/txt_file_handler.py
RENAMED
File without changes
|
{bear_utils-0.8.13 → bear_utils-0.8.14}/src/bear_utils/files/file_handlers/yaml_file_handler.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{bear_utils-0.8.13 → bear_utils-0.8.14}/src/bear_utils/logger_manager/loggers/base_logger.py
RENAMED
File without changes
|
{bear_utils-0.8.13 → bear_utils-0.8.14}/src/bear_utils/logger_manager/loggers/base_logger.pyi
RENAMED
File without changes
|
File without changes
|
{bear_utils-0.8.13 → bear_utils-0.8.14}/src/bear_utils/logger_manager/loggers/basic_logger/logger.py
RENAMED
File without changes
|
File without changes
|
{bear_utils-0.8.13 → bear_utils-0.8.14}/src/bear_utils/logger_manager/loggers/buffer_logger.py
RENAMED
File without changes
|
{bear_utils-0.8.13 → bear_utils-0.8.14}/src/bear_utils/logger_manager/loggers/console_logger.py
RENAMED
File without changes
|
{bear_utils-0.8.13 → bear_utils-0.8.14}/src/bear_utils/logger_manager/loggers/console_logger.pyi
RENAMED
File without changes
|
{bear_utils-0.8.13 → bear_utils-0.8.14}/src/bear_utils/logger_manager/loggers/fastapi_logger.py
RENAMED
File without changes
|
{bear_utils-0.8.13 → bear_utils-0.8.14}/src/bear_utils/logger_manager/loggers/file_logger.py
RENAMED
File without changes
|
{bear_utils-0.8.13 → bear_utils-0.8.14}/src/bear_utils/logger_manager/loggers/simple_logger.py
RENAMED
File without changes
|
File without changes
|
{bear_utils-0.8.13 → bear_utils-0.8.14}/src/bear_utils/logger_manager/loggers/sub_logger.pyi
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|