sunholo 0.64.18__tar.gz → 0.66.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.
- {sunholo-0.64.18 → sunholo-0.66.0}/PKG-INFO +2 -2
- {sunholo-0.64.18 → sunholo-0.66.0}/setup.py +1 -1
- {sunholo-0.64.18 → sunholo-0.66.0}/sunholo/agents/swagger.py +54 -4
- {sunholo-0.64.18 → sunholo-0.66.0}/sunholo/utils/config.py +2 -1
- {sunholo-0.64.18 → sunholo-0.66.0}/sunholo.egg-info/PKG-INFO +2 -2
- {sunholo-0.64.18 → sunholo-0.66.0}/LICENSE.txt +0 -0
- {sunholo-0.64.18 → sunholo-0.66.0}/MANIFEST.in +0 -0
- {sunholo-0.64.18 → sunholo-0.66.0}/README.md +0 -0
- {sunholo-0.64.18 → sunholo-0.66.0}/setup.cfg +0 -0
- {sunholo-0.64.18 → sunholo-0.66.0}/sunholo/__init__.py +0 -0
- {sunholo-0.64.18 → sunholo-0.66.0}/sunholo/agents/__init__.py +0 -0
- {sunholo-0.64.18 → sunholo-0.66.0}/sunholo/agents/chat_history.py +0 -0
- {sunholo-0.64.18 → sunholo-0.66.0}/sunholo/agents/dispatch_to_qa.py +0 -0
- {sunholo-0.64.18 → sunholo-0.66.0}/sunholo/agents/fastapi/__init__.py +0 -0
- {sunholo-0.64.18 → sunholo-0.66.0}/sunholo/agents/fastapi/base.py +0 -0
- {sunholo-0.64.18 → sunholo-0.66.0}/sunholo/agents/fastapi/qna_routes.py +0 -0
- {sunholo-0.64.18 → sunholo-0.66.0}/sunholo/agents/flask/__init__.py +0 -0
- {sunholo-0.64.18 → sunholo-0.66.0}/sunholo/agents/flask/base.py +0 -0
- {sunholo-0.64.18 → sunholo-0.66.0}/sunholo/agents/flask/qna_routes.py +0 -0
- {sunholo-0.64.18 → sunholo-0.66.0}/sunholo/agents/langserve.py +0 -0
- {sunholo-0.64.18 → sunholo-0.66.0}/sunholo/agents/pubsub.py +0 -0
- {sunholo-0.64.18 → sunholo-0.66.0}/sunholo/agents/route.py +0 -0
- {sunholo-0.64.18 → sunholo-0.66.0}/sunholo/agents/special_commands.py +0 -0
- {sunholo-0.64.18 → sunholo-0.66.0}/sunholo/archive/__init__.py +0 -0
- {sunholo-0.64.18 → sunholo-0.66.0}/sunholo/archive/archive.py +0 -0
- {sunholo-0.64.18 → sunholo-0.66.0}/sunholo/auth/__init__.py +0 -0
- {sunholo-0.64.18 → sunholo-0.66.0}/sunholo/auth/run.py +0 -0
- {sunholo-0.64.18 → sunholo-0.66.0}/sunholo/bots/__init__.py +0 -0
- {sunholo-0.64.18 → sunholo-0.66.0}/sunholo/bots/discord.py +0 -0
- {sunholo-0.64.18 → sunholo-0.66.0}/sunholo/bots/github_webhook.py +0 -0
- {sunholo-0.64.18 → sunholo-0.66.0}/sunholo/bots/webapp.py +0 -0
- {sunholo-0.64.18 → sunholo-0.66.0}/sunholo/chunker/__init__.py +0 -0
- {sunholo-0.64.18 → sunholo-0.66.0}/sunholo/chunker/data_to_embed_pubsub.py +0 -0
- {sunholo-0.64.18 → sunholo-0.66.0}/sunholo/chunker/doc_handling.py +0 -0
- {sunholo-0.64.18 → sunholo-0.66.0}/sunholo/chunker/images.py +0 -0
- {sunholo-0.64.18 → sunholo-0.66.0}/sunholo/chunker/loaders.py +0 -0
- {sunholo-0.64.18 → sunholo-0.66.0}/sunholo/chunker/message_data.py +0 -0
- {sunholo-0.64.18 → sunholo-0.66.0}/sunholo/chunker/pdfs.py +0 -0
- {sunholo-0.64.18 → sunholo-0.66.0}/sunholo/chunker/publish.py +0 -0
- {sunholo-0.64.18 → sunholo-0.66.0}/sunholo/chunker/splitter.py +0 -0
- {sunholo-0.64.18 → sunholo-0.66.0}/sunholo/cli/__init__.py +0 -0
- {sunholo-0.64.18 → sunholo-0.66.0}/sunholo/cli/chat_vac.py +0 -0
- {sunholo-0.64.18 → sunholo-0.66.0}/sunholo/cli/cli.py +0 -0
- {sunholo-0.64.18 → sunholo-0.66.0}/sunholo/cli/cli_init.py +0 -0
- {sunholo-0.64.18 → sunholo-0.66.0}/sunholo/cli/configs.py +0 -0
- {sunholo-0.64.18 → sunholo-0.66.0}/sunholo/cli/deploy.py +0 -0
- {sunholo-0.64.18 → sunholo-0.66.0}/sunholo/cli/embedder.py +0 -0
- {sunholo-0.64.18 → sunholo-0.66.0}/sunholo/cli/merge_texts.py +0 -0
- {sunholo-0.64.18 → sunholo-0.66.0}/sunholo/cli/run_proxy.py +0 -0
- {sunholo-0.64.18 → sunholo-0.66.0}/sunholo/cli/sun_rich.py +0 -0
- {sunholo-0.64.18 → sunholo-0.66.0}/sunholo/cli/swagger.py +0 -0
- {sunholo-0.64.18 → sunholo-0.66.0}/sunholo/components/__init__.py +0 -0
- {sunholo-0.64.18 → sunholo-0.66.0}/sunholo/components/llm.py +0 -0
- {sunholo-0.64.18 → sunholo-0.66.0}/sunholo/components/retriever.py +0 -0
- {sunholo-0.64.18 → sunholo-0.66.0}/sunholo/components/vectorstore.py +0 -0
- {sunholo-0.64.18 → sunholo-0.66.0}/sunholo/database/__init__.py +0 -0
- {sunholo-0.64.18 → sunholo-0.66.0}/sunholo/database/alloydb.py +0 -0
- {sunholo-0.64.18 → sunholo-0.66.0}/sunholo/database/database.py +0 -0
- {sunholo-0.64.18 → sunholo-0.66.0}/sunholo/database/lancedb.py +0 -0
- {sunholo-0.64.18 → sunholo-0.66.0}/sunholo/database/sql/sb/create_function.sql +0 -0
- {sunholo-0.64.18 → sunholo-0.66.0}/sunholo/database/sql/sb/create_function_time.sql +0 -0
- {sunholo-0.64.18 → sunholo-0.66.0}/sunholo/database/sql/sb/create_table.sql +0 -0
- {sunholo-0.64.18 → sunholo-0.66.0}/sunholo/database/sql/sb/delete_source_row.sql +0 -0
- {sunholo-0.64.18 → sunholo-0.66.0}/sunholo/database/sql/sb/return_sources.sql +0 -0
- {sunholo-0.64.18 → sunholo-0.66.0}/sunholo/database/sql/sb/setup.sql +0 -0
- {sunholo-0.64.18 → sunholo-0.66.0}/sunholo/database/static_dbs.py +0 -0
- {sunholo-0.64.18 → sunholo-0.66.0}/sunholo/database/uuid.py +0 -0
- {sunholo-0.64.18 → sunholo-0.66.0}/sunholo/embedder/__init__.py +0 -0
- {sunholo-0.64.18 → sunholo-0.66.0}/sunholo/embedder/embed_chunk.py +0 -0
- {sunholo-0.64.18 → sunholo-0.66.0}/sunholo/gcs/__init__.py +0 -0
- {sunholo-0.64.18 → sunholo-0.66.0}/sunholo/gcs/add_file.py +0 -0
- {sunholo-0.64.18 → sunholo-0.66.0}/sunholo/gcs/download_url.py +0 -0
- {sunholo-0.64.18 → sunholo-0.66.0}/sunholo/gcs/metadata.py +0 -0
- {sunholo-0.64.18 → sunholo-0.66.0}/sunholo/langfuse/__init__.py +0 -0
- {sunholo-0.64.18 → sunholo-0.66.0}/sunholo/langfuse/callback.py +0 -0
- {sunholo-0.64.18 → sunholo-0.66.0}/sunholo/langfuse/prompts.py +0 -0
- {sunholo-0.64.18 → sunholo-0.66.0}/sunholo/llamaindex/__init__.py +0 -0
- {sunholo-0.64.18 → sunholo-0.66.0}/sunholo/llamaindex/generate.py +0 -0
- {sunholo-0.64.18 → sunholo-0.66.0}/sunholo/llamaindex/get_files.py +0 -0
- {sunholo-0.64.18 → sunholo-0.66.0}/sunholo/llamaindex/import_files.py +0 -0
- {sunholo-0.64.18 → sunholo-0.66.0}/sunholo/logging.py +0 -0
- {sunholo-0.64.18 → sunholo-0.66.0}/sunholo/lookup/__init__.py +0 -0
- {sunholo-0.64.18 → sunholo-0.66.0}/sunholo/lookup/model_lookup.yaml +0 -0
- {sunholo-0.64.18 → sunholo-0.66.0}/sunholo/patches/__init__.py +0 -0
- {sunholo-0.64.18 → sunholo-0.66.0}/sunholo/patches/langchain/__init__.py +0 -0
- {sunholo-0.64.18 → sunholo-0.66.0}/sunholo/patches/langchain/lancedb.py +0 -0
- {sunholo-0.64.18 → sunholo-0.66.0}/sunholo/patches/langchain/vertexai.py +0 -0
- {sunholo-0.64.18 → sunholo-0.66.0}/sunholo/pubsub/__init__.py +0 -0
- {sunholo-0.64.18 → sunholo-0.66.0}/sunholo/pubsub/process_pubsub.py +0 -0
- {sunholo-0.64.18 → sunholo-0.66.0}/sunholo/pubsub/pubsub_manager.py +0 -0
- {sunholo-0.64.18 → sunholo-0.66.0}/sunholo/qna/__init__.py +0 -0
- {sunholo-0.64.18 → sunholo-0.66.0}/sunholo/qna/parsers.py +0 -0
- {sunholo-0.64.18 → sunholo-0.66.0}/sunholo/qna/retry.py +0 -0
- {sunholo-0.64.18 → sunholo-0.66.0}/sunholo/streaming/__init__.py +0 -0
- {sunholo-0.64.18 → sunholo-0.66.0}/sunholo/streaming/content_buffer.py +0 -0
- {sunholo-0.64.18 → sunholo-0.66.0}/sunholo/streaming/langserve.py +0 -0
- {sunholo-0.64.18 → sunholo-0.66.0}/sunholo/streaming/stream_lookup.py +0 -0
- {sunholo-0.64.18 → sunholo-0.66.0}/sunholo/streaming/streaming.py +0 -0
- {sunholo-0.64.18 → sunholo-0.66.0}/sunholo/summarise/__init__.py +0 -0
- {sunholo-0.64.18 → sunholo-0.66.0}/sunholo/summarise/summarise.py +0 -0
- {sunholo-0.64.18 → sunholo-0.66.0}/sunholo/utils/__init__.py +0 -0
- {sunholo-0.64.18 → sunholo-0.66.0}/sunholo/utils/big_context.py +0 -0
- {sunholo-0.64.18 → sunholo-0.66.0}/sunholo/utils/config_schema.py +0 -0
- {sunholo-0.64.18 → sunholo-0.66.0}/sunholo/utils/gcp.py +0 -0
- {sunholo-0.64.18 → sunholo-0.66.0}/sunholo/utils/gcp_project.py +0 -0
- {sunholo-0.64.18 → sunholo-0.66.0}/sunholo/utils/parsers.py +0 -0
- {sunholo-0.64.18 → sunholo-0.66.0}/sunholo/utils/timedelta.py +0 -0
- {sunholo-0.64.18 → sunholo-0.66.0}/sunholo/utils/user_ids.py +0 -0
- {sunholo-0.64.18 → sunholo-0.66.0}/sunholo/utils/version.py +0 -0
- {sunholo-0.64.18 → sunholo-0.66.0}/sunholo/vertex/__init__.py +0 -0
- {sunholo-0.64.18 → sunholo-0.66.0}/sunholo/vertex/init.py +0 -0
- {sunholo-0.64.18 → sunholo-0.66.0}/sunholo/vertex/memory_tools.py +0 -0
- {sunholo-0.64.18 → sunholo-0.66.0}/sunholo/vertex/safety.py +0 -0
- {sunholo-0.64.18 → sunholo-0.66.0}/sunholo.egg-info/SOURCES.txt +0 -0
- {sunholo-0.64.18 → sunholo-0.66.0}/sunholo.egg-info/dependency_links.txt +0 -0
- {sunholo-0.64.18 → sunholo-0.66.0}/sunholo.egg-info/entry_points.txt +0 -0
- {sunholo-0.64.18 → sunholo-0.66.0}/sunholo.egg-info/requires.txt +0 -0
- {sunholo-0.64.18 → sunholo-0.66.0}/sunholo.egg-info/top_level.txt +0 -0
- {sunholo-0.64.18 → sunholo-0.66.0}/tests/test_chat_history.py +0 -0
- {sunholo-0.64.18 → sunholo-0.66.0}/tests/test_chunker.py +0 -0
- {sunholo-0.64.18 → sunholo-0.66.0}/tests/test_config.py +0 -0
- {sunholo-0.64.18 → sunholo-0.66.0}/tests/test_dispatch_to_qa.py +0 -0
- {sunholo-0.64.18 → sunholo-0.66.0}/tests/test_swagger.py +0 -0
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: sunholo
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.66.0
|
|
4
4
|
Summary: Large Language Model DevOps - a package to help deploy LLMs to the Cloud.
|
|
5
5
|
Home-page: https://github.com/sunholo-data/sunholo-py
|
|
6
|
-
Download-URL: https://github.com/sunholo-data/sunholo-py/archive/refs/tags/v0.
|
|
6
|
+
Download-URL: https://github.com/sunholo-data/sunholo-py/archive/refs/tags/v0.66.0.tar.gz
|
|
7
7
|
Author: Holosun ApS
|
|
8
8
|
Author-email: multivac@sunholo.com
|
|
9
9
|
License: Apache License, Version 2.0
|
|
@@ -130,7 +130,19 @@ def generate_swagger(vac_config, agent_config):
|
|
|
130
130
|
'host': '${_ENDPOINTS_HOST}',
|
|
131
131
|
'schemes': ['https'],
|
|
132
132
|
'produces': ['application/json'],
|
|
133
|
-
'paths': {}
|
|
133
|
+
'paths': {},
|
|
134
|
+
'securityDefinitions': {
|
|
135
|
+
'ApiKeyAuth': { # For private VAC endpoint
|
|
136
|
+
'type': 'apiKey',
|
|
137
|
+
'name': 'x-api-key', # Custom header name for API key
|
|
138
|
+
'in': 'header'
|
|
139
|
+
},
|
|
140
|
+
'None': { # For public documentation
|
|
141
|
+
'type': 'apiKey',
|
|
142
|
+
'name': 'allow', # Dummy parameter for public access
|
|
143
|
+
'in': 'query' # Use query parameter to avoid interfering with other headers
|
|
144
|
+
}
|
|
145
|
+
}
|
|
134
146
|
}
|
|
135
147
|
|
|
136
148
|
vac_services = vac_config['vac']
|
|
@@ -146,9 +158,24 @@ def generate_swagger(vac_config, agent_config):
|
|
|
146
158
|
log.warning(f"Failed to find URL stem for {vector_name}/{agent_type} - using {stem} instead")
|
|
147
159
|
|
|
148
160
|
for method, endpoints in agent_config_paths.items():
|
|
149
|
-
if
|
|
150
|
-
|
|
161
|
+
# controls if get requests are protected or not
|
|
162
|
+
do_auth = True
|
|
163
|
+
|
|
164
|
+
# default get: noauth, post: auth
|
|
165
|
+
if method not in ['get', 'post', 'get-auth', 'post-noauth']:
|
|
151
166
|
continue
|
|
167
|
+
|
|
168
|
+
if method == 'get-auth':
|
|
169
|
+
do_auth = True
|
|
170
|
+
method = 'get'
|
|
171
|
+
elif method == 'post-noauth':
|
|
172
|
+
do_auth = False
|
|
173
|
+
method = 'post'
|
|
174
|
+
elif method == 'get':
|
|
175
|
+
do_auth = False
|
|
176
|
+
elif method == 'post':
|
|
177
|
+
do_auth = True # not needed but to be clear whats happening
|
|
178
|
+
|
|
152
179
|
for endpoint_key, endpoint_template in endpoints.items():
|
|
153
180
|
endpoint_template = endpoint_template.strip()
|
|
154
181
|
endpoint_address = endpoint_template.replace("{stem}", stem).replace("{vector_name}", vector_name).strip()
|
|
@@ -161,6 +188,8 @@ def generate_swagger(vac_config, agent_config):
|
|
|
161
188
|
|
|
162
189
|
operation_id = f"{method}_{agent_type}_{endpoint_key}_{vector_name}"
|
|
163
190
|
|
|
191
|
+
security = [{'ApiKeyAuth': []}] if do_auth else [{'None': []}]
|
|
192
|
+
|
|
164
193
|
swagger_template['paths'][endpoint_path][method] = {
|
|
165
194
|
'summary': f"{method.capitalize()} {vector_name}",
|
|
166
195
|
'operationId': operation_id,
|
|
@@ -168,6 +197,7 @@ def generate_swagger(vac_config, agent_config):
|
|
|
168
197
|
'address': endpoint_address,
|
|
169
198
|
'protocol': 'h2'
|
|
170
199
|
},
|
|
200
|
+
'security': security,
|
|
171
201
|
'responses': copy.deepcopy(agent_config_paths.get('response', {}).get(endpoint_key, {
|
|
172
202
|
'200': {
|
|
173
203
|
'description': 'Default - A successful response',
|
|
@@ -191,9 +221,26 @@ def generate_swagger(vac_config, agent_config):
|
|
|
191
221
|
stem = f"${{{agent_type.upper()}_BACKEND_URL}}"
|
|
192
222
|
log.warning(f"Failed to find URL stem for {vector_name}/{agent_type} - using {stem} instead")
|
|
193
223
|
|
|
224
|
+
|
|
194
225
|
for method, endpoints in default_agent_config.items():
|
|
195
|
-
if
|
|
226
|
+
# controls if get requests are protected or not
|
|
227
|
+
do_auth = True
|
|
228
|
+
|
|
229
|
+
# default get: noauth, post: auth
|
|
230
|
+
if method not in ['get', 'post', 'get-auth', 'post-noauth']:
|
|
196
231
|
continue
|
|
232
|
+
|
|
233
|
+
if method == 'get-auth':
|
|
234
|
+
do_auth = True
|
|
235
|
+
method = 'get'
|
|
236
|
+
elif method == 'post-noauth':
|
|
237
|
+
do_auth = False
|
|
238
|
+
method = 'post'
|
|
239
|
+
elif method == 'get':
|
|
240
|
+
do_auth = False
|
|
241
|
+
elif method == 'post':
|
|
242
|
+
do_auth = True # not needed but to be clear whats happening
|
|
243
|
+
|
|
197
244
|
for endpoint_key, endpoint_template in endpoints.items():
|
|
198
245
|
endpoint_template = endpoint_template.strip()
|
|
199
246
|
endpoint_address = endpoint_template.replace("{stem}", stem).replace("{vector_name}", vector_name).strip()
|
|
@@ -205,6 +252,8 @@ def generate_swagger(vac_config, agent_config):
|
|
|
205
252
|
swagger_template['paths'][endpoint_path] = {}
|
|
206
253
|
|
|
207
254
|
operation_id = f"{method}_{agent_type}_{endpoint_key}_{vector_name}"
|
|
255
|
+
|
|
256
|
+
security = [{'ApiKeyAuth': []}] if do_auth else [{'None': []}]
|
|
208
257
|
|
|
209
258
|
swagger_template['paths'][endpoint_path][method] = {
|
|
210
259
|
'summary': f"{method.capitalize()} {agent_type}",
|
|
@@ -213,6 +262,7 @@ def generate_swagger(vac_config, agent_config):
|
|
|
213
262
|
'address': endpoint_address,
|
|
214
263
|
'protocol': 'h2'
|
|
215
264
|
},
|
|
265
|
+
'security': security,
|
|
216
266
|
'responses': copy.deepcopy(default_agent_config.get('response', {}).get(endpoint_key, {
|
|
217
267
|
'200': {
|
|
218
268
|
'description': 'Default - A successful response',
|
|
@@ -82,7 +82,6 @@ def load_all_configs():
|
|
|
82
82
|
cached_config, cache_time = config_cache[filename]
|
|
83
83
|
time_to_recache = (current_time - cache_time)
|
|
84
84
|
if time_to_recache < timedelta(minutes=5):
|
|
85
|
-
log.debug(f"Returning cached config for {filename} - recache in {format_timedelta(timedelta(minutes=5) - time_to_recache)}")
|
|
86
85
|
config = cached_config
|
|
87
86
|
else:
|
|
88
87
|
config = reload_config_file(config_file, filename)
|
|
@@ -94,6 +93,8 @@ def load_all_configs():
|
|
|
94
93
|
configs_by_kind[kind] = config
|
|
95
94
|
else:
|
|
96
95
|
log.warning(f"No 'kind' found in {filename}")
|
|
96
|
+
|
|
97
|
+
#log.debug(f"Config recache in {format_timedelta(timedelta(minutes=5) - time_to_recache)}")
|
|
97
98
|
|
|
98
99
|
return configs_by_kind
|
|
99
100
|
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: sunholo
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.66.0
|
|
4
4
|
Summary: Large Language Model DevOps - a package to help deploy LLMs to the Cloud.
|
|
5
5
|
Home-page: https://github.com/sunholo-data/sunholo-py
|
|
6
|
-
Download-URL: https://github.com/sunholo-data/sunholo-py/archive/refs/tags/v0.
|
|
6
|
+
Download-URL: https://github.com/sunholo-data/sunholo-py/archive/refs/tags/v0.66.0.tar.gz
|
|
7
7
|
Author: Holosun ApS
|
|
8
8
|
Author-email: multivac@sunholo.com
|
|
9
9
|
License: Apache License, Version 2.0
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|