sourcecode 0.18.0__tar.gz → 0.19.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.
- {sourcecode-0.18.0 → sourcecode-0.19.0}/PKG-INFO +1 -1
- {sourcecode-0.18.0 → sourcecode-0.19.0}/docs/schema.md +2 -2
- {sourcecode-0.18.0 → sourcecode-0.19.0}/pyproject.toml +1 -1
- {sourcecode-0.18.0 → sourcecode-0.19.0}/src/sourcecode/__init__.py +1 -1
- {sourcecode-0.18.0 → sourcecode-0.19.0}/src/sourcecode/dependency_analyzer.py +4 -0
- {sourcecode-0.18.0 → sourcecode-0.19.0}/src/sourcecode/schema.py +1 -0
- {sourcecode-0.18.0 → sourcecode-0.19.0}/src/sourcecode/serializer.py +1 -0
- {sourcecode-0.18.0 → sourcecode-0.19.0}/tests/test_dependency_analyzer_node_python.py +1 -1
- {sourcecode-0.18.0 → sourcecode-0.19.0}/tests/test_dependency_analyzer_polyglot.py +76 -0
- {sourcecode-0.18.0 → sourcecode-0.19.0}/tests/test_integration_dependencies.py +1 -1
- {sourcecode-0.18.0 → sourcecode-0.19.0}/.gitignore +0 -0
- {sourcecode-0.18.0 → sourcecode-0.19.0}/.ruff.toml +0 -0
- {sourcecode-0.18.0 → sourcecode-0.19.0}/README.md +0 -0
- {sourcecode-0.18.0 → sourcecode-0.19.0}/src/sourcecode/architecture_analyzer.py +0 -0
- {sourcecode-0.18.0 → sourcecode-0.19.0}/src/sourcecode/architecture_summary.py +0 -0
- {sourcecode-0.18.0 → sourcecode-0.19.0}/src/sourcecode/classifier.py +0 -0
- {sourcecode-0.18.0 → sourcecode-0.19.0}/src/sourcecode/cli.py +0 -0
- {sourcecode-0.18.0 → sourcecode-0.19.0}/src/sourcecode/code_notes_analyzer.py +0 -0
- {sourcecode-0.18.0 → sourcecode-0.19.0}/src/sourcecode/coverage_parser.py +0 -0
- {sourcecode-0.18.0 → sourcecode-0.19.0}/src/sourcecode/detectors/__init__.py +0 -0
- {sourcecode-0.18.0 → sourcecode-0.19.0}/src/sourcecode/detectors/base.py +0 -0
- {sourcecode-0.18.0 → sourcecode-0.19.0}/src/sourcecode/detectors/dart.py +0 -0
- {sourcecode-0.18.0 → sourcecode-0.19.0}/src/sourcecode/detectors/dotnet.py +0 -0
- {sourcecode-0.18.0 → sourcecode-0.19.0}/src/sourcecode/detectors/elixir.py +0 -0
- {sourcecode-0.18.0 → sourcecode-0.19.0}/src/sourcecode/detectors/go.py +0 -0
- {sourcecode-0.18.0 → sourcecode-0.19.0}/src/sourcecode/detectors/heuristic.py +0 -0
- {sourcecode-0.18.0 → sourcecode-0.19.0}/src/sourcecode/detectors/java.py +0 -0
- {sourcecode-0.18.0 → sourcecode-0.19.0}/src/sourcecode/detectors/jvm_ext.py +0 -0
- {sourcecode-0.18.0 → sourcecode-0.19.0}/src/sourcecode/detectors/nodejs.py +0 -0
- {sourcecode-0.18.0 → sourcecode-0.19.0}/src/sourcecode/detectors/parsers.py +0 -0
- {sourcecode-0.18.0 → sourcecode-0.19.0}/src/sourcecode/detectors/php.py +0 -0
- {sourcecode-0.18.0 → sourcecode-0.19.0}/src/sourcecode/detectors/project.py +0 -0
- {sourcecode-0.18.0 → sourcecode-0.19.0}/src/sourcecode/detectors/python.py +0 -0
- {sourcecode-0.18.0 → sourcecode-0.19.0}/src/sourcecode/detectors/ruby.py +0 -0
- {sourcecode-0.18.0 → sourcecode-0.19.0}/src/sourcecode/detectors/rust.py +0 -0
- {sourcecode-0.18.0 → sourcecode-0.19.0}/src/sourcecode/detectors/systems.py +0 -0
- {sourcecode-0.18.0 → sourcecode-0.19.0}/src/sourcecode/detectors/terraform.py +0 -0
- {sourcecode-0.18.0 → sourcecode-0.19.0}/src/sourcecode/detectors/tooling.py +0 -0
- {sourcecode-0.18.0 → sourcecode-0.19.0}/src/sourcecode/doc_analyzer.py +0 -0
- {sourcecode-0.18.0 → sourcecode-0.19.0}/src/sourcecode/env_analyzer.py +0 -0
- {sourcecode-0.18.0 → sourcecode-0.19.0}/src/sourcecode/git_analyzer.py +0 -0
- {sourcecode-0.18.0 → sourcecode-0.19.0}/src/sourcecode/graph_analyzer.py +0 -0
- {sourcecode-0.18.0 → sourcecode-0.19.0}/src/sourcecode/metrics_analyzer.py +0 -0
- {sourcecode-0.18.0 → sourcecode-0.19.0}/src/sourcecode/prepare_context.py +0 -0
- {sourcecode-0.18.0 → sourcecode-0.19.0}/src/sourcecode/redactor.py +0 -0
- {sourcecode-0.18.0 → sourcecode-0.19.0}/src/sourcecode/scanner.py +0 -0
- {sourcecode-0.18.0 → sourcecode-0.19.0}/src/sourcecode/semantic_analyzer.py +0 -0
- {sourcecode-0.18.0 → sourcecode-0.19.0}/src/sourcecode/summarizer.py +0 -0
- {sourcecode-0.18.0 → sourcecode-0.19.0}/src/sourcecode/tree_utils.py +0 -0
- {sourcecode-0.18.0 → sourcecode-0.19.0}/src/sourcecode/workspace.py +0 -0
- {sourcecode-0.18.0 → sourcecode-0.19.0}/tests/__init__.py +0 -0
- {sourcecode-0.18.0 → sourcecode-0.19.0}/tests/conftest.py +0 -0
- {sourcecode-0.18.0 → sourcecode-0.19.0}/tests/fixtures/coverage.xml +0 -0
- {sourcecode-0.18.0 → sourcecode-0.19.0}/tests/fixtures/fastapi_app/pyproject.toml +0 -0
- {sourcecode-0.18.0 → sourcecode-0.19.0}/tests/fixtures/fastapi_app/src/main.py +0 -0
- {sourcecode-0.18.0 → sourcecode-0.19.0}/tests/fixtures/go_service/cmd/api/main.go +0 -0
- {sourcecode-0.18.0 → sourcecode-0.19.0}/tests/fixtures/go_service/go.mod +0 -0
- {sourcecode-0.18.0 → sourcecode-0.19.0}/tests/fixtures/jacoco.xml +0 -0
- {sourcecode-0.18.0 → sourcecode-0.19.0}/tests/fixtures/lcov.info +0 -0
- {sourcecode-0.18.0 → sourcecode-0.19.0}/tests/fixtures/nextjs_app/app/page.tsx +0 -0
- {sourcecode-0.18.0 → sourcecode-0.19.0}/tests/fixtures/nextjs_app/package.json +0 -0
- {sourcecode-0.18.0 → sourcecode-0.19.0}/tests/fixtures/nextjs_app/pnpm-lock.yaml +0 -0
- {sourcecode-0.18.0 → sourcecode-0.19.0}/tests/fixtures/pnpm_monorepo/apps/web/app/page.tsx +0 -0
- {sourcecode-0.18.0 → sourcecode-0.19.0}/tests/fixtures/pnpm_monorepo/apps/web/package.json +0 -0
- {sourcecode-0.18.0 → sourcecode-0.19.0}/tests/fixtures/pnpm_monorepo/packages/api/main.py +0 -0
- {sourcecode-0.18.0 → sourcecode-0.19.0}/tests/fixtures/pnpm_monorepo/packages/api/pyproject.toml +0 -0
- {sourcecode-0.18.0 → sourcecode-0.19.0}/tests/fixtures/pnpm_monorepo/pnpm-workspace.yaml +0 -0
- {sourcecode-0.18.0 → sourcecode-0.19.0}/tests/test_architecture_analyzer.py +0 -0
- {sourcecode-0.18.0 → sourcecode-0.19.0}/tests/test_architecture_summary.py +0 -0
- {sourcecode-0.18.0 → sourcecode-0.19.0}/tests/test_classifier.py +0 -0
- {sourcecode-0.18.0 → sourcecode-0.19.0}/tests/test_cli.py +0 -0
- {sourcecode-0.18.0 → sourcecode-0.19.0}/tests/test_code_notes_analyzer.py +0 -0
- {sourcecode-0.18.0 → sourcecode-0.19.0}/tests/test_coverage_parser.py +0 -0
- {sourcecode-0.18.0 → sourcecode-0.19.0}/tests/test_cross_consistency.py +0 -0
- {sourcecode-0.18.0 → sourcecode-0.19.0}/tests/test_dependency_schema.py +0 -0
- {sourcecode-0.18.0 → sourcecode-0.19.0}/tests/test_detector_go_rust_java.py +0 -0
- {sourcecode-0.18.0 → sourcecode-0.19.0}/tests/test_detector_nodejs.py +0 -0
- {sourcecode-0.18.0 → sourcecode-0.19.0}/tests/test_detector_php_ruby_dart.py +0 -0
- {sourcecode-0.18.0 → sourcecode-0.19.0}/tests/test_detector_python.py +0 -0
- {sourcecode-0.18.0 → sourcecode-0.19.0}/tests/test_detector_universal_managed.py +0 -0
- {sourcecode-0.18.0 → sourcecode-0.19.0}/tests/test_detector_universal_systems.py +0 -0
- {sourcecode-0.18.0 → sourcecode-0.19.0}/tests/test_detectors_base.py +0 -0
- {sourcecode-0.18.0 → sourcecode-0.19.0}/tests/test_doc_analyzer_jsdom.py +0 -0
- {sourcecode-0.18.0 → sourcecode-0.19.0}/tests/test_doc_analyzer_python.py +0 -0
- {sourcecode-0.18.0 → sourcecode-0.19.0}/tests/test_graph_analyzer_polyglot.py +0 -0
- {sourcecode-0.18.0 → sourcecode-0.19.0}/tests/test_graph_analyzer_python_node.py +0 -0
- {sourcecode-0.18.0 → sourcecode-0.19.0}/tests/test_graph_schema.py +0 -0
- {sourcecode-0.18.0 → sourcecode-0.19.0}/tests/test_integration.py +0 -0
- {sourcecode-0.18.0 → sourcecode-0.19.0}/tests/test_integration_detection.py +0 -0
- {sourcecode-0.18.0 → sourcecode-0.19.0}/tests/test_integration_docs.py +0 -0
- {sourcecode-0.18.0 → sourcecode-0.19.0}/tests/test_integration_graph_modules.py +0 -0
- {sourcecode-0.18.0 → sourcecode-0.19.0}/tests/test_integration_lqn.py +0 -0
- {sourcecode-0.18.0 → sourcecode-0.19.0}/tests/test_integration_metrics.py +0 -0
- {sourcecode-0.18.0 → sourcecode-0.19.0}/tests/test_integration_multistack.py +0 -0
- {sourcecode-0.18.0 → sourcecode-0.19.0}/tests/test_integration_semantics.py +0 -0
- {sourcecode-0.18.0 → sourcecode-0.19.0}/tests/test_integration_universal.py +0 -0
- {sourcecode-0.18.0 → sourcecode-0.19.0}/tests/test_metrics_analyzer.py +0 -0
- {sourcecode-0.18.0 → sourcecode-0.19.0}/tests/test_packaging.py +0 -0
- {sourcecode-0.18.0 → sourcecode-0.19.0}/tests/test_real_projects.py +0 -0
- {sourcecode-0.18.0 → sourcecode-0.19.0}/tests/test_redactor.py +0 -0
- {sourcecode-0.18.0 → sourcecode-0.19.0}/tests/test_scanner.py +0 -0
- {sourcecode-0.18.0 → sourcecode-0.19.0}/tests/test_schema.py +0 -0
- {sourcecode-0.18.0 → sourcecode-0.19.0}/tests/test_schema_normalization.py +0 -0
- {sourcecode-0.18.0 → sourcecode-0.19.0}/tests/test_semantic_analyzer_node.py +0 -0
- {sourcecode-0.18.0 → sourcecode-0.19.0}/tests/test_semantic_analyzer_python.py +0 -0
- {sourcecode-0.18.0 → sourcecode-0.19.0}/tests/test_semantic_import_resolution.py +0 -0
- {sourcecode-0.18.0 → sourcecode-0.19.0}/tests/test_semantic_schema.py +0 -0
- {sourcecode-0.18.0 → sourcecode-0.19.0}/tests/test_summarizer.py +0 -0
- {sourcecode-0.18.0 → sourcecode-0.19.0}/tests/test_workspace_analyzer.py +0 -0
|
@@ -81,7 +81,7 @@ Campos:
|
|
|
81
81
|
{
|
|
82
82
|
"schema_version": "1.0",
|
|
83
83
|
"generated_at": "2026-04-07T19:41:05.686277+00:00",
|
|
84
|
-
"sourcecode_version": "0.
|
|
84
|
+
"sourcecode_version": "0.19.0",
|
|
85
85
|
"analyzed_path": "/abs/path/to/project"
|
|
86
86
|
}
|
|
87
87
|
```
|
|
@@ -645,7 +645,7 @@ Ejemplo de salida para un monorepo con web Node.js y API Python con `--dependenc
|
|
|
645
645
|
"metadata": {
|
|
646
646
|
"schema_version": "1.0",
|
|
647
647
|
"generated_at": "2026-04-07T19:41:05.686277+00:00",
|
|
648
|
-
"sourcecode_version": "0.
|
|
648
|
+
"sourcecode_version": "0.19.0",
|
|
649
649
|
"analyzed_path": "/abs/path/to/project"
|
|
650
650
|
},
|
|
651
651
|
"file_tree": {
|
|
@@ -47,6 +47,7 @@ class DependencyAnalyzer:
|
|
|
47
47
|
ecosystems: set[str] = set()
|
|
48
48
|
sources: set[str] = set()
|
|
49
49
|
limitations: list[str] = []
|
|
50
|
+
all_dependencies: list[DependencyRecord] = []
|
|
50
51
|
for summary in summaries:
|
|
51
52
|
result.total_count += summary.total_count
|
|
52
53
|
result.direct_count += summary.direct_count
|
|
@@ -56,9 +57,11 @@ class DependencyAnalyzer:
|
|
|
56
57
|
for limitation in summary.limitations:
|
|
57
58
|
if limitation not in limitations:
|
|
58
59
|
limitations.append(limitation)
|
|
60
|
+
all_dependencies.extend(summary.dependencies)
|
|
59
61
|
result.ecosystems = sorted(ecosystems)
|
|
60
62
|
result.sources = sorted(sources)
|
|
61
63
|
result.limitations = limitations
|
|
64
|
+
result.dependencies = all_dependencies
|
|
62
65
|
return result
|
|
63
66
|
|
|
64
67
|
def _build_summary(
|
|
@@ -80,6 +83,7 @@ class DependencyAnalyzer:
|
|
|
80
83
|
ecosystems=ecosystems,
|
|
81
84
|
sources=sources,
|
|
82
85
|
limitations=unique_limitations,
|
|
86
|
+
dependencies=list(records),
|
|
83
87
|
)
|
|
84
88
|
|
|
85
89
|
def _dedupe(self, records: Iterable[DependencyRecord]) -> list[DependencyRecord]:
|
|
@@ -96,6 +96,7 @@ class DependencySummary:
|
|
|
96
96
|
ecosystems: list[str] = field(default_factory=list)
|
|
97
97
|
sources: list[str] = field(default_factory=list)
|
|
98
98
|
limitations: list[str] = field(default_factory=list)
|
|
99
|
+
dependencies: list["DependencyRecord"] = field(default_factory=list)
|
|
99
100
|
|
|
100
101
|
|
|
101
102
|
@dataclass
|
|
@@ -74,6 +74,7 @@ def compact_view(sm: SourceMap) -> dict[str, Any]:
|
|
|
74
74
|
dep_summary_dict: Any = None
|
|
75
75
|
if sm.dependency_summary is not None and sm.dependency_summary.requested:
|
|
76
76
|
dep_summary_dict = asdict(sm.dependency_summary)
|
|
77
|
+
dep_summary_dict.pop("dependencies", None)
|
|
77
78
|
|
|
78
79
|
env_summary_dict: Any = None
|
|
79
80
|
if sm.env_summary is not None and sm.env_summary.requested:
|
|
@@ -106,6 +106,6 @@ def test_python_requirements_without_lockfile_keeps_declared_versions(tmp_path:
|
|
|
106
106
|
assert summary.direct_count == 2
|
|
107
107
|
typer_dep = next(record for record in records if record.name == "typer")
|
|
108
108
|
rich_dep = next(record for record in records if record.name == "rich")
|
|
109
|
-
assert typer_dep.declared_version == "==0.
|
|
109
|
+
assert typer_dep.declared_version == "==0.19.0"
|
|
110
110
|
assert typer_dep.resolved_version is None
|
|
111
111
|
assert rich_dep.declared_version == ">=13.0"
|
|
@@ -139,3 +139,79 @@ require github.com/gin-gonic/gin v1.10.0
|
|
|
139
139
|
assert json_dep.resolved_version == "13.0.3"
|
|
140
140
|
assert transitive_dotnet.scope == "transitive"
|
|
141
141
|
assert "dotnet" in dotnet_summary.ecosystems
|
|
142
|
+
|
|
143
|
+
|
|
144
|
+
def test_java_pom_dependencies_listed_in_summary(tmp_path: Path) -> None:
|
|
145
|
+
(tmp_path / "pom.xml").write_text(
|
|
146
|
+
"""<?xml version="1.0" encoding="UTF-8"?>
|
|
147
|
+
<project xmlns="http://maven.apache.org/POM/4.0.0">
|
|
148
|
+
<modelVersion>4.0.0</modelVersion>
|
|
149
|
+
<groupId>com.example</groupId>
|
|
150
|
+
<artifactId>demo</artifactId>
|
|
151
|
+
<version>1.0.0</version>
|
|
152
|
+
<dependencies>
|
|
153
|
+
<dependency>
|
|
154
|
+
<groupId>org.springframework.boot</groupId>
|
|
155
|
+
<artifactId>spring-boot-starter-web</artifactId>
|
|
156
|
+
<version>3.2.0</version>
|
|
157
|
+
</dependency>
|
|
158
|
+
<dependency>
|
|
159
|
+
<groupId>org.springframework.boot</groupId>
|
|
160
|
+
<artifactId>spring-boot-starter-test</artifactId>
|
|
161
|
+
<version>3.2.0</version>
|
|
162
|
+
<scope>test</scope>
|
|
163
|
+
</dependency>
|
|
164
|
+
<dependency>
|
|
165
|
+
<groupId>com.fasterxml.jackson.core</groupId>
|
|
166
|
+
<artifactId>jackson-databind</artifactId>
|
|
167
|
+
<version>2.15.0</version>
|
|
168
|
+
</dependency>
|
|
169
|
+
</dependencies>
|
|
170
|
+
</project>"""
|
|
171
|
+
)
|
|
172
|
+
|
|
173
|
+
records, summary = DependencyAnalyzer().analyze(tmp_path)
|
|
174
|
+
|
|
175
|
+
assert summary.total_count == 3
|
|
176
|
+
assert len(summary.dependencies) == 3
|
|
177
|
+
assert summary.dependencies == records
|
|
178
|
+
|
|
179
|
+
names = {r.name for r in summary.dependencies}
|
|
180
|
+
assert "org.springframework.boot:spring-boot-starter-web" in names
|
|
181
|
+
assert "org.springframework.boot:spring-boot-starter-test" in names
|
|
182
|
+
assert "com.fasterxml.jackson.core:jackson-databind" in names
|
|
183
|
+
|
|
184
|
+
web = next(r for r in summary.dependencies if "starter-web" in r.name)
|
|
185
|
+
assert web.declared_version == "3.2.0"
|
|
186
|
+
assert web.scope == "direct"
|
|
187
|
+
assert web.ecosystem == "java"
|
|
188
|
+
|
|
189
|
+
test_dep = next(r for r in summary.dependencies if "starter-test" in r.name)
|
|
190
|
+
assert test_dep.scope == "dev"
|
|
191
|
+
|
|
192
|
+
|
|
193
|
+
def test_java_dependency_summary_excluded_from_compact_view(tmp_path: Path) -> None:
|
|
194
|
+
import json
|
|
195
|
+
from typer.testing import CliRunner
|
|
196
|
+
from sourcecode.cli import app
|
|
197
|
+
|
|
198
|
+
(tmp_path / "pom.xml").write_text(
|
|
199
|
+
"""<?xml version="1.0" encoding="UTF-8"?>
|
|
200
|
+
<project xmlns="http://maven.apache.org/POM/4.0.0">
|
|
201
|
+
<modelVersion>4.0.0</modelVersion>
|
|
202
|
+
<groupId>com.example</groupId><artifactId>demo</artifactId><version>1.0.0</version>
|
|
203
|
+
<dependencies>
|
|
204
|
+
<dependency>
|
|
205
|
+
<groupId>org.springframework.boot</groupId>
|
|
206
|
+
<artifactId>spring-boot-starter-web</artifactId>
|
|
207
|
+
<version>3.2.0</version>
|
|
208
|
+
</dependency>
|
|
209
|
+
</dependencies>
|
|
210
|
+
</project>"""
|
|
211
|
+
)
|
|
212
|
+
|
|
213
|
+
runner = CliRunner()
|
|
214
|
+
result = runner.invoke(app, ["--compact", str(tmp_path)])
|
|
215
|
+
assert result.exit_code == 0, result.output
|
|
216
|
+
data = json.loads(result.output)
|
|
217
|
+
assert "dependencies" not in data["dependency_summary"]
|
|
@@ -34,7 +34,7 @@ def test_cli_dependencies_flag_enables_dependency_block(tmp_path: Path) -> None:
|
|
|
34
34
|
|
|
35
35
|
|
|
36
36
|
def test_cli_without_dependencies_flag_keeps_block_disabled(tmp_path: Path) -> None:
|
|
37
|
-
(tmp_path / "requirements.txt").write_text("typer==0.
|
|
37
|
+
(tmp_path / "requirements.txt").write_text("typer==0.19.0\n")
|
|
38
38
|
|
|
39
39
|
result = runner.invoke(app, [str(tmp_path)])
|
|
40
40
|
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{sourcecode-0.18.0 → sourcecode-0.19.0}/tests/fixtures/pnpm_monorepo/packages/api/pyproject.toml
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
|