codex-telegram 0.5.1__tar.gz → 0.5.2__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.
- {codex-telegram-0.5.1 → codex_telegram-0.5.2}/PKG-INFO +34 -2
- {codex-telegram-0.5.1 → codex_telegram-0.5.2}/README.md +28 -0
- {codex-telegram-0.5.1 → codex_telegram-0.5.2}/codex_telegram/__init__.py +1 -1
- {codex-telegram-0.5.1 → codex_telegram-0.5.2}/codex_telegram/cli.py +50 -0
- {codex-telegram-0.5.1 → codex_telegram-0.5.2}/codex_telegram.egg-info/PKG-INFO +34 -2
- {codex-telegram-0.5.1 → codex_telegram-0.5.2}/LICENSE +0 -0
- {codex-telegram-0.5.1 → codex_telegram-0.5.2}/MANIFEST.in +0 -0
- {codex-telegram-0.5.1 → codex_telegram-0.5.2}/TELEGRAM.md +0 -0
- {codex-telegram-0.5.1 → codex_telegram-0.5.2}/WEB.md +0 -0
- {codex-telegram-0.5.1 → codex_telegram-0.5.2}/app_runtime/__init__.py +0 -0
- {codex-telegram-0.5.1 → codex_telegram-0.5.2}/app_runtime/bootstrap.py +0 -0
- {codex-telegram-0.5.1 → codex_telegram-0.5.2}/app_runtime/telegram_app.py +0 -0
- {codex-telegram-0.5.1 → codex_telegram-0.5.2}/app_runtime/web_server.py +0 -0
- {codex-telegram-0.5.1 → codex_telegram-0.5.2}/bot/__init__.py +0 -0
- {codex-telegram-0.5.1 → codex_telegram-0.5.2}/bot/callbacks.py +0 -0
- {codex-telegram-0.5.1 → codex_telegram-0.5.2}/bot/features_ui.py +0 -0
- {codex-telegram-0.5.1 → codex_telegram-0.5.2}/bot/handlers.py +0 -0
- {codex-telegram-0.5.1 → codex_telegram-0.5.2}/bot/keyboard.py +0 -0
- {codex-telegram-0.5.1 → codex_telegram-0.5.2}/bot/projects_ui.py +0 -0
- {codex-telegram-0.5.1 → codex_telegram-0.5.2}/bot/skills_ui.py +0 -0
- {codex-telegram-0.5.1 → codex_telegram-0.5.2}/bot/thread_ui.py +0 -0
- {codex-telegram-0.5.1 → codex_telegram-0.5.2}/codex/__init__.py +0 -0
- {codex-telegram-0.5.1 → codex_telegram-0.5.2}/codex/approval_flow.py +0 -0
- {codex-telegram-0.5.1 → codex_telegram-0.5.2}/codex/approval_guardian.py +0 -0
- {codex-telegram-0.5.1 → codex_telegram-0.5.2}/codex/client.py +0 -0
- {codex-telegram-0.5.1 → codex_telegram-0.5.2}/codex/client_pool.py +0 -0
- {codex-telegram-0.5.1 → codex_telegram-0.5.2}/codex/collaboration_mode.py +0 -0
- {codex-telegram-0.5.1 → codex_telegram-0.5.2}/codex/command_router/__init__.py +0 -0
- {codex-telegram-0.5.1 → codex_telegram-0.5.2}/codex/command_router/common.py +0 -0
- {codex-telegram-0.5.1 → codex_telegram-0.5.2}/codex/command_router/context.py +0 -0
- {codex-telegram-0.5.1 → codex_telegram-0.5.2}/codex/command_router/contracts.py +0 -0
- {codex-telegram-0.5.1 → codex_telegram-0.5.2}/codex/command_router/core.py +0 -0
- {codex-telegram-0.5.1 → codex_telegram-0.5.2}/codex/command_router/projects.py +0 -0
- {codex-telegram-0.5.1 → codex_telegram-0.5.2}/codex/command_router/review.py +0 -0
- {codex-telegram-0.5.1 → codex_telegram-0.5.2}/codex/command_router/system.py +0 -0
- {codex-telegram-0.5.1 → codex_telegram-0.5.2}/codex/command_router/threads.py +0 -0
- {codex-telegram-0.5.1 → codex_telegram-0.5.2}/codex/commands.py +0 -0
- {codex-telegram-0.5.1 → codex_telegram-0.5.2}/codex/event_forwarding.py +0 -0
- {codex-telegram-0.5.1 → codex_telegram-0.5.2}/codex/events.py +0 -0
- {codex-telegram-0.5.1 → codex_telegram-0.5.2}/codex/protocol.py +0 -0
- {codex-telegram-0.5.1 → codex_telegram-0.5.2}/codex_telegram.egg-info/SOURCES.txt +0 -0
- {codex-telegram-0.5.1 → codex_telegram-0.5.2}/codex_telegram.egg-info/dependency_links.txt +0 -0
- {codex-telegram-0.5.1 → codex_telegram-0.5.2}/codex_telegram.egg-info/entry_points.txt +0 -0
- {codex-telegram-0.5.1 → codex_telegram-0.5.2}/codex_telegram.egg-info/requires.txt +1 -1
- {codex-telegram-0.5.1 → codex_telegram-0.5.2}/codex_telegram.egg-info/top_level.txt +0 -0
- {codex-telegram-0.5.1 → codex_telegram-0.5.2}/conf.toml.example +0 -0
- {codex-telegram-0.5.1 → codex_telegram-0.5.2}/main.py +0 -0
- {codex-telegram-0.5.1 → codex_telegram-0.5.2}/models/__init__.py +0 -0
- {codex-telegram-0.5.1 → codex_telegram-0.5.2}/models/state.py +0 -0
- {codex-telegram-0.5.1 → codex_telegram-0.5.2}/models/telegram_bridge.py +0 -0
- {codex-telegram-0.5.1 → codex_telegram-0.5.2}/models/thread.py +0 -0
- {codex-telegram-0.5.1 → codex_telegram-0.5.2}/models/user.py +0 -0
- {codex-telegram-0.5.1 → codex_telegram-0.5.2}/pyproject.toml +0 -0
- {codex-telegram-0.5.1 → codex_telegram-0.5.2}/setup.cfg +0 -0
- {codex-telegram-0.5.1 → codex_telegram-0.5.2}/tests/test_approval_guardian.py +0 -0
- {codex-telegram-0.5.1 → codex_telegram-0.5.2}/tests/test_approval_policy.py +0 -0
- {codex-telegram-0.5.1 → codex_telegram-0.5.2}/tests/test_bootstrap_update_check.py +0 -0
- {codex-telegram-0.5.1 → codex_telegram-0.5.2}/tests/test_callbacks_results.py +0 -0
- {codex-telegram-0.5.1 → codex_telegram-0.5.2}/tests/test_cli_entrypoint.py +0 -0
- {codex-telegram-0.5.1 → codex_telegram-0.5.2}/tests/test_codex_client.py +0 -0
- {codex-telegram-0.5.1 → codex_telegram-0.5.2}/tests/test_codex_client_pool.py +0 -0
- {codex-telegram-0.5.1 → codex_telegram-0.5.2}/tests/test_command_router.py +0 -0
- {codex-telegram-0.5.1 → codex_telegram-0.5.2}/tests/test_guardian_config.py +0 -0
- {codex-telegram-0.5.1 → codex_telegram-0.5.2}/tests/test_handlers_results.py +0 -0
- {codex-telegram-0.5.1 → codex_telegram-0.5.2}/tests/test_keyboard.py +0 -0
- {codex-telegram-0.5.1 → codex_telegram-0.5.2}/tests/test_main_approval_flow.py +0 -0
- {codex-telegram-0.5.1 → codex_telegram-0.5.2}/tests/test_normalize.py +0 -0
- {codex-telegram-0.5.1 → codex_telegram-0.5.2}/tests/test_pypi_check.py +0 -0
- {codex-telegram-0.5.1 → codex_telegram-0.5.2}/tests/test_single_instance.py +0 -0
- {codex-telegram-0.5.1 → codex_telegram-0.5.2}/tests/test_telegram_bot_config.py +0 -0
- {codex-telegram-0.5.1 → codex_telegram-0.5.2}/tests/test_thread_history.py +0 -0
- {codex-telegram-0.5.1 → codex_telegram-0.5.2}/tests/test_web_runtime.py +0 -0
- {codex-telegram-0.5.1 → codex_telegram-0.5.2}/tests/test_web_server_local_command.py +0 -0
- {codex-telegram-0.5.1 → codex_telegram-0.5.2}/utils/__init__.py +0 -0
- {codex-telegram-0.5.1 → codex_telegram-0.5.2}/utils/approval_policy.py +0 -0
- {codex-telegram-0.5.1 → codex_telegram-0.5.2}/utils/config.py +0 -0
- {codex-telegram-0.5.1 → codex_telegram-0.5.2}/utils/local_command.py +0 -0
- {codex-telegram-0.5.1 → codex_telegram-0.5.2}/utils/logger.py +0 -0
- {codex-telegram-0.5.1 → codex_telegram-0.5.2}/utils/normalize.py +0 -0
- {codex-telegram-0.5.1 → codex_telegram-0.5.2}/utils/pypi_check.py +0 -0
- {codex-telegram-0.5.1 → codex_telegram-0.5.2}/utils/single_instance.py +0 -0
- {codex-telegram-0.5.1 → codex_telegram-0.5.2}/utils/web_config.py +0 -0
- {codex-telegram-0.5.1 → codex_telegram-0.5.2}/web/__init__.py +0 -0
- {codex-telegram-0.5.1 → codex_telegram-0.5.2}/web/dependencies.py +0 -0
- {codex-telegram-0.5.1 → codex_telegram-0.5.2}/web/routes.py +0 -0
- {codex-telegram-0.5.1 → codex_telegram-0.5.2}/web/runtime.py +0 -0
- {codex-telegram-0.5.1 → codex_telegram-0.5.2}/web/server.py +0 -0
- {codex-telegram-0.5.1 → codex_telegram-0.5.2}/web/static/dist/assets/codex-telegram-icon-black.svg +0 -0
- {codex-telegram-0.5.1 → codex_telegram-0.5.2}/web/static/dist/assets/codex-telegram-icon-ivory.svg +0 -0
- {codex-telegram-0.5.1 → codex_telegram-0.5.2}/web/static/dist/assets/codex-telegram-login-image.png +0 -0
- {codex-telegram-0.5.1 → codex_telegram-0.5.2}/web/static/dist/assets/index-DIOICBNe.js +0 -0
- {codex-telegram-0.5.1 → codex_telegram-0.5.2}/web/static/dist/assets/index-DW1AcoLg.css +0 -0
- {codex-telegram-0.5.1 → codex_telegram-0.5.2}/web/static/dist/favicon.ico +0 -0
- {codex-telegram-0.5.1 → codex_telegram-0.5.2}/web/static/dist/index.html +0 -0
- {codex-telegram-0.5.1 → codex_telegram-0.5.2}/web/telegram_sync.py +0 -0
- {codex-telegram-0.5.1 → codex_telegram-0.5.2}/web/telegram_thread_selection.py +0 -0
- {codex-telegram-0.5.1 → codex_telegram-0.5.2}/web/thread_history.py +0 -0
- {codex-telegram-0.5.1 → codex_telegram-0.5.2}/web/workspace.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
Metadata-Version: 2.
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
2
|
Name: codex-telegram
|
|
3
|
-
Version: 0.5.
|
|
3
|
+
Version: 0.5.2
|
|
4
4
|
Summary: Bridge for controlling the Codex App Server from Telegram and Web UI
|
|
5
5
|
Author: heungtae
|
|
6
6
|
License: Apache License
|
|
@@ -218,6 +218,10 @@ Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
|
|
218
218
|
Requires-Python: >=3.11
|
|
219
219
|
Description-Content-Type: text/markdown
|
|
220
220
|
License-File: LICENSE
|
|
221
|
+
Requires-Dist: python-telegram-bot>=20.0
|
|
222
|
+
Requires-Dist: fastapi>=0.111.0
|
|
223
|
+
Requires-Dist: uvicorn>=0.30.0
|
|
224
|
+
Dynamic: license-file
|
|
221
225
|
|
|
222
226
|
# Codex Telegram + Web
|
|
223
227
|
|
|
@@ -288,6 +292,34 @@ python -m venv .venv && source .venv/bin/activate
|
|
|
288
292
|
pip install codex-telegram
|
|
289
293
|
```
|
|
290
294
|
|
|
295
|
+
### Update
|
|
296
|
+
|
|
297
|
+
The CLI checks for updates automatically on startup. When a newer version is available on PyPI, you'll see:
|
|
298
|
+
|
|
299
|
+
```text
|
|
300
|
+
✨ Update available! 0.5.1 -> 0.5.2
|
|
301
|
+
|
|
302
|
+
Release notes: https://github.com/heungtae/codex-telegram/releases/latest
|
|
303
|
+
|
|
304
|
+
1. Update now and exit (runs `pip install -U codex-telegram`)
|
|
305
|
+
2. Skip this run
|
|
306
|
+
3. Skip this version
|
|
307
|
+
|
|
308
|
+
Choose [1/2/3] (default: 2):
|
|
309
|
+
```
|
|
310
|
+
|
|
311
|
+
You can also update manually:
|
|
312
|
+
|
|
313
|
+
```bash
|
|
314
|
+
pip install -U codex-telegram
|
|
315
|
+
```
|
|
316
|
+
|
|
317
|
+
Or with system packages flag:
|
|
318
|
+
|
|
319
|
+
```bash
|
|
320
|
+
pip install -U codex-telegram --break-system-packages
|
|
321
|
+
```
|
|
322
|
+
|
|
291
323
|
### 2. Configure
|
|
292
324
|
|
|
293
325
|
Create `~/.config/codex-telegram/conf.toml`:
|
|
@@ -67,6 +67,34 @@ python -m venv .venv && source .venv/bin/activate
|
|
|
67
67
|
pip install codex-telegram
|
|
68
68
|
```
|
|
69
69
|
|
|
70
|
+
### Update
|
|
71
|
+
|
|
72
|
+
The CLI checks for updates automatically on startup. When a newer version is available on PyPI, you'll see:
|
|
73
|
+
|
|
74
|
+
```text
|
|
75
|
+
✨ Update available! 0.5.1 -> 0.5.2
|
|
76
|
+
|
|
77
|
+
Release notes: https://github.com/heungtae/codex-telegram/releases/latest
|
|
78
|
+
|
|
79
|
+
1. Update now and exit (runs `pip install -U codex-telegram`)
|
|
80
|
+
2. Skip this run
|
|
81
|
+
3. Skip this version
|
|
82
|
+
|
|
83
|
+
Choose [1/2/3] (default: 2):
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
You can also update manually:
|
|
87
|
+
|
|
88
|
+
```bash
|
|
89
|
+
pip install -U codex-telegram
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
Or with system packages flag:
|
|
93
|
+
|
|
94
|
+
```bash
|
|
95
|
+
pip install -U codex-telegram --break-system-packages
|
|
96
|
+
```
|
|
97
|
+
|
|
70
98
|
### 2. Configure
|
|
71
99
|
|
|
72
100
|
Create `~/.config/codex-telegram/conf.toml`:
|
|
@@ -1,7 +1,10 @@
|
|
|
1
1
|
import argparse
|
|
2
|
+
import json
|
|
2
3
|
import logging
|
|
3
4
|
import os
|
|
4
5
|
import sys
|
|
6
|
+
import urllib.error
|
|
7
|
+
import urllib.request
|
|
5
8
|
from importlib.util import module_from_spec, spec_from_file_location
|
|
6
9
|
from pathlib import Path
|
|
7
10
|
from types import ModuleType
|
|
@@ -13,6 +16,44 @@ def _get_version() -> str:
|
|
|
13
16
|
return __version__
|
|
14
17
|
|
|
15
18
|
|
|
19
|
+
def _check_for_update(current_version: str) -> str | None:
|
|
20
|
+
"""Check PyPI for the latest version. Returns latest version if newer, else None."""
|
|
21
|
+
url = "https://pypi.org/pypi/codex-telegram/json"
|
|
22
|
+
try:
|
|
23
|
+
req = urllib.request.Request(url, headers={"User-Agent": "codex-telegram"})
|
|
24
|
+
with urllib.request.urlopen(req, timeout=3) as resp:
|
|
25
|
+
data = json.load(resp)
|
|
26
|
+
latest = data["info"]["version"]
|
|
27
|
+
if _version_gt(latest, current_version):
|
|
28
|
+
return latest
|
|
29
|
+
except (urllib.error.URLError, json.JSONDecodeError, KeyError, TimeoutError):
|
|
30
|
+
pass
|
|
31
|
+
return None
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
def _version_gt(v1: str, v2: str) -> bool:
|
|
35
|
+
"""Compare version strings (simple tuple comparison)."""
|
|
36
|
+
def parse(v: str):
|
|
37
|
+
return tuple(int(x) for x in v.split(".") if x.isdigit())
|
|
38
|
+
return parse(v1) > parse(v2)
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
def _prompt_update(latest: str) -> bool:
|
|
42
|
+
"""Prompt user to update. Returns True if user chooses to update."""
|
|
43
|
+
print(f"\n✨ Update available! {_get_version()} -> {latest}")
|
|
44
|
+
print(" Release notes: https://github.com/heungtae/codex-telegram/releases/latest")
|
|
45
|
+
print()
|
|
46
|
+
print(" 1. Update now and exit (runs `pip install -U codex-telegram`)")
|
|
47
|
+
print(" 2. Skip this run")
|
|
48
|
+
print(" 3. Skip this version")
|
|
49
|
+
print()
|
|
50
|
+
try:
|
|
51
|
+
choice = input(" Choose [1/2/3] (default: 2): ").strip() or "2"
|
|
52
|
+
except (EOFError, KeyboardInterrupt):
|
|
53
|
+
return False
|
|
54
|
+
return choice == "1"
|
|
55
|
+
|
|
56
|
+
|
|
16
57
|
def _load_root_main_module() -> ModuleType:
|
|
17
58
|
root_main = Path(__file__).resolve().parent.parent / "main.py"
|
|
18
59
|
spec = spec_from_file_location("codex_telegram_root_main", root_main)
|
|
@@ -24,6 +65,15 @@ def _load_root_main_module() -> ModuleType:
|
|
|
24
65
|
|
|
25
66
|
|
|
26
67
|
def main() -> int:
|
|
68
|
+
# Check for updates (skip if --version or --validate-config or --debug)
|
|
69
|
+
if "--version" not in sys.argv and "--validate-config" not in sys.argv and "--debug" not in sys.argv:
|
|
70
|
+
current = _get_version()
|
|
71
|
+
latest = _check_for_update(current)
|
|
72
|
+
if latest and _prompt_update(latest):
|
|
73
|
+
print("Running: pip install -U codex-telegram")
|
|
74
|
+
os.execvpe(sys.executable, [sys.executable, "-m", "pip", "install", "-U", "codex-telegram"], os.environ)
|
|
75
|
+
return 0
|
|
76
|
+
|
|
27
77
|
parser = argparse.ArgumentParser(
|
|
28
78
|
prog="codex-telegram",
|
|
29
79
|
description="Codex Telegram Bot - Bridges Codex App Server with Telegram and Web UI.",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
Metadata-Version: 2.
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
2
|
Name: codex-telegram
|
|
3
|
-
Version: 0.5.
|
|
3
|
+
Version: 0.5.2
|
|
4
4
|
Summary: Bridge for controlling the Codex App Server from Telegram and Web UI
|
|
5
5
|
Author: heungtae
|
|
6
6
|
License: Apache License
|
|
@@ -218,6 +218,10 @@ Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
|
|
218
218
|
Requires-Python: >=3.11
|
|
219
219
|
Description-Content-Type: text/markdown
|
|
220
220
|
License-File: LICENSE
|
|
221
|
+
Requires-Dist: python-telegram-bot>=20.0
|
|
222
|
+
Requires-Dist: fastapi>=0.111.0
|
|
223
|
+
Requires-Dist: uvicorn>=0.30.0
|
|
224
|
+
Dynamic: license-file
|
|
221
225
|
|
|
222
226
|
# Codex Telegram + Web
|
|
223
227
|
|
|
@@ -288,6 +292,34 @@ python -m venv .venv && source .venv/bin/activate
|
|
|
288
292
|
pip install codex-telegram
|
|
289
293
|
```
|
|
290
294
|
|
|
295
|
+
### Update
|
|
296
|
+
|
|
297
|
+
The CLI checks for updates automatically on startup. When a newer version is available on PyPI, you'll see:
|
|
298
|
+
|
|
299
|
+
```text
|
|
300
|
+
✨ Update available! 0.5.1 -> 0.5.2
|
|
301
|
+
|
|
302
|
+
Release notes: https://github.com/heungtae/codex-telegram/releases/latest
|
|
303
|
+
|
|
304
|
+
1. Update now and exit (runs `pip install -U codex-telegram`)
|
|
305
|
+
2. Skip this run
|
|
306
|
+
3. Skip this version
|
|
307
|
+
|
|
308
|
+
Choose [1/2/3] (default: 2):
|
|
309
|
+
```
|
|
310
|
+
|
|
311
|
+
You can also update manually:
|
|
312
|
+
|
|
313
|
+
```bash
|
|
314
|
+
pip install -U codex-telegram
|
|
315
|
+
```
|
|
316
|
+
|
|
317
|
+
Or with system packages flag:
|
|
318
|
+
|
|
319
|
+
```bash
|
|
320
|
+
pip install -U codex-telegram --break-system-packages
|
|
321
|
+
```
|
|
322
|
+
|
|
291
323
|
### 2. Configure
|
|
292
324
|
|
|
293
325
|
Create `~/.config/codex-telegram/conf.toml`:
|
|
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
|
|
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
|
{codex-telegram-0.5.1 → codex_telegram-0.5.2}/web/static/dist/assets/codex-telegram-icon-black.svg
RENAMED
|
File without changes
|
{codex-telegram-0.5.1 → codex_telegram-0.5.2}/web/static/dist/assets/codex-telegram-icon-ivory.svg
RENAMED
|
File without changes
|
{codex-telegram-0.5.1 → codex_telegram-0.5.2}/web/static/dist/assets/codex-telegram-login-image.png
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
|