openrunner-sdk 2.14.2__tar.gz → 2.14.4__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.
- {openrunner_sdk-2.14.2 → openrunner_sdk-2.14.4}/PKG-INFO +1 -1
- {openrunner_sdk-2.14.2 → openrunner_sdk-2.14.4}/openrunner/__init__.py +1 -1
- {openrunner_sdk-2.14.2 → openrunner_sdk-2.14.4}/openrunner/install_commands.py +41 -52
- {openrunner_sdk-2.14.2 → openrunner_sdk-2.14.4}/pyproject.toml +1 -1
- {openrunner_sdk-2.14.2 → openrunner_sdk-2.14.4}/.gitignore +0 -0
- {openrunner_sdk-2.14.2 → openrunner_sdk-2.14.4}/=6.0 +0 -0
- {openrunner_sdk-2.14.2 → openrunner_sdk-2.14.4}/=8.1 +0 -0
- {openrunner_sdk-2.14.2 → openrunner_sdk-2.14.4}/README.md +0 -0
- {openrunner_sdk-2.14.2 → openrunner_sdk-2.14.4}/openrunner/api_client.py +0 -0
- {openrunner_sdk-2.14.2 → openrunner_sdk-2.14.4}/openrunner/artifact.py +0 -0
- {openrunner_sdk-2.14.2 → openrunner_sdk-2.14.4}/openrunner/buffer.py +0 -0
- {openrunner_sdk-2.14.2 → openrunner_sdk-2.14.4}/openrunner/cache.py +0 -0
- {openrunner_sdk-2.14.2 → openrunner_sdk-2.14.4}/openrunner/cli.py +0 -0
- {openrunner_sdk-2.14.2 → openrunner_sdk-2.14.4}/openrunner/config.py +0 -0
- {openrunner_sdk-2.14.2 → openrunner_sdk-2.14.4}/openrunner/cost.py +0 -0
- {openrunner_sdk-2.14.2 → openrunner_sdk-2.14.4}/openrunner/dataset.py +0 -0
- {openrunner_sdk-2.14.2 → openrunner_sdk-2.14.4}/openrunner/environment.py +0 -0
- {openrunner_sdk-2.14.2 → openrunner_sdk-2.14.4}/openrunner/evaluation.py +0 -0
- {openrunner_sdk-2.14.2 → openrunner_sdk-2.14.4}/openrunner/feedback.py +0 -0
- {openrunner_sdk-2.14.2 → openrunner_sdk-2.14.4}/openrunner/git_info.py +0 -0
- {openrunner_sdk-2.14.2 → openrunner_sdk-2.14.4}/openrunner/guardrails.py +0 -0
- {openrunner_sdk-2.14.2 → openrunner_sdk-2.14.4}/openrunner/integration/__init__.py +0 -0
- {openrunner_sdk-2.14.2 → openrunner_sdk-2.14.4}/openrunner/integration/accelerate.py +0 -0
- {openrunner_sdk-2.14.2 → openrunner_sdk-2.14.4}/openrunner/integration/anthropic_tracer.py +0 -0
- {openrunner_sdk-2.14.2 → openrunner_sdk-2.14.4}/openrunner/integration/catboost.py +0 -0
- {openrunner_sdk-2.14.2 → openrunner_sdk-2.14.4}/openrunner/integration/diffusers.py +0 -0
- {openrunner_sdk-2.14.2 → openrunner_sdk-2.14.4}/openrunner/integration/fastai.py +0 -0
- {openrunner_sdk-2.14.2 → openrunner_sdk-2.14.4}/openrunner/integration/forced_alignment.py +0 -0
- {openrunner_sdk-2.14.2 → openrunner_sdk-2.14.4}/openrunner/integration/gladia.py +0 -0
- {openrunner_sdk-2.14.2 → openrunner_sdk-2.14.4}/openrunner/integration/gymnasium.py +0 -0
- {openrunner_sdk-2.14.2 → openrunner_sdk-2.14.4}/openrunner/integration/huggingface.py +0 -0
- {openrunner_sdk-2.14.2 → openrunner_sdk-2.14.4}/openrunner/integration/hydra.py +0 -0
- {openrunner_sdk-2.14.2 → openrunner_sdk-2.14.4}/openrunner/integration/ignite.py +0 -0
- {openrunner_sdk-2.14.2 → openrunner_sdk-2.14.4}/openrunner/integration/jax.py +0 -0
- {openrunner_sdk-2.14.2 → openrunner_sdk-2.14.4}/openrunner/integration/keras.py +0 -0
- {openrunner_sdk-2.14.2 → openrunner_sdk-2.14.4}/openrunner/integration/langchain.py +0 -0
- {openrunner_sdk-2.14.2 → openrunner_sdk-2.14.4}/openrunner/integration/lightgbm.py +0 -0
- {openrunner_sdk-2.14.2 → openrunner_sdk-2.14.4}/openrunner/integration/lightning.py +0 -0
- {openrunner_sdk-2.14.2 → openrunner_sdk-2.14.4}/openrunner/integration/llamaindex.py +0 -0
- {openrunner_sdk-2.14.2 → openrunner_sdk-2.14.4}/openrunner/integration/openai_finetune.py +0 -0
- {openrunner_sdk-2.14.2 → openrunner_sdk-2.14.4}/openrunner/integration/openai_tracer.py +0 -0
- {openrunner_sdk-2.14.2 → openrunner_sdk-2.14.4}/openrunner/integration/optuna.py +0 -0
- {openrunner_sdk-2.14.2 → openrunner_sdk-2.14.4}/openrunner/integration/pytorch.py +0 -0
- {openrunner_sdk-2.14.2 → openrunner_sdk-2.14.4}/openrunner/integration/sb3.py +0 -0
- {openrunner_sdk-2.14.2 → openrunner_sdk-2.14.4}/openrunner/integration/sklearn.py +0 -0
- {openrunner_sdk-2.14.2 → openrunner_sdk-2.14.4}/openrunner/integration/tensorflow.py +0 -0
- {openrunner_sdk-2.14.2 → openrunner_sdk-2.14.4}/openrunner/integration/trl.py +0 -0
- {openrunner_sdk-2.14.2 → openrunner_sdk-2.14.4}/openrunner/integration/tts.py +0 -0
- {openrunner_sdk-2.14.2 → openrunner_sdk-2.14.4}/openrunner/integration/ultralytics.py +0 -0
- {openrunner_sdk-2.14.2 → openrunner_sdk-2.14.4}/openrunner/integration/voice_agent.py +0 -0
- {openrunner_sdk-2.14.2 → openrunner_sdk-2.14.4}/openrunner/integration/whisper.py +0 -0
- {openrunner_sdk-2.14.2 → openrunner_sdk-2.14.4}/openrunner/integration/xgboost.py +0 -0
- {openrunner_sdk-2.14.2 → openrunner_sdk-2.14.4}/openrunner/launch.py +0 -0
- {openrunner_sdk-2.14.2 → openrunner_sdk-2.14.4}/openrunner/media.py +0 -0
- {openrunner_sdk-2.14.2 → openrunner_sdk-2.14.4}/openrunner/migrate.py +0 -0
- {openrunner_sdk-2.14.2 → openrunner_sdk-2.14.4}/openrunner/model.py +0 -0
- {openrunner_sdk-2.14.2 → openrunner_sdk-2.14.4}/openrunner/offline.py +0 -0
- {openrunner_sdk-2.14.2 → openrunner_sdk-2.14.4}/openrunner/pii.py +0 -0
- {openrunner_sdk-2.14.2 → openrunner_sdk-2.14.4}/openrunner/plot.py +0 -0
- {openrunner_sdk-2.14.2 → openrunner_sdk-2.14.4}/openrunner/prompt.py +0 -0
- {openrunner_sdk-2.14.2 → openrunner_sdk-2.14.4}/openrunner/query_api.py +0 -0
- {openrunner_sdk-2.14.2 → openrunner_sdk-2.14.4}/openrunner/redact.py +0 -0
- {openrunner_sdk-2.14.2 → openrunner_sdk-2.14.4}/openrunner/run.py +0 -0
- {openrunner_sdk-2.14.2 → openrunner_sdk-2.14.4}/openrunner/scorers.py +0 -0
- {openrunner_sdk-2.14.2 → openrunner_sdk-2.14.4}/openrunner/sender.py +0 -0
- {openrunner_sdk-2.14.2 → openrunner_sdk-2.14.4}/openrunner/session.py +0 -0
- {openrunner_sdk-2.14.2 → openrunner_sdk-2.14.4}/openrunner/settings.py +0 -0
- {openrunner_sdk-2.14.2 → openrunner_sdk-2.14.4}/openrunner/summary.py +0 -0
- {openrunner_sdk-2.14.2 → openrunner_sdk-2.14.4}/openrunner/sweep.py +0 -0
- {openrunner_sdk-2.14.2 → openrunner_sdk-2.14.4}/openrunner/system_metrics.py +0 -0
- {openrunner_sdk-2.14.2 → openrunner_sdk-2.14.4}/openrunner/tensorboard.py +0 -0
- {openrunner_sdk-2.14.2 → openrunner_sdk-2.14.4}/openrunner/trace.py +0 -0
- {openrunner_sdk-2.14.2 → openrunner_sdk-2.14.4}/openrunner/transcript_formatter.py +0 -0
- {openrunner_sdk-2.14.2 → openrunner_sdk-2.14.4}/openrunner/wal.py +0 -0
- {openrunner_sdk-2.14.2 → openrunner_sdk-2.14.4}/openrunner/wandb_compat/__init__.py +0 -0
- {openrunner_sdk-2.14.2 → openrunner_sdk-2.14.4}/openrunner/wandb_compat/_shim.py +0 -0
- {openrunner_sdk-2.14.2 → openrunner_sdk-2.14.4}/openrunner/wer.py +0 -0
- {openrunner_sdk-2.14.2 → openrunner_sdk-2.14.4}/tests/__init__.py +0 -0
- {openrunner_sdk-2.14.2 → openrunner_sdk-2.14.4}/tests/conftest.py +0 -0
- {openrunner_sdk-2.14.2 → openrunner_sdk-2.14.4}/tests/test_alert.py +0 -0
- {openrunner_sdk-2.14.2 → openrunner_sdk-2.14.4}/tests/test_aliases.py +0 -0
- {openrunner_sdk-2.14.2 → openrunner_sdk-2.14.4}/tests/test_api_client.py +0 -0
- {openrunner_sdk-2.14.2 → openrunner_sdk-2.14.4}/tests/test_artifact.py +0 -0
- {openrunner_sdk-2.14.2 → openrunner_sdk-2.14.4}/tests/test_buffer.py +0 -0
- {openrunner_sdk-2.14.2 → openrunner_sdk-2.14.4}/tests/test_cache.py +0 -0
- {openrunner_sdk-2.14.2 → openrunner_sdk-2.14.4}/tests/test_class_scorers.py +0 -0
- {openrunner_sdk-2.14.2 → openrunner_sdk-2.14.4}/tests/test_cli.py +0 -0
- {openrunner_sdk-2.14.2 → openrunner_sdk-2.14.4}/tests/test_config.py +0 -0
- {openrunner_sdk-2.14.2 → openrunner_sdk-2.14.4}/tests/test_evaluation.py +0 -0
- {openrunner_sdk-2.14.2 → openrunner_sdk-2.14.4}/tests/test_finish.py +0 -0
- {openrunner_sdk-2.14.2 → openrunner_sdk-2.14.4}/tests/test_git_info.py +0 -0
- {openrunner_sdk-2.14.2 → openrunner_sdk-2.14.4}/tests/test_init.py +0 -0
- {openrunner_sdk-2.14.2 → openrunner_sdk-2.14.4}/tests/test_integration_fastai.py +0 -0
- {openrunner_sdk-2.14.2 → openrunner_sdk-2.14.4}/tests/test_integration_huggingface.py +0 -0
- {openrunner_sdk-2.14.2 → openrunner_sdk-2.14.4}/tests/test_integration_keras.py +0 -0
- {openrunner_sdk-2.14.2 → openrunner_sdk-2.14.4}/tests/test_integration_langchain.py +0 -0
- {openrunner_sdk-2.14.2 → openrunner_sdk-2.14.4}/tests/test_integration_lightning.py +0 -0
- {openrunner_sdk-2.14.2 → openrunner_sdk-2.14.4}/tests/test_integration_pytorch.py +0 -0
- {openrunner_sdk-2.14.2 → openrunner_sdk-2.14.4}/tests/test_integration_sklearn.py +0 -0
- {openrunner_sdk-2.14.2 → openrunner_sdk-2.14.4}/tests/test_integration_xgboost.py +0 -0
- {openrunner_sdk-2.14.2 → openrunner_sdk-2.14.4}/tests/test_launch.py +0 -0
- {openrunner_sdk-2.14.2 → openrunner_sdk-2.14.4}/tests/test_log.py +0 -0
- {openrunner_sdk-2.14.2 → openrunner_sdk-2.14.4}/tests/test_log_code.py +0 -0
- {openrunner_sdk-2.14.2 → openrunner_sdk-2.14.4}/tests/test_media.py +0 -0
- {openrunner_sdk-2.14.2 → openrunner_sdk-2.14.4}/tests/test_migrate.py +0 -0
- {openrunner_sdk-2.14.2 → openrunner_sdk-2.14.4}/tests/test_offline.py +0 -0
- {openrunner_sdk-2.14.2 → openrunner_sdk-2.14.4}/tests/test_offline_sync.py +0 -0
- {openrunner_sdk-2.14.2 → openrunner_sdk-2.14.4}/tests/test_pii.py +0 -0
- {openrunner_sdk-2.14.2 → openrunner_sdk-2.14.4}/tests/test_plot.py +0 -0
- {openrunner_sdk-2.14.2 → openrunner_sdk-2.14.4}/tests/test_query_api.py +0 -0
- {openrunner_sdk-2.14.2 → openrunner_sdk-2.14.4}/tests/test_resume.py +0 -0
- {openrunner_sdk-2.14.2 → openrunner_sdk-2.14.4}/tests/test_sdk_features.py +0 -0
- {openrunner_sdk-2.14.2 → openrunner_sdk-2.14.4}/tests/test_sender.py +0 -0
- {openrunner_sdk-2.14.2 → openrunner_sdk-2.14.4}/tests/test_summary.py +0 -0
- {openrunner_sdk-2.14.2 → openrunner_sdk-2.14.4}/tests/test_sweep.py +0 -0
- {openrunner_sdk-2.14.2 → openrunner_sdk-2.14.4}/tests/test_system_metrics.py +0 -0
- {openrunner_sdk-2.14.2 → openrunner_sdk-2.14.4}/tests/test_trace.py +0 -0
- {openrunner_sdk-2.14.2 → openrunner_sdk-2.14.4}/tests/test_wandb_compat.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: openrunner-sdk
|
|
3
|
-
Version: 2.14.
|
|
3
|
+
Version: 2.14.4
|
|
4
4
|
Summary: OpenRunner SDK - W&B-compatible ML experiment tracking client
|
|
5
5
|
Project-URL: Homepage, https://github.com/jqueguiner/openrunner
|
|
6
6
|
Project-URL: Repository, https://github.com/jqueguiner/openrunner
|
|
@@ -120,7 +120,7 @@ launch.from_run = _launch_from_run # type: ignore[attr-defined]
|
|
|
120
120
|
# openrunner.trace.patch_openai() syntax
|
|
121
121
|
trace.patch_openai = _patch_openai # type: ignore[attr-defined]
|
|
122
122
|
|
|
123
|
-
__version__ = "2.14.
|
|
123
|
+
__version__ = "2.14.4"
|
|
124
124
|
|
|
125
125
|
logger = logging.getLogger("openrunner")
|
|
126
126
|
|
|
@@ -103,7 +103,8 @@ run_id = sync_session_to_openrunner(parsed, project=project_override)
|
|
|
103
103
|
if run_id:
|
|
104
104
|
config = get_session_config()
|
|
105
105
|
base = config.get('base_url', '')
|
|
106
|
-
|
|
106
|
+
project = project_override or config.get('project', '')
|
|
107
|
+
print(f'Synced -> {{base}}/{{project}}/ai-sessions/{{run_id}}')
|
|
107
108
|
else:
|
|
108
109
|
print('Sync failed. Run: openrunner session setup')
|
|
109
110
|
"
|
|
@@ -288,79 +289,67 @@ allowed-tools:
|
|
|
288
289
|
- Bash
|
|
289
290
|
- AskUserQuestion
|
|
290
291
|
---
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
292
|
+
<objective>
|
|
293
|
+
Authenticate the user with their OpenRunner instance. Get their server URL and API key configured in ~/.openrunner/settings.json.
|
|
294
|
+
</objective>
|
|
295
|
+
|
|
296
|
+
<process>
|
|
297
|
+
1. Check current auth state by reading ~/.openrunner/settings.json
|
|
298
|
+
2. If no base_url configured, ask the user: "What is your OpenRunner server URL? (e.g. https://openrun.example.com)"
|
|
299
|
+
3. Once you have the base_url, initiate the browser login flow by running the script below (replace BASE_URL with actual URL)
|
|
300
|
+
4. If browser flow succeeds (prints SUCCESS), confirm to user they're logged in
|
|
301
|
+
5. If it times out or fails, ask user to paste their API key manually (from their OpenRunner Settings page)
|
|
302
|
+
6. Save the final config to ~/.openrunner/settings.json
|
|
303
|
+
|
|
304
|
+
IMPORTANT: You MUST ask the user for their server URL before proceeding. Do NOT assume or hardcode any URL.
|
|
305
|
+
</process>
|
|
306
|
+
|
|
307
|
+
Check auth state:
|
|
296
308
|
```bash
|
|
297
309
|
python3 -c "
|
|
298
|
-
import json
|
|
299
|
-
from pathlib import Path
|
|
310
|
+
import json; from pathlib import Path
|
|
300
311
|
f = Path.home() / '.openrunner' / 'settings.json'
|
|
301
312
|
if f.exists():
|
|
302
313
|
s = json.loads(f.read_text())
|
|
303
|
-
|
|
304
|
-
print(f'LOGGED_IN base_url={{s[\"base_url\"]}}')
|
|
305
|
-
elif s.get('base_url'):
|
|
306
|
-
print(f'NEED_KEY base_url={{s[\"base_url\"]}}')
|
|
307
|
-
else:
|
|
308
|
-
print('NEED_SETUP')
|
|
314
|
+
print(f'base_url={{s.get(\"base_url\",\"\")}} api_key={{\"set\" if s.get(\"api_key\") else \"missing\"}}')
|
|
309
315
|
else:
|
|
310
|
-
print('
|
|
316
|
+
print('base_url= api_key=missing')
|
|
311
317
|
"
|
|
312
318
|
```
|
|
313
319
|
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
Use AskUserQuestion: "What is your OpenRunner server URL?" (e.g. https://your-instance.example.com)
|
|
317
|
-
|
|
318
|
-
### Step 3: Initiate browser login
|
|
319
|
-
|
|
320
|
-
Replace BASE_URL below with the user's answer (or saved base_url from step 1):
|
|
321
|
-
|
|
320
|
+
After getting BASE_URL from user, run browser login:
|
|
322
321
|
```bash
|
|
323
322
|
python3 -c "
|
|
324
|
-
import sys, os, json, time
|
|
325
|
-
from pathlib import Path
|
|
323
|
+
import sys, os, json, time; from pathlib import Path
|
|
326
324
|
for p in [os.path.expanduser(f'~/.local/lib/python3.{{v}}/site-packages') for v in (12,11,10)]:
|
|
327
325
|
if os.path.isdir(p): sys.path.insert(0, p)
|
|
328
326
|
import httpx
|
|
329
|
-
|
|
330
327
|
base_url = 'BASE_URL'
|
|
331
328
|
resp = httpx.post(f'{{base_url}}/api/v1/auth/cli/initiate', json={{'expiry_days': 90}}, timeout=10)
|
|
332
|
-
data = resp.json()
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
print(f'Open this URL to approve: {{auth_url}}')
|
|
336
|
-
|
|
337
|
-
import webbrowser
|
|
338
|
-
webbrowser.open(auth_url)
|
|
339
|
-
|
|
340
|
-
print('Waiting for browser approval...')
|
|
329
|
+
data = resp.json(); code = data['code']; auth_url = data['url']
|
|
330
|
+
print(f'APPROVE_URL={{auth_url}}')
|
|
331
|
+
import webbrowser; webbrowser.open(auth_url)
|
|
341
332
|
for i in range(60):
|
|
342
333
|
time.sleep(2)
|
|
343
|
-
|
|
344
|
-
pd = poll.json()
|
|
334
|
+
pd = httpx.get(f'{{base_url}}/api/v1/auth/cli/poll/{{code}}', timeout=10).json()
|
|
345
335
|
if pd['status'] == 'approved':
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
print(f'SUCCESS: Logged in as {{email}}')
|
|
352
|
-
sys.exit(0)
|
|
353
|
-
elif pd['status'] == 'expired':
|
|
354
|
-
print('EXPIRED')
|
|
355
|
-
sys.exit(1)
|
|
356
|
-
print('TIMEOUT')
|
|
357
|
-
sys.exit(1)
|
|
336
|
+
sf = Path.home() / '.openrunner' / 'settings.json'; sf.parent.mkdir(parents=True, exist_ok=True)
|
|
337
|
+
sf.write_text(json.dumps({{'api_key': pd['api_key'], 'base_url': base_url}}, indent=2))
|
|
338
|
+
print(f'SUCCESS email={{pd.get(\"email\",\"\")}}'); sys.exit(0)
|
|
339
|
+
elif pd['status'] == 'expired': print('EXPIRED'); sys.exit(1)
|
|
340
|
+
print('TIMEOUT'); sys.exit(1)
|
|
358
341
|
"
|
|
359
342
|
```
|
|
360
343
|
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
344
|
+
If browser flow fails, save manual key:
|
|
345
|
+
```bash
|
|
346
|
+
python3 -c "
|
|
347
|
+
import json; from pathlib import Path
|
|
348
|
+
sf = Path.home() / '.openrunner' / 'settings.json'; sf.parent.mkdir(parents=True, exist_ok=True)
|
|
349
|
+
sf.write_text(json.dumps({{'api_key': 'USER_API_KEY', 'base_url': 'BASE_URL'}}, indent=2))
|
|
350
|
+
print('Saved.')
|
|
351
|
+
"
|
|
352
|
+
```
|
|
364
353
|
"""
|
|
365
354
|
|
|
366
355
|
CODE_UPLOAD_CMD = """---
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|