dulus 0.2.4__tar.gz → 0.2.6__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.
- {dulus-0.2.4/dulus.egg-info → dulus-0.2.6}/PKG-INFO +1 -1
- {dulus-0.2.4 → dulus-0.2.6/dulus.egg-info}/PKG-INFO +1 -1
- {dulus-0.2.4 → dulus-0.2.6}/dulus.py +11 -9
- {dulus-0.2.4 → dulus-0.2.6}/providers.py +14 -6
- {dulus-0.2.4 → dulus-0.2.6}/pyproject.toml +1 -1
- {dulus-0.2.4 → dulus-0.2.6}/tools.py +1 -2
- {dulus-0.2.4 → dulus-0.2.6}/LICENSE +0 -0
- {dulus-0.2.4 → dulus-0.2.6}/MANIFEST.in +0 -0
- {dulus-0.2.4 → dulus-0.2.6}/README.md +0 -0
- {dulus-0.2.4 → dulus-0.2.6}/agent.py +0 -0
- {dulus-0.2.4 → dulus-0.2.6}/backend/__init__.py +0 -0
- {dulus-0.2.4 → dulus-0.2.6}/backend/compressor.py +0 -0
- {dulus-0.2.4 → dulus-0.2.6}/backend/context.py +0 -0
- {dulus-0.2.4 → dulus-0.2.6}/backend/githook.py +0 -0
- {dulus-0.2.4 → dulus-0.2.6}/backend/marketplace.py +0 -0
- {dulus-0.2.4 → dulus-0.2.6}/backend/mempalace_bridge.py +0 -0
- {dulus-0.2.4 → dulus-0.2.6}/backend/personas.py +0 -0
- {dulus-0.2.4 → dulus-0.2.6}/backend/plugins.py +0 -0
- {dulus-0.2.4 → dulus-0.2.6}/backend/server.py +0 -0
- {dulus-0.2.4 → dulus-0.2.6}/backend/tasks.py +0 -0
- {dulus-0.2.4 → dulus-0.2.6}/batch_api.py +0 -0
- {dulus-0.2.4 → dulus-0.2.6}/checkpoint/__init__.py +0 -0
- {dulus-0.2.4 → dulus-0.2.6}/checkpoint/hooks.py +0 -0
- {dulus-0.2.4 → dulus-0.2.6}/checkpoint/store.py +0 -0
- {dulus-0.2.4 → dulus-0.2.6}/checkpoint/types.py +0 -0
- {dulus-0.2.4 → dulus-0.2.6}/claude_code_watcher.py +0 -0
- {dulus-0.2.4 → dulus-0.2.6}/clipboard_utils.py +0 -0
- {dulus-0.2.4 → dulus-0.2.6}/cloudsave.py +0 -0
- {dulus-0.2.4 → dulus-0.2.6}/common.py +0 -0
- {dulus-0.2.4 → dulus-0.2.6}/compaction.py +0 -0
- {dulus-0.2.4 → dulus-0.2.6}/config.py +0 -0
- {dulus-0.2.4 → dulus-0.2.6}/context.py +0 -0
- {dulus-0.2.4 → dulus-0.2.6}/data/__init__.py +0 -0
- {dulus-0.2.4 → dulus-0.2.6}/data/active_persona.json +0 -0
- {dulus-0.2.4 → dulus-0.2.6}/data/context.json +0 -0
- {dulus-0.2.4 → dulus-0.2.6}/data/marketplace.json +0 -0
- {dulus-0.2.4 → dulus-0.2.6}/data/personas.json +0 -0
- {dulus-0.2.4 → dulus-0.2.6}/data/tasks.json +0 -0
- {dulus-0.2.4 → dulus-0.2.6}/docs/README.md +0 -0
- {dulus-0.2.4 → dulus-0.2.6}/docs/__init__.py +0 -0
- {dulus-0.2.4 → dulus-0.2.6}/docs/api.html +0 -0
- {dulus-0.2.4 → dulus-0.2.6}/docs/architecture.md +0 -0
- {dulus-0.2.4 → dulus-0.2.6}/docs/azure-speech-template.json +0 -0
- {dulus-0.2.4 → dulus-0.2.6}/docs/dashboard/index.html +0 -0
- {dulus-0.2.4 → dulus-0.2.6}/docs/divider.svg +0 -0
- {dulus-0.2.4 → dulus-0.2.6}/docs/generate.py +0 -0
- {dulus-0.2.4 → dulus-0.2.6}/docs/hero.svg +0 -0
- {dulus-0.2.4 → dulus-0.2.6}/docs/index.html +0 -0
- {dulus-0.2.4 → dulus-0.2.6}/docs/news.md +0 -0
- {dulus-0.2.4 → dulus-0.2.6}/docs/nvidia-models.svg +0 -0
- {dulus-0.2.4 → dulus-0.2.6}/docs/particle-playground.html +0 -0
- {dulus-0.2.4 → dulus-0.2.6}/docs/personas/index.html +0 -0
- {dulus-0.2.4 → dulus-0.2.6}/docs/preview.html +0 -0
- {dulus-0.2.4 → dulus-0.2.6}/docs/sec-agents.svg +0 -0
- {dulus-0.2.4 → dulus-0.2.6}/docs/sec-brainstorm.svg +0 -0
- {dulus-0.2.4 → dulus-0.2.6}/docs/sec-bridges.svg +0 -0
- {dulus-0.2.4 → dulus-0.2.6}/docs/sec-features.svg +0 -0
- {dulus-0.2.4 → dulus-0.2.6}/docs/sec-freetier.svg +0 -0
- {dulus-0.2.4 → dulus-0.2.6}/docs/sec-memory.svg +0 -0
- {dulus-0.2.4 → dulus-0.2.6}/docs/sec-models.svg +0 -0
- {dulus-0.2.4 → dulus-0.2.6}/docs/sec-perms.svg +0 -0
- {dulus-0.2.4 → dulus-0.2.6}/docs/sec-plugins.svg +0 -0
- {dulus-0.2.4 → dulus-0.2.6}/docs/sec-quickstart.svg +0 -0
- {dulus-0.2.4 → dulus-0.2.6}/docs/sec-ssj.svg +0 -0
- {dulus-0.2.4 → dulus-0.2.6}/docs/spinners.svg +0 -0
- {dulus-0.2.4 → dulus-0.2.6}/docs/split-pane.svg +0 -0
- {dulus-0.2.4 → dulus-0.2.6}/docs/terminal-boot.svg +0 -0
- {dulus-0.2.4 → dulus-0.2.6}/docs/uploads/particle-playground.html +0 -0
- {dulus-0.2.4 → dulus-0.2.6}/dulus.egg-info/SOURCES.txt +0 -0
- {dulus-0.2.4 → dulus-0.2.6}/dulus.egg-info/dependency_links.txt +0 -0
- {dulus-0.2.4 → dulus-0.2.6}/dulus.egg-info/entry_points.txt +0 -0
- {dulus-0.2.4 → dulus-0.2.6}/dulus.egg-info/requires.txt +0 -0
- {dulus-0.2.4 → dulus-0.2.6}/dulus.egg-info/top_level.txt +0 -0
- {dulus-0.2.4 → dulus-0.2.6}/dulus_gui.py +0 -0
- {dulus-0.2.4 → dulus-0.2.6}/dulus_mcp/__init__.py +0 -0
- {dulus-0.2.4 → dulus-0.2.6}/dulus_mcp/client.py +0 -0
- {dulus-0.2.4 → dulus-0.2.6}/dulus_mcp/config.py +0 -0
- {dulus-0.2.4 → dulus-0.2.6}/dulus_mcp/tools.py +0 -0
- {dulus-0.2.4 → dulus-0.2.6}/dulus_mcp/types.py +0 -0
- {dulus-0.2.4 → dulus-0.2.6}/gui/__init__.py +0 -0
- {dulus-0.2.4 → dulus-0.2.6}/gui/agent_bridge.py +0 -0
- {dulus-0.2.4 → dulus-0.2.6}/gui/chat_widget.py +0 -0
- {dulus-0.2.4 → dulus-0.2.6}/gui/main_window.py +0 -0
- {dulus-0.2.4 → dulus-0.2.6}/gui/personas.py +0 -0
- {dulus-0.2.4 → dulus-0.2.6}/gui/session_utils.py +0 -0
- {dulus-0.2.4 → dulus-0.2.6}/gui/settings_dialog.py +0 -0
- {dulus-0.2.4 → dulus-0.2.6}/gui/sidebar.py +0 -0
- {dulus-0.2.4 → dulus-0.2.6}/gui/tasks_view.py +0 -0
- {dulus-0.2.4 → dulus-0.2.6}/gui/themes.py +0 -0
- {dulus-0.2.4 → dulus-0.2.6}/gui/tool_panel.py +0 -0
- {dulus-0.2.4 → dulus-0.2.6}/input.py +0 -0
- {dulus-0.2.4 → dulus-0.2.6}/license_manager.py +0 -0
- {dulus-0.2.4 → dulus-0.2.6}/memory/__init__.py +0 -0
- {dulus-0.2.4 → dulus-0.2.6}/memory/audit.py +0 -0
- {dulus-0.2.4 → dulus-0.2.6}/memory/consolidator.py +0 -0
- {dulus-0.2.4 → dulus-0.2.6}/memory/context.py +0 -0
- {dulus-0.2.4 → dulus-0.2.6}/memory/offload.py +0 -0
- {dulus-0.2.4 → dulus-0.2.6}/memory/palace.py +0 -0
- {dulus-0.2.4 → dulus-0.2.6}/memory/scan.py +0 -0
- {dulus-0.2.4 → dulus-0.2.6}/memory/sessions.py +0 -0
- {dulus-0.2.4 → dulus-0.2.6}/memory/store.py +0 -0
- {dulus-0.2.4 → dulus-0.2.6}/memory/tools.py +0 -0
- {dulus-0.2.4 → dulus-0.2.6}/memory/types.py +0 -0
- {dulus-0.2.4 → dulus-0.2.6}/memory/vector_search.py +0 -0
- {dulus-0.2.4 → dulus-0.2.6}/multi_agent/__init__.py +0 -0
- {dulus-0.2.4 → dulus-0.2.6}/multi_agent/subagent.py +0 -0
- {dulus-0.2.4 → dulus-0.2.6}/multi_agent/tools.py +0 -0
- {dulus-0.2.4 → dulus-0.2.6}/offload_helper.py +0 -0
- {dulus-0.2.4 → dulus-0.2.6}/plugin/__init__.py +0 -0
- {dulus-0.2.4 → dulus-0.2.6}/plugin/autoadapter.py +0 -0
- {dulus-0.2.4 → dulus-0.2.6}/plugin/loader.py +0 -0
- {dulus-0.2.4 → dulus-0.2.6}/plugin/recommend.py +0 -0
- {dulus-0.2.4 → dulus-0.2.6}/plugin/store.py +0 -0
- {dulus-0.2.4 → dulus-0.2.6}/plugin/types.py +0 -0
- {dulus-0.2.4 → dulus-0.2.6}/setup.cfg +0 -0
- {dulus-0.2.4 → dulus-0.2.6}/skill/__init__.py +0 -0
- {dulus-0.2.4 → dulus-0.2.6}/skill/builtin.py +0 -0
- {dulus-0.2.4 → dulus-0.2.6}/skill/clawhub.py +0 -0
- {dulus-0.2.4 → dulus-0.2.6}/skill/executor.py +0 -0
- {dulus-0.2.4 → dulus-0.2.6}/skill/loader.py +0 -0
- {dulus-0.2.4 → dulus-0.2.6}/skill/tools.py +0 -0
- {dulus-0.2.4 → dulus-0.2.6}/skills.py +0 -0
- {dulus-0.2.4 → dulus-0.2.6}/spinner.py +0 -0
- {dulus-0.2.4 → dulus-0.2.6}/string_utils.py +0 -0
- {dulus-0.2.4 → dulus-0.2.6}/subagent.py +0 -0
- {dulus-0.2.4 → dulus-0.2.6}/task/__init__.py +0 -0
- {dulus-0.2.4 → dulus-0.2.6}/task/store.py +0 -0
- {dulus-0.2.4 → dulus-0.2.6}/task/tools.py +0 -0
- {dulus-0.2.4 → dulus-0.2.6}/task/types.py +0 -0
- {dulus-0.2.4 → dulus-0.2.6}/tests/test_checkpoint.py +0 -0
- {dulus-0.2.4 → dulus-0.2.6}/tests/test_compaction.py +0 -0
- {dulus-0.2.4 → dulus-0.2.6}/tests/test_diff_view.py +0 -0
- {dulus-0.2.4 → dulus-0.2.6}/tests/test_injection_fix.py +0 -0
- {dulus-0.2.4 → dulus-0.2.6}/tests/test_license.py +0 -0
- {dulus-0.2.4 → dulus-0.2.6}/tests/test_mcp.py +0 -0
- {dulus-0.2.4 → dulus-0.2.6}/tests/test_memory.py +0 -0
- {dulus-0.2.4 → dulus-0.2.6}/tests/test_plugin.py +0 -0
- {dulus-0.2.4 → dulus-0.2.6}/tests/test_skills.py +0 -0
- {dulus-0.2.4 → dulus-0.2.6}/tests/test_subagent.py +0 -0
- {dulus-0.2.4 → dulus-0.2.6}/tests/test_task.py +0 -0
- {dulus-0.2.4 → dulus-0.2.6}/tests/test_telegram_buffer.py +0 -0
- {dulus-0.2.4 → dulus-0.2.6}/tests/test_tool_registry.py +0 -0
- {dulus-0.2.4 → dulus-0.2.6}/tests/test_voice.py +0 -0
- {dulus-0.2.4 → dulus-0.2.6}/tmux_offloader.py +0 -0
- {dulus-0.2.4 → dulus-0.2.6}/tmux_tools.py +0 -0
- {dulus-0.2.4 → dulus-0.2.6}/tool_registry.py +0 -0
- {dulus-0.2.4 → dulus-0.2.6}/ui/__init__.py +0 -0
- {dulus-0.2.4 → dulus-0.2.6}/ui/input.py +0 -0
- {dulus-0.2.4 → dulus-0.2.6}/ui/render.py +0 -0
- {dulus-0.2.4 → dulus-0.2.6}/voice/__init__.py +0 -0
- {dulus-0.2.4 → dulus-0.2.6}/voice/keyterms.py +0 -0
- {dulus-0.2.4 → dulus-0.2.6}/voice/recorder.py +0 -0
- {dulus-0.2.4 → dulus-0.2.6}/voice/stt.py +0 -0
- {dulus-0.2.4 → dulus-0.2.6}/voice/tts.py +0 -0
- {dulus-0.2.4 → dulus-0.2.6}/webchat.py +0 -0
- {dulus-0.2.4 → dulus-0.2.6}/webchat_server.py +0 -0
|
@@ -99,7 +99,8 @@ Slash commands in REPL:
|
|
|
99
99
|
/kill_tmux Kill all stuck tmux/psmux sessions (cleanup)
|
|
100
100
|
/batch Manage Kimi Batch tasks (list, status, fetch)
|
|
101
101
|
/roundtable Start a multi-model roundtable discussion
|
|
102
|
-
/harvest Harvest Claude.ai cookies
|
|
102
|
+
/harvest Harvest Claude.ai cookies (alias: /harvest-claude)
|
|
103
|
+
/harvest-claude Harvest Claude.ai cookies
|
|
103
104
|
/harvest-kimi Harvest Kimi.com (Consumer) session/gRPC tokens
|
|
104
105
|
/harvest-gemini Harvest Gemini (Consumer) session tokens
|
|
105
106
|
/harvest-qwen Harvest Qwen (chat.qwen.ai) session tokens
|
|
@@ -2995,7 +2996,7 @@ def cmd_sticky_input(_args: str, _state, config) -> bool:
|
|
|
2995
2996
|
Background notifications land where they land.
|
|
2996
2997
|
"""
|
|
2997
2998
|
from config import save_config
|
|
2998
|
-
config["sticky_input"] = not config.get("sticky_input",
|
|
2999
|
+
config["sticky_input"] = not config.get("sticky_input", True)
|
|
2999
3000
|
state_str = "ON" if config["sticky_input"] else "OFF"
|
|
3000
3001
|
ok(f"Sticky input bar: {state_str} (restart Dulus to take effect)")
|
|
3001
3002
|
save_config(config)
|
|
@@ -6372,6 +6373,8 @@ COMMANDS = {
|
|
|
6372
6373
|
"history": cmd_history,
|
|
6373
6374
|
"mem_palace": cmd_mem_palace,
|
|
6374
6375
|
"harvest": cmd_harvest,
|
|
6376
|
+
"harvest-claude": cmd_harvest,
|
|
6377
|
+
"claude-harvest": cmd_harvest,
|
|
6375
6378
|
"harvest-kimi": cmd_harvest_kimi,
|
|
6376
6379
|
"harvest-gemini": cmd_harvest_gemini,
|
|
6377
6380
|
"gemini-harvest": cmd_harvest_gemini,
|
|
@@ -6526,6 +6529,7 @@ _CMD_META: dict[str, tuple[str, list[str]]] = {
|
|
|
6526
6529
|
"claude_chats": ("List Claude.ai conversations", ["all"]),
|
|
6527
6530
|
"gemini_chats": ("Manage Gemini Web conversations", ["new"]),
|
|
6528
6531
|
"gemini_harvest": ("Harvest Gemini Web cookies (alias)", []),
|
|
6532
|
+
"harvest-claude": ("Harvest Claude.ai cookies (alias)", []),
|
|
6529
6533
|
"webchat": ("Spawn web chat UI", ["stop"]),
|
|
6530
6534
|
"gui": ("Launch desktop GUI", []),
|
|
6531
6535
|
}
|
|
@@ -7434,13 +7438,11 @@ def repl(config: dict, initial_prompt: str = None):
|
|
|
7434
7438
|
sys.stdout.write("\x1b[?2004h") # enable bracketed paste mode
|
|
7435
7439
|
sys.stdout.flush()
|
|
7436
7440
|
|
|
7437
|
-
# ── Sticky input bar (
|
|
7438
|
-
# prompt_toolkit
|
|
7439
|
-
#
|
|
7440
|
-
#
|
|
7441
|
-
|
|
7442
|
-
# config) if they want the anchored behavior.
|
|
7443
|
-
_sticky_input_enabled = bool(config.get("sticky_input", False))
|
|
7441
|
+
# ── Sticky input bar (ON by default) ─────────────────────────────────────
|
|
7442
|
+
# prompt_toolkit anchors the input line so background prints flow above it.
|
|
7443
|
+
# On Windows consoles it can redraw on every keystroke (mild jitter), but
|
|
7444
|
+
# the UX win outweighs it. Toggle off with `/sticky_input` if needed.
|
|
7445
|
+
_sticky_input_enabled = bool(config.get("sticky_input", True))
|
|
7444
7446
|
try:
|
|
7445
7447
|
import common as _cm
|
|
7446
7448
|
_cm.apply_theme(config.get("theme", "dulus"))
|
|
@@ -1065,8 +1065,12 @@ def stream_claude_code(
|
|
|
1065
1065
|
import subprocess as _sp
|
|
1066
1066
|
from pathlib import Path as _Path
|
|
1067
1067
|
|
|
1068
|
-
|
|
1069
|
-
|
|
1068
|
+
_project_override = config.get("claude_code_project_dir", "").strip()
|
|
1069
|
+
if _project_override:
|
|
1070
|
+
_slug = _project_override.replace(":", "-").replace("\\", "-").replace("/", "-")
|
|
1071
|
+
else:
|
|
1072
|
+
_slug = str(_Path.cwd()).replace(":", "-").replace("\\", "-").replace("/", "-")
|
|
1073
|
+
_session_dir = _Path.home() / ".claude" / "projects" / _slug
|
|
1070
1074
|
_jsonl_files = sorted(_session_dir.glob("*.jsonl"), key=lambda f: f.stat().st_mtime, reverse=True)
|
|
1071
1075
|
_jsonl_path = _jsonl_files[0] if _jsonl_files else None
|
|
1072
1076
|
|
|
@@ -1180,16 +1184,20 @@ def stream_claude_code(
|
|
|
1180
1184
|
# If we have text and silence window passed — flush
|
|
1181
1185
|
if _accumulated and (_time.time() - _last_new_entry_time) >= _silence:
|
|
1182
1186
|
text = "\n\n".join(_accumulated)
|
|
1183
|
-
|
|
1184
|
-
|
|
1187
|
+
_parser = WebToolParser(auto_wrap_json=True)
|
|
1188
|
+
_display = _parser.parse_chunk(text) + _parser.flush()
|
|
1189
|
+
yield TextChunk(_display)
|
|
1190
|
+
yield AssistantTurn(_display, _parser.tool_calls, 0, 0)
|
|
1185
1191
|
return
|
|
1186
1192
|
|
|
1187
1193
|
_time.sleep(_poll)
|
|
1188
1194
|
|
|
1189
1195
|
if _accumulated:
|
|
1190
1196
|
text = "\n\n".join(_accumulated)
|
|
1191
|
-
|
|
1192
|
-
|
|
1197
|
+
_parser = WebToolParser(auto_wrap_json=True)
|
|
1198
|
+
_display = _parser.parse_chunk(text) + _parser.flush()
|
|
1199
|
+
yield TextChunk(_display)
|
|
1200
|
+
yield AssistantTurn(_display, _parser.tool_calls, 0, 0)
|
|
1193
1201
|
return
|
|
1194
1202
|
|
|
1195
1203
|
msg = "[claude-code] Timeout waiting for assistant response (90s)."
|
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "dulus"
|
|
7
|
-
version = "0.2.
|
|
7
|
+
version = "0.2.6"
|
|
8
8
|
description = "Spanish-first multi-provider AI CLI — 14 NVIDIA models free, Mesa Redonda, voice, TTS, RTK token reducer, MemPalace"
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
requires-python = ">=3.11"
|
|
@@ -896,8 +896,7 @@ def _rtk_binary() -> Optional[str]:
|
|
|
896
896
|
here = Path(__file__).resolve().parent
|
|
897
897
|
name = "rtk.exe" if _sys.platform == "win32" else "rtk"
|
|
898
898
|
candidates = [here / "rtk" / name]
|
|
899
|
-
|
|
900
|
-
candidates.append(Path.home() / ".local" / "bin" / "rtk")
|
|
899
|
+
candidates.append(Path.home() / ".local" / "bin" / name)
|
|
901
900
|
|
|
902
901
|
for c in candidates:
|
|
903
902
|
if c.exists() and c.is_file():
|
|
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
|
|
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
|