blazefl 2.0.0.dev7__tar.gz → 2.0.0.dev8__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.
- {blazefl-2.0.0.dev7 → blazefl-2.0.0.dev8}/.github/workflows/ci.yaml +11 -2
- {blazefl-2.0.0.dev7 → blazefl-2.0.0.dev8}/.github/workflows/publish.yaml +2 -2
- {blazefl-2.0.0.dev7 → blazefl-2.0.0.dev8}/PKG-INFO +1 -1
- {blazefl-2.0.0.dev7 → blazefl-2.0.0.dev8}/examples/experimental-freethreaded/pyproject.toml +1 -1
- {blazefl-2.0.0.dev7 → blazefl-2.0.0.dev8}/examples/experimental-freethreaded/uv.lock +4 -4
- {blazefl-2.0.0.dev7 → blazefl-2.0.0.dev8}/pyproject.toml +1 -1
- {blazefl-2.0.0.dev7 → blazefl-2.0.0.dev8}/src/blazefl/contrib/fedavg.py +8 -11
- {blazefl-2.0.0.dev7 → blazefl-2.0.0.dev8}/tests/test_contrib/test_fedavg.py +1 -1
- {blazefl-2.0.0.dev7 → blazefl-2.0.0.dev8}/uv.lock +1 -1
- {blazefl-2.0.0.dev7 → blazefl-2.0.0.dev8}/.github/FUNDING.yml +0 -0
- {blazefl-2.0.0.dev7 → blazefl-2.0.0.dev8}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {blazefl-2.0.0.dev7 → blazefl-2.0.0.dev8}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
- {blazefl-2.0.0.dev7 → blazefl-2.0.0.dev8}/.github/dependabot.yml +0 -0
- {blazefl-2.0.0.dev7 → blazefl-2.0.0.dev8}/.github/workflows/sphinx.yaml +0 -0
- {blazefl-2.0.0.dev7 → blazefl-2.0.0.dev8}/.gitignore +0 -0
- {blazefl-2.0.0.dev7 → blazefl-2.0.0.dev8}/.pre-commit-config.yaml +0 -0
- {blazefl-2.0.0.dev7 → blazefl-2.0.0.dev8}/.python-version +0 -0
- {blazefl-2.0.0.dev7 → blazefl-2.0.0.dev8}/CODE_OF_CONDUCT.md +0 -0
- {blazefl-2.0.0.dev7 → blazefl-2.0.0.dev8}/LICENSE +0 -0
- {blazefl-2.0.0.dev7 → blazefl-2.0.0.dev8}/Makefile +0 -0
- {blazefl-2.0.0.dev7 → blazefl-2.0.0.dev8}/README.md +0 -0
- {blazefl-2.0.0.dev7 → blazefl-2.0.0.dev8}/docs/Makefile +0 -0
- {blazefl-2.0.0.dev7 → blazefl-2.0.0.dev8}/docs/imgs/architecture.png +0 -0
- {blazefl-2.0.0.dev7 → blazefl-2.0.0.dev8}/docs/imgs/benchmark_cnn.png +0 -0
- {blazefl-2.0.0.dev7 → blazefl-2.0.0.dev8}/docs/imgs/benchmark_resnet18.png +0 -0
- {blazefl-2.0.0.dev7 → blazefl-2.0.0.dev8}/docs/imgs/logo.svg +0 -0
- {blazefl-2.0.0.dev7 → blazefl-2.0.0.dev8}/docs/imgs/logo_square.svg +0 -0
- {blazefl-2.0.0.dev7 → blazefl-2.0.0.dev8}/docs/imgs/ogp.png +0 -0
- {blazefl-2.0.0.dev7 → blazefl-2.0.0.dev8}/docs/make.bat +0 -0
- {blazefl-2.0.0.dev7 → blazefl-2.0.0.dev8}/docs/source/_static/favicon.ico +0 -0
- {blazefl-2.0.0.dev7 → blazefl-2.0.0.dev8}/docs/source/_static/logo.png +0 -0
- {blazefl-2.0.0.dev7 → blazefl-2.0.0.dev8}/docs/source/_static/logo_square.png +0 -0
- {blazefl-2.0.0.dev7 → blazefl-2.0.0.dev8}/docs/source/_templates/autosummary/class.rst +0 -0
- {blazefl-2.0.0.dev7 → blazefl-2.0.0.dev8}/docs/source/_templates/autosummary/module.rst +0 -0
- {blazefl-2.0.0.dev7 → blazefl-2.0.0.dev8}/docs/source/benchmark.rst +0 -0
- {blazefl-2.0.0.dev7 → blazefl-2.0.0.dev8}/docs/source/conf.py +0 -0
- {blazefl-2.0.0.dev7 → blazefl-2.0.0.dev8}/docs/source/contribute.rst +0 -0
- {blazefl-2.0.0.dev7 → blazefl-2.0.0.dev8}/docs/source/example.rst +0 -0
- {blazefl-2.0.0.dev7 → blazefl-2.0.0.dev8}/docs/source/index.rst +0 -0
- {blazefl-2.0.0.dev7 → blazefl-2.0.0.dev8}/docs/source/install.rst +0 -0
- {blazefl-2.0.0.dev7 → blazefl-2.0.0.dev8}/docs/source/overview.rst +0 -0
- {blazefl-2.0.0.dev7 → blazefl-2.0.0.dev8}/docs/source/reference.rst +0 -0
- {blazefl-2.0.0.dev7 → blazefl-2.0.0.dev8}/examples/experimental-freethreaded/.gitignore +0 -0
- {blazefl-2.0.0.dev7 → blazefl-2.0.0.dev8}/examples/experimental-freethreaded/.python-version +0 -0
- {blazefl-2.0.0.dev7 → blazefl-2.0.0.dev8}/examples/experimental-freethreaded/Makefile +0 -0
- {blazefl-2.0.0.dev7 → blazefl-2.0.0.dev8}/examples/experimental-freethreaded/README.md +0 -0
- {blazefl-2.0.0.dev7 → blazefl-2.0.0.dev8}/examples/experimental-freethreaded/config/config.yaml +0 -0
- {blazefl-2.0.0.dev7 → blazefl-2.0.0.dev8}/examples/experimental-freethreaded/dataset/__init__.py +0 -0
- {blazefl-2.0.0.dev7 → blazefl-2.0.0.dev8}/examples/experimental-freethreaded/dataset/dataset.py +0 -0
- {blazefl-2.0.0.dev7 → blazefl-2.0.0.dev8}/examples/experimental-freethreaded/dataset/functional.py +0 -0
- {blazefl-2.0.0.dev7 → blazefl-2.0.0.dev8}/examples/experimental-freethreaded/main.py +0 -0
- {blazefl-2.0.0.dev7 → blazefl-2.0.0.dev8}/examples/experimental-freethreaded/models/__init__.py +0 -0
- {blazefl-2.0.0.dev7 → blazefl-2.0.0.dev8}/examples/experimental-freethreaded/models/selector.py +0 -0
- {blazefl-2.0.0.dev7 → blazefl-2.0.0.dev8}/examples/quickstart-fedavg/.gitignore +0 -0
- {blazefl-2.0.0.dev7 → blazefl-2.0.0.dev8}/examples/quickstart-fedavg/.python-version +0 -0
- {blazefl-2.0.0.dev7 → blazefl-2.0.0.dev8}/examples/quickstart-fedavg/Makefile +0 -0
- {blazefl-2.0.0.dev7 → blazefl-2.0.0.dev8}/examples/quickstart-fedavg/README.md +0 -0
- {blazefl-2.0.0.dev7 → blazefl-2.0.0.dev8}/examples/quickstart-fedavg/config/config.yaml +0 -0
- {blazefl-2.0.0.dev7 → blazefl-2.0.0.dev8}/examples/quickstart-fedavg/dataset/__init__.py +0 -0
- {blazefl-2.0.0.dev7 → blazefl-2.0.0.dev8}/examples/quickstart-fedavg/dataset/dataset.py +0 -0
- {blazefl-2.0.0.dev7 → blazefl-2.0.0.dev8}/examples/quickstart-fedavg/dataset/functional.py +0 -0
- {blazefl-2.0.0.dev7 → blazefl-2.0.0.dev8}/examples/quickstart-fedavg/main.py +0 -0
- {blazefl-2.0.0.dev7 → blazefl-2.0.0.dev8}/examples/quickstart-fedavg/models/__init__.py +0 -0
- {blazefl-2.0.0.dev7 → blazefl-2.0.0.dev8}/examples/quickstart-fedavg/models/selector.py +0 -0
- {blazefl-2.0.0.dev7 → blazefl-2.0.0.dev8}/examples/quickstart-fedavg/pyproject.toml +0 -0
- {blazefl-2.0.0.dev7 → blazefl-2.0.0.dev8}/examples/step-by-step-dsfl/.gitignore +0 -0
- {blazefl-2.0.0.dev7 → blazefl-2.0.0.dev8}/examples/step-by-step-dsfl/.python-version +0 -0
- {blazefl-2.0.0.dev7 → blazefl-2.0.0.dev8}/examples/step-by-step-dsfl/Makefile +0 -0
- {blazefl-2.0.0.dev7 → blazefl-2.0.0.dev8}/examples/step-by-step-dsfl/README.md +0 -0
- {blazefl-2.0.0.dev7 → blazefl-2.0.0.dev8}/examples/step-by-step-dsfl/algorithm/__init__.py +0 -0
- {blazefl-2.0.0.dev7 → blazefl-2.0.0.dev8}/examples/step-by-step-dsfl/algorithm/dsfl.py +0 -0
- {blazefl-2.0.0.dev7 → blazefl-2.0.0.dev8}/examples/step-by-step-dsfl/config/algorithm/dsfl.yaml +0 -0
- {blazefl-2.0.0.dev7 → blazefl-2.0.0.dev8}/examples/step-by-step-dsfl/config/config.yaml +0 -0
- {blazefl-2.0.0.dev7 → blazefl-2.0.0.dev8}/examples/step-by-step-dsfl/dataset/__init__.py +0 -0
- {blazefl-2.0.0.dev7 → blazefl-2.0.0.dev8}/examples/step-by-step-dsfl/dataset/dataset.py +0 -0
- {blazefl-2.0.0.dev7 → blazefl-2.0.0.dev8}/examples/step-by-step-dsfl/dataset/functional.py +0 -0
- {blazefl-2.0.0.dev7 → blazefl-2.0.0.dev8}/examples/step-by-step-dsfl/main.py +0 -0
- {blazefl-2.0.0.dev7 → blazefl-2.0.0.dev8}/examples/step-by-step-dsfl/models/__init__.py +0 -0
- {blazefl-2.0.0.dev7 → blazefl-2.0.0.dev8}/examples/step-by-step-dsfl/models/cnn.py +0 -0
- {blazefl-2.0.0.dev7 → blazefl-2.0.0.dev8}/examples/step-by-step-dsfl/models/selector.py +0 -0
- {blazefl-2.0.0.dev7 → blazefl-2.0.0.dev8}/examples/step-by-step-dsfl/pyproject.toml +0 -0
- {blazefl-2.0.0.dev7 → blazefl-2.0.0.dev8}/src/blazefl/__init__.py +0 -0
- {blazefl-2.0.0.dev7 → blazefl-2.0.0.dev8}/src/blazefl/contrib/__init__.py +0 -0
- {blazefl-2.0.0.dev7 → blazefl-2.0.0.dev8}/src/blazefl/core/__init__.py +0 -0
- {blazefl-2.0.0.dev7 → blazefl-2.0.0.dev8}/src/blazefl/core/__init__.pyi +0 -0
- {blazefl-2.0.0.dev7 → blazefl-2.0.0.dev8}/src/blazefl/core/client_trainer.py +0 -0
- {blazefl-2.0.0.dev7 → blazefl-2.0.0.dev8}/src/blazefl/core/client_trainer.pyi +0 -0
- {blazefl-2.0.0.dev7 → blazefl-2.0.0.dev8}/src/blazefl/core/model_selector.py +0 -0
- {blazefl-2.0.0.dev7 → blazefl-2.0.0.dev8}/src/blazefl/core/model_selector.pyi +0 -0
- {blazefl-2.0.0.dev7 → blazefl-2.0.0.dev8}/src/blazefl/core/partitioned_dataset.py +0 -0
- {blazefl-2.0.0.dev7 → blazefl-2.0.0.dev8}/src/blazefl/core/partitioned_dataset.pyi +0 -0
- {blazefl-2.0.0.dev7 → blazefl-2.0.0.dev8}/src/blazefl/core/server_handler.py +0 -0
- {blazefl-2.0.0.dev7 → blazefl-2.0.0.dev8}/src/blazefl/core/server_handler.pyi +0 -0
- {blazefl-2.0.0.dev7 → blazefl-2.0.0.dev8}/src/blazefl/py.typed +0 -0
- {blazefl-2.0.0.dev7 → blazefl-2.0.0.dev8}/src/blazefl/utils/__init__.py +0 -0
- {blazefl-2.0.0.dev7 → blazefl-2.0.0.dev8}/src/blazefl/utils/__init__.pyi +0 -0
- {blazefl-2.0.0.dev7 → blazefl-2.0.0.dev8}/src/blazefl/utils/dataset.py +0 -0
- {blazefl-2.0.0.dev7 → blazefl-2.0.0.dev8}/src/blazefl/utils/dataset.pyi +0 -0
- {blazefl-2.0.0.dev7 → blazefl-2.0.0.dev8}/src/blazefl/utils/ipc.py +0 -0
- {blazefl-2.0.0.dev7 → blazefl-2.0.0.dev8}/src/blazefl/utils/ipc.pyi +0 -0
- {blazefl-2.0.0.dev7 → blazefl-2.0.0.dev8}/src/blazefl/utils/seed.py +0 -0
- {blazefl-2.0.0.dev7 → blazefl-2.0.0.dev8}/src/blazefl/utils/seed.pyi +0 -0
- {blazefl-2.0.0.dev7 → blazefl-2.0.0.dev8}/src/blazefl/utils/serialize.py +0 -0
- {blazefl-2.0.0.dev7 → blazefl-2.0.0.dev8}/src/blazefl/utils/serialize.pyi +0 -0
- {blazefl-2.0.0.dev7 → blazefl-2.0.0.dev8}/tests/__init__.py +0 -0
- {blazefl-2.0.0.dev7 → blazefl-2.0.0.dev8}/tests/conftest.py +0 -0
- {blazefl-2.0.0.dev7 → blazefl-2.0.0.dev8}/tests/test_contrib/__init__.py +0 -0
- {blazefl-2.0.0.dev7 → blazefl-2.0.0.dev8}/tests/test_core/__init__.py +0 -0
- {blazefl-2.0.0.dev7 → blazefl-2.0.0.dev8}/tests/test_core/test_client_trainer.py +0 -0
- {blazefl-2.0.0.dev7 → blazefl-2.0.0.dev8}/tests/test_core/test_model_selector.py +0 -0
- {blazefl-2.0.0.dev7 → blazefl-2.0.0.dev8}/tests/test_core/test_partitioned_dataset.py +0 -0
- {blazefl-2.0.0.dev7 → blazefl-2.0.0.dev8}/tests/test_utils/__init__.py +0 -0
- {blazefl-2.0.0.dev7 → blazefl-2.0.0.dev8}/tests/test_utils/test_dataset.py +0 -0
- {blazefl-2.0.0.dev7 → blazefl-2.0.0.dev8}/tests/test_utils/test_seed.py +0 -0
- {blazefl-2.0.0.dev7 → blazefl-2.0.0.dev8}/tests/test_utils/test_serialize.py +0 -0
|
@@ -11,7 +11,6 @@ on:
|
|
|
11
11
|
push:
|
|
12
12
|
branches:
|
|
13
13
|
- main
|
|
14
|
-
- develop
|
|
15
14
|
|
|
16
15
|
jobs:
|
|
17
16
|
run:
|
|
@@ -39,4 +38,14 @@ jobs:
|
|
|
39
38
|
run: uv run mypy src
|
|
40
39
|
|
|
41
40
|
- name: Run pytest
|
|
42
|
-
run: uv run pytest tests
|
|
41
|
+
run: uv run pytest tests --junitxml=pytest.xml
|
|
42
|
+
continue-on-error: true
|
|
43
|
+
|
|
44
|
+
- name: Upload pytest results
|
|
45
|
+
if: ${{ always() }}
|
|
46
|
+
uses: actions/upload-artifact@v4
|
|
47
|
+
with:
|
|
48
|
+
name: pytest-results
|
|
49
|
+
path: pytest.xml
|
|
50
|
+
|
|
51
|
+
|
|
@@ -10,16 +10,16 @@ sdist = { url = "https://files.pythonhosted.org/packages/3e/38/7859ff46355f76f8d
|
|
|
10
10
|
|
|
11
11
|
[[package]]
|
|
12
12
|
name = "blazefl"
|
|
13
|
-
version = "2.0.0.
|
|
13
|
+
version = "2.0.0.dev7"
|
|
14
14
|
source = { registry = "https://pypi.org/simple" }
|
|
15
15
|
dependencies = [
|
|
16
16
|
{ name = "numpy" },
|
|
17
17
|
{ name = "torch" },
|
|
18
18
|
{ name = "tqdm" },
|
|
19
19
|
]
|
|
20
|
-
sdist = { url = "https://files.pythonhosted.org/packages/
|
|
20
|
+
sdist = { url = "https://files.pythonhosted.org/packages/ae/30/2dc1c42d2b1c2ff7742fa37e77a4c08e0afe2a1170078a3364d5e9bce153/blazefl-2.0.0.dev7.tar.gz", hash = "sha256:8b77dc2c3c28ced6ad3c9662ff1eb8ca65175097e68aa97ebd4a74d114088bd9", size = 615335, upload_time = "2025-06-19T14:39:33.54Z" }
|
|
21
21
|
wheels = [
|
|
22
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
22
|
+
{ url = "https://files.pythonhosted.org/packages/6c/b8/92d9d6b6b9e2e128b7d532ea0a96032adf3da1122e8f35089589368c4484/blazefl-2.0.0.dev7-py3-none-any.whl", hash = "sha256:aa1fe627b6526d7333c33d3b860ca68b796715d8c90aa8387d0f480a67bd64d1", size = 26390, upload_time = "2025-06-19T14:39:32.293Z" },
|
|
23
23
|
]
|
|
24
24
|
|
|
25
25
|
[[package]]
|
|
@@ -50,7 +50,7 @@ dev = [
|
|
|
50
50
|
|
|
51
51
|
[package.metadata]
|
|
52
52
|
requires-dist = [
|
|
53
|
-
{ name = "blazefl", specifier = ">=2.0.0.
|
|
53
|
+
{ name = "blazefl", specifier = ">=2.0.0.dev7" },
|
|
54
54
|
{ name = "hydra-core", specifier = ">=1.3.2" },
|
|
55
55
|
{ name = "torch", specifier = ">=2.7.1" },
|
|
56
56
|
{ name = "torchvision", specifier = ">=0.22.1" },
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import random
|
|
2
2
|
import threading
|
|
3
|
-
from copy import deepcopy
|
|
4
3
|
from dataclasses import dataclass
|
|
5
4
|
from enum import StrEnum
|
|
6
5
|
from pathlib import Path
|
|
@@ -195,13 +194,11 @@ class FedAvgBaseServerHandler(
|
|
|
195
194
|
Returns:
|
|
196
195
|
torch.Tensor: Aggregated model parameters.
|
|
197
196
|
"""
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
return serialized_parameters
|
|
197
|
+
total_weight = sum(weights_list)
|
|
198
|
+
aggregated_parameters = parameters_list[0].clone().zero_()
|
|
199
|
+
for parameters, weight in zip(parameters_list, weights_list, strict=True):
|
|
200
|
+
aggregated_parameters.add_(parameters, alpha=weight / total_weight)
|
|
201
|
+
return aggregated_parameters
|
|
205
202
|
|
|
206
203
|
@staticmethod
|
|
207
204
|
def evaluate(
|
|
@@ -433,7 +430,7 @@ class FedAvgBaseClientTrainer(
|
|
|
433
430
|
Returns:
|
|
434
431
|
list[FedAvgUplinkPackage]: A list of uplink packages.
|
|
435
432
|
"""
|
|
436
|
-
package =
|
|
433
|
+
package = self.cache
|
|
437
434
|
self.cache = []
|
|
438
435
|
return package
|
|
439
436
|
|
|
@@ -728,7 +725,7 @@ class FedAvgProcessPoolClientTrainer(
|
|
|
728
725
|
Returns:
|
|
729
726
|
list[FedAvgUplinkPackage]: A list of uplink packages.
|
|
730
727
|
"""
|
|
731
|
-
package =
|
|
728
|
+
package = self.cache
|
|
732
729
|
self.cache = []
|
|
733
730
|
return package
|
|
734
731
|
|
|
@@ -845,6 +842,6 @@ class FedAvgThreadPoolClientTrainer(
|
|
|
845
842
|
return FedAvgUplinkPackage(model_parameters, data_size)
|
|
846
843
|
|
|
847
844
|
def uplink_package(self) -> list[FedAvgUplinkPackage]:
|
|
848
|
-
package =
|
|
845
|
+
package = self.cache
|
|
849
846
|
self.cache = []
|
|
850
847
|
return package
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{blazefl-2.0.0.dev7 → blazefl-2.0.0.dev8}/examples/experimental-freethreaded/.python-version
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{blazefl-2.0.0.dev7 → blazefl-2.0.0.dev8}/examples/experimental-freethreaded/config/config.yaml
RENAMED
|
File without changes
|
{blazefl-2.0.0.dev7 → blazefl-2.0.0.dev8}/examples/experimental-freethreaded/dataset/__init__.py
RENAMED
|
File without changes
|
{blazefl-2.0.0.dev7 → blazefl-2.0.0.dev8}/examples/experimental-freethreaded/dataset/dataset.py
RENAMED
|
File without changes
|
{blazefl-2.0.0.dev7 → blazefl-2.0.0.dev8}/examples/experimental-freethreaded/dataset/functional.py
RENAMED
|
File without changes
|
|
File without changes
|
{blazefl-2.0.0.dev7 → blazefl-2.0.0.dev8}/examples/experimental-freethreaded/models/__init__.py
RENAMED
|
File without changes
|
{blazefl-2.0.0.dev7 → blazefl-2.0.0.dev8}/examples/experimental-freethreaded/models/selector.py
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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{blazefl-2.0.0.dev7 → blazefl-2.0.0.dev8}/examples/step-by-step-dsfl/config/algorithm/dsfl.yaml
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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|