async-kernel 0.16.2__tar.gz → 0.16.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.
- {async_kernel-0.16.2 → async_kernel-0.16.4}/CHANGELOG.md +20 -0
- {async_kernel-0.16.2 → async_kernel-0.16.4}/PKG-INFO +1 -1
- {async_kernel-0.16.2 → async_kernel-0.16.4}/_version.py +2 -2
- {async_kernel-0.16.2 → async_kernel-0.16.4}/src/async_kernel/caller.py +3 -2
- {async_kernel-0.16.2 → async_kernel-0.16.4}/src/async_kernel/kernel.py +2 -2
- {async_kernel-0.16.2 → async_kernel-0.16.4}/src/async_kernel/pending.py +5 -4
- {async_kernel-0.16.2 → async_kernel-0.16.4}/tests/test_pending.py +15 -1
- {async_kernel-0.16.2 → async_kernel-0.16.4}/.github/dependabot.yaml +0 -0
- {async_kernel-0.16.2 → async_kernel-0.16.4}/.github/release.yml +0 -0
- {async_kernel-0.16.2 → async_kernel-0.16.4}/.github/workflows/ci.yml +0 -0
- {async_kernel-0.16.2 → async_kernel-0.16.4}/.github/workflows/enforce-label.yml +0 -0
- {async_kernel-0.16.2 → async_kernel-0.16.4}/.github/workflows/new_release.yml +0 -0
- {async_kernel-0.16.2 → async_kernel-0.16.4}/.github/workflows/pre-commit.yml +0 -0
- {async_kernel-0.16.2 → async_kernel-0.16.4}/.github/workflows/publish-docs.yml +0 -0
- {async_kernel-0.16.2 → async_kernel-0.16.4}/.github/workflows/publish-to-pypi.yml +0 -0
- {async_kernel-0.16.2 → async_kernel-0.16.4}/.gitignore +0 -0
- {async_kernel-0.16.2 → async_kernel-0.16.4}/.pre-commit-config.yaml +0 -0
- {async_kernel-0.16.2 → async_kernel-0.16.4}/.vscode/launch.json +0 -0
- {async_kernel-0.16.2 → async_kernel-0.16.4}/.vscode/settings.json +0 -0
- {async_kernel-0.16.2 → async_kernel-0.16.4}/.vscode/spellright.dict +0 -0
- {async_kernel-0.16.2 → async_kernel-0.16.4}/CONTRIBUTING.md +0 -0
- {async_kernel-0.16.2 → async_kernel-0.16.4}/IPYTHON_LICENSE +0 -0
- {async_kernel-0.16.2 → async_kernel-0.16.4}/LICENSE +0 -0
- {async_kernel-0.16.2 → async_kernel-0.16.4}/README.md +0 -0
- {async_kernel-0.16.2 → async_kernel-0.16.4}/cliff.toml +0 -0
- {async_kernel-0.16.2 → async_kernel-0.16.4}/docs/about/changelog.md +0 -0
- {async_kernel-0.16.2 → async_kernel-0.16.4}/docs/about/contributing.md +0 -0
- {async_kernel-0.16.2 → async_kernel-0.16.4}/docs/about/index.md +0 -0
- {async_kernel-0.16.2 → async_kernel-0.16.4}/docs/about/license.md +0 -0
- {async_kernel-0.16.2 → async_kernel-0.16.4}/docs/index.md +0 -0
- {async_kernel-0.16.2 → async_kernel-0.16.4}/docs/javascripts/extra.js +0 -0
- {async_kernel-0.16.2 → async_kernel-0.16.4}/docs/notebooks/caller.ipynb +0 -0
- {async_kernel-0.16.2 → async_kernel-0.16.4}/docs/notebooks/concurrency.ipynb +0 -0
- {async_kernel-0.16.2 → async_kernel-0.16.4}/docs/overrides/main.html +0 -0
- {async_kernel-0.16.2 → async_kernel-0.16.4}/docs/reference/asyncshell.md +0 -0
- {async_kernel-0.16.2 → async_kernel-0.16.4}/docs/reference/caller.md +0 -0
- {async_kernel-0.16.2 → async_kernel-0.16.4}/docs/reference/comm.md +0 -0
- {async_kernel-0.16.2 → async_kernel-0.16.4}/docs/reference/command.md +0 -0
- {async_kernel-0.16.2 → async_kernel-0.16.4}/docs/reference/common.md +0 -0
- {async_kernel-0.16.2 → async_kernel-0.16.4}/docs/reference/debugger.md +0 -0
- {async_kernel-0.16.2 → async_kernel-0.16.4}/docs/reference/event_loop.md +0 -0
- {async_kernel-0.16.2 → async_kernel-0.16.4}/docs/reference/index.md +0 -0
- {async_kernel-0.16.2 → async_kernel-0.16.4}/docs/reference/interface.md +0 -0
- {async_kernel-0.16.2 → async_kernel-0.16.4}/docs/reference/kernel.md +0 -0
- {async_kernel-0.16.2 → async_kernel-0.16.4}/docs/reference/kernelspec.md +0 -0
- {async_kernel-0.16.2 → async_kernel-0.16.4}/docs/reference/pending.md +0 -0
- {async_kernel-0.16.2 → async_kernel-0.16.4}/docs/reference/typing.md +0 -0
- {async_kernel-0.16.2 → async_kernel-0.16.4}/docs/reference/utils.md +0 -0
- {async_kernel-0.16.2 → async_kernel-0.16.4}/docs/stylesheets/extra.css +0 -0
- {async_kernel-0.16.2 → async_kernel-0.16.4}/docs/thread_safety.md +0 -0
- {async_kernel-0.16.2 → async_kernel-0.16.4}/docs/usage/commands.md +0 -0
- {async_kernel-0.16.2 → async_kernel-0.16.4}/docs/usage/index.md +0 -0
- {async_kernel-0.16.2 → async_kernel-0.16.4}/hatch_build.py +0 -0
- {async_kernel-0.16.2 → async_kernel-0.16.4}/mkdocs.yml +0 -0
- {async_kernel-0.16.2 → async_kernel-0.16.4}/pyproject.toml +0 -0
- {async_kernel-0.16.2 → async_kernel-0.16.4}/src/async_kernel/__init__.py +0 -0
- {async_kernel-0.16.2 → async_kernel-0.16.4}/src/async_kernel/__main__.py +0 -0
- {async_kernel-0.16.2 → async_kernel-0.16.4}/src/async_kernel/asyncshell.py +0 -0
- {async_kernel-0.16.2 → async_kernel-0.16.4}/src/async_kernel/comm.py +0 -0
- {async_kernel-0.16.2 → async_kernel-0.16.4}/src/async_kernel/command.py +0 -0
- {async_kernel-0.16.2 → async_kernel-0.16.4}/src/async_kernel/common.py +0 -0
- {async_kernel-0.16.2 → async_kernel-0.16.4}/src/async_kernel/compat/json.py +0 -0
- {async_kernel-0.16.2 → async_kernel-0.16.4}/src/async_kernel/compiler.py +0 -0
- {async_kernel-0.16.2 → async_kernel-0.16.4}/src/async_kernel/debugger.py +0 -0
- {async_kernel-0.16.2 → async_kernel-0.16.4}/src/async_kernel/event_loop/__init__.py +0 -0
- {async_kernel-0.16.2 → async_kernel-0.16.4}/src/async_kernel/event_loop/asyncio_guest.py +0 -0
- {async_kernel-0.16.2 → async_kernel-0.16.4}/src/async_kernel/event_loop/qt_host.py +0 -0
- {async_kernel-0.16.2 → async_kernel-0.16.4}/src/async_kernel/event_loop/run.py +0 -0
- {async_kernel-0.16.2 → async_kernel-0.16.4}/src/async_kernel/event_loop/tk_host.py +0 -0
- {async_kernel-0.16.2 → async_kernel-0.16.4}/src/async_kernel/interface/__init__.py +0 -0
- {async_kernel-0.16.2 → async_kernel-0.16.4}/src/async_kernel/interface/base.py +0 -0
- {async_kernel-0.16.2 → async_kernel-0.16.4}/src/async_kernel/interface/callable.py +0 -0
- {async_kernel-0.16.2 → async_kernel-0.16.4}/src/async_kernel/interface/zmq.py +0 -0
- {async_kernel-0.16.2 → async_kernel-0.16.4}/src/async_kernel/iostream.py +0 -0
- {async_kernel-0.16.2 → async_kernel-0.16.4}/src/async_kernel/kernelspec.py +0 -0
- {async_kernel-0.16.2 → async_kernel-0.16.4}/src/async_kernel/py.typed +0 -0
- {async_kernel-0.16.2 → async_kernel-0.16.4}/src/async_kernel/resources/logo-32x32.png +0 -0
- {async_kernel-0.16.2 → async_kernel-0.16.4}/src/async_kernel/resources/logo-64x64.png +0 -0
- {async_kernel-0.16.2 → async_kernel-0.16.4}/src/async_kernel/resources/logo-svg.svg +0 -0
- {async_kernel-0.16.2 → async_kernel-0.16.4}/src/async_kernel/typing.py +0 -0
- {async_kernel-0.16.2 → async_kernel-0.16.4}/src/async_kernel/utils.py +0 -0
- {async_kernel-0.16.2 → async_kernel-0.16.4}/tests/__init__.py +0 -0
- {async_kernel-0.16.2 → async_kernel-0.16.4}/tests/conftest.py +0 -0
- {async_kernel-0.16.2 → async_kernel-0.16.4}/tests/references.py +0 -0
- {async_kernel-0.16.2 → async_kernel-0.16.4}/tests/test_callable_kernel_interface.py +0 -0
- {async_kernel-0.16.2 → async_kernel-0.16.4}/tests/test_caller.py +0 -0
- {async_kernel-0.16.2 → async_kernel-0.16.4}/tests/test_comm.py +0 -0
- {async_kernel-0.16.2 → async_kernel-0.16.4}/tests/test_command.py +0 -0
- {async_kernel-0.16.2 → async_kernel-0.16.4}/tests/test_common.py +0 -0
- {async_kernel-0.16.2 → async_kernel-0.16.4}/tests/test_compat.py +0 -0
- {async_kernel-0.16.2 → async_kernel-0.16.4}/tests/test_debugger.py +0 -0
- {async_kernel-0.16.2 → async_kernel-0.16.4}/tests/test_enter_kernel.py +0 -0
- {async_kernel-0.16.2 → async_kernel-0.16.4}/tests/test_event_loop.py +0 -0
- {async_kernel-0.16.2 → async_kernel-0.16.4}/tests/test_iostream.py +0 -0
- {async_kernel-0.16.2 → async_kernel-0.16.4}/tests/test_kernel.py +0 -0
- {async_kernel-0.16.2 → async_kernel-0.16.4}/tests/test_kernel_subclass.py +0 -0
- {async_kernel-0.16.2 → async_kernel-0.16.4}/tests/test_kernelspec.py +0 -0
- {async_kernel-0.16.2 → async_kernel-0.16.4}/tests/test_message_spec.py +0 -0
- {async_kernel-0.16.2 → async_kernel-0.16.4}/tests/test_typing.py +0 -0
- {async_kernel-0.16.2 → async_kernel-0.16.4}/tests/test_utils.py +0 -0
- {async_kernel-0.16.2 → async_kernel-0.16.4}/tests/test_zmq_messaging.py +0 -0
- {async_kernel-0.16.2 → async_kernel-0.16.4}/tests/utils.py +0 -0
- {async_kernel-0.16.2 → async_kernel-0.16.4}/uv.lock +0 -0
|
@@ -5,12 +5,30 @@ All notable changes to this project will be documented in this file.
|
|
|
5
5
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
|
6
6
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
7
|
|
|
8
|
+
## [0.16.4] - 2026-04-15
|
|
9
|
+
|
|
10
|
+
### <!-- 2 --> 🐛 Fixes
|
|
11
|
+
|
|
12
|
+
- Fix PendingGroup mode 0 and add mode 3. [#428](https://github.com/fleming79/async-kernel/pull/428)
|
|
13
|
+
|
|
14
|
+
## [0.16.3] - 2026-04-12
|
|
15
|
+
|
|
16
|
+
### <!-- 6 --> 🌀 Miscellaneous
|
|
17
|
+
|
|
18
|
+
- Prepare for release v0.16.3 [#427](https://github.com/fleming79/async-kernel/pull/427)
|
|
19
|
+
|
|
20
|
+
- Run comm_open and com_close message handlers in the shell thread. [#426](https://github.com/fleming79/async-kernel/pull/426)
|
|
21
|
+
|
|
8
22
|
## [0.16.2] - 2026-04-12
|
|
9
23
|
|
|
10
24
|
### <!-- 1 --> 🚀 Features
|
|
11
25
|
|
|
12
26
|
- Provide async line magic support [#424](https://github.com/fleming79/async-kernel/pull/424)
|
|
13
27
|
|
|
28
|
+
### <!-- 6 --> 🌀 Miscellaneous
|
|
29
|
+
|
|
30
|
+
- Prepare for release v0.16.2 [#425](https://github.com/fleming79/async-kernel/pull/425)
|
|
31
|
+
|
|
14
32
|
## [0.16.1] - 2026-04-08
|
|
15
33
|
|
|
16
34
|
### <!-- 1 --> 🚀 Features
|
|
@@ -1165,6 +1183,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
1165
1183
|
|
|
1166
1184
|
- Bump the actions group across 1 directory with 2 updates [#3](https://github.com/fleming79/async-kernel/pull/3)
|
|
1167
1185
|
|
|
1186
|
+
[0.16.4]: https://github.com/fleming79/async-kernel/compare/v0.16.3..v0.16.4
|
|
1187
|
+
[0.16.3]: https://github.com/fleming79/async-kernel/compare/v0.16.2..v0.16.3
|
|
1168
1188
|
[0.16.2]: https://github.com/fleming79/async-kernel/compare/v0.16.1..v0.16.2
|
|
1169
1189
|
[0.16.1]: https://github.com/fleming79/async-kernel/compare/v0.16.0..v0.16.1
|
|
1170
1190
|
[0.16.0]: https://github.com/fleming79/async-kernel/compare/v0.15.0..v0.16.0
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: async-kernel
|
|
3
|
-
Version: 0.16.
|
|
3
|
+
Version: 0.16.4
|
|
4
4
|
Summary: A concurrent python kernel for Jupyter supporting AnyIO, AsyncIO and Trio.
|
|
5
5
|
Project-URL: Homepage, https://fleming79.github.io/async-kernel
|
|
6
6
|
Project-URL: Documentation, https://fleming79.github.io/async-kernel
|
|
@@ -18,7 +18,7 @@ version_tuple: tuple[int | str, ...]
|
|
|
18
18
|
commit_id: str | None
|
|
19
19
|
__commit_id__: str | None
|
|
20
20
|
|
|
21
|
-
__version__ = version = '0.16.
|
|
22
|
-
__version_tuple__ = version_tuple = (0, 16,
|
|
21
|
+
__version__ = version = '0.16.4'
|
|
22
|
+
__version_tuple__ = version_tuple = (0, 16, 4)
|
|
23
23
|
|
|
24
24
|
__commit_id__ = commit_id = None
|
|
@@ -1098,7 +1098,7 @@ class Caller(anyio.AsyncContextManagerMixin):
|
|
|
1098
1098
|
break
|
|
1099
1099
|
return done, pending
|
|
1100
1100
|
|
|
1101
|
-
def create_pending_group(self, *, shield: bool = False, mode: Literal[0, 1, 2] = 0) -> PendingGroup:
|
|
1101
|
+
def create_pending_group(self, *, shield: bool = False, mode: Literal[0, 1, 2, 3] = 0) -> PendingGroup:
|
|
1102
1102
|
"""
|
|
1103
1103
|
Create a new [PendingGroup][async_kernel.pending.PendingGroup] instance.
|
|
1104
1104
|
|
|
@@ -1113,9 +1113,10 @@ class Caller(anyio.AsyncContextManagerMixin):
|
|
|
1113
1113
|
Args:
|
|
1114
1114
|
shield: Shield the pending group from external cancellation.
|
|
1115
1115
|
mode: The mode.
|
|
1116
|
-
- 0: Ignore cancellation of pending.
|
|
1116
|
+
- 0: Ignore cancellation of pending, if any pending is cancelled - exit quietly.
|
|
1117
1117
|
- 1: Cancel if any pending is cancelled - raise PendingCancelled on exit.
|
|
1118
1118
|
- 2: Cancel if any pending is cancelled - exit quietly.
|
|
1119
|
+
- 3: Ignore cancellation of pending, if any pending is cancelled - raise PendingCancelled on exit.
|
|
1119
1120
|
|
|
1120
1121
|
Usage:
|
|
1121
1122
|
|
|
@@ -46,7 +46,7 @@ if TYPE_CHECKING:
|
|
|
46
46
|
|
|
47
47
|
__all__ = ["Kernel", "KernelInterrupt"]
|
|
48
48
|
|
|
49
|
-
|
|
49
|
+
RUN_IN_SHELL_THREAD = (MsgType.execute_request, MsgType.comm_msg, MsgType.comm_open, MsgType.comm_close)
|
|
50
50
|
"""
|
|
51
51
|
Shell message types that are handled in the shell's thread (typically the _MainThread_).
|
|
52
52
|
|
|
@@ -435,7 +435,7 @@ class Kernel(traitlets.HasTraits, anyio.AsyncContextManagerMixin):
|
|
|
435
435
|
handler = self._get_handler(subshell_id, msg_type, send_reply)
|
|
436
436
|
run_mode = self._get_run_mode(msg_type, job)
|
|
437
437
|
caller = self.callers[channel]
|
|
438
|
-
if channel is Channel.shell and msg_type not in
|
|
438
|
+
if channel is Channel.shell and msg_type not in RUN_IN_SHELL_THREAD:
|
|
439
439
|
caller = self.callers[Channel.control]
|
|
440
440
|
# Schedule job
|
|
441
441
|
match run_mode:
|
|
@@ -206,7 +206,7 @@ class PendingGroup(PendingTracker, anyio.AsyncContextManagerMixin):
|
|
|
206
206
|
caller: Fixed[Self, Caller] = Fixed(lambda _: async_kernel.Caller())
|
|
207
207
|
"The caller where the pending group was instantiated."
|
|
208
208
|
|
|
209
|
-
def __init__(self, *, shield: bool = False, mode:
|
|
209
|
+
def __init__(self, *, shield: bool = False, mode: Literal[0, 1, 2, 3] = 0) -> None:
|
|
210
210
|
"""
|
|
211
211
|
An async context to capture all pending (that opt in) created in the context.
|
|
212
212
|
|
|
@@ -217,11 +217,12 @@ class PendingGroup(PendingTracker, anyio.AsyncContextManagerMixin):
|
|
|
217
217
|
Args:
|
|
218
218
|
shield: Passed to the cancel scope.
|
|
219
219
|
mode: The mode.
|
|
220
|
-
- 0: Ignore cancellation of pending.
|
|
220
|
+
- 0: Ignore cancellation of pending, if any pending is cancelled - exit quietly.
|
|
221
221
|
- 1: Cancel if any pending is cancelled - raise PendingCancelled on exit.
|
|
222
222
|
- 2: Cancel if any pending is cancelled - exit quietly.
|
|
223
|
+
- 3: Ignore cancellation of pending, if any pending is cancelled - raise PendingCancelled on exit.
|
|
223
224
|
"""
|
|
224
|
-
assert mode in [0, 1, 2]
|
|
225
|
+
assert mode in [0, 1, 2, 3]
|
|
225
226
|
self._mode = mode
|
|
226
227
|
self._shield = shield
|
|
227
228
|
self.caller # noqa: B018
|
|
@@ -259,7 +260,7 @@ class PendingGroup(PendingTracker, anyio.AsyncContextManagerMixin):
|
|
|
259
260
|
if exceptions := [e for pen in self._failed if isinstance(e := pen.exception(), Exception)]:
|
|
260
261
|
msg = f"One or more exceptions occurred in this context! {list(map(str, exceptions))}"
|
|
261
262
|
raise ExceptionGroup(msg, exceptions)
|
|
262
|
-
if self._mode in [
|
|
263
|
+
if self._mode in [1, 3]:
|
|
263
264
|
raise PendingCancelled(self._cancelled)
|
|
264
265
|
finally:
|
|
265
266
|
self._leaving_context = True
|
|
@@ -432,7 +432,7 @@ class TestPendingGroup:
|
|
|
432
432
|
|
|
433
433
|
async def test_cancellation(self, caller: Caller):
|
|
434
434
|
with pytest.raises(PendingCancelled): # noqa: PT012
|
|
435
|
-
async with PendingGroup() as pm:
|
|
435
|
+
async with PendingGroup(mode=1) as pm:
|
|
436
436
|
pen = caller.call_soon(anyio.sleep_forever)
|
|
437
437
|
pm.cancel("Stop")
|
|
438
438
|
assert pen.cancelled() # pyright: ignore[reportPossiblyUnboundVariable]
|
|
@@ -532,15 +532,29 @@ class TestPendingGroup:
|
|
|
532
532
|
|
|
533
533
|
async def test_mode(self, caller: Caller):
|
|
534
534
|
|
|
535
|
+
# mode 0
|
|
536
|
+
async with caller.create_pending_group(mode=0) as pg:
|
|
537
|
+
pen = pg.caller.call_soon(anyio.sleep_forever)
|
|
538
|
+
pen.cancel("stop now")
|
|
539
|
+
await pg.caller.call_soon(lambda: 1 + 1)
|
|
540
|
+
assert not pg.cancelled()
|
|
535
541
|
# mode 1
|
|
536
542
|
with pytest.raises(PendingCancelled): # noqa: PT012
|
|
537
543
|
async with caller.create_pending_group(mode=1) as pg:
|
|
538
544
|
pen = pg.caller.call_soon(anyio.sleep_forever)
|
|
539
545
|
pen.cancel("stop now")
|
|
546
|
+
assert pg.cancelled()
|
|
540
547
|
# mode 2
|
|
541
548
|
async with caller.create_pending_group(mode=2) as pg:
|
|
542
549
|
pen = pg.caller.call_soon(anyio.sleep_forever)
|
|
543
550
|
pen.cancel("stop now")
|
|
551
|
+
assert pg.cancelled()
|
|
552
|
+
# mode 3
|
|
553
|
+
async with caller.create_pending_group(mode=3) as pg:
|
|
554
|
+
pen = pg.caller.call_soon(anyio.sleep_forever)
|
|
555
|
+
pen.cancel("stop now")
|
|
556
|
+
await pg.caller.call_soon(lambda: 1 + 1)
|
|
557
|
+
assert not pg.cancelled()
|
|
544
558
|
|
|
545
559
|
async def test_repr(self, caller: Caller):
|
|
546
560
|
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|