corio 2.2.2a0__tar.gz → 2.2.2a1__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.
Files changed (158) hide show
  1. {corio-2.2.2a0 → corio-2.2.2a1}/PKG-INFO +1 -1
  2. {corio-2.2.2a0 → corio-2.2.2a1}/corio/infra/releaser.py +25 -10
  3. {corio-2.2.2a0 → corio-2.2.2a1}/corio/infra/stack.py +4 -4
  4. {corio-2.2.2a0 → corio-2.2.2a1}/corio/logs.py +10 -0
  5. {corio-2.2.2a0 → corio-2.2.2a1}/corio/path/path.py +1 -0
  6. {corio-2.2.2a0 → corio-2.2.2a1}/corio/pyproject.package.toml +3 -2
  7. {corio-2.2.2a0 → corio-2.2.2a1}/corio.egg-info/PKG-INFO +1 -1
  8. {corio-2.2.2a0 → corio-2.2.2a1}/pyproject.toml +3 -2
  9. {corio-2.2.2a0 → corio-2.2.2a1}/LICENSE +0 -0
  10. {corio-2.2.2a0 → corio-2.2.2a1}/README.md +0 -0
  11. {corio-2.2.2a0 → corio-2.2.2a1}/corio/__init__.py +0 -0
  12. {corio-2.2.2a0 → corio-2.2.2a1}/corio/ai/__init__.py +0 -0
  13. {corio-2.2.2a0 → corio-2.2.2a1}/corio/ai/agentic.py +0 -0
  14. {corio-2.2.2a0 → corio-2.2.2a1}/corio/ai/infer.py +0 -0
  15. {corio-2.2.2a0 → corio-2.2.2a1}/corio/aio.py +0 -0
  16. {corio-2.2.2a0 → corio-2.2.2a1}/corio/api.py +0 -0
  17. {corio-2.2.2a0 → corio-2.2.2a1}/corio/augmentation.py +0 -0
  18. {corio-2.2.2a0 → corio-2.2.2a1}/corio/av.py +0 -0
  19. {corio-2.2.2a0 → corio-2.2.2a1}/corio/caching.py +0 -0
  20. {corio-2.2.2a0 → corio-2.2.2a1}/corio/constants.py +0 -0
  21. {corio-2.2.2a0 → corio-2.2.2a1}/corio/context.py +0 -0
  22. {corio-2.2.2a0 → corio-2.2.2a1}/corio/dataclass.py +0 -0
  23. {corio-2.2.2a0 → corio-2.2.2a1}/corio/datatype.py +0 -0
  24. {corio-2.2.2a0 → corio-2.2.2a1}/corio/db/__init__.py +0 -0
  25. {corio-2.2.2a0 → corio-2.2.2a1}/corio/db/document.py +0 -0
  26. {corio-2.2.2a0 → corio-2.2.2a1}/corio/debug.py +0 -0
  27. {corio-2.2.2a0 → corio-2.2.2a1}/corio/dm.py +0 -0
  28. {corio-2.2.2a0 → corio-2.2.2a1}/corio/dns/__init__.py +0 -0
  29. {corio-2.2.2a0 → corio-2.2.2a1}/corio/dns/client.py +0 -0
  30. {corio-2.2.2a0 → corio-2.2.2a1}/corio/dns/dm.py +0 -0
  31. {corio-2.2.2a0 → corio-2.2.2a1}/corio/dns/proxy.py +0 -0
  32. {corio-2.2.2a0 → corio-2.2.2a1}/corio/dns/server.py +0 -0
  33. {corio-2.2.2a0 → corio-2.2.2a1}/corio/docker/__init__.py +0 -0
  34. {corio-2.2.2a0 → corio-2.2.2a1}/corio/dt.py +0 -0
  35. {corio-2.2.2a0 → corio-2.2.2a1}/corio/encrypt.py +0 -0
  36. {corio-2.2.2a0 → corio-2.2.2a1}/corio/entrypoint.py +0 -0
  37. {corio-2.2.2a0 → corio-2.2.2a1}/corio/env.py +0 -0
  38. {corio-2.2.2a0 → corio-2.2.2a1}/corio/function.py +0 -0
  39. {corio-2.2.2a0 → corio-2.2.2a1}/corio/google_api.py +0 -0
  40. {corio-2.2.2a0 → corio-2.2.2a1}/corio/ha/__init__.py +0 -0
  41. {corio-2.2.2a0 → corio-2.2.2a1}/corio/ha/constants.py +0 -0
  42. {corio-2.2.2a0 → corio-2.2.2a1}/corio/ha/core.py +0 -0
  43. {corio-2.2.2a0 → corio-2.2.2a1}/corio/ha/supervisor.py +0 -0
  44. {corio-2.2.2a0 → corio-2.2.2a1}/corio/ha/utils.py +0 -0
  45. {corio-2.2.2a0 → corio-2.2.2a1}/corio/hash.py +0 -0
  46. {corio-2.2.2a0 → corio-2.2.2a1}/corio/hfh.py +0 -0
  47. {corio-2.2.2a0 → corio-2.2.2a1}/corio/hook.py +0 -0
  48. {corio-2.2.2a0 → corio-2.2.2a1}/corio/https.py +0 -0
  49. {corio-2.2.2a0 → corio-2.2.2a1}/corio/infra/__init__.py +0 -0
  50. {corio-2.2.2a0 → corio-2.2.2a1}/corio/infra/api.py +0 -0
  51. {corio-2.2.2a0 → corio-2.2.2a1}/corio/infra/incrementor_pyproject.py +0 -0
  52. {corio-2.2.2a0 → corio-2.2.2a1}/corio/infra/project.py +0 -0
  53. {corio-2.2.2a0 → corio-2.2.2a1}/corio/infra/repository.py +0 -0
  54. {corio-2.2.2a0 → corio-2.2.2a1}/corio/inherit.py +0 -0
  55. {corio-2.2.2a0 → corio-2.2.2a1}/corio/inspection.py +0 -0
  56. {corio-2.2.2a0 → corio-2.2.2a1}/corio/interface/__init__.py +0 -0
  57. {corio-2.2.2a0 → corio-2.2.2a1}/corio/interface/context.py +0 -0
  58. {corio-2.2.2a0 → corio-2.2.2a1}/corio/interface/controls.py +0 -0
  59. {corio-2.2.2a0 → corio-2.2.2a1}/corio/interface/interface.py +0 -0
  60. {corio-2.2.2a0 → corio-2.2.2a1}/corio/iterator.py +0 -0
  61. {corio-2.2.2a0 → corio-2.2.2a1}/corio/jsn.py +0 -0
  62. {corio-2.2.2a0 → corio-2.2.2a1}/corio/json_fix.py +0 -0
  63. {corio-2.2.2a0 → corio-2.2.2a1}/corio/markup.py +0 -0
  64. {corio-2.2.2a0 → corio-2.2.2a1}/corio/merging.py +0 -0
  65. {corio-2.2.2a0 → corio-2.2.2a1}/corio/metric.py +0 -0
  66. {corio-2.2.2a0 → corio-2.2.2a1}/corio/mqtt.py +0 -0
  67. {corio-2.2.2a0 → corio-2.2.2a1}/corio/name.py +0 -0
  68. {corio-2.2.2a0 → corio-2.2.2a1}/corio/net.py +0 -0
  69. {corio-2.2.2a0 → corio-2.2.2a1}/corio/netrc.py +0 -0
  70. {corio-2.2.2a0 → corio-2.2.2a1}/corio/openai.py +0 -0
  71. {corio-2.2.2a0 → corio-2.2.2a1}/corio/parallel.py +0 -0
  72. {corio-2.2.2a0 → corio-2.2.2a1}/corio/path/__init__.py +0 -0
  73. {corio-2.2.2a0 → corio-2.2.2a1}/corio/path/app.py +0 -0
  74. {corio-2.2.2a0 → corio-2.2.2a1}/corio/path/type.py +0 -0
  75. {corio-2.2.2a0 → corio-2.2.2a1}/corio/paths.py +0 -0
  76. {corio-2.2.2a0 → corio-2.2.2a1}/corio/patterns.py +0 -0
  77. {corio-2.2.2a0 → corio-2.2.2a1}/corio/pdf.py +0 -0
  78. {corio-2.2.2a0 → corio-2.2.2a1}/corio/plat.py +0 -0
  79. {corio-2.2.2a0 → corio-2.2.2a1}/corio/process.py +0 -0
  80. {corio-2.2.2a0 → corio-2.2.2a1}/corio/profiling.py +0 -0
  81. {corio-2.2.2a0 → corio-2.2.2a1}/corio/rand.py +0 -0
  82. {corio-2.2.2a0 → corio-2.2.2a1}/corio/sec.py +0 -0
  83. {corio-2.2.2a0 → corio-2.2.2a1}/corio/semantic.py +0 -0
  84. {corio-2.2.2a0 → corio-2.2.2a1}/corio/sets.py +0 -0
  85. {corio-2.2.2a0 → corio-2.2.2a1}/corio/setup/__init__.py +0 -0
  86. {corio-2.2.2a0 → corio-2.2.2a1}/corio/spaces.py +0 -0
  87. {corio-2.2.2a0 → corio-2.2.2a1}/corio/strings.py +0 -0
  88. {corio-2.2.2a0 → corio-2.2.2a1}/corio/tabular.py +0 -0
  89. {corio-2.2.2a0 → corio-2.2.2a1}/corio/tests/__init__.py +0 -0
  90. {corio-2.2.2a0 → corio-2.2.2a1}/corio/tests/conftest.py +0 -0
  91. {corio-2.2.2a0 → corio-2.2.2a1}/corio/tests/helpers.py +0 -0
  92. {corio-2.2.2a0 → corio-2.2.2a1}/corio/tests/test_caching.py +0 -0
  93. {corio-2.2.2a0 → corio-2.2.2a1}/corio/tests/test_datatype.py +0 -0
  94. {corio-2.2.2a0 → corio-2.2.2a1}/corio/tests/test_encrypt.py +0 -0
  95. {corio-2.2.2a0 → corio-2.2.2a1}/corio/tests/test_env.py +0 -0
  96. {corio-2.2.2a0 → corio-2.2.2a1}/corio/tests/test_jsn.py +0 -0
  97. {corio-2.2.2a0 → corio-2.2.2a1}/corio/tests/test_path.py +0 -0
  98. {corio-2.2.2a0 → corio-2.2.2a1}/corio/tests/test_yaml.py +0 -0
  99. {corio-2.2.2a0 → corio-2.2.2a1}/corio/tokenization.py +0 -0
  100. {corio-2.2.2a0 → corio-2.2.2a1}/corio/toml.py +0 -0
  101. {corio-2.2.2a0 → corio-2.2.2a1}/corio/tools.py +0 -0
  102. {corio-2.2.2a0 → corio-2.2.2a1}/corio/unicode.py +0 -0
  103. {corio-2.2.2a0 → corio-2.2.2a1}/corio/version/__init__.py +0 -0
  104. {corio-2.2.2a0 → corio-2.2.2a1}/corio/version/version.py +0 -0
  105. {corio-2.2.2a0 → corio-2.2.2a1}/corio/webhook.py +0 -0
  106. {corio-2.2.2a0 → corio-2.2.2a1}/corio/yml.py +0 -0
  107. {corio-2.2.2a0 → corio-2.2.2a1}/corio/youtube.py +0 -0
  108. {corio-2.2.2a0 → corio-2.2.2a1}/corio.egg-info/SOURCES.txt +0 -0
  109. {corio-2.2.2a0 → corio-2.2.2a1}/corio.egg-info/dependency_links.txt +0 -0
  110. {corio-2.2.2a0 → corio-2.2.2a1}/corio.egg-info/entry_points.txt +0 -0
  111. {corio-2.2.2a0 → corio-2.2.2a1}/corio.egg-info/requires.txt +0 -0
  112. {corio-2.2.2a0 → corio-2.2.2a1}/corio.egg-info/top_level.txt +0 -0
  113. {corio-2.2.2a0 → corio-2.2.2a1}/scripts/add-service +0 -0
  114. {corio-2.2.2a0 → corio-2.2.2a1}/scripts/add-user-path +0 -0
  115. {corio-2.2.2a0 → corio-2.2.2a1}/scripts/add-ve-shell +0 -0
  116. {corio-2.2.2a0 → corio-2.2.2a1}/scripts/apt-essentials +0 -0
  117. {corio-2.2.2a0 → corio-2.2.2a1}/scripts/apt-headless +0 -0
  118. {corio-2.2.2a0 → corio-2.2.2a1}/scripts/auth-token +0 -0
  119. {corio-2.2.2a0 → corio-2.2.2a1}/scripts/compose-update +0 -0
  120. {corio-2.2.2a0 → corio-2.2.2a1}/scripts/compress-dir +0 -0
  121. {corio-2.2.2a0 → corio-2.2.2a1}/scripts/cru +0 -0
  122. {corio-2.2.2a0 → corio-2.2.2a1}/scripts/docker-build-bases +0 -0
  123. {corio-2.2.2a0 → corio-2.2.2a1}/scripts/docker-build-bases-dev +0 -0
  124. {corio-2.2.2a0 → corio-2.2.2a1}/scripts/docker-install-deps +0 -0
  125. {corio-2.2.2a0 → corio-2.2.2a1}/scripts/docker-install-prod +0 -0
  126. {corio-2.2.2a0 → corio-2.2.2a1}/scripts/docker-prune +0 -0
  127. {corio-2.2.2a0 → corio-2.2.2a1}/scripts/docker-sandbox +0 -0
  128. {corio-2.2.2a0 → corio-2.2.2a1}/scripts/docker-sandbox-init +0 -0
  129. {corio-2.2.2a0 → corio-2.2.2a1}/scripts/docs-deploy +0 -0
  130. {corio-2.2.2a0 → corio-2.2.2a1}/scripts/download +0 -0
  131. {corio-2.2.2a0 → corio-2.2.2a1}/scripts/encrypt-secrets +0 -0
  132. {corio-2.2.2a0 → corio-2.2.2a1}/scripts/fmtr-test-script +0 -0
  133. {corio-2.2.2a0 → corio-2.2.2a1}/scripts/git-clone +0 -0
  134. {corio-2.2.2a0 → corio-2.2.2a1}/scripts/ha-addon-launch +0 -0
  135. {corio-2.2.2a0 → corio-2.2.2a1}/scripts/infra +0 -0
  136. {corio-2.2.2a0 → corio-2.2.2a1}/scripts/infra-sync +0 -0
  137. {corio-2.2.2a0 → corio-2.2.2a1}/scripts/install-browser +0 -0
  138. {corio-2.2.2a0 → corio-2.2.2a1}/scripts/install-docker +0 -0
  139. {corio-2.2.2a0 → corio-2.2.2a1}/scripts/install-ts +0 -0
  140. {corio-2.2.2a0 → corio-2.2.2a1}/scripts/install-ys +0 -0
  141. {corio-2.2.2a0 → corio-2.2.2a1}/scripts/mirror-dir +0 -0
  142. {corio-2.2.2a0 → corio-2.2.2a1}/scripts/opt-dev-init +0 -0
  143. {corio-2.2.2a0 → corio-2.2.2a1}/scripts/parse-args +0 -0
  144. {corio-2.2.2a0 → corio-2.2.2a1}/scripts/pypi-check +0 -0
  145. {corio-2.2.2a0 → corio-2.2.2a1}/scripts/pypi-reserve +0 -0
  146. {corio-2.2.2a0 → corio-2.2.2a1}/scripts/run-script +0 -0
  147. {corio-2.2.2a0 → corio-2.2.2a1}/scripts/set-password +0 -0
  148. {corio-2.2.2a0 → corio-2.2.2a1}/scripts/set-secure-path +0 -0
  149. {corio-2.2.2a0 → corio-2.2.2a1}/scripts/set-user-sudo +0 -0
  150. {corio-2.2.2a0 → corio-2.2.2a1}/scripts/snips-install +0 -0
  151. {corio-2.2.2a0 → corio-2.2.2a1}/scripts/ssh-auth +0 -0
  152. {corio-2.2.2a0 → corio-2.2.2a1}/scripts/ssh-serve +0 -0
  153. {corio-2.2.2a0 → corio-2.2.2a1}/scripts/tasmota-config +0 -0
  154. {corio-2.2.2a0 → corio-2.2.2a1}/scripts/tasmota-flash +0 -0
  155. {corio-2.2.2a0 → corio-2.2.2a1}/scripts/tasmota-terminal +0 -0
  156. {corio-2.2.2a0 → corio-2.2.2a1}/scripts/vlc-tn +0 -0
  157. {corio-2.2.2a0 → corio-2.2.2a1}/scripts/vm-launch +0 -0
  158. {corio-2.2.2a0 → corio-2.2.2a1}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: corio
