maxc-cli 0.4.3__tar.gz → 0.4.5__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.
- {maxc_cli-0.4.3 → maxc_cli-0.4.5}/PKG-INFO +1 -1
- {maxc_cli-0.4.3 → maxc_cli-0.4.5}/setup.py +1 -1
- {maxc_cli-0.4.3 → maxc_cli-0.4.5}/src/maxc_cli/__init__.py +1 -1
- {maxc_cli-0.4.3 → maxc_cli-0.4.5}/src/maxc_cli/_samples.py +2 -1
- {maxc_cli-0.4.3 → maxc_cli-0.4.5}/src/maxc_cli/agent_platforms.py +10 -1
- {maxc_cli-0.4.3 → maxc_cli-0.4.5}/src/maxc_cli/app.py +5 -0
- {maxc_cli-0.4.3 → maxc_cli-0.4.5}/src/maxc_cli.egg-info/PKG-INFO +1 -1
- {maxc_cli-0.4.3 → maxc_cli-0.4.5}/tests/test_agent_platforms.py +5 -2
- {maxc_cli-0.4.3 → maxc_cli-0.4.5}/tests/test_agent_skill_commands_context.py +46 -3
- {maxc_cli-0.4.3 → maxc_cli-0.4.5}/MANIFEST.in +0 -0
- {maxc_cli-0.4.3 → maxc_cli-0.4.5}/README.md +0 -0
- {maxc_cli-0.4.3 → maxc_cli-0.4.5}/pyproject.toml +0 -0
- {maxc_cli-0.4.3 → maxc_cli-0.4.5}/scripts/pyinstaller_entry.py +0 -0
- {maxc_cli-0.4.3 → maxc_cli-0.4.5}/scripts/regression_test.py +0 -0
- {maxc_cli-0.4.3 → maxc_cli-0.4.5}/setup.cfg +0 -0
- {maxc_cli-0.4.3 → maxc_cli-0.4.5}/src/maxc_cli/__main__.py +0 -0
- {maxc_cli-0.4.3 → maxc_cli-0.4.5}/src/maxc_cli/audit.py +0 -0
- {maxc_cli-0.4.3 → maxc_cli-0.4.5}/src/maxc_cli/auth_providers.py +0 -0
- {maxc_cli-0.4.3 → maxc_cli-0.4.5}/src/maxc_cli/backend/__init__.py +0 -0
- {maxc_cli-0.4.3 → maxc_cli-0.4.5}/src/maxc_cli/backend/auth.py +0 -0
- {maxc_cli-0.4.3 → maxc_cli-0.4.5}/src/maxc_cli/backend/catalog.py +0 -0
- {maxc_cli-0.4.3 → maxc_cli-0.4.5}/src/maxc_cli/backend/data.py +0 -0
- {maxc_cli-0.4.3 → maxc_cli-0.4.5}/src/maxc_cli/backend/job.py +0 -0
- {maxc_cli-0.4.3 → maxc_cli-0.4.5}/src/maxc_cli/backend/meta.py +0 -0
- {maxc_cli-0.4.3 → maxc_cli-0.4.5}/src/maxc_cli/backend/odps.py +0 -0
- {maxc_cli-0.4.3 → maxc_cli-0.4.5}/src/maxc_cli/backend/query.py +0 -0
- {maxc_cli-0.4.3 → maxc_cli-0.4.5}/src/maxc_cli/cache.py +0 -0
- {maxc_cli-0.4.3 → maxc_cli-0.4.5}/src/maxc_cli/catalog_bootstrap.py +0 -0
- {maxc_cli-0.4.3 → maxc_cli-0.4.5}/src/maxc_cli/cli.py +0 -0
- {maxc_cli-0.4.3 → maxc_cli-0.4.5}/src/maxc_cli/config.py +0 -0
- {maxc_cli-0.4.3 → maxc_cli-0.4.5}/src/maxc_cli/exceptions.py +0 -0
- {maxc_cli-0.4.3 → maxc_cli-0.4.5}/src/maxc_cli/help_format.py +0 -0
- {maxc_cli-0.4.3 → maxc_cli-0.4.5}/src/maxc_cli/helpers.py +0 -0
- {maxc_cli-0.4.3 → maxc_cli-0.4.5}/src/maxc_cli/masking.py +0 -0
- {maxc_cli-0.4.3 → maxc_cli-0.4.5}/src/maxc_cli/models.py +0 -0
- {maxc_cli-0.4.3 → maxc_cli-0.4.5}/src/maxc_cli/output.py +0 -0
- {maxc_cli-0.4.3 → maxc_cli-0.4.5}/src/maxc_cli/setting_parser.py +0 -0
- {maxc_cli-0.4.3 → maxc_cli-0.4.5}/src/maxc_cli/skills/SKILL.md +0 -0
- {maxc_cli-0.4.3 → maxc_cli-0.4.5}/src/maxc_cli/skills/agents/openai.yaml +0 -0
- {maxc_cli-0.4.3 → maxc_cli-0.4.5}/src/maxc_cli/skills/references/bootstrap-auth.md +0 -0
- {maxc_cli-0.4.3 → maxc_cli-0.4.5}/src/maxc_cli/skills/references/bootstrap-flow.md +0 -0
- {maxc_cli-0.4.3 → maxc_cli-0.4.5}/src/maxc_cli/skills/references/command-patterns.md +0 -0
- {maxc_cli-0.4.3 → maxc_cli-0.4.5}/src/maxc_cli/skills/references/json-output-format.md +0 -0
- {maxc_cli-0.4.3 → maxc_cli-0.4.5}/src/maxc_cli/skills/references/maxcompute-select-guide.md +0 -0
- {maxc_cli-0.4.3 → maxc_cli-0.4.5}/src/maxc_cli/skills/references/maxcompute-sql-notes.md +0 -0
- {maxc_cli-0.4.3 → maxc_cli-0.4.5}/src/maxc_cli/skills/references/partition-guide.md +0 -0
- {maxc_cli-0.4.3 → maxc_cli-0.4.5}/src/maxc_cli/skills/references/red-lines.md +0 -0
- {maxc_cli-0.4.3 → maxc_cli-0.4.5}/src/maxc_cli/skills/references/setup-install.md +0 -0
- {maxc_cli-0.4.3 → maxc_cli-0.4.5}/src/maxc_cli/skills/references/sql-common-errors.md +0 -0
- {maxc_cli-0.4.3 → maxc_cli-0.4.5}/src/maxc_cli/skills/references/sql-query-patterns.md +0 -0
- {maxc_cli-0.4.3 → maxc_cli-0.4.5}/src/maxc_cli/skills/references/text2sql-principles.md +0 -0
- {maxc_cli-0.4.3 → maxc_cli-0.4.5}/src/maxc_cli/store.py +0 -0
- {maxc_cli-0.4.3 → maxc_cli-0.4.5}/src/maxc_cli/utils.py +0 -0
- {maxc_cli-0.4.3 → maxc_cli-0.4.5}/src/maxc_cli.egg-info/SOURCES.txt +0 -0
- {maxc_cli-0.4.3 → maxc_cli-0.4.5}/src/maxc_cli.egg-info/dependency_links.txt +0 -0
- {maxc_cli-0.4.3 → maxc_cli-0.4.5}/src/maxc_cli.egg-info/entry_points.txt +0 -0
- {maxc_cli-0.4.3 → maxc_cli-0.4.5}/src/maxc_cli.egg-info/requires.txt +0 -0
- {maxc_cli-0.4.3 → maxc_cli-0.4.5}/src/maxc_cli.egg-info/top_level.txt +0 -0
- {maxc_cli-0.4.3 → maxc_cli-0.4.5}/tests/test_agent_hints_and_cli.py +0 -0
- {maxc_cli-0.4.3 → maxc_cli-0.4.5}/tests/test_agent_skill_commands.py +0 -0
- {maxc_cli-0.4.3 → maxc_cli-0.4.5}/tests/test_backend_data.py +0 -0
- {maxc_cli-0.4.3 → maxc_cli-0.4.5}/tests/test_backend_data_serialization.py +0 -0
- {maxc_cli-0.4.3 → maxc_cli-0.4.5}/tests/test_backend_meta.py +0 -0
- {maxc_cli-0.4.3 → maxc_cli-0.4.5}/tests/test_build_release_script.py +0 -0
- {maxc_cli-0.4.3 → maxc_cli-0.4.5}/tests/test_cache.py +0 -0
- {maxc_cli-0.4.3 → maxc_cli-0.4.5}/tests/test_catalog.py +0 -0
- {maxc_cli-0.4.3 → maxc_cli-0.4.5}/tests/test_catalog_bootstrap.py +0 -0
- {maxc_cli-0.4.3 → maxc_cli-0.4.5}/tests/test_cli_arg_validation.py +0 -0
- {maxc_cli-0.4.3 → maxc_cli-0.4.5}/tests/test_cli_mock.py +0 -0
- {maxc_cli-0.4.3 → maxc_cli-0.4.5}/tests/test_cli_query_parse_and_sanitize.py +0 -0
- {maxc_cli-0.4.3 → maxc_cli-0.4.5}/tests/test_compat.py +0 -0
- {maxc_cli-0.4.3 → maxc_cli-0.4.5}/tests/test_e2e_smoke.py +0 -0
- {maxc_cli-0.4.3 → maxc_cli-0.4.5}/tests/test_envelope_shape.py +0 -0
- {maxc_cli-0.4.3 → maxc_cli-0.4.5}/tests/test_error_self_correction.py +0 -0
- {maxc_cli-0.4.3 → maxc_cli-0.4.5}/tests/test_error_translation.py +0 -0
- {maxc_cli-0.4.3 → maxc_cli-0.4.5}/tests/test_exit_codes.py +0 -0
- {maxc_cli-0.4.3 → maxc_cli-0.4.5}/tests/test_external_auth.py +0 -0
- {maxc_cli-0.4.3 → maxc_cli-0.4.5}/tests/test_flag_hoist.py +0 -0
- {maxc_cli-0.4.3 → maxc_cli-0.4.5}/tests/test_help_format.py +0 -0
- {maxc_cli-0.4.3 → maxc_cli-0.4.5}/tests/test_help_version_e2e.py +0 -0
- {maxc_cli-0.4.3 → maxc_cli-0.4.5}/tests/test_helpers.py +0 -0
- {maxc_cli-0.4.3 → maxc_cli-0.4.5}/tests/test_helpers_csv.py +0 -0
- {maxc_cli-0.4.3 → maxc_cli-0.4.5}/tests/test_integration.py +0 -0
- {maxc_cli-0.4.3 → maxc_cli-0.4.5}/tests/test_integration_real.py +0 -0
- {maxc_cli-0.4.3 → maxc_cli-0.4.5}/tests/test_job_improvements.py +0 -0
- {maxc_cli-0.4.3 → maxc_cli-0.4.5}/tests/test_masking.py +0 -0
- {maxc_cli-0.4.3 → maxc_cli-0.4.5}/tests/test_meta_schema_and_partition_cols.py +0 -0
- {maxc_cli-0.4.3 → maxc_cli-0.4.5}/tests/test_phase1_improvements.py +0 -0
- {maxc_cli-0.4.3 → maxc_cli-0.4.5}/tests/test_pyinstaller_bundle.py +0 -0
- {maxc_cli-0.4.3 → maxc_cli-0.4.5}/tests/test_query_auto_promote.py +0 -0
- {maxc_cli-0.4.3 → maxc_cli-0.4.5}/tests/test_query_result_csv_fallback.py +0 -0
- {maxc_cli-0.4.3 → maxc_cli-0.4.5}/tests/test_setting_parser.py +0 -0
- {maxc_cli-0.4.3 → maxc_cli-0.4.5}/tests/test_skill_cli_consistency.py +0 -0
- {maxc_cli-0.4.3 → maxc_cli-0.4.5}/tests/test_skill_eval.py +0 -0
- {maxc_cli-0.4.3 → maxc_cli-0.4.5}/tests/test_skill_renderer.py +0 -0
|
@@ -9,7 +9,7 @@ README = ROOT / "README.md"
|
|
|
9
9
|
|
|
10
10
|
setup(
|
|
11
11
|
name="maxc-cli",
|
|
12
|
-
version="0.4.
|
|
12
|
+
version="0.4.5",
|
|
13
13
|
description="Agent-native MaxCompute CLI for external coding agents",
|
|
14
14
|
long_description=README.read_text(encoding="utf-8"),
|
|
15
15
|
long_description_content_type="text/markdown",
|
|
@@ -152,7 +152,8 @@ SAMPLES: dict[str, str] = {
|
|
|
152
152
|
"agent.skill": "maxc agent skill\nmaxc agent skill --json",
|
|
153
153
|
"agent.skill.install": (
|
|
154
154
|
"maxc agent skill install claude-code\n"
|
|
155
|
-
"maxc agent skill install cursor --invocation aliyun-maxc"
|
|
155
|
+
"maxc agent skill install cursor --invocation aliyun-maxc\n"
|
|
156
|
+
"maxc agent skill install others --dir /path/to/skills"
|
|
156
157
|
),
|
|
157
158
|
"agent.skill.update": (
|
|
158
159
|
"maxc agent skill update cursor\n"
|
|
@@ -122,7 +122,8 @@ def _build_registry() -> tuple[Platform, ...]:
|
|
|
122
122
|
),
|
|
123
123
|
Platform(name="cursor", install_root=_simple_root(".cursor"),
|
|
124
124
|
next_step_hint="Restart Cursor to activate"),
|
|
125
|
-
Platform(name="windsurf",
|
|
125
|
+
Platform(name="windsurf",
|
|
126
|
+
install_root=Path.home() / ".codeium" / "windsurf" / "skills" / "maxc-cli",
|
|
126
127
|
next_step_hint="Restart Windsurf to activate"),
|
|
127
128
|
Platform(name="codex", install_root=_codex_root(),
|
|
128
129
|
next_step_hint="Restart Codex to activate"),
|
|
@@ -132,6 +133,14 @@ def _build_registry() -> tuple[Platform, ...]:
|
|
|
132
133
|
next_step_hint="Restart Qoder to activate"),
|
|
133
134
|
Platform(name="qoderwork", install_root=_simple_root(".qoderwork"),
|
|
134
135
|
next_step_hint="Restart QoderWork to activate"),
|
|
136
|
+
Platform(name="openclaw",
|
|
137
|
+
install_root=Path.home() / ".openclaw" / "workspace" / "skills" / "maxc-cli",
|
|
138
|
+
next_step_hint="Restart OpenClaw to activate"),
|
|
139
|
+
Platform(name="hermes", install_root=_simple_root(".hermes"),
|
|
140
|
+
next_step_hint="Restart Hermes to activate"),
|
|
141
|
+
Platform(name="others", install_root=Path("__dir_required__"),
|
|
142
|
+
requires_dir=False,
|
|
143
|
+
next_step_hint="Point your agent at the installed skill directory"),
|
|
135
144
|
)
|
|
136
145
|
|
|
137
146
|
|
|
@@ -3409,6 +3409,11 @@ class MaxCApp:
|
|
|
3409
3409
|
platform = agent_platforms.resolve(platform_name)
|
|
3410
3410
|
except KeyError as exc:
|
|
3411
3411
|
raise ValidationError(str(exc))
|
|
3412
|
+
if dir_override is None and not platform.install_root.is_absolute():
|
|
3413
|
+
raise ValidationError(
|
|
3414
|
+
f"Platform {platform.name!r} has no default install path — "
|
|
3415
|
+
f"pass --dir <path> to specify where the skill should be installed."
|
|
3416
|
+
)
|
|
3412
3417
|
target = agent_platforms.effective_target(platform, dir_override)
|
|
3413
3418
|
return platform, target
|
|
3414
3419
|
|
|
@@ -11,11 +11,12 @@ import pytest
|
|
|
11
11
|
from maxc_cli import agent_platforms as ap
|
|
12
12
|
|
|
13
13
|
|
|
14
|
-
def
|
|
14
|
+
def test_registry_has_canonical_platforms():
|
|
15
15
|
names = {p.name for p in ap.REGISTRY}
|
|
16
16
|
assert names == {
|
|
17
17
|
"claude-code", "cursor", "windsurf", "codex",
|
|
18
18
|
"qwen", "qoder", "qoderwork",
|
|
19
|
+
"openclaw", "hermes", "others",
|
|
19
20
|
}
|
|
20
21
|
|
|
21
22
|
|
|
@@ -41,10 +42,12 @@ def test_install_root_matches_legacy_paths():
|
|
|
41
42
|
expected = {
|
|
42
43
|
"claude-code": Path.home() / ".claude" / "skills" / "maxc-cli",
|
|
43
44
|
"cursor": Path.home() / ".cursor" / "skills" / "maxc-cli",
|
|
44
|
-
"windsurf": Path.home() / ".windsurf"
|
|
45
|
+
"windsurf": Path.home() / ".codeium" / "windsurf" / "skills" / "maxc-cli",
|
|
45
46
|
"qwen": Path.home() / ".qwen" / "skills" / "maxc-cli",
|
|
46
47
|
"qoder": Path.home() / ".qoder" / "skills" / "maxc-cli",
|
|
47
48
|
"qoderwork": Path.home() / ".qoderwork" / "skills" / "maxc-cli",
|
|
49
|
+
"openclaw": Path.home() / ".openclaw" / "workspace" / "skills" / "maxc-cli",
|
|
50
|
+
"hermes": Path.home() / ".hermes" / "skills" / "maxc-cli",
|
|
48
51
|
}
|
|
49
52
|
for name, expected_path in expected.items():
|
|
50
53
|
assert ap.resolve(name).install_root == expected_path, name
|
|
@@ -224,11 +224,13 @@ class TestAgentInstallSkill:
|
|
|
224
224
|
for d in [
|
|
225
225
|
Path.home() / ".claude" / "skills" / "maxc-cli",
|
|
226
226
|
Path.home() / ".cursor" / "skills" / "maxc-cli",
|
|
227
|
-
Path.home() / ".windsurf" / "skills" / "maxc-cli",
|
|
227
|
+
Path.home() / ".codeium" / "windsurf" / "skills" / "maxc-cli",
|
|
228
228
|
Path(os.environ.get("CODEX_HOME", str(Path.home() / ".codex"))) / "skills" / "maxc-cli",
|
|
229
229
|
Path.home() / ".qwen" / "skills" / "maxc-cli",
|
|
230
230
|
Path.home() / ".qoder" / "skills" / "maxc-cli",
|
|
231
231
|
Path.home() / ".qoderwork" / "skills" / "maxc-cli",
|
|
232
|
+
Path.home() / ".openclaw" / "workspace" / "skills" / "maxc-cli",
|
|
233
|
+
Path.home() / ".hermes" / "skills" / "maxc-cli",
|
|
232
234
|
]:
|
|
233
235
|
if d.exists():
|
|
234
236
|
shutil.rmtree(str(d))
|
|
@@ -236,11 +238,13 @@ class TestAgentInstallSkill:
|
|
|
236
238
|
for d in [
|
|
237
239
|
Path.home() / ".claude" / "skills" / "maxc-cli",
|
|
238
240
|
Path.home() / ".cursor" / "skills" / "maxc-cli",
|
|
239
|
-
Path.home() / ".windsurf" / "skills" / "maxc-cli",
|
|
241
|
+
Path.home() / ".codeium" / "windsurf" / "skills" / "maxc-cli",
|
|
240
242
|
Path(os.environ.get("CODEX_HOME", str(Path.home() / ".codex"))) / "skills" / "maxc-cli",
|
|
241
243
|
Path.home() / ".qwen" / "skills" / "maxc-cli",
|
|
242
244
|
Path.home() / ".qoder" / "skills" / "maxc-cli",
|
|
243
245
|
Path.home() / ".qoderwork" / "skills" / "maxc-cli",
|
|
246
|
+
Path.home() / ".openclaw" / "workspace" / "skills" / "maxc-cli",
|
|
247
|
+
Path.home() / ".hermes" / "skills" / "maxc-cli",
|
|
244
248
|
]:
|
|
245
249
|
if d.exists():
|
|
246
250
|
shutil.rmtree(str(d))
|
|
@@ -288,7 +292,7 @@ class TestAgentInstallSkill:
|
|
|
288
292
|
assert data["platform"] == "windsurf"
|
|
289
293
|
assert data["upgraded"] is True
|
|
290
294
|
install_path = Path(data["install_path"])
|
|
291
|
-
assert ".windsurf/skills" in str(install_path)
|
|
295
|
+
assert ".codeium/windsurf/skills" in str(install_path)
|
|
292
296
|
assert (install_path / "SKILL.md").is_file()
|
|
293
297
|
|
|
294
298
|
def test_install_skill_qwen(self, tmp_path):
|
|
@@ -324,6 +328,45 @@ class TestAgentInstallSkill:
|
|
|
324
328
|
assert ".qoderwork/skills" in str(install_path)
|
|
325
329
|
assert (install_path / "SKILL.md").is_file()
|
|
326
330
|
|
|
331
|
+
def test_install_skill_openclaw(self, tmp_path):
|
|
332
|
+
config = _make_config(tmp_path)
|
|
333
|
+
code, payload, _ = _run_cmd(config, ["agent", "skill", "install", "openclaw", "--json"])
|
|
334
|
+
assert code == 0
|
|
335
|
+
data = payload["data"]
|
|
336
|
+
assert data["platform"] == "openclaw"
|
|
337
|
+
assert data["upgraded"] is True
|
|
338
|
+
install_path = Path(data["install_path"])
|
|
339
|
+
assert ".openclaw/workspace/skills" in str(install_path)
|
|
340
|
+
assert (install_path / "SKILL.md").is_file()
|
|
341
|
+
|
|
342
|
+
def test_install_skill_hermes(self, tmp_path):
|
|
343
|
+
config = _make_config(tmp_path)
|
|
344
|
+
code, payload, _ = _run_cmd(config, ["agent", "skill", "install", "hermes", "--json"])
|
|
345
|
+
assert code == 0
|
|
346
|
+
data = payload["data"]
|
|
347
|
+
assert data["platform"] == "hermes"
|
|
348
|
+
assert data["upgraded"] is True
|
|
349
|
+
install_path = Path(data["install_path"])
|
|
350
|
+
assert ".hermes/skills" in str(install_path)
|
|
351
|
+
assert (install_path / "SKILL.md").is_file()
|
|
352
|
+
|
|
353
|
+
def test_install_skill_others_requires_dir(self, tmp_path):
|
|
354
|
+
config = _make_config(tmp_path)
|
|
355
|
+
code, payload, _ = _run_cmd(config, ["agent", "skill", "install", "others", "--json"])
|
|
356
|
+
assert code == 1
|
|
357
|
+
assert payload["status"] == "failure"
|
|
358
|
+
assert "--dir" in payload["error"]["message"]
|
|
359
|
+
|
|
360
|
+
def test_install_skill_others_with_dir(self, tmp_path):
|
|
361
|
+
config = _make_config(tmp_path)
|
|
362
|
+
target = tmp_path / "custom-agent-skill"
|
|
363
|
+
code, payload, _ = _run_cmd(config, ["agent", "skill", "install", "others", "--dir", str(target), "--json"])
|
|
364
|
+
assert code == 0
|
|
365
|
+
data = payload["data"]
|
|
366
|
+
assert data["platform"] == "others"
|
|
367
|
+
assert data["upgraded"] is True
|
|
368
|
+
assert (target / "SKILL.md").is_file()
|
|
369
|
+
|
|
327
370
|
def test_install_skill_default_platform_is_claude_code(self, tmp_path):
|
|
328
371
|
config = _make_config(tmp_path)
|
|
329
372
|
code, payload, _ = _run_cmd(config, ["agent", "skill", "install", "--json"])
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|