dimples 0.4.2__tar.gz → 0.4.3__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.
- {dimples-0.4.2 → dimples-0.4.3}/PKG-INFO +1 -1
- {dimples-0.4.2 → dimples-0.4.3}/dimples/client/terminal.py +5 -0
- {dimples-0.4.2 → dimples-0.4.3}/dimples/conn/gate.py +7 -5
- {dimples-0.4.2 → dimples-0.4.3}/dimples/conn/gatekeeper.py +2 -2
- {dimples-0.4.2 → dimples-0.4.3}/dimples/edge/octopus.py +25 -4
- {dimples-0.4.2 → dimples-0.4.3}/dimples.egg-info/PKG-INFO +1 -1
- {dimples-0.4.2 → dimples-0.4.3}/dimples.egg-info/requires.txt +3 -3
- {dimples-0.4.2 → dimples-0.4.3}/setup.py +4 -4
- {dimples-0.4.2 → dimples-0.4.3}/README.md +0 -0
- {dimples-0.4.2 → dimples-0.4.3}/dimples/__init__.py +0 -0
- {dimples-0.4.2 → dimples-0.4.3}/dimples/client/__init__.py +0 -0
- {dimples-0.4.2 → dimples-0.4.3}/dimples/client/archivist.py +0 -0
- {dimples-0.4.2 → dimples-0.4.3}/dimples/client/checkpoint.py +0 -0
- {dimples-0.4.2 → dimples-0.4.3}/dimples/client/cpu/__init__.py +0 -0
- {dimples-0.4.2 → dimples-0.4.3}/dimples/client/cpu/commands.py +0 -0
- {dimples-0.4.2 → dimples-0.4.3}/dimples/client/cpu/creator.py +0 -0
- {dimples-0.4.2 → dimples-0.4.3}/dimples/client/cpu/group.py +0 -0
- {dimples-0.4.2 → dimples-0.4.3}/dimples/client/cpu/grp_expel.py +0 -0
- {dimples-0.4.2 → dimples-0.4.3}/dimples/client/cpu/grp_invite.py +0 -0
- {dimples-0.4.2 → dimples-0.4.3}/dimples/client/cpu/grp_join.py +0 -0
- {dimples-0.4.2 → dimples-0.4.3}/dimples/client/cpu/grp_query.py +0 -0
- {dimples-0.4.2 → dimples-0.4.3}/dimples/client/cpu/grp_quit.py +0 -0
- {dimples-0.4.2 → dimples-0.4.3}/dimples/client/cpu/grp_reset.py +0 -0
- {dimples-0.4.2 → dimples-0.4.3}/dimples/client/cpu/grp_resign.py +0 -0
- {dimples-0.4.2 → dimples-0.4.3}/dimples/client/cpu/handshake.py +0 -0
- {dimples-0.4.2 → dimples-0.4.3}/dimples/client/facebook.py +0 -0
- {dimples-0.4.2 → dimples-0.4.3}/dimples/client/messenger.py +0 -0
- {dimples-0.4.2 → dimples-0.4.3}/dimples/client/network/__init__.py +0 -0
- {dimples-0.4.2 → dimples-0.4.3}/dimples/client/network/session.py +0 -0
- {dimples-0.4.2 → dimples-0.4.3}/dimples/client/network/state.py +0 -0
- {dimples-0.4.2 → dimples-0.4.3}/dimples/client/network/transition.py +0 -0
- {dimples-0.4.2 → dimples-0.4.3}/dimples/client/packer.py +0 -0
- {dimples-0.4.2 → dimples-0.4.3}/dimples/client/processor.py +0 -0
- {dimples-0.4.2 → dimples-0.4.3}/dimples/common/__init__.py +0 -0
- {dimples-0.4.2 → dimples-0.4.3}/dimples/common/anonymous.py +0 -0
- {dimples-0.4.2 → dimples-0.4.3}/dimples/common/ans.py +0 -0
- {dimples-0.4.2 → dimples-0.4.3}/dimples/common/archivist.py +0 -0
- {dimples-0.4.2 → dimples-0.4.3}/dimples/common/compat/__init__.py +0 -0
- {dimples-0.4.2 → dimples-0.4.3}/dimples/common/compat/btc.py +0 -0
- {dimples-0.4.2 → dimples-0.4.3}/dimples/common/compat/compatible.py +0 -0
- {dimples-0.4.2 → dimples-0.4.3}/dimples/common/compat/entity.py +0 -0
- {dimples-0.4.2 → dimples-0.4.3}/dimples/common/compat/meta.py +0 -0
- {dimples-0.4.2 → dimples-0.4.3}/dimples/common/compat/network.py +0 -0
- {dimples-0.4.2 → dimples-0.4.3}/dimples/common/dbi/__init__.py +0 -0
- {dimples-0.4.2 → dimples-0.4.3}/dimples/common/dbi/account.py +0 -0
- {dimples-0.4.2 → dimples-0.4.3}/dimples/common/dbi/message.py +0 -0
- {dimples-0.4.2 → dimples-0.4.3}/dimples/common/dbi/session.py +0 -0
- {dimples-0.4.2 → dimples-0.4.3}/dimples/common/facebook.py +0 -0
- {dimples-0.4.2 → dimples-0.4.3}/dimples/common/messenger.py +0 -0
- {dimples-0.4.2 → dimples-0.4.3}/dimples/common/packer.py +0 -0
- {dimples-0.4.2 → dimples-0.4.3}/dimples/common/protocol/__init__.py +0 -0
- {dimples-0.4.2 → dimples-0.4.3}/dimples/common/protocol/ans.py +0 -0
- {dimples-0.4.2 → dimples-0.4.3}/dimples/common/protocol/block.py +0 -0
- {dimples-0.4.2 → dimples-0.4.3}/dimples/common/protocol/handshake.py +0 -0
- {dimples-0.4.2 → dimples-0.4.3}/dimples/common/protocol/login.py +0 -0
- {dimples-0.4.2 → dimples-0.4.3}/dimples/common/protocol/mute.py +0 -0
- {dimples-0.4.2 → dimples-0.4.3}/dimples/common/protocol/report.py +0 -0
- {dimples-0.4.2 → dimples-0.4.3}/dimples/common/register.py +0 -0
- {dimples-0.4.2 → dimples-0.4.3}/dimples/common/session.py +0 -0
- {dimples-0.4.2 → dimples-0.4.3}/dimples/conn/__init__.py +0 -0
- {dimples-0.4.2 → dimples-0.4.3}/dimples/conn/mars.py +0 -0
- {dimples-0.4.2 → dimples-0.4.3}/dimples/conn/mtp.py +0 -0
- {dimples-0.4.2 → dimples-0.4.3}/dimples/conn/protocol/__init__.py +0 -0
- {dimples-0.4.2 → dimples-0.4.3}/dimples/conn/protocol/mars.py +0 -0
- {dimples-0.4.2 → dimples-0.4.3}/dimples/conn/protocol/ws.py +0 -0
- {dimples-0.4.2 → dimples-0.4.3}/dimples/conn/queue.py +0 -0
- {dimples-0.4.2 → dimples-0.4.3}/dimples/conn/seeker.py +0 -0
- {dimples-0.4.2 → dimples-0.4.3}/dimples/conn/session.py +0 -0
- {dimples-0.4.2 → dimples-0.4.3}/dimples/conn/ws.py +0 -0
- {dimples-0.4.2 → dimples-0.4.3}/dimples/database/__init__.py +0 -0
- {dimples-0.4.2 → dimples-0.4.3}/dimples/database/account.py +0 -0
- {dimples-0.4.2 → dimples-0.4.3}/dimples/database/dos/__init__.py +0 -0
- {dimples-0.4.2 → dimples-0.4.3}/dimples/database/dos/base.py +0 -0
- {dimples-0.4.2 → dimples-0.4.3}/dimples/database/dos/document.py +0 -0
- {dimples-0.4.2 → dimples-0.4.3}/dimples/database/dos/group.py +0 -0
- {dimples-0.4.2 → dimples-0.4.3}/dimples/database/dos/group_history.py +0 -0
- {dimples-0.4.2 → dimples-0.4.3}/dimples/database/dos/group_keys.py +0 -0
- {dimples-0.4.2 → dimples-0.4.3}/dimples/database/dos/login.py +0 -0
- {dimples-0.4.2 → dimples-0.4.3}/dimples/database/dos/meta.py +0 -0
- {dimples-0.4.2 → dimples-0.4.3}/dimples/database/dos/private.py +0 -0
- {dimples-0.4.2 → dimples-0.4.3}/dimples/database/dos/station.py +0 -0
- {dimples-0.4.2 → dimples-0.4.3}/dimples/database/dos/user.py +0 -0
- {dimples-0.4.2 → dimples-0.4.3}/dimples/database/message.py +0 -0
- {dimples-0.4.2 → dimples-0.4.3}/dimples/database/session.py +0 -0
- {dimples-0.4.2 → dimples-0.4.3}/dimples/database/t_cipherkey.py +0 -0
- {dimples-0.4.2 → dimples-0.4.3}/dimples/database/t_document.py +0 -0
- {dimples-0.4.2 → dimples-0.4.3}/dimples/database/t_group.py +0 -0
- {dimples-0.4.2 → dimples-0.4.3}/dimples/database/t_group_history.py +0 -0
- {dimples-0.4.2 → dimples-0.4.3}/dimples/database/t_group_keys.py +0 -0
- {dimples-0.4.2 → dimples-0.4.3}/dimples/database/t_login.py +0 -0
- {dimples-0.4.2 → dimples-0.4.3}/dimples/database/t_message.py +0 -0
- {dimples-0.4.2 → dimples-0.4.3}/dimples/database/t_meta.py +0 -0
- {dimples-0.4.2 → dimples-0.4.3}/dimples/database/t_private.py +0 -0
- {dimples-0.4.2 → dimples-0.4.3}/dimples/database/t_station.py +0 -0
- {dimples-0.4.2 → dimples-0.4.3}/dimples/database/t_user.py +0 -0
- {dimples-0.4.2 → dimples-0.4.3}/dimples/edge/__init__.py +0 -0
- {dimples-0.4.2 → dimples-0.4.3}/dimples/edge/shared.py +0 -0
- {dimples-0.4.2 → dimples-0.4.3}/dimples/edge/start.py +0 -0
- {dimples-0.4.2 → dimples-0.4.3}/dimples/group/__init__.py +0 -0
- {dimples-0.4.2 → dimples-0.4.3}/dimples/group/admin.py +0 -0
- {dimples-0.4.2 → dimples-0.4.3}/dimples/group/builder.py +0 -0
- {dimples-0.4.2 → dimples-0.4.3}/dimples/group/delegate.py +0 -0
- {dimples-0.4.2 → dimples-0.4.3}/dimples/group/emitter.py +0 -0
- {dimples-0.4.2 → dimples-0.4.3}/dimples/group/helper.py +0 -0
- {dimples-0.4.2 → dimples-0.4.3}/dimples/group/manager.py +0 -0
- {dimples-0.4.2 → dimples-0.4.3}/dimples/group/packer.py +0 -0
- {dimples-0.4.2 → dimples-0.4.3}/dimples/register/__init__.py +0 -0
- {dimples-0.4.2 → dimples-0.4.3}/dimples/register/base.py +0 -0
- {dimples-0.4.2 → dimples-0.4.3}/dimples/register/ext.py +0 -0
- {dimples-0.4.2 → dimples-0.4.3}/dimples/register/run.py +0 -0
- {dimples-0.4.2 → dimples-0.4.3}/dimples/register/shared.py +0 -0
- {dimples-0.4.2 → dimples-0.4.3}/dimples/server/__init__.py +0 -0
- {dimples-0.4.2 → dimples-0.4.3}/dimples/server/archivist.py +0 -0
- {dimples-0.4.2 → dimples-0.4.3}/dimples/server/cpu/__init__.py +0 -0
- {dimples-0.4.2 → dimples-0.4.3}/dimples/server/cpu/ans.py +0 -0
- {dimples-0.4.2 → dimples-0.4.3}/dimples/server/cpu/document.py +0 -0
- {dimples-0.4.2 → dimples-0.4.3}/dimples/server/cpu/handshake.py +0 -0
- {dimples-0.4.2 → dimples-0.4.3}/dimples/server/cpu/login.py +0 -0
- {dimples-0.4.2 → dimples-0.4.3}/dimples/server/cpu/report.py +0 -0
- {dimples-0.4.2 → dimples-0.4.3}/dimples/server/dispatcher.py +0 -0
- {dimples-0.4.2 → dimples-0.4.3}/dimples/server/messenger.py +0 -0
- {dimples-0.4.2 → dimples-0.4.3}/dimples/server/packer.py +0 -0
- {dimples-0.4.2 → dimples-0.4.3}/dimples/server/processor.py +0 -0
- {dimples-0.4.2 → dimples-0.4.3}/dimples/server/push.py +0 -0
- {dimples-0.4.2 → dimples-0.4.3}/dimples/server/session.py +0 -0
- {dimples-0.4.2 → dimples-0.4.3}/dimples/server/session_center.py +0 -0
- {dimples-0.4.2 → dimples-0.4.3}/dimples/server/trace.py +0 -0
- {dimples-0.4.2 → dimples-0.4.3}/dimples/station/__init__.py +0 -0
- {dimples-0.4.2 → dimples-0.4.3}/dimples/station/handler.py +0 -0
- {dimples-0.4.2 → dimples-0.4.3}/dimples/station/shared.py +0 -0
- {dimples-0.4.2 → dimples-0.4.3}/dimples/station/start.py +0 -0
- {dimples-0.4.2 → dimples-0.4.3}/dimples/utils/__init__.py +0 -0
- {dimples-0.4.2 → dimples-0.4.3}/dimples/utils/cache.py +0 -0
- {dimples-0.4.2 → dimples-0.4.3}/dimples/utils/config.py +0 -0
- {dimples-0.4.2 → dimples-0.4.3}/dimples/utils/dos.py +0 -0
- {dimples-0.4.2 → dimples-0.4.3}/dimples/utils/log.py +0 -0
- {dimples-0.4.2 → dimples-0.4.3}/dimples/utils/singleton.py +0 -0
- {dimples-0.4.2 → dimples-0.4.3}/dimples.egg-info/SOURCES.txt +0 -0
- {dimples-0.4.2 → dimples-0.4.3}/dimples.egg-info/dependency_links.txt +0 -0
- {dimples-0.4.2 → dimples-0.4.3}/dimples.egg-info/entry_points.txt +0 -0
- {dimples-0.4.2 → dimples-0.4.3}/dimples.egg-info/top_level.txt +0 -0
- {dimples-0.4.2 → dimples-0.4.3}/setup.cfg +0 -0
|
@@ -81,6 +81,11 @@ class Terminal(Runner, StateDelegate, Logging):
|
|
|
81
81
|
now = time.time()
|
|
82
82
|
return now < (self.__last_time + 600)
|
|
83
83
|
|
|
84
|
+
# @property # Override
|
|
85
|
+
# def running(self) -> bool:
|
|
86
|
+
# if super().running:
|
|
87
|
+
# return self.is_alive
|
|
88
|
+
|
|
84
89
|
def start(self):
|
|
85
90
|
thread = threading.Thread(target=self.run, daemon=True)
|
|
86
91
|
thread.start()
|
|
@@ -72,12 +72,14 @@ class BaseGate(StarGate, Generic[H], ABC):
|
|
|
72
72
|
return super()._get_docker(remote=remote, local=None)
|
|
73
73
|
|
|
74
74
|
# Override
|
|
75
|
-
def _set_docker(self,
|
|
76
|
-
|
|
75
|
+
def _set_docker(self, docker: Docker,
|
|
76
|
+
remote: SocketAddress, local: Optional[SocketAddress]):
|
|
77
|
+
super()._set_docker(docker=docker, remote=remote, local=None)
|
|
77
78
|
|
|
78
79
|
# Override
|
|
79
|
-
def _remove_docker(self,
|
|
80
|
-
|
|
80
|
+
def _remove_docker(self, docker: Optional[Docker],
|
|
81
|
+
remote: SocketAddress, local: Optional[SocketAddress]) -> Optional[Docker]:
|
|
82
|
+
return super()._remove_docker(docker=docker, remote=remote, local=None)
|
|
81
83
|
|
|
82
84
|
# Override
|
|
83
85
|
def _heartbeat(self, connection: Connection):
|
|
@@ -194,7 +196,7 @@ class CommonGate(BaseGate, Logging, Generic[H], ABC):
|
|
|
194
196
|
if docker is None:
|
|
195
197
|
assert False, 'failed to create docker: %s, %s' % (remote, local)
|
|
196
198
|
else:
|
|
197
|
-
self._set_docker(
|
|
199
|
+
self._set_docker(docker=docker, remote=docker.remote_address, local=docker.local_address)
|
|
198
200
|
return docker
|
|
199
201
|
|
|
200
202
|
|
|
@@ -58,7 +58,7 @@ from .queue import MessageQueue, MessageWrapper
|
|
|
58
58
|
class StreamServerHub(ServerHub):
|
|
59
59
|
|
|
60
60
|
def put_channel(self, channel: StreamChannel):
|
|
61
|
-
self._set_channel(
|
|
61
|
+
self._set_channel(channel=channel, remote=channel.remote_address, local=None)
|
|
62
62
|
|
|
63
63
|
# Override
|
|
64
64
|
def _get_channel(self, remote: Optional[SocketAddress], local: Optional[SocketAddress]) -> Optional[Channel]:
|
|
@@ -92,7 +92,7 @@ class StreamServerHub(ServerHub):
|
|
|
92
92
|
class StreamClientHub(ClientHub):
|
|
93
93
|
|
|
94
94
|
def put_channel(self, channel: StreamChannel):
|
|
95
|
-
self._set_channel(
|
|
95
|
+
self._set_channel(channel=channel, remote=channel.remote_address, local=None)
|
|
96
96
|
|
|
97
97
|
# Override
|
|
98
98
|
def _get_channel(self, remote: Optional[SocketAddress], local: Optional[SocketAddress]) -> Optional[Channel]:
|
|
@@ -112,9 +112,21 @@ class Octopus(Runner, Logging):
|
|
|
112
112
|
self.__outer_map[identifier] = terminal
|
|
113
113
|
|
|
114
114
|
def connect(self, host: str, port: int = 9394):
|
|
115
|
-
terminal
|
|
115
|
+
# create a new terminal for remote host:port
|
|
116
116
|
with self.__outer_lock:
|
|
117
|
+
# check exist terminals
|
|
118
|
+
outers = set(self.__outers)
|
|
119
|
+
for out in outers:
|
|
120
|
+
# check station
|
|
121
|
+
station = out.session.station
|
|
122
|
+
if port == station.port and host == station.host:
|
|
123
|
+
self.warning(msg='connection already exists: (%s, %d)' % (host, port))
|
|
124
|
+
# self.__outers.discard(out)
|
|
125
|
+
return None
|
|
126
|
+
# create new terminal
|
|
127
|
+
terminal = self.create_outer_terminal(host=host, port=port)
|
|
117
128
|
self.__outers.add(terminal)
|
|
129
|
+
return terminal
|
|
118
130
|
|
|
119
131
|
def start(self):
|
|
120
132
|
thread = threading.Thread(target=self.run)
|
|
@@ -139,24 +151,33 @@ class Octopus(Runner, Logging):
|
|
|
139
151
|
assert len(providers) > 0, 'service provider not found'
|
|
140
152
|
gsp = providers[0].identifier
|
|
141
153
|
neighbors = db.all_stations(provider=gsp)
|
|
154
|
+
if neighbors is not None:
|
|
155
|
+
neighbors = neighbors.copy()
|
|
142
156
|
# get all outer terminals
|
|
143
157
|
with self.__outer_lock:
|
|
144
158
|
outers = set(self.__outers)
|
|
159
|
+
self.debug(msg='checking %d client(s) with %d neighbor(s)' % (len(outers), len(neighbors)))
|
|
145
160
|
for out in outers:
|
|
146
161
|
# check station
|
|
147
162
|
station = out.session.station
|
|
163
|
+
sid = station.identifier
|
|
148
164
|
host = station.host
|
|
149
165
|
port = station.port
|
|
166
|
+
# reduce neighbors
|
|
150
167
|
for item in neighbors:
|
|
151
168
|
if item.port == port and item.host == host:
|
|
152
169
|
# got
|
|
153
170
|
neighbors.remove(item)
|
|
154
171
|
break
|
|
172
|
+
# check outer client
|
|
155
173
|
if out.is_alive:
|
|
156
|
-
#
|
|
174
|
+
# skip running client
|
|
157
175
|
continue
|
|
176
|
+
else:
|
|
177
|
+
self.warning(msg='stop timeout client: %s (%s:%d)' % (sid, host, port))
|
|
178
|
+
out.stop()
|
|
158
179
|
# remove dead terminal
|
|
159
|
-
sid
|
|
180
|
+
self.debug(msg='removing inactive client: %s (%s:%d)' % (sid, host, port))
|
|
160
181
|
with self.__outer_lock:
|
|
161
182
|
self.__outers.discard(out)
|
|
162
183
|
if sid is not None:
|
|
@@ -165,7 +186,7 @@ class Octopus(Runner, Logging):
|
|
|
165
186
|
for item in neighbors:
|
|
166
187
|
host = item.host
|
|
167
188
|
port = item.port
|
|
168
|
-
self.
|
|
189
|
+
self.debug(msg='connecting neighbor station (%s:%d), client count: %d' % (host, port, len(self.__outers)))
|
|
169
190
|
self.connect(host=host, port=port)
|
|
170
191
|
return False
|
|
171
192
|
|
|
@@ -14,7 +14,7 @@ import io
|
|
|
14
14
|
|
|
15
15
|
from setuptools import setup, find_packages
|
|
16
16
|
|
|
17
|
-
__version__ = '0.4.
|
|
17
|
+
__version__ = '0.4.3'
|
|
18
18
|
__author__ = 'Albert Moky'
|
|
19
19
|
__contact__ = 'albert.moky@gmail.com'
|
|
20
20
|
|
|
@@ -58,8 +58,8 @@ setup(
|
|
|
58
58
|
'dkd>=1.0.2',
|
|
59
59
|
'mkm>=1.0.2',
|
|
60
60
|
|
|
61
|
-
'startrek>=1.0.
|
|
62
|
-
'tcp>=1.0.
|
|
63
|
-
'udp>=1.0.
|
|
61
|
+
'startrek>=1.0.3',
|
|
62
|
+
'tcp>=1.0.3',
|
|
63
|
+
'udp>=1.0.3',
|
|
64
64
|
]
|
|
65
65
|
)
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|