evo-cli 0.35.2__tar.gz → 0.36.0__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.
- {evo_cli-0.35.2 → evo_cli-0.36.0}/PKG-INFO +1 -1
- evo_cli-0.36.0/evo_cli/VERSION +1 -0
- {evo_cli-0.35.2 → evo_cli-0.36.0}/evo_cli/commands/cred.py +28 -0
- {evo_cli-0.35.2 → evo_cli-0.36.0}/evo_cli.egg-info/PKG-INFO +1 -1
- {evo_cli-0.35.2 → evo_cli-0.36.0}/tests/test_cred.py +49 -1
- evo_cli-0.35.2/evo_cli/VERSION +0 -1
- {evo_cli-0.35.2 → evo_cli-0.36.0}/Containerfile +0 -0
- {evo_cli-0.35.2 → evo_cli-0.36.0}/HISTORY.md +0 -0
- {evo_cli-0.35.2 → evo_cli-0.36.0}/LICENSE +0 -0
- {evo_cli-0.35.2 → evo_cli-0.36.0}/MANIFEST.in +0 -0
- {evo_cli-0.35.2 → evo_cli-0.36.0}/README.md +0 -0
- {evo_cli-0.35.2 → evo_cli-0.36.0}/evo_cli/__init__.py +0 -0
- {evo_cli-0.35.2 → evo_cli-0.36.0}/evo_cli/__main__.py +0 -0
- {evo_cli-0.35.2 → evo_cli-0.36.0}/evo_cli/base.py +0 -0
- {evo_cli-0.35.2 → evo_cli-0.36.0}/evo_cli/cli.py +0 -0
- {evo_cli-0.35.2 → evo_cli-0.36.0}/evo_cli/commands/__init__.py +0 -0
- {evo_cli-0.35.2 → evo_cli-0.36.0}/evo_cli/commands/agent_toy.py +0 -0
- {evo_cli-0.35.2 → evo_cli-0.36.0}/evo_cli/commands/claude_code.py +0 -0
- {evo_cli-0.35.2 → evo_cli-0.36.0}/evo_cli/commands/cloudflare.py +0 -0
- {evo_cli-0.35.2 → evo_cli-0.36.0}/evo_cli/commands/download.py +0 -0
- {evo_cli-0.35.2 → evo_cli-0.36.0}/evo_cli/commands/fix_claude.py +0 -0
- {evo_cli-0.35.2 → evo_cli-0.36.0}/evo_cli/commands/gdrive.py +0 -0
- {evo_cli-0.35.2 → evo_cli-0.36.0}/evo_cli/commands/gh.py +0 -0
- {evo_cli-0.35.2 → evo_cli-0.36.0}/evo_cli/commands/harness/__init__.py +0 -0
- {evo_cli-0.35.2 → evo_cli-0.36.0}/evo_cli/commands/harness/_dag.py +0 -0
- {evo_cli-0.35.2 → evo_cli-0.36.0}/evo_cli/commands/harness/_git.py +0 -0
- {evo_cli-0.35.2 → evo_cli-0.36.0}/evo_cli/commands/harness/_hub.py +0 -0
- {evo_cli-0.35.2 → evo_cli-0.36.0}/evo_cli/commands/harness/_mirror.py +0 -0
- {evo_cli-0.35.2 → evo_cli-0.36.0}/evo_cli/commands/harness/_model.py +0 -0
- {evo_cli-0.35.2 → evo_cli-0.36.0}/evo_cli/commands/harness/_mutate.py +0 -0
- {evo_cli-0.35.2 → evo_cli-0.36.0}/evo_cli/commands/harness/_paths.py +0 -0
- {evo_cli-0.35.2 → evo_cli-0.36.0}/evo_cli/commands/harness/_render.py +0 -0
- {evo_cli-0.35.2 → evo_cli-0.36.0}/evo_cli/commands/harness/_server.py +0 -0
- {evo_cli-0.35.2 → evo_cli-0.36.0}/evo_cli/commands/harness/check.py +0 -0
- {evo_cli-0.35.2 → evo_cli-0.36.0}/evo_cli/commands/harness/clone.py +0 -0
- {evo_cli-0.35.2 → evo_cli-0.36.0}/evo_cli/commands/harness/edit.py +0 -0
- {evo_cli-0.35.2 → evo_cli-0.36.0}/evo_cli/commands/harness/pull.py +0 -0
- {evo_cli-0.35.2 → evo_cli-0.36.0}/evo_cli/commands/harness/serve.py +0 -0
- {evo_cli-0.35.2 → evo_cli-0.36.0}/evo_cli/commands/harness/show.py +0 -0
- {evo_cli-0.35.2 → evo_cli-0.36.0}/evo_cli/commands/harness/views.py +0 -0
- {evo_cli-0.35.2 → evo_cli-0.36.0}/evo_cli/commands/harness/web/assets/index-Cs7hXRPJ.css +0 -0
- {evo_cli-0.35.2 → evo_cli-0.36.0}/evo_cli/commands/harness/web/assets/index-CuNOlaH7.js +0 -0
- {evo_cli-0.35.2 → evo_cli-0.36.0}/evo_cli/commands/harness/web/assets/inter-cyrillic-ext-wght-normal-BOeWTOD4.woff2 +0 -0
- {evo_cli-0.35.2 → evo_cli-0.36.0}/evo_cli/commands/harness/web/assets/inter-cyrillic-wght-normal-DqGufNeO.woff2 +0 -0
- {evo_cli-0.35.2 → evo_cli-0.36.0}/evo_cli/commands/harness/web/assets/inter-greek-ext-wght-normal-DlzME5K_.woff2 +0 -0
- {evo_cli-0.35.2 → evo_cli-0.36.0}/evo_cli/commands/harness/web/assets/inter-greek-wght-normal-CkhJZR-_.woff2 +0 -0
- {evo_cli-0.35.2 → evo_cli-0.36.0}/evo_cli/commands/harness/web/assets/inter-latin-ext-wght-normal-DO1Apj_S.woff2 +0 -0
- {evo_cli-0.35.2 → evo_cli-0.36.0}/evo_cli/commands/harness/web/assets/inter-latin-wght-normal-Dx4kXJAl.woff2 +0 -0
- {evo_cli-0.35.2 → evo_cli-0.36.0}/evo_cli/commands/harness/web/assets/inter-vietnamese-wght-normal-CBcvBZtf.woff2 +0 -0
- {evo_cli-0.35.2 → evo_cli-0.36.0}/evo_cli/commands/harness/web/assets/jetbrains-mono-cyrillic-wght-normal-D73BlboJ.woff2 +0 -0
- {evo_cli-0.35.2 → evo_cli-0.36.0}/evo_cli/commands/harness/web/assets/jetbrains-mono-greek-wght-normal-Bw9x6K1M.woff2 +0 -0
- {evo_cli-0.35.2 → evo_cli-0.36.0}/evo_cli/commands/harness/web/assets/jetbrains-mono-latin-ext-wght-normal-DBQx-q_a.woff2 +0 -0
- {evo_cli-0.35.2 → evo_cli-0.36.0}/evo_cli/commands/harness/web/assets/jetbrains-mono-latin-wght-normal-B9CIFXIH.woff2 +0 -0
- {evo_cli-0.35.2 → evo_cli-0.36.0}/evo_cli/commands/harness/web/assets/jetbrains-mono-vietnamese-wght-normal-Bt-aOZkq.woff2 +0 -0
- {evo_cli-0.35.2 → evo_cli-0.36.0}/evo_cli/commands/harness/web/index.html +0 -0
- {evo_cli-0.35.2 → evo_cli-0.36.0}/evo_cli/commands/hwid.py +0 -0
- {evo_cli-0.35.2 → evo_cli-0.36.0}/evo_cli/commands/hwid_reset.py +0 -0
- {evo_cli-0.35.2 → evo_cli-0.36.0}/evo_cli/commands/image.py +0 -0
- {evo_cli-0.35.2 → evo_cli-0.36.0}/evo_cli/commands/localproxy.py +0 -0
- {evo_cli-0.35.2 → evo_cli-0.36.0}/evo_cli/commands/mcp.py +0 -0
- {evo_cli-0.35.2 → evo_cli-0.36.0}/evo_cli/commands/miniconda.py +0 -0
- {evo_cli-0.35.2 → evo_cli-0.36.0}/evo_cli/commands/netcheck.py +0 -0
- {evo_cli-0.35.2 → evo_cli-0.36.0}/evo_cli/commands/ngrok.py +0 -0
- {evo_cli-0.35.2 → evo_cli-0.36.0}/evo_cli/commands/opencode.py +0 -0
- {evo_cli-0.35.2 → evo_cli-0.36.0}/evo_cli/commands/openvpn.py +0 -0
- {evo_cli-0.35.2 → evo_cli-0.36.0}/evo_cli/commands/plantuml.py +0 -0
- {evo_cli-0.35.2 → evo_cli-0.36.0}/evo_cli/commands/route/__init__.py +0 -0
- {evo_cli-0.35.2 → evo_cli-0.36.0}/evo_cli/commands/route/_dns.py +0 -0
- {evo_cli-0.35.2 → evo_cli-0.36.0}/evo_cli/commands/route/_dpi.py +0 -0
- {evo_cli-0.35.2 → evo_cli-0.36.0}/evo_cli/commands/route/_hosts.py +0 -0
- {evo_cli-0.35.2 → evo_cli-0.36.0}/evo_cli/commands/route/_page.py +0 -0
- {evo_cli-0.35.2 → evo_cli-0.36.0}/evo_cli/commands/route/_probe.py +0 -0
- {evo_cli-0.35.2 → evo_cli-0.36.0}/evo_cli/commands/route/_spoofdpi.py +0 -0
- {evo_cli-0.35.2 → evo_cli-0.36.0}/evo_cli/commands/route/check.py +0 -0
- {evo_cli-0.35.2 → evo_cli-0.36.0}/evo_cli/commands/route/fix.py +0 -0
- {evo_cli-0.35.2 → evo_cli-0.36.0}/evo_cli/commands/route/probe.py +0 -0
- {evo_cli-0.35.2 → evo_cli-0.36.0}/evo_cli/commands/route/status.py +0 -0
- {evo_cli-0.35.2 → evo_cli-0.36.0}/evo_cli/commands/serp.py +0 -0
- {evo_cli-0.35.2 → evo_cli-0.36.0}/evo_cli/commands/site2s.py +0 -0
- {evo_cli-0.35.2 → evo_cli-0.36.0}/evo_cli/commands/ssh.py +0 -0
- {evo_cli-0.35.2 → evo_cli-0.36.0}/evo_cli/commands/storage.py +0 -0
- {evo_cli-0.35.2 → evo_cli-0.36.0}/evo_cli/commands/sysmon.py +0 -0
- {evo_cli-0.35.2 → evo_cli-0.36.0}/evo_cli/commands/tts.py +0 -0
- {evo_cli-0.35.2 → evo_cli-0.36.0}/evo_cli/commands/update.py +0 -0
- {evo_cli-0.35.2 → evo_cli-0.36.0}/evo_cli/commands/wifi.py +0 -0
- {evo_cli-0.35.2 → evo_cli-0.36.0}/evo_cli/console.py +0 -0
- {evo_cli-0.35.2 → evo_cli-0.36.0}/evo_cli/credentials/__init__.py +0 -0
- {evo_cli-0.35.2 → evo_cli-0.36.0}/evo_cli/credentials/doctor.py +0 -0
- {evo_cli-0.35.2 → evo_cli-0.36.0}/evo_cli/credentials/google_oauth.py +0 -0
- {evo_cli-0.35.2 → evo_cli-0.36.0}/evo_cli/credentials/migrate.py +0 -0
- {evo_cli-0.35.2 → evo_cli-0.36.0}/evo_cli/credentials/oauth_flow.py +0 -0
- {evo_cli-0.35.2 → evo_cli-0.36.0}/evo_cli/credentials/registry.py +0 -0
- {evo_cli-0.35.2 → evo_cli-0.36.0}/evo_cli/credentials/store.py +0 -0
- {evo_cli-0.35.2 → evo_cli-0.36.0}/evo_cli/credentials/sync.py +0 -0
- {evo_cli-0.35.2 → evo_cli-0.36.0}/evo_cli/imaging/__init__.py +0 -0
- {evo_cli-0.35.2 → evo_cli-0.36.0}/evo_cli/imaging/align.py +0 -0
- {evo_cli-0.35.2 → evo_cli-0.36.0}/evo_cli/imaging/core.py +0 -0
- {evo_cli-0.35.2 → evo_cli-0.36.0}/evo_cli/imaging/creds.py +0 -0
- {evo_cli-0.35.2 → evo_cli-0.36.0}/evo_cli/imaging/errors.py +0 -0
- {evo_cli-0.35.2 → evo_cli-0.36.0}/evo_cli/imaging/gemini.py +0 -0
- {evo_cli-0.35.2 → evo_cli-0.36.0}/evo_cli/imaging/ncnn.py +0 -0
- {evo_cli-0.35.2 → evo_cli-0.36.0}/evo_cli/mcp_registry.py +0 -0
- {evo_cli-0.35.2 → evo_cli-0.36.0}/evo_cli/openvpn.py +0 -0
- {evo_cli-0.35.2 → evo_cli-0.36.0}/evo_cli/serp/__init__.py +0 -0
- {evo_cli-0.35.2 → evo_cli-0.36.0}/evo_cli/serp/client.py +0 -0
- {evo_cli-0.35.2 → evo_cli-0.36.0}/evo_cli/serp/creds.py +0 -0
- {evo_cli-0.35.2 → evo_cli-0.36.0}/evo_cli/serp/errors.py +0 -0
- {evo_cli-0.35.2 → evo_cli-0.36.0}/evo_cli/serp/install.py +0 -0
- {evo_cli-0.35.2 → evo_cli-0.36.0}/evo_cli/serp/render.py +0 -0
- {evo_cli-0.35.2 → evo_cli-0.36.0}/evo_cli/tts/__init__.py +0 -0
- {evo_cli-0.35.2 → evo_cli-0.36.0}/evo_cli/tts/chunking.py +0 -0
- {evo_cli-0.35.2 → evo_cli-0.36.0}/evo_cli/tts/core.py +0 -0
- {evo_cli-0.35.2 → evo_cli-0.36.0}/evo_cli/tts/creds.py +0 -0
- {evo_cli-0.35.2 → evo_cli-0.36.0}/evo_cli/tts/errors.py +0 -0
- {evo_cli-0.35.2 → evo_cli-0.36.0}/evo_cli/tts/gemini.py +0 -0
- {evo_cli-0.35.2 → evo_cli-0.36.0}/evo_cli/tts/http.py +0 -0
- {evo_cli-0.35.2 → evo_cli-0.36.0}/evo_cli/tts/openai.py +0 -0
- {evo_cli-0.35.2 → evo_cli-0.36.0}/evo_cli/tts/player.py +0 -0
- {evo_cli-0.35.2 → evo_cli-0.36.0}/evo_cli/tts/vbee.py +0 -0
- {evo_cli-0.35.2 → evo_cli-0.36.0}/evo_cli.egg-info/SOURCES.txt +0 -0
- {evo_cli-0.35.2 → evo_cli-0.36.0}/evo_cli.egg-info/dependency_links.txt +0 -0
- {evo_cli-0.35.2 → evo_cli-0.36.0}/evo_cli.egg-info/entry_points.txt +0 -0
- {evo_cli-0.35.2 → evo_cli-0.36.0}/evo_cli.egg-info/requires.txt +0 -0
- {evo_cli-0.35.2 → evo_cli-0.36.0}/evo_cli.egg-info/top_level.txt +0 -0
- {evo_cli-0.35.2 → evo_cli-0.36.0}/pyproject.toml +0 -0
- {evo_cli-0.35.2 → evo_cli-0.36.0}/setup.cfg +0 -0
- {evo_cli-0.35.2 → evo_cli-0.36.0}/tests/__init__.py +0 -0
- {evo_cli-0.35.2 → evo_cli-0.36.0}/tests/fake_evo_agents.py +0 -0
- {evo_cli-0.35.2 → evo_cli-0.36.0}/tests/fixtures/hub/contract-0.2.0.json +0 -0
- {evo_cli-0.35.2 → evo_cli-0.36.0}/tests/fixtures/hub/mirror-demo.yaml +0 -0
- {evo_cli-0.35.2 → evo_cli-0.36.0}/tests/test_agent_toy.py +0 -0
- {evo_cli-0.35.2 → evo_cli-0.36.0}/tests/test_claude_code.py +0 -0
- {evo_cli-0.35.2 → evo_cli-0.36.0}/tests/test_cli.py +0 -0
- {evo_cli-0.35.2 → evo_cli-0.36.0}/tests/test_console.py +0 -0
- {evo_cli-0.35.2 → evo_cli-0.36.0}/tests/test_download.py +0 -0
- {evo_cli-0.35.2 → evo_cli-0.36.0}/tests/test_fix_claude.py +0 -0
- {evo_cli-0.35.2 → evo_cli-0.36.0}/tests/test_gdrive.py +0 -0
- {evo_cli-0.35.2 → evo_cli-0.36.0}/tests/test_gh.py +0 -0
- {evo_cli-0.35.2 → evo_cli-0.36.0}/tests/test_harness.py +0 -0
- {evo_cli-0.35.2 → evo_cli-0.36.0}/tests/test_harness_clone.py +0 -0
- {evo_cli-0.35.2 → evo_cli-0.36.0}/tests/test_harness_dag.py +0 -0
- {evo_cli-0.35.2 → evo_cli-0.36.0}/tests/test_harness_hub.py +0 -0
- {evo_cli-0.35.2 → evo_cli-0.36.0}/tests/test_harness_show.py +0 -0
- {evo_cli-0.35.2 → evo_cli-0.36.0}/tests/test_image.py +0 -0
- {evo_cli-0.35.2 → evo_cli-0.36.0}/tests/test_mcp.py +0 -0
- {evo_cli-0.35.2 → evo_cli-0.36.0}/tests/test_ngrok.py +0 -0
- {evo_cli-0.35.2 → evo_cli-0.36.0}/tests/test_opencode.py +0 -0
- {evo_cli-0.35.2 → evo_cli-0.36.0}/tests/test_openvpn.py +0 -0
- {evo_cli-0.35.2 → evo_cli-0.36.0}/tests/test_plantuml.py +0 -0
- {evo_cli-0.35.2 → evo_cli-0.36.0}/tests/test_route.py +0 -0
- {evo_cli-0.35.2 → evo_cli-0.36.0}/tests/test_serp.py +0 -0
- {evo_cli-0.35.2 → evo_cli-0.36.0}/tests/test_storage.py +0 -0
- {evo_cli-0.35.2 → evo_cli-0.36.0}/tests/test_sysmon.py +0 -0
- {evo_cli-0.35.2 → evo_cli-0.36.0}/tests/test_tts.py +0 -0
- {evo_cli-0.35.2 → evo_cli-0.36.0}/tests/test_update.py +0 -0
- {evo_cli-0.35.2 → evo_cli-0.36.0}/tests/test_wifi.py +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
0.36.0
|
|
@@ -81,6 +81,34 @@ def get(key_path, export_var):
|
|
|
81
81
|
sys.stdout.write("\n")
|
|
82
82
|
|
|
83
83
|
|
|
84
|
+
def _key_paths(node, prefix=""):
|
|
85
|
+
for key, value in node.items():
|
|
86
|
+
path = f"{prefix}.{key}" if prefix else key
|
|
87
|
+
if isinstance(value, dict) and value:
|
|
88
|
+
yield from _key_paths(value, path)
|
|
89
|
+
else:
|
|
90
|
+
yield path
|
|
91
|
+
|
|
92
|
+
|
|
93
|
+
@cred_group.command("keys", help="List dotted key paths in the store, never their values.")
|
|
94
|
+
@click.argument("pattern", required=False)
|
|
95
|
+
@click.option("--json", "as_json", is_flag=True, help="Print the paths as a JSON list.")
|
|
96
|
+
def keys(pattern, as_json):
|
|
97
|
+
flat = _guard(read_flat)
|
|
98
|
+
flat.pop("_generated", None)
|
|
99
|
+
paths = list(_key_paths(flat))
|
|
100
|
+
if pattern:
|
|
101
|
+
paths = [path for path in paths if pattern.lower() in path.lower()]
|
|
102
|
+
if not paths:
|
|
103
|
+
raise click.ClickException(f"no key path contains '{pattern}'")
|
|
104
|
+
|
|
105
|
+
if as_json:
|
|
106
|
+
sys.stdout.write(json.dumps(paths) + "\n")
|
|
107
|
+
return
|
|
108
|
+
for path in paths:
|
|
109
|
+
sys.stdout.write(path + "\n")
|
|
110
|
+
|
|
111
|
+
|
|
84
112
|
@cred_group.command("list", help="List every credential in the store with its health.")
|
|
85
113
|
def list_credentials():
|
|
86
114
|
_guard(require_folder)
|
|
@@ -41,7 +41,7 @@ def _write(store, rel, entry):
|
|
|
41
41
|
|
|
42
42
|
def test_cred_command_is_registered():
|
|
43
43
|
assert "cred" in cli.commands
|
|
44
|
-
for name in ("get", "list", "doctor", "compile", "add", "auth", "refresh", "migrate", "sync", "path"):
|
|
44
|
+
for name in ("get", "keys", "list", "doctor", "compile", "add", "auth", "refresh", "migrate", "sync", "path"):
|
|
45
45
|
assert name in cli.commands["cred"].commands
|
|
46
46
|
assert set(cli.commands["cred"].commands["sync"].commands) == {"push", "pull"}
|
|
47
47
|
|
|
@@ -113,6 +113,54 @@ def test_get_command_missing_key_fails(store):
|
|
|
113
113
|
assert "key not found: nope.deeper" in result.output
|
|
114
114
|
|
|
115
115
|
|
|
116
|
+
def _write_secrets(store):
|
|
117
|
+
_write(store, "ai/openai.json", {"id": "openai", "flat": {"openai_api_key": "sk-live-123"}})
|
|
118
|
+
_write(
|
|
119
|
+
store,
|
|
120
|
+
"net/mikrotik.json",
|
|
121
|
+
{"id": "mikrotik", "flat": {"ialab_network": {"username": "admin-user", "password": "pw-456"}}},
|
|
122
|
+
)
|
|
123
|
+
compile_flat()
|
|
124
|
+
|
|
125
|
+
|
|
126
|
+
def test_keys_lists_every_path_and_no_value(store):
|
|
127
|
+
_write_secrets(store)
|
|
128
|
+
|
|
129
|
+
result = CliRunner().invoke(cli, ["cred", "keys"])
|
|
130
|
+
|
|
131
|
+
assert result.exit_code == 0
|
|
132
|
+
assert result.output.split() == ["openai_api_key", "ialab_network.username", "ialab_network.password"]
|
|
133
|
+
for value in ("sk-live-123", "admin-user", "pw-456"):
|
|
134
|
+
assert value not in result.output
|
|
135
|
+
|
|
136
|
+
|
|
137
|
+
def test_keys_filters_case_insensitively(store):
|
|
138
|
+
_write_secrets(store)
|
|
139
|
+
|
|
140
|
+
result = CliRunner().invoke(cli, ["cred", "keys", "NETWORK"])
|
|
141
|
+
|
|
142
|
+
assert result.exit_code == 0
|
|
143
|
+
assert result.output == "ialab_network.username\nialab_network.password\n"
|
|
144
|
+
|
|
145
|
+
|
|
146
|
+
def test_keys_json_form(store):
|
|
147
|
+
_write_secrets(store)
|
|
148
|
+
|
|
149
|
+
result = CliRunner().invoke(cli, ["cred", "keys", "openai", "--json"])
|
|
150
|
+
|
|
151
|
+
assert result.exit_code == 0
|
|
152
|
+
assert json.loads(result.output) == ["openai_api_key"]
|
|
153
|
+
|
|
154
|
+
|
|
155
|
+
def test_keys_no_match_fails(store):
|
|
156
|
+
_write_secrets(store)
|
|
157
|
+
|
|
158
|
+
result = CliRunner().invoke(cli, ["cred", "keys", "nothing-like-this"])
|
|
159
|
+
|
|
160
|
+
assert result.exit_code != 0
|
|
161
|
+
assert "no key path contains 'nothing-like-this'" in result.output
|
|
162
|
+
|
|
163
|
+
|
|
116
164
|
def test_set_value_routes_known_key_to_its_spec_file(store):
|
|
117
165
|
path, existed = set_value("openai_api_key", "sk-new")
|
|
118
166
|
|
evo_cli-0.35.2/evo_cli/VERSION
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
0.35.2
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|