3
- Version: 2.2.2a0
3
+ Version: 2.2.2a1
4
4
  Summary: Collection of high-level tools to simplify everyday development tasks, with a focus on AI/ML
5
5
  Author-email: Frontmatter AI <innovative.fowler@mask.pro.fmtr.dev>
6
6
  License-Expression: Apache-2.0
@@ -18,7 +18,7 @@ from corio import https as https
18
18
  from corio.constants import Constants
19
19
  from corio.infra.project import Project
20
20
  from corio.inherit import Inherit
21
- from corio.logs import logger
21
+ from corio.logs import logger, sanitize
22
22
  from corio.path import Path
23
23
 
24
24
 
@@ -582,8 +582,28 @@ class Tester(Inherit[Releaser]):
582
582
  modules.append(module)
583
583
  return modules
584
584
 
585
+
586
+ def get_env(self, name: str, path_tests: Path, extras: list[str]) -> dict:
587
+ if path_tests.is_relative_to(self.paths.repo):
588
+ path_tests = path_tests.relative_to(self.paths.repo)
589
+ env = {
590
+ "description": f"Run {name} tests.",
591
+ "extras": extras,
592
+ "commands": [["python", "-m", "pytest", "-q", str(path_tests)]],
593
+ }
594
+ return env
595
+
596
+ @cached_property
597
+ def env(self) -> dict:
598
+ return self.get_env(name=self.paths.name_ns, path_tests=self.paths.tests, extras=["test"])
599
+
585
600
  @cached_property
586
601
  def envs(self) -> dict[str, dict]:
602
+ if not self.paths.metadata.test_envs:
603
+ if not self.modules:
604
+ return {}
605
+ return {self.paths.name_ns: self.env}
606
+
587
607
  envs = {}
588
608
  extras_available = set(self.dependencies.keys())
589
609
 
@@ -593,12 +613,8 @@ class Tester(Inherit[Releaser]):
593
613
  extras.insert(0, module)
594
614
 
595
615
  path_test = self.paths.tests / f"{self.TEST_FILENAME_PREFIX}{module}{self.TEST_FILENAME_SUFFIX}"
596
- path_test = path_test.relative_to(self.paths.repo)
597
- envs[module] = {
598
- "description": f"Run tests for module {module}.",
599
- "extras": extras,
600
- "commands": [["python", "-m", "pytest", "-q", str(path_test)]],
601
- }
616
+ name = f"{self.paths.name_ns}/{module}"
617
+ envs[name] = self.get_env(name=name, path_tests=path_test, extras=extras)
602
618
 
603
619
  return envs
604
620
 
@@ -641,8 +657,7 @@ class Tester(Inherit[Releaser]):
641
657
 
642
658
  assert process.stdout is not None
643
659
  for line in process.stdout:
644
- line = line.rstrip().replace("{", "{{").replace("}", "}}")
645
- logger.info(line)
660
+ logger.info(sanitize(line))
646
661
 
647
662
  code = process.wait()
648
663
  return code
@@ -666,4 +681,4 @@ class Tester(Inherit[Releaser]):
666
681
  return True
667
682
 
668
683
  logger.error(f"Test suite failed with exit code {code}.")
669
- return False
684
+ return False
@@ -6,7 +6,7 @@ from corio.docker import DockerClient
6
6
  from corio.infra.project import Project
7
7
  from corio.inherit import Inherit
8
8
  from corio.iterator import IndexList
9
- from corio.logs import logger
9
+ from corio.logs import logger, sanitize
10
10
  from corio.merging import merge
11
11
  from corio.path import Path, PackagePaths
12
12
 
@@ -114,7 +114,7 @@ class Stack(Inherit[Project]):
114
114
  progress="plain",
115
115
  stream_logs=True,
116
116
  ):
117
- logger.info(line.rstrip())
117
+ logger.info(sanitize(line))
118
118
 
119
119
 
120
120
  class Development(Stack):
@@ -177,8 +177,8 @@ class ProductionPublic(ProductionPrivate):
177
177
  for tag in self.tags_public:
178
178
  with logger.span(f'Pushing image "{tag}"'):
179
179
  for tag, line_bytes in self.client.push(tag, stream_logs=True):
180
- line = line_bytes.decode().rstrip()
181
- logger.info(line.rstrip())
180
+ line = line_bytes.decode()
181
+ logger.info(sanitize(line))
182
182
 
183
183
  self
184
184
 
@@ -12,6 +12,16 @@ else:
12
12
 
13
13
  LEVEL_DEFAULT = logging.DEBUG if env.IS_DEV else logging.INFO
14
14
 
15
+
16
+ def sanitize(message: str) -> str:
17
+ """
18
+
19
+ Sanitize a log line for brace-style formatters.
20
+
21
+ """
22
+ return message.rstrip().replace("{", "{{").replace("}", "}}")
23
+
24
+
15
25
  def get_logger(name, version=None, host=Constants.FMTR_OBS_HOST, key=None, org=Constants.ORG_NAME,
16
26
  stream=STREAM_DEFAULT, environment=ENVIRONMENT_DEFAULT, level=LEVEL_DEFAULT):
17
27
  """
@@ -484,6 +484,7 @@ class Metadata:
484
484
 
485
485
  is_pypi: bool = False
486
486
  is_dockerhub: bool = False
487
+ test_envs: bool = False
487
488
 
488
489
  @classmethod
489
490
  def read(cls, path: Path) -> Self:
@@ -64,7 +64,7 @@ secrets = ["encrypt", "env.io", "yaml", "logging", "sets", "vcs"]
64
64
  cli = ["sets", "logging"]
65
65
 
66
66
  [tool.corio.metadata]
67
- version = "2.2.2-alpha000"
67
+ version = "2.2.2-alpha001"
68
68
  port = 0
69
69
  base = "python"
70
70
  description = "Collection of high-level tools to simplify everyday development tasks, with a focus on AI/ML"
@@ -77,6 +77,7 @@ services = []
77
77
  keywords = []
78
78
  is_pypi = true
79
79
  is_dockerhub = false
80
+ test_envs = true
80
81
 
81
82
  [tool.corio.metadata.setup]
82
83
 
@@ -93,7 +94,7 @@ corio = ["pyproject.package.toml"]
93
94
 
94
95
  [project]
95
96
  name = "corio"
96
- version = "2.2.2-alpha000"
97
+ version = "2.2.2-alpha001"
97
98
  description = "Collection of high-level tools to simplify everyday development tasks, with a focus on AI/ML"
98
99
  readme = "README.md"
99
100
  dependencies = []
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: corio
3
- Version: 2.2.2a0
3
+ Version: 2.2.2a1
4
4
  Summary: Collection of high-level tools to simplify everyday development tasks, with a focus on AI/ML
5
5
  Author-email: Frontmatter AI <innovative.fowler@mask.pro.fmtr.dev>
6
6
  License-Expression: Apache-2.0
@@ -64,7 +64,7 @@ secrets = ["encrypt", "env.io", "yaml", "logging", "sets", "vcs"]
64
64
  cli = ["sets", "logging"]
65
65
 
66
66
  [tool.corio.metadata]
67
- version = "2.2.2-alpha000"
67
+ version = "2.2.2-alpha001"
68
68
  port = 0
69
69
  base = "python"
70
70
  description = "Collection of high-level tools to simplify everyday development tasks, with a focus on AI/ML"
@@ -77,6 +77,7 @@ services = []
77
77
  keywords = []
78
78
  is_pypi = true
79
79
  is_dockerhub = false
80
+ test_envs = true
80
81
 
81
82
  [tool.corio.metadata.setup]
82
83
 
@@ -93,7 +94,7 @@ corio = ["pyproject.package.toml"]
93
94
 
94
95
  [project]
95
96
  name = "corio"
96
- version = "2.2.2-alpha000"
97
+ version = "2.2.2-alpha001"
97
98
  description = "Collection of high-level tools to simplify everyday development tasks, with a focus on AI/ML"
98
99
  readme = "README.md"
99
100
  dependencies = []
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes