Miguel commited on
Commit
c59ae19
·
2 Parent(s): 8e93ae4 9320ddd

Merge branch 'main' of https://huggingface.co/spaces/Agents-MCP-Hackathon/TDAgentTools

Browse files
app.py CHANGED
@@ -2,6 +2,12 @@ from typing import NamedTuple
2
 
3
  import gradio as gr
4
 
 
 
 
 
 
 
5
  from tdagent.tools.get_url_content import gr_get_url_http_content
6
  from tdagent.tools.internal_company_user_search import gr_internal_company
7
  from tdagent.tools.lookup_company_cloud_account_information import (
@@ -33,6 +39,10 @@ TOOLS = (
33
  # ToolInfo("Query WHOIS", gr_query_whois),
34
  ToolInfo("Query RDAP", gr_query_rdap),
35
  ToolInfo("Virus Total URL info", gr_virus_total_url_info),
 
 
 
 
36
  ## Fake tools
37
  ToolInfo("Fake company directory", gr_internal_company),
38
  ToolInfo(
 
2
 
3
  import gradio as gr
4
 
5
+ from tdagent.tools.get_domain_information import (
6
+ dns_enumeration_tool,
7
+ extractor_of_ioc_from_threatfox_tool,
8
+ geo_location_tool,
9
+ scrap_subdomains_tool,
10
+ )
11
  from tdagent.tools.get_url_content import gr_get_url_http_content
12
  from tdagent.tools.internal_company_user_search import gr_internal_company
13
  from tdagent.tools.lookup_company_cloud_account_information import (
 
39
  # ToolInfo("Query WHOIS", gr_query_whois),
40
  ToolInfo("Query RDAP", gr_query_rdap),
41
  ToolInfo("Virus Total URL info", gr_virus_total_url_info),
42
+ ToolInfo("Get IP's Location", geo_location_tool),
43
+ ToolInfo("DNS Enumerator", dns_enumeration_tool),
44
+ ToolInfo("Subdomain Retriever", scrap_subdomains_tool),
45
+ ToolInfo("Extractor of IoCs", extractor_of_ioc_from_threatfox_tool),
46
  ## Fake tools
47
  ToolInfo("Fake company directory", gr_internal_company),
48
  ToolInfo(
pyproject.toml CHANGED
@@ -16,6 +16,7 @@ dependencies = [
16
  "attackcti>=0.5.4",
17
  "black>=25.1.0",
18
  "cachetools>=6.0.0",
 
19
  "gradio[mcp]>=5.32.1",
20
  "python-whois>=0.9.5",
21
  "requests>=2.32.3",
 
16
  "attackcti>=0.5.4",
17
  "black>=25.1.0",
18
  "cachetools>=6.0.0",
19
+ "dnspython>=2.7.0",
20
  "gradio[mcp]>=5.32.1",
21
  "python-whois>=0.9.5",
22
  "requests>=2.32.3",
requirements-dev.txt CHANGED
@@ -1,109 +1,309 @@
1
  # This file was autogenerated by uv via the following command:
2
  # uv export --format requirements-txt --no-hashes --group dev --group test -o requirements-dev.txt
3
  aiofiles==24.1.0
 
 
 
4
  aiohappyeyeballs==2.6.1
 
5
  aiohttp==3.12.8
 
6
  aiosignal==1.3.2
 
7
  annotated-types==0.7.0
 
8
  anyio==4.9.0
 
 
 
 
 
 
9
  async-timeout==5.0.1 ; python_full_version < '3.11'
 
10
  attrs==25.3.0
 
11
  audioop-lts==0.2.1 ; python_full_version >= '3.13'
 
12
  boolean-py==5.0
 
13
  cachecontrol==0.14.3
 
14
  cachetools==6.0.0
 
15
  certifi==2025.4.26
 
 
 
 
16
  cfgv==3.4.0
 
17
  charset-normalizer==3.4.2
 
18
  click==8.2.1 ; sys_platform != 'emscripten'
 
 
 
19
  colorama==0.4.6 ; sys_platform == 'win32'
 
 
 
 
20
  coverage==7.8.2
 
21
  cyclonedx-python-lib==9.1.0
 
22
  defusedxml==0.7.1
 
23
  distlib==0.3.9
 
 
 
24
  exceptiongroup==1.3.0 ; python_full_version < '3.11'
 
 
 
25
  fastapi==0.115.12
 
26
  ffmpy==0.6.0
 
27
  filelock==3.18.0
 
 
 
 
28
  frozenlist==1.6.2
 
 
 
29
  fsspec==2025.5.1
 
 
 
30
  gradio==5.32.1
 
31
  gradio-client==1.10.2
 
32
  groovy==0.1.2
 
33
  h11==0.16.0
 
 
 
34
  hf-xet==1.1.2 ; platform_machine == 'aarch64' or platform_machine == 'amd64' or platform_machine == 'arm64' or platform_machine == 'x86_64'
 
35
  httpcore==1.0.9
 
36
  httpx==0.28.1
 
 
 
 
 
37
  httpx-sse==0.4.0
 
38
  huggingface-hub==0.32.4
 
 
 
39
  identify==2.6.12
 
40
  idna==3.10
 
 
 
 
 
41
  iniconfig==2.1.0
 
42
  jinja2==3.1.6
 
43
  license-expression==30.4.1
 
44
  markdown-it-py==3.0.0
 
45
  markupsafe==3.0.2
 
 
 
46
  mcp==1.9.0
 
47
  mdurl==0.1.2
 
48
  msgpack==1.1.0
 
49
  multidict==6.4.4
 
 
 
50
  mypy==1.16.0
51
  mypy-extensions==1.1.0
 
52
  nodeenv==1.9.1
 
53
  numpy==2.2.6
 
 
 
54
  orjson==3.10.18
 
55
  packageurl-python==0.16.0
 
56
  packaging==25.0
 
 
 
 
 
 
 
57
  pandas==2.2.3
 
58
  pathspec==0.12.1
 
59
  pillow==11.2.1
 
60
  pip==25.1.1
 
61
  pip-api==0.0.34
 
62
  pip-audit==2.9.0
63
  pip-requirements-parser==32.0.1
 
64
  platformdirs==4.3.8
 
 
 
65
  pluggy==1.6.0
 
66
  pre-commit==3.8.0
67
  propcache==0.3.1
 
 
 
68
  py-serializable==2.0.0
 
69
  pydantic==2.11.5
 
 
 
 
 
70
  pydantic-core==2.33.2
 
71
  pydantic-settings==2.9.1
 
72
  pydub==0.25.1
 
73
  pygments==2.19.1
 
74
  pyparsing==3.2.3
 
75
  pytest==7.4.4
 
 
 
76
  pytest-cov==4.1.0
77
  pytest-randomly==3.16.0
78
  python-dateutil==2.9.0.post0
 
 
 
79
  python-dotenv==1.1.0
 
80
  python-multipart==0.0.20
 
 
 
81
  python-whois==0.9.5
 
82
  pytz==2025.2
 
83
  pyyaml==6.0.2
 
 
 
 
84
  requests==2.32.3
 
 
 
 
 
85
  rich==14.0.0
 
 
 
86
  ruff==0.11.12
 
87
  safehttpx==0.1.6
 
88
  semantic-version==2.10.0
 
89
  shellingham==1.5.4 ; sys_platform != 'emscripten'
 
90
  six==1.17.0
 
91
  sniffio==1.3.1
 
92
  sortedcontainers==2.4.0
 
93
  sse-starlette==2.3.6
 
94
  starlette==0.46.2
 
 
 
 
95
  toml==0.10.2
 
96
  tomli==2.2.1 ; python_full_version <= '3.11'
 
 
 
 
97
  tomlkit==0.13.2
 
98
  tqdm==4.67.1
 
99
  typer==0.16.0 ; sys_platform != 'emscripten'
 
100
  typing-extensions==4.14.0
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
101
  typing-inspection==0.4.1
 
 
 
102
  tzdata==2025.2
 
103
  urllib3==2.4.0
 
 
 
104
  uvicorn==0.34.3 ; sys_platform != 'emscripten'
 
 
 
105
  virtualenv==20.31.2
 
106
  vt-py==0.21.0
 
107
  websockets==15.0.1
 
108
  xdoctest==1.2.0
109
  yarl==1.20.0
 
 
1
  # This file was autogenerated by uv via the following command:
2
  # uv export --format requirements-txt --no-hashes --group dev --group test -o requirements-dev.txt
3
  aiofiles==24.1.0
4
+ # via
5
+ # gradio
6
+ # vt-py
7
  aiohappyeyeballs==2.6.1
8
+ # via aiohttp
9
  aiohttp==3.12.8
10
+ # via vt-py
11
  aiosignal==1.3.2
12
+ # via aiohttp
13
  annotated-types==0.7.0
14
+ # via pydantic
15
  anyio==4.9.0
16
+ # via
17
+ # gradio
18
+ # httpx
19
+ # mcp
20
+ # sse-starlette
21
+ # starlette
22
  async-timeout==5.0.1 ; python_full_version < '3.11'
23
+ # via aiohttp
24
  attrs==25.3.0
25
+ # via aiohttp
26
  audioop-lts==0.2.1 ; python_full_version >= '3.13'
27
+ # via gradio
28
  boolean-py==5.0
29
+ # via license-expression
30
  cachecontrol==0.14.3
31
+ # via pip-audit
32
  cachetools==6.0.0
33
+ # via tdagent
34
  certifi==2025.4.26
35
+ # via
36
+ # httpcore
37
+ # httpx
38
+ # requests
39
  cfgv==3.4.0
40
+ # via pre-commit
41
  charset-normalizer==3.4.2
42
+ # via requests
43
  click==8.2.1 ; sys_platform != 'emscripten'
44
+ # via
45
+ # typer
46
+ # uvicorn
47
  colorama==0.4.6 ; sys_platform == 'win32'
48
+ # via
49
+ # click
50
+ # pytest
51
+ # tqdm
52
  coverage==7.8.2
53
+ # via pytest-cov
54
  cyclonedx-python-lib==9.1.0
55
+ # via pip-audit
56
  defusedxml==0.7.1
57
+ # via py-serializable
58
  distlib==0.3.9
59
+ # via virtualenv
60
+ dnspython==2.7.0
61
+ # via tdagent
62
  exceptiongroup==1.3.0 ; python_full_version < '3.11'
63
+ # via
64
+ # anyio
65
+ # pytest
66
  fastapi==0.115.12
67
+ # via gradio
68
  ffmpy==0.6.0
69
+ # via gradio
70
  filelock==3.18.0
71
+ # via
72
+ # cachecontrol
73
+ # huggingface-hub
74
+ # virtualenv
75
  frozenlist==1.6.2
76
+ # via
77
+ # aiohttp
78
+ # aiosignal
79
  fsspec==2025.5.1
80
+ # via
81
+ # gradio-client
82
+ # huggingface-hub
83
  gradio==5.32.1
84
+ # via tdagent
85
  gradio-client==1.10.2
86
+ # via gradio
87
  groovy==0.1.2
88
+ # via gradio
89
  h11==0.16.0
90
+ # via
91
+ # httpcore
92
+ # uvicorn
93
  hf-xet==1.1.2 ; platform_machine == 'aarch64' or platform_machine == 'amd64' or platform_machine == 'arm64' or platform_machine == 'x86_64'
94
+ # via huggingface-hub
95
  httpcore==1.0.9
96
+ # via httpx
97
  httpx==0.28.1
98
+ # via
99
+ # gradio
100
+ # gradio-client
101
+ # mcp
102
+ # safehttpx
103
  httpx-sse==0.4.0
104
+ # via mcp
105
  huggingface-hub==0.32.4
106
+ # via
107
+ # gradio
108
+ # gradio-client
109
  identify==2.6.12
110
+ # via pre-commit
111
  idna==3.10
112
+ # via
113
+ # anyio
114
+ # httpx
115
+ # requests
116
+ # yarl
117
  iniconfig==2.1.0
118
+ # via pytest
119
  jinja2==3.1.6
120
+ # via gradio
121
  license-expression==30.4.1
122
+ # via cyclonedx-python-lib
123
  markdown-it-py==3.0.0
124
+ # via rich
125
  markupsafe==3.0.2
126
+ # via
127
+ # gradio
128
+ # jinja2
129
  mcp==1.9.0
130
+ # via gradio
131
  mdurl==0.1.2
132
+ # via markdown-it-py
133
  msgpack==1.1.0
134
+ # via cachecontrol
135
  multidict==6.4.4
136
+ # via
137
+ # aiohttp
138
+ # yarl
139
  mypy==1.16.0
140
  mypy-extensions==1.1.0
141
+ # via mypy
142
  nodeenv==1.9.1
143
+ # via pre-commit
144
  numpy==2.2.6
145
+ # via
146
+ # gradio
147
+ # pandas
148
  orjson==3.10.18
149
+ # via gradio
150
  packageurl-python==0.16.0
151
+ # via cyclonedx-python-lib
152
  packaging==25.0
153
+ # via
154
+ # gradio
155
+ # gradio-client
156
+ # huggingface-hub
157
+ # pip-audit
158
+ # pip-requirements-parser
159
+ # pytest
160
  pandas==2.2.3
161
+ # via gradio
162
  pathspec==0.12.1
163
+ # via mypy
164
  pillow==11.2.1
165
+ # via gradio
166
  pip==25.1.1
167
+ # via pip-api
168
  pip-api==0.0.34
169
+ # via pip-audit
170
  pip-audit==2.9.0
171
  pip-requirements-parser==32.0.1
172
+ # via pip-audit
173
  platformdirs==4.3.8
174
+ # via
175
+ # pip-audit
176
+ # virtualenv
177
  pluggy==1.6.0
178
+ # via pytest
179
  pre-commit==3.8.0
180
  propcache==0.3.1
181
+ # via
182
+ # aiohttp
183
+ # yarl
184
  py-serializable==2.0.0
185
+ # via cyclonedx-python-lib
186
  pydantic==2.11.5
187
+ # via
188
+ # fastapi
189
+ # gradio
190
+ # mcp
191
+ # pydantic-settings
192
  pydantic-core==2.33.2
193
+ # via pydantic
194
  pydantic-settings==2.9.1
195
+ # via mcp
196
  pydub==0.25.1
197
+ # via gradio
198
  pygments==2.19.1
199
+ # via rich
200
  pyparsing==3.2.3
201
+ # via pip-requirements-parser
202
  pytest==7.4.4
203
+ # via
204
+ # pytest-cov
205
+ # pytest-randomly
206
  pytest-cov==4.1.0
207
  pytest-randomly==3.16.0
208
  python-dateutil==2.9.0.post0
209
+ # via
210
+ # pandas
211
+ # python-whois
212
  python-dotenv==1.1.0
213
+ # via pydantic-settings
214
  python-multipart==0.0.20
215
+ # via
216
+ # gradio
217
+ # mcp
218
  python-whois==0.9.5
219
+ # via tdagent
220
  pytz==2025.2
221
+ # via pandas
222
  pyyaml==6.0.2
223
+ # via
224
+ # gradio
225
+ # huggingface-hub
226
+ # pre-commit
227
  requests==2.32.3
228
+ # via
229
+ # cachecontrol
230
+ # huggingface-hub
231
+ # pip-audit
232
+ # tdagent
233
  rich==14.0.0
234
+ # via
235
+ # pip-audit
236
+ # typer
237
  ruff==0.11.12
238
+ # via gradio
239
  safehttpx==0.1.6
240
+ # via gradio
241
  semantic-version==2.10.0
242
+ # via gradio
243
  shellingham==1.5.4 ; sys_platform != 'emscripten'
244
+ # via typer
245
  six==1.17.0
246
+ # via python-dateutil
247
  sniffio==1.3.1
248
+ # via anyio
249
  sortedcontainers==2.4.0
250
+ # via cyclonedx-python-lib
251
  sse-starlette==2.3.6
252
+ # via mcp
253
  starlette==0.46.2
254
+ # via
255
+ # fastapi
256
+ # gradio
257
+ # mcp
258
  toml==0.10.2
259
+ # via pip-audit
260
  tomli==2.2.1 ; python_full_version <= '3.11'
261
+ # via
262
+ # coverage
263
+ # mypy
264
+ # pytest
265
  tomlkit==0.13.2
266
+ # via gradio
267
  tqdm==4.67.1
268
+ # via huggingface-hub
269
  typer==0.16.0 ; sys_platform != 'emscripten'
270
+ # via gradio
271
  typing-extensions==4.14.0
272
+ # via
273
+ # anyio
274
+ # exceptiongroup
275
+ # fastapi
276
+ # gradio
277
+ # gradio-client
278
+ # huggingface-hub
279
+ # multidict
280
+ # mypy
281
+ # pydantic
282
+ # pydantic-core
283
+ # rich
284
+ # typer
285
+ # typing-inspection
286
+ # uvicorn
287
  typing-inspection==0.4.1
288
+ # via
289
+ # pydantic
290
+ # pydantic-settings
291
  tzdata==2025.2
292
+ # via pandas
293
  urllib3==2.4.0
294
+ # via
295
+ # gradio
296
+ # requests
297
  uvicorn==0.34.3 ; sys_platform != 'emscripten'
298
+ # via
299
+ # gradio
300
+ # mcp
301
  virtualenv==20.31.2
302
+ # via pre-commit
303
  vt-py==0.21.0
304
+ # via tdagent
305
  websockets==15.0.1
306
+ # via gradio-client
307
  xdoctest==1.2.0
308
  yarl==1.20.0
309
+ # via aiohttp
subdomains/subdomains.txt ADDED
@@ -0,0 +1,999 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ www
2
+ mail
3
+ ftp
4
+ localhost
5
+ webmail
6
+ smtp
7
+ pop
8
+ ns1
9
+ webdisk
10
+ ns2
11
+ cpanel
12
+ whm
13
+ autodiscover
14
+ autoconfig
15
+ m
16
+ imap
17
+ test
18
+ ns
19
+ blog
20
+ pop3
21
+ dev
22
+ www2
23
+ admin
24
+ forum
25
+ news
26
+ vpn
27
+ ns3
28
+ mail2
29
+ new
30
+ mysql
31
+ old
32
+ lists
33
+ support
34
+ mobile
35
+ mx
36
+ static
37
+ docs
38
+ beta
39
+ shop
40
+ sql
41
+ secure
42
+ demo
43
+ cp
44
+ calendar
45
+ wiki
46
+ web
47
+ media
48
+ email
49
+ images
50
+ img
51
+ www1
52
+ intranet
53
+ portal
54
+ video
55
+ sip
56
+ dns2
57
+ api
58
+ cdn
59
+ stats
60
+ dns1
61
+ ns4
62
+ www3
63
+ dns
64
+ search
65
+ staging
66
+ server
67
+ mx1
68
+ chat
69
+ wap
70
+ my
71
+ svn
72
+ mail1
73
+ sites
74
+ proxy
75
+ ads
76
+ host
77
+ crm
78
+ cms
79
+ backup
80
+ mx2
81
+ lyncdiscover
82
+ info
83
+ apps
84
+ download
85
+ remote
86
+ db
87
+ forums
88
+ store
89
+ relay
90
+ files
91
+ newsletter
92
+ app
93
+ live
94
+ owa
95
+ en
96
+ start
97
+ sms
98
+ office
99
+ exchange
100
+ ipv4
101
+ mail3
102
+ help
103
+ blogs
104
+ helpdesk
105
+ web1
106
+ home
107
+ library
108
+ ftp2
109
+ ntp
110
+ monitor
111
+ login
112
+ service
113
+ correo
114
+ www4
115
+ moodle
116
+ it
117
+ gateway
118
+ gw
119
+ i
120
+ stat
121
+ stage
122
+ ldap
123
+ tv
124
+ ssl
125
+ web2
126
+ ns5
127
+ upload
128
+ nagios
129
+ smtp2
130
+ online
131
+ ad
132
+ survey
133
+ data
134
+ radio
135
+ extranet
136
+ test2
137
+ mssql
138
+ dns3
139
+ jobs
140
+ services
141
+ panel
142
+ irc
143
+ hosting
144
+ cloud
145
+ de
146
+ gmail
147
+ s
148
+ bbs
149
+ cs
150
+ ww
151
+ mrtg
152
+ git
153
+ image
154
+ members
155
+ poczta
156
+ s1
157
+ meet
158
+ preview
159
+ fr
160
+ cloudflare-resolve-to
161
+ dev2
162
+ photo
163
+ jabber
164
+ legacy
165
+ go
166
+ es
167
+ ssh
168
+ redmine
169
+ partner
170
+ vps
171
+ server1
172
+ sv
173
+ ns6
174
+ webmail2
175
+ av
176
+ community
177
+ cacti
178
+ time
179
+ sftp
180
+ lib
181
+ facebook
182
+ www5
183
+ smtp1
184
+ feeds
185
+ w
186
+ games
187
+ ts
188
+ alumni
189
+ dl
190
+ s2
191
+ phpmyadmin
192
+ archive
193
+ cn
194
+ tools
195
+ stream
196
+ projects
197
+ elearning
198
+ im
199
+ iphone
200
+ control
201
+ voip
202
+ test1
203
+ ws
204
+ rss
205
+ sp
206
+ wwww
207
+ vpn2
208
+ jira
209
+ list
210
+ connect
211
+ gallery
212
+ billing
213
+ mailer
214
+ update
215
+ pda
216
+ game
217
+ ns0
218
+ testing
219
+ sandbox
220
+ job
221
+ events
222
+ dialin
223
+ ml
224
+ fb
225
+ videos
226
+ music
227
+ a
228
+ partners
229
+ mailhost
230
+ downloads
231
+ reports
232
+ ca
233
+ router
234
+ speedtest
235
+ local
236
+ training
237
+ edu
238
+ bugs
239
+ manage
240
+ s3
241
+ status
242
+ host2
243
+ ww2
244
+ marketing
245
+ conference
246
+ content
247
+ network-ip
248
+ broadcast-ip
249
+ english
250
+ catalog
251
+ msoid
252
+ mailadmin
253
+ pay
254
+ access
255
+ streaming
256
+ project
257
+ t
258
+ sso
259
+ alpha
260
+ photos
261
+ staff
262
+ e
263
+ auth
264
+ v2
265
+ web5
266
+ web3
267
+ mail4
268
+ devel
269
+ post
270
+ us
271
+ images2
272
+ master
273
+ rt
274
+ ftp1
275
+ qa
276
+ wp
277
+ dns4
278
+ www6
279
+ ru
280
+ student
281
+ w3
282
+ citrix
283
+ trac
284
+ doc
285
+ img2
286
+ css
287
+ mx3
288
+ adm
289
+ web4
290
+ hr
291
+ mailserver
292
+ travel
293
+ sharepoint
294
+ sport
295
+ member
296
+ bb
297
+ agenda
298
+ link
299
+ server2
300
+ vod
301
+ uk
302
+ fw
303
+ promo
304
+ vip
305
+ noc
306
+ design
307
+ temp
308
+ gate
309
+ ns7
310
+ file
311
+ ms
312
+ map
313
+ cache
314
+ painel
315
+ js
316
+ event
317
+ mailing
318
+ db1
319
+ c
320
+ auto
321
+ img1
322
+ vpn1
323
+ business
324
+ mirror
325
+ share
326
+ cdn2
327
+ site
328
+ maps
329
+ tickets
330
+ tracker
331
+ domains
332
+ club
333
+ images1
334
+ zimbra
335
+ cvs
336
+ b2b
337
+ oa
338
+ intra
339
+ zabbix
340
+ ns8
341
+ assets
342
+ main
343
+ spam
344
+ lms
345
+ social
346
+ faq
347
+ feedback
348
+ loopback
349
+ groups
350
+ m2
351
+ cas
352
+ loghost
353
+ xml
354
+ nl
355
+ research
356
+ art
357
+ munin
358
+ dev1
359
+ gis
360
+ sales
361
+ images3
362
+ report
363
+ google
364
+ idp
365
+ cisco
366
+ careers
367
+ seo
368
+ dc
369
+ lab
370
+ d
371
+ firewall
372
+ fs
373
+ eng
374
+ ann
375
+ mail01
376
+ mantis
377
+ v
378
+ affiliates
379
+ webconf
380
+ track
381
+ ticket
382
+ pm
383
+ db2
384
+ b
385
+ clients
386
+ tech
387
+ erp
388
+ monitoring
389
+ cdn1
390
+ images4
391
+ payment
392
+ origin
393
+ client
394
+ foto
395
+ domain
396
+ pt
397
+ pma
398
+ directory
399
+ cc
400
+ public
401
+ finance
402
+ ns11
403
+ test3
404
+ wordpress
405
+ corp
406
+ sslvpn
407
+ cal
408
+ mailman
409
+ book
410
+ ip
411
+ zeus
412
+ ns10
413
+ hermes
414
+ storage
415
+ free
416
+ static1
417
+ pbx
418
+ banner
419
+ mobil
420
+ kb
421
+ mail5
422
+ direct
423
+ ipfixe
424
+ wifi
425
+ development
426
+ board
427
+ ns01
428
+ st
429
+ reviews
430
+ radius
431
+ pro
432
+ atlas
433
+ links
434
+ in
435
+ oldmail
436
+ register
437
+ s4
438
+ images6
439
+ static2
440
+ id
441
+ shopping
442
+ drupal
443
+ analytics
444
+ m1
445
+ images5
446
+ images7
447
+ img3
448
+ mx01
449
+ www7
450
+ redirect
451
+ sitebuilder
452
+ smtp3
453
+ adserver
454
+ net
455
+ user
456
+ forms
457
+ outlook
458
+ press
459
+ vc
460
+ health
461
+ work
462
+ mb
463
+ mm
464
+ f
465
+ pgsql
466
+ jp
467
+ sports
468
+ preprod
469
+ g
470
+ p
471
+ mdm
472
+ ar
473
+ lync
474
+ market
475
+ dbadmin
476
+ barracuda
477
+ affiliate
478
+ mars
479
+ users
480
+ images8
481
+ biblioteca
482
+ mc
483
+ ns12
484
+ math
485
+ ntp1
486
+ web01
487
+ software
488
+ pr
489
+ jupiter
490
+ labs
491
+ linux
492
+ sc
493
+ love
494
+ fax
495
+ php
496
+ lp
497
+ tracking
498
+ thumbs
499
+ up
500
+ tw
501
+ campus
502
+ reg
503
+ digital
504
+ demo2
505
+ da
506
+ tr
507
+ otrs
508
+ web6
509
+ ns02
510
+ mailgw
511
+ education
512
+ order
513
+ piwik
514
+ banners
515
+ rs
516
+ se
517
+ venus
518
+ internal
519
+ webservices
520
+ cm
521
+ whois
522
+ sync
523
+ lb
524
+ is
525
+ code
526
+ click
527
+ w2
528
+ bugzilla
529
+ virtual
530
+ origin-www
531
+ top
532
+ customer
533
+ pub
534
+ hotel
535
+ openx
536
+ log
537
+ uat
538
+ cdn3
539
+ images0
540
+ cgi
541
+ posta
542
+ reseller
543
+ soft
544
+ movie
545
+ mba
546
+ n
547
+ r
548
+ developer
549
+ nms
550
+ ns9
551
+ webcam
552
+ construtor
553
+ ebook
554
+ ftp3
555
+ join
556
+ dashboard
557
+ bi
558
+ wpad
559
+ admin2
560
+ agent
561
+ wm
562
+ books
563
+ joomla
564
+ hotels
565
+ ezproxy
566
+ ds
567
+ sa
568
+ katalog
569
+ team
570
+ emkt
571
+ antispam
572
+ adv
573
+ mercury
574
+ flash
575
+ myadmin
576
+ sklep
577
+ newsite
578
+ law
579
+ pl
580
+ ntp2
581
+ x
582
+ srv1
583
+ mp3
584
+ archives
585
+ proxy2
586
+ ps
587
+ pic
588
+ ir
589
+ orion
590
+ srv
591
+ mt
592
+ ocs
593
+ server3
594
+ meeting
595
+ v1
596
+ delta
597
+ titan
598
+ manager
599
+ subscribe
600
+ develop
601
+ wsus
602
+ oascentral
603
+ mobi
604
+ people
605
+ galleries
606
+ wwwtest
607
+ backoffice
608
+ sg
609
+ repo
610
+ soporte
611
+ www8
612
+ eu
613
+ ead
614
+ students
615
+ hq
616
+ awstats
617
+ ec
618
+ security
619
+ school
620
+ corporate
621
+ podcast
622
+ vote
623
+ conf
624
+ magento
625
+ mx4
626
+ webservice
627
+ tour
628
+ s5
629
+ power
630
+ correio
631
+ mon
632
+ mobilemail
633
+ weather
634
+ international
635
+ prod
636
+ account
637
+ xx
638
+ pages
639
+ pgadmin
640
+ bfn2
641
+ webserver
642
+ www-test
643
+ maintenance
644
+ me
645
+ magazine
646
+ syslog
647
+ int
648
+ view
649
+ enews
650
+ ci
651
+ au
652
+ mis
653
+ dev3
654
+ pdf
655
+ mailgate
656
+ v3
657
+ ss
658
+ internet
659
+ host1
660
+ smtp01
661
+ journal
662
+ wireless
663
+ opac
664
+ w1
665
+ signup
666
+ database
667
+ demo1
668
+ br
669
+ android
670
+ career
671
+ listserv
672
+ bt
673
+ spb
674
+ cam
675
+ contacts
676
+ webtest
677
+ resources
678
+ 1
679
+ life
680
+ mail6
681
+ transfer
682
+ app1
683
+ confluence
684
+ controlpanel
685
+ secure2
686
+ puppet
687
+ classifieds
688
+ tunet
689
+ edge
690
+ biz
691
+ host3
692
+ red
693
+ newmail
694
+ mx02
695
+ sb
696
+ physics
697
+ ap
698
+ epaper
699
+ sts
700
+ proxy1
701
+ ww1
702
+ stg
703
+ sd
704
+ science
705
+ star
706
+ www9
707
+ phoenix
708
+ pluto
709
+ webdav
710
+ booking
711
+ eshop
712
+ edit
713
+ panelstats
714
+ xmpp
715
+ food
716
+ cert
717
+ adfs
718
+ mail02
719
+ cat
720
+ edm
721
+ vcenter
722
+ mysql2
723
+ sun
724
+ phone
725
+ surveys
726
+ smart
727
+ system
728
+ twitter
729
+ updates
730
+ webmail1
731
+ logs
732
+ sitedefender
733
+ as
734
+ cbf1
735
+ sugar
736
+ contact
737
+ vm
738
+ ipad
739
+ traffic
740
+ dm
741
+ saturn
742
+ bo
743
+ network
744
+ ac
745
+ ns13
746
+ webdev
747
+ libguides
748
+ asp
749
+ tm
750
+ core
751
+ mms
752
+ abc
753
+ scripts
754
+ fm
755
+ sm
756
+ test4
757
+ nas
758
+ newsletters
759
+ rsc
760
+ cluster
761
+ learn
762
+ panelstatsmail
763
+ lb1
764
+ usa
765
+ apollo
766
+ pre
767
+ terminal
768
+ l
769
+ tc
770
+ movies
771
+ sh
772
+ fms
773
+ dms
774
+ z
775
+ base
776
+ jwc
777
+ gs
778
+ kvm
779
+ bfn1
780
+ card
781
+ web02
782
+ lg
783
+ editor
784
+ metrics
785
+ feed
786
+ repository
787
+ asterisk
788
+ sns
789
+ global
790
+ counter
791
+ ch
792
+ sistemas
793
+ pc
794
+ china
795
+ u
796
+ payments
797
+ ma
798
+ pics
799
+ www10
800
+ e-learning
801
+ auction
802
+ hub
803
+ sf
804
+ cbf8
805
+ forum2
806
+ ns14
807
+ app2
808
+ passport
809
+ hd
810
+ talk
811
+ ex
812
+ debian
813
+ ct
814
+ rc
815
+ 2012
816
+ imap4
817
+ blog2
818
+ ce
819
+ sk
820
+ relay2
821
+ green
822
+ print
823
+ geo
824
+ multimedia
825
+ iptv
826
+ backup2
827
+ webapps
828
+ audio
829
+ ro
830
+ smtp4
831
+ pg
832
+ ldap2
833
+ backend
834
+ profile
835
+ oldwww
836
+ drive
837
+ bill
838
+ listas
839
+ orders
840
+ win
841
+ mag
842
+ apply
843
+ bounce
844
+ mta
845
+ hp
846
+ suporte
847
+ dir
848
+ pa
849
+ sys
850
+ mx0
851
+ ems
852
+ antivirus
853
+ web8
854
+ inside
855
+ play
856
+ nic
857
+ welcome
858
+ premium
859
+ exam
860
+ sub
861
+ cz
862
+ omega
863
+ boutique
864
+ pp
865
+ management
866
+ planet
867
+ ww3
868
+ orange
869
+ c1
870
+ zzb
871
+ form
872
+ ecommerce
873
+ tmp
874
+ plus
875
+ openvpn
876
+ fw1
877
+ hk
878
+ owncloud
879
+ history
880
+ clientes
881
+ srv2
882
+ img4
883
+ open
884
+ registration
885
+ mp
886
+ blackboard
887
+ fc
888
+ static3
889
+ server4
890
+ s6
891
+ ecard
892
+ dspace
893
+ dns01
894
+ md
895
+ mcp
896
+ ares
897
+ spf
898
+ kms
899
+ intranet2
900
+ accounts
901
+ webapp
902
+ ask
903
+ rd
904
+ www-dev
905
+ gw2
906
+ mall
907
+ bg
908
+ teste
909
+ ldap1
910
+ real
911
+ m3
912
+ wave
913
+ movil
914
+ portal2
915
+ kids
916
+ gw1
917
+ ra
918
+ tienda
919
+ private
920
+ po
921
+ 2013
922
+ cdn4
923
+ gps
924
+ km
925
+ ent
926
+ tt
927
+ ns21
928
+ at
929
+ athena
930
+ cbf2
931
+ webmail3
932
+ mob
933
+ matrix
934
+ ns15
935
+ send
936
+ lb2
937
+ pos
938
+ 2
939
+ cl
940
+ renew
941
+ admissions
942
+ am
943
+ beta2
944
+ gamma
945
+ mx5
946
+ portfolio
947
+ contest
948
+ box
949
+ mg
950
+ wwwold
951
+ neptune
952
+ mac
953
+ pms
954
+ traveler
955
+ media2
956
+ studio
957
+ sw
958
+ imp
959
+ bs
960
+ alfa
961
+ cbf4
962
+ servicedesk
963
+ wmail
964
+ video2
965
+ switch
966
+ sam
967
+ sky
968
+ ee
969
+ widget
970
+ reklama
971
+ msn
972
+ paris
973
+ tms
974
+ th
975
+ vega
976
+ trade
977
+ intern
978
+ ext
979
+ oldsite
980
+ learning
981
+ group
982
+ f1
983
+ ns22
984
+ ns20
985
+ demo3
986
+ bm
987
+ dom
988
+ pe
989
+ annuaire
990
+ portail
991
+ graphics
992
+ iris
993
+ one
994
+ robot
995
+ ams
996
+ s7
997
+ foro
998
+ gaia
999
+ vpn3
tdagent/tools/get_domain_information.py ADDED
@@ -0,0 +1,334 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import json
2
+ import os
3
+ from concurrent.futures import ThreadPoolExecutor
4
+ from pathlib import Path
5
+ from typing import Any
6
+
7
+ import gradio as gr
8
+ import requests
9
+ import urllib3
10
+ from dns import message
11
+
12
+
13
+ _DNS_SERVER = "https://dns.google/dns-query" # can use others
14
+ _DNS_RECORD_TYPES = [
15
+ "A",
16
+ "AAAA",
17
+ "CNAME",
18
+ "MX",
19
+ "NS",
20
+ "SOA",
21
+ "TXT",
22
+ "RP",
23
+ "LOC",
24
+ "CAA",
25
+ "SPF",
26
+ "SRV",
27
+ "NSEC",
28
+ "RRSIG",
29
+ ]
30
+
31
+ _COMMON_SUBDOMAINS_TXT_PATH = Path("./subdomains/subdomains.txt")
32
+
33
+
34
+ def get_geolocation(ip: str) -> dict[str, Any] | str:
35
+ """Get location information from an ip address.
36
+
37
+ Returns the following information on an ip address:
38
+ 1. IPv4
39
+ 2. city
40
+ 4. country_code
41
+ 5. country_name
42
+ 6. latitude
43
+ 7. longitude
44
+ 8. postal
45
+ 9. state
46
+
47
+ Example:
48
+ >>> from pprint import pprint
49
+ >>> pprint(get_location("103.100.104.0"))
50
+ ... {'IPv4': '103.100.104.0',
51
+ 'city': None,
52
+ 'country_code': 'NZ',
53
+ 'country_name': 'New Zealand',
54
+ 'latitude': -41,
55
+ 'longitude': 174,
56
+ 'postal': None,
57
+ 'state': None}
58
+
59
+ Args:
60
+ ip: ip address
61
+
62
+ Returns:
63
+ Location information on the ip address.
64
+ """
65
+ try:
66
+ return requests.get(
67
+ f"https://geolocation-db.com/json/{ip}",
68
+ timeout=0.5,
69
+ ).json()
70
+ except Exception as e: # noqa: BLE001
71
+ return str(e)
72
+
73
+
74
+ def _request_dns_record(domain: str, record_type: str) -> str:
75
+ """Utility to build dns resolve requests that do not use port 53.
76
+
77
+ Args:
78
+ domain: domain to investigate
79
+ record_type: record type
80
+
81
+ Returns:
82
+ Information about the dns record type for the domain.
83
+ """
84
+ q = message.make_query(domain, record_type)
85
+ response = requests.post(
86
+ _DNS_SERVER,
87
+ headers={
88
+ "Content-Type": "application/dns-message",
89
+ "Accept": "application/dns-message",
90
+ },
91
+ data=q.to_wire(),
92
+ verify=True,
93
+ timeout=0.2,
94
+ )
95
+ dns_message = message.from_wire(response.content)
96
+ return [str(rdata) for rdata in dns_message.answer[0]] if dns_message.answer else []
97
+
98
+ # see: https://thepythoncode.com/article/dns-enumeration-with-python
99
+ # https://dnspython.readthedocs.io
100
+ def enumerate_dns(domain_name: str) -> dict[str, Any] | None:
101
+ r"""Enumerates information about a specific domain's DNS configuration.
102
+
103
+ Information collected about the domain name:
104
+ 1. A records: the IPv4 associated with the domain
105
+ 2. AAAA records: the IPv6 associated with the domain
106
+ 3. CAA records: used by owners to specify which Certificate Authorities
107
+ are authorized to issue SSL/TLS certificates for their domains.
108
+ 4. CNAME records: alias of one name to another - the DNS lookup will
109
+ continue by retrying the lookup with the new name.
110
+ 5. LOC records: geographic location associated with a domain name.
111
+ 6. MX records: associated email servers to the domain.
112
+ 7. NS records: DNS servers that are authoritative for a particular domain.
113
+ These may be use to inquire information about the domain.
114
+ 8. SOA records: defines authoritative information about a DNS zone,
115
+ including zone transfers and cache expiration.
116
+ 9. TXT records: used for domain verification and email security.
117
+ 10. RP records: the responsible person for a domain.
118
+ 11. SPF records: defines authorized email servers.
119
+ 12. SRV records: specifies location of specific services
120
+ (port and host) for the domain.
121
+ 14. NSEC records: proves non-existence of DNS records
122
+ and prevents zone enumeration.
123
+ 15. RRSIG records: contains cryptographic signatures for DNSSEC-signed
124
+ records, providing authentication and integrity.
125
+
126
+ Example:
127
+ >>> from pprint import pprint
128
+ >>> pprint(enumerate_dns("youtube.com"))
129
+ ... {'A': 'youtube.com. 300 IN A 142.250.200.142',
130
+ 'AAAA': 'youtube.com. 286 IN AAAA 2a00:1450:4003:80f::200e',
131
+ 'CAA': 'youtube.com. 14352 IN CAA 0 issue "pki.goog"',
132
+ 'CNAME': None,
133
+ 'LOC': None,
134
+ 'MX': 'youtube.com. 300 IN MX 0 smtp.google.com.',
135
+ 'NS': 'youtube.com. 21600 IN NS ns4.google.com.\n'
136
+ 'youtube.com. 21600 IN NS ns1.google.com.\n'
137
+ 'youtube.com. 21600 IN NS ns2.google.com.\n'
138
+ 'youtube.com. 21600 IN NS ns3.google.com.',
139
+ 'NSEC': None,
140
+ 'RP': None,
141
+ 'RRSIG': None,
142
+ 'SOA': 'youtube.com. 60 IN SOA ns1.google.com. dns-admin.google.com. '
143
+ '766113658 900 900 1800 60',
144
+ 'SPF': None,
145
+ 'SRV': None,
146
+ 'TXT': 'youtube.com. 3586 IN TXT "v=spf1 include:google.com mx -all"\n'
147
+ 'youtube.com. 3586 IN TXT '
148
+ '"facebook-domain-verification=64jdes7le4h7e7lfpi22rijygx58j1"\n'
149
+ 'youtube.com. 3586 IN TXT '
150
+ '"google-site-verification=QtQWEwHWM8tHiJ4s-jJWzEQrD_fF3luPnpzNDH-Nw-w"'}
151
+
152
+ Args:
153
+ domain_name: domain name for which to
154
+ enumerate the DNS configuration.
155
+
156
+ Returns:
157
+ The domain's DNS configuration.
158
+ """
159
+ enumeration = {}
160
+ for record_type in _DNS_RECORD_TYPES:
161
+ try:
162
+ record = _request_dns_record(domain_name, record_type)
163
+ if record:
164
+ enumeration[record_type] = record
165
+ except Exception as e: # noqa: BLE001, PERF203
166
+ enumeration[record_type] = str(e)
167
+ return enumeration if enumeration else None
168
+
169
+ def resolve_subdomain_ipv4(domain: str) -> str | None:
170
+ """Resolve the IPv4 address of a domain.
171
+
172
+ Args:
173
+ domain: domain name
174
+
175
+ Returns:
176
+ The domain is returned provided
177
+ it was resolved. Otherwise nothing
178
+ is returned.
179
+ """
180
+ try:
181
+ _request_dns_record(domain, "A")
182
+ return domain # noqa: TRY300
183
+ except Exception: # noqa: BLE001
184
+ return None
185
+
186
+
187
+ def scrap_subdomains_for_domain(domain_name: str) -> list[str]:
188
+ """Retrieves subdomains associated to a domain if any.
189
+
190
+ The information retrieved from a domain is its subdomains
191
+ provided they are the top 1000 subdomain prefixes as
192
+ indicated by https://github.com/rbsec/dnscan/tree/master
193
+
194
+ Importantly, it finds subdomains only if their prefixes
195
+ are along the top 1000 most common. Hence, it may not
196
+ yield all the subdomains associated to the domain.
197
+
198
+ Example:
199
+ >>> scrap_subdomains_for_domain("github.com")
200
+ ... ['www.github.com', 'smtp.github.com', 'ns1.github.com',
201
+ 'ns2.github.com','autodiscover.github.com', 'test.github.com',
202
+ 'blog.github.com', 'admin.github.com', 'support.github.com',
203
+ 'docs.github.com', 'shop.github.com', 'wiki.github.com',
204
+ 'api.github.com', 'live.github.com', 'help.github.com',
205
+ 'jobs.github.com', 'services.github.com', 'de.github.com',
206
+ 'cs.github.com', 'fr.github.com', 'ssh.github.com',
207
+ 'partner.github.com', 'community.github.com',
208
+ 'mailer.github.com', 'training.github.com', ...]
209
+
210
+ Args:
211
+ domain_name: domain name for which to retrieve a
212
+ list of subdomains
213
+
214
+ Returns:
215
+ List of subdomains if any.
216
+ """
217
+ try:
218
+ with open(_COMMON_SUBDOMAINS_TXT_PATH) as file: # noqa: PTH123
219
+ subdomains = [line.strip() for line in file if line.strip()]
220
+ except FileNotFoundError:
221
+ return []
222
+
223
+ potential_subdomains = [f"{subdomain}.{domain_name}" for subdomain in subdomains]
224
+ with ThreadPoolExecutor(max_workers=5) as executor:
225
+ results = executor.map(resolve_subdomain_ipv4, potential_subdomains)
226
+ return [domain for domain in results if domain]
227
+
228
+ def retrieve_ioc_from_threatfox(potentially_ioc: str) -> str:
229
+ r"""Retrieves information about a potential IoC from ThreatFox.
230
+
231
+ It may be used to retrieve information of indicators of compromise
232
+ (IOCs) associated with malware, with the infosec community, AV
233
+ vendors and cyber threat intelligence providers.
234
+
235
+ Examples:
236
+ >>> retrieve_ioc_from_threatfox("139.180.203.104")
237
+ ... {
238
+ "query_status": "ok",
239
+ "data": [
240
+ {
241
+ "id": "12",
242
+ "ioc": "139.180.203.104:443",
243
+ "threat_type": "botnet_cc",
244
+ "threat_type_desc": "Indicator that identifies a botnet command&control...",
245
+ "ioc_type": "ip:port",
246
+ "ioc_type_desc": "ip:port combination that is used for botnet Command&...,
247
+ "malware": "win.cobalt_strike",
248
+ "malware_printable": "Cobalt Strike",
249
+ "malware_alias": "Agentemis,BEACON,CobaltStrike",
250
+ "malware_malpedia": "https:\/\/malpedia.caad.fkie.fraunhofer.de\/...",
251
+ "confidence_level": 75,
252
+ "first_seen": "2020-12-06 09:10:23 UTC",
253
+ "last_seen": null,
254
+ "reference": null,
255
+ "reporter": "abuse_ch",
256
+ "tags": null,
257
+ "malware_samples": [
258
+ {
259
+ "time_stamp": "2021-03-23 08:18:06 UTC",
260
+ "md5_hash": "5b7e82e051ade4b14d163eea2a17bf8b",
261
+ "sha256_hash": "b325c92fa540edeb89b95dbfd4400c1cb33599c66859....",
262
+ "malware_bazaar": "https:\/\/bazaar.abuse.ch\/sample\/b325c...\/"
263
+ },
264
+ ]
265
+
266
+ }
267
+ ]
268
+ }
269
+
270
+ Args:
271
+ potentially_ioc: this can be a url, a domain, a hash,
272
+ or any other type of IoC.
273
+
274
+ Returns:
275
+ Information of the input as an IoC: threat type, malware type andsamples,
276
+ confidence level, first/last seen dates, and more IoC information.
277
+ """
278
+ headers = {"Auth-Key": os.environ["THREATFOX_APIKEY"]}
279
+ pool = urllib3.HTTPSConnectionPool(
280
+ "threatfox-api.abuse.ch",
281
+ port=443,
282
+ maxsize=50,
283
+ headers=headers,
284
+ )
285
+ data = {
286
+ "query": "search_ioc",
287
+ "search_term": potentially_ioc,
288
+ }
289
+ json_data = json.dumps(data)
290
+ try:
291
+ response = pool.request("POST", "/api/v1/", body=json_data)
292
+ return response.data.decode("utf-8", "ignore")
293
+ except Exception as e: # noqa: BLE001
294
+ return str(e)
295
+
296
+
297
+ geo_location_tool = gr.Interface(
298
+ fn=get_geolocation,
299
+ inputs=["text"],
300
+ outputs=["text"],
301
+ title="Domain Associated Geolocation Finder",
302
+ description="Retrieves the geolocation associated to an input ip address",
303
+ theme="default",
304
+ )
305
+
306
+ dns_enumeration_tool = gr.Interface(
307
+ fn=enumerate_dns,
308
+ inputs=["text"],
309
+ outputs=["text"],
310
+ title="DNS record enumerator of domains",
311
+ description="Retrieves several dns record types for the input domain names",
312
+ theme="default",
313
+ )
314
+
315
+ scrap_subdomains_tool = gr.Interface(
316
+ fn=scrap_subdomains_for_domain,
317
+ inputs=["text"],
318
+ outputs=["text"],
319
+ title="Subdomains Extractor of domains",
320
+ description="Retrieves the subdomains for the input domain if they are common",
321
+ theme="default",
322
+ )
323
+
324
+ extractor_of_ioc_from_threatfox_tool = gr.Interface(
325
+ fn=retrieve_ioc_from_threatfox,
326
+ inputs=["text"],
327
+ outputs=["text"],
328
+ title="IoC information extractor associated to particular entities",
329
+ description=(
330
+ "If information as an Indicator of Compromise (IoC) exists"
331
+ "for the input url, domain or hash, it retrieves it"
332
+ ),
333
+ theme="default",
334
+ )
uv.lock CHANGED
@@ -28,7 +28,7 @@ wheels = [
28
 
29
  [[package]]
30
  name = "aiohttp"
31
- version = "3.12.8"
32
  source = { registry = "https://pypi.org/simple" }
33
  dependencies = [
34
  { name = "aiohappyeyeballs" },
@@ -40,76 +40,76 @@ dependencies = [
40
  { name = "propcache" },
41
  { name = "yarl" },
42
  ]
43
- sdist = { url = "https://files.pythonhosted.org/packages/52/14/591553163be65a45d5b9329ae2d95d491d77cded4e1c8213d9537b78c478/aiohttp-3.12.8.tar.gz", hash = "sha256:3c0d2ca376b7cea6c1dfa1fc2479b02b3f482a249fc7020c69063b321080140a", size = 7809245, upload-time = "2025-06-04T10:06:18.411Z" }
44
- wheels = [
45
- { url = "https://files.pythonhosted.org/packages/c7/ab/a82f13949a08a67afdc421306ad5e0c26ae7d957471878eb9d87b63f412a/aiohttp-3.12.8-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:4dbb967657a4e290cafaad79e4b6ae0bb04d44463214f552360ebc64e86521d0", size = 700479, upload-time = "2025-06-04T10:03:12.308Z" },
46
- { url = "https://files.pythonhosted.org/packages/c1/a7/8393338e997856f837d978b59cf173946c87872c45b91b19e75725e99bb6/aiohttp-3.12.8-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:b1ba9b08a99ccb409c4ede20265316085e7e28971984eae93277ed4e4a1d9690", size = 476846, upload-time = "2025-06-04T10:03:16.758Z" },
47
- { url = "https://files.pythonhosted.org/packages/c8/c2/95aa51a6289e46961d592dd289cc1332ce439e5915d9f9f52b2bb8d84a29/aiohttp-3.12.8-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:b84f4e77372490d6c07a09f9982013e135e337453012f6f599fe3ec98c2eb486", size = 464620, upload-time = "2025-06-04T10:03:18.756Z" },
48
- { url = "https://files.pythonhosted.org/packages/fb/67/77106e2ef3ce09ab9ab942015a3e16404f26204e32218e9769fb28d91555/aiohttp-3.12.8-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:99d6699a957b14f90489194e1c6215927ceb66b3ad5c41d4cc88eb83fba3aa56", size = 1646672, upload-time = "2025-06-04T10:03:20.713Z" },
49
- { url = "https://files.pythonhosted.org/packages/ca/52/9af2670d5aec54c5fa021086332ba8e7ac231748ddb8ad65ac0323d9ca68/aiohttp-3.12.8-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:be80d260a9b8e41ef5c33189c7f28d877a637bc5dcb30054d6a26350a5667d1d", size = 1620727, upload-time = "2025-06-04T10:03:22.761Z" },
50
- { url = "https://files.pythonhosted.org/packages/37/52/5845ae724208d579f4bc008b4cde5181236ec7026f92c1b03fda8c8a1cee/aiohttp-3.12.8-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e5c13363592704339a6ead1943c1492b123e11e1debdf764eb71fce8c9531ffc", size = 1693134, upload-time = "2025-06-04T10:03:25.168Z" },
51
- { url = "https://files.pythonhosted.org/packages/e7/88/76dd4e9358e33783a1eff620fbac1cf887093757669668e5859422f324df/aiohttp-3.12.8-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:983a100232bd603e741d059fbe66ae4a6d15c824c0faadfcf76f912667248da6", size = 1735450, upload-time = "2025-06-04T10:03:26.839Z" },
52
- { url = "https://files.pythonhosted.org/packages/2a/50/4411e8bf73ff347e560de75fb351e5d3c3aef1618581b0f87b1984eb363b/aiohttp-3.12.8-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:08d108b9136b97f9abbe1fa24fbe343a77d63d7e1202e4910c656c79eb7f1e85", size = 1640115, upload-time = "2025-06-04T10:03:28.574Z" },
53
- { url = "https://files.pythonhosted.org/packages/99/48/6f22eb3773c27aab126629db036ace95d5001782181453a18fde43383e5c/aiohttp-3.12.8-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:02266fb5818158ac5cb9e0360df1be8acc2035ed4703e0e4acd251cb11f0929e", size = 1580237, upload-time = "2025-06-04T10:03:30.742Z" },
54
- { url = "https://files.pythonhosted.org/packages/36/b7/891b4f9284c65bca728b368a2b930677657d1912b9a42e18fa4b59dfe197/aiohttp-3.12.8-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:71407580e2b6c7aed1d991ce3c372fc577812b1a91a9980f12395bf723bad9d7", size = 1624086, upload-time = "2025-06-04T10:03:32.841Z" },
55
- { url = "https://files.pythonhosted.org/packages/9b/ba/dde7fe6c06163d7abd4da2f70fb6b2e5860de64f2c2ac9863df3e6668159/aiohttp-3.12.8-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:035feaafa9ebeb7fa609737f7dc4232403a0854abdb809aadf8a0eebde8da974", size = 1634873, upload-time = "2025-06-04T10:03:35.178Z" },
56
- { url = "https://files.pythonhosted.org/packages/b7/52/6274885a4d1521e3399addb232d3005906b8508c61a80614f77526344ae7/aiohttp-3.12.8-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:e2f79ef7e620a78a29af3e0e05b8ff74790461dfe794b98ad07543b835092d68", size = 1610326, upload-time = "2025-06-04T10:03:37.259Z" },
57
- { url = "https://files.pythonhosted.org/packages/5f/a2/468fd0a9b65f3b3c4adf2260940e08a07a1595196b46c2e2679646c56230/aiohttp-3.12.8-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:2a2b9d9db25fff1eaebd8c5a1c83f901f6f3d3474ca8422dc2b3cfdd61aba25d", size = 1689913, upload-time = "2025-06-04T10:03:38.911Z" },
58
- { url = "https://files.pythonhosted.org/packages/2b/2e/61b184aa2c966c29fca70d272127dce6445320d5c0c693887323479932cc/aiohttp-3.12.8-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:d6eedc0407ead020b2ac7295c85ba71115c12ec70e2e80d460a738a0d1cd3c07", size = 1713149, upload-time = "2025-06-04T10:03:40.548Z" },
59
- { url = "https://files.pythonhosted.org/packages/dd/99/0129c580c0fadec8993fec0c520cf3a91181734f90ab53e5683608d0d477/aiohttp-3.12.8-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:6164219acf66c8fee268008971843173e2fabedd6aa86531b6ea9b1211ec271c", size = 1641491, upload-time = "2025-06-04T10:03:42.228Z" },
60
- { url = "https://files.pythonhosted.org/packages/1c/c4/fd04a43d4d7c1a3b97c3ec5c4b62f86b9d62329ee65fef89fb69aa2c0a2e/aiohttp-3.12.8-cp310-cp310-win32.whl", hash = "sha256:85ff9f7f04486504b0a46d9f570e15fa905804d39563685af44659023a98e62a", size = 425835, upload-time = "2025-06-04T10:03:44.796Z" },
61
- { url = "https://files.pythonhosted.org/packages/bd/88/27e42be6f926bcdb2b3a115d9fa749dcbe456a53d69b8c68dfeb88922855/aiohttp-3.12.8-cp310-cp310-win_amd64.whl", hash = "sha256:7dfb744fbf99da22bdd8f62bae54c9953201c3fc0f198f48951b8b15afba0cc8", size = 449042, upload-time = "2025-06-04T10:03:46.805Z" },
62
- { url = "https://files.pythonhosted.org/packages/c5/0a/b0a086b59288f8db7017a808639c42249cb6cf4a3145cae648370f37a036/aiohttp-3.12.8-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:27bcd1bbbddd49e40b3a01c2c442881d1e4548487468f12b5ff13b45c55c169c", size = 707792, upload-time = "2025-06-04T10:03:48.86Z" },
63
- { url = "https://files.pythonhosted.org/packages/0f/e6/f6254f977410150f3d402cb8377a3256feb0830edfdb7ff9b05e3d1a8919/aiohttp-3.12.8-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:fe66d0bab9430b40278d5736ac59b52861783f74366449b74ef1e7feb37b98de", size = 480074, upload-time = "2025-06-04T10:03:50.606Z" },
64
- { url = "https://files.pythonhosted.org/packages/06/dc/94958fe022a04211565496eecef1adc3c44a6470d2fe4341816c94cf61b8/aiohttp-3.12.8-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:67ac2706fd0581717b626ef8c0e9db7840fed0d85b5dbe6523036f116a61c3c9", size = 468339, upload-time = "2025-06-04T10:03:52.691Z" },
65
- { url = "https://files.pythonhosted.org/packages/4f/41/3784fc55246ea7f4aac06c8296cd27c0e0b62767b86984ff4c7d5d0487bb/aiohttp-3.12.8-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:418a9c19e9481ea744a40f0213db1132f8bc462013b79e4f7544e458a1995b38", size = 1738527, upload-time = "2025-06-04T10:03:54.676Z" },
66
- { url = "https://files.pythonhosted.org/packages/b0/ec/9261bb96b4b300a6e90c502e693cbc745ee7ebb25f693b1f7bf2dcbabadc/aiohttp-3.12.8-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:b2ca5edbed995039b668c0640945bbb1683da6ffe853ee791a11997197b6826c", size = 1687199, upload-time = "2025-06-04T10:03:56.9Z" },
67
- { url = "https://files.pythonhosted.org/packages/5b/7f/604716215ab9cbbd16bef6f85c0130422d8a039c63bfee33772a66f7ccdf/aiohttp-3.12.8-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:18e46324b9dacc8c921b78825d968c2b465d1dd6a859558361ada2e21d21cf56", size = 1785990, upload-time = "2025-06-04T10:03:58.642Z" },
68
- { url = "https://files.pythonhosted.org/packages/c3/7f/b2257b49e901014409a46ad86f58f3b84f30512b05a889cc7ed1d8b8efd2/aiohttp-3.12.8-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a2cc417dd10b797f471016a8630ea3d7e8717a7c14a9b04487edfa5c885acd94", size = 1825039, upload-time = "2025-06-04T10:04:00.479Z" },
69
- { url = "https://files.pythonhosted.org/packages/d3/f7/23fa5a9a435de267eadc2a6c50133132fb4419d22c69ff716020128793af/aiohttp-3.12.8-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2b5dd6dd7dbedcd037837edfd2686bda91366b477e2e01d016cc72245254c2cb", size = 1727495, upload-time = "2025-06-04T10:04:02.191Z" },
70
- { url = "https://files.pythonhosted.org/packages/57/ee/28e9fbd920eb415d82d94c895f0071fd6a2face9c60a575247cb9c5aabd3/aiohttp-3.12.8-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d80a144083ada630d1aba99eded7e877555af3f9065f92e946a72d94619d4dff", size = 1664573, upload-time = "2025-06-04T10:04:03.957Z" },
71
- { url = "https://files.pythonhosted.org/packages/ee/fe/a1dd82fcfd91663789293a46a3a9931dd317d2ff96ea5ccd4172c8bbf3b5/aiohttp-3.12.8-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:516edb0a9476be7b3ea9b66320950c399a719404fbaa11353c190a98990a1f61", size = 1712848, upload-time = "2025-06-04T10:04:05.941Z" },
72
- { url = "https://files.pythonhosted.org/packages/d8/ff/f6604d7823fc3162b0b85398320e8a9df6810acade846a51677993ff0bf5/aiohttp-3.12.8-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:408225b0f91b27d47d8b838ddc84595b12927e63031ec7e37130a0a15294b39a", size = 1708005, upload-time = "2025-06-04T10:04:08.209Z" },
73
- { url = "https://files.pythonhosted.org/packages/22/ba/ad3051e5b99461e93cd450d12faf88cc3c8ce96219c87eca7cd795f8b39b/aiohttp-3.12.8-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:1bdf5baa3f1874654923268f220340352e1bb1c054cd1538e0674e94bd2d9ab6", size = 1688188, upload-time = "2025-06-04T10:04:09.994Z" },
74
- { url = "https://files.pythonhosted.org/packages/c4/22/9e3e373b3575489edf8c2e8aa43614a8ed0e25f8c5128f664a680c6836c9/aiohttp-3.12.8-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:51c7f01e50cec0a828a2dddaeb37c4f6e57882ddc7d5c91fdb955424dafac28e", size = 1781791, upload-time = "2025-06-04T10:04:12.765Z" },
75
- { url = "https://files.pythonhosted.org/packages/a1/ac/fb2e070e896eefd7ae33b048157d2fedde0c7aedbd32d2ea6501096a0ea1/aiohttp-3.12.8-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:31484e637a4b34e7771d0a9bf14de655a8943041ff2981e825556f3fa6f51e4f", size = 1802251, upload-time = "2025-06-04T10:04:14.748Z" },
76
- { url = "https://files.pythonhosted.org/packages/89/27/4cbac098c041bf75a241e0219709e67c1b79ae5f9d08e4840e9928adb06c/aiohttp-3.12.8-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:d53ce5059731e3f11f3245baec47620ad777ac336fc87d1cfd8b2393e384dff7", size = 1715310, upload-time = "2025-06-04T10:04:16.546Z" },
77
- { url = "https://files.pythonhosted.org/packages/8c/f1/1d36f122e7feefd25ee80c2872d4881a02576e3c6247ec1ac16279cf23a5/aiohttp-3.12.8-cp311-cp311-win32.whl", hash = "sha256:2969c9b9d8312f01dbe8cfd96d31ce0ff912ae3653d437fa73d2a6cfb0aed20d", size = 425343, upload-time = "2025-06-04T10:04:18.49Z" },
78
- { url = "https://files.pythonhosted.org/packages/3b/7d/c17c898082cd16c3644a9f36b845020c0ecada68e85a8ba2cb0d1a8a403d/aiohttp-3.12.8-cp311-cp311-win_amd64.whl", hash = "sha256:61cafeda35bfbabce4c38237485da9e31adae6a0a81ce351936cbe36acae0507", size = 449734, upload-time = "2025-06-04T10:04:20.189Z" },
79
- { url = "https://files.pythonhosted.org/packages/d0/94/ca11431028b78e71090105a77cc37baf1be6594aad9738bba3593382e278/aiohttp-3.12.8-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:10cf602de13ce84965d113094a7f88c8b393c58a40663b342f60c7e84472145a", size = 698890, upload-time = "2025-06-04T10:04:22.01Z" },
80
- { url = "https://files.pythonhosted.org/packages/a4/31/6002e9938ca82bb0df7647bab99bd256c7ee67a73e56c40703a037a1f279/aiohttp-3.12.8-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:c6fb7a89538475597e7635086ade991c7223c2aa34105c53dc3878a61e21ebcf", size = 473509, upload-time = "2025-06-04T10:04:24.057Z" },
81
- { url = "https://files.pythonhosted.org/packages/21/59/af42df3129bbfdc6d8c1fb863379c16e25860696529bad8b5e49e20a81b8/aiohttp-3.12.8-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:443d29d6c382b8d5c932cf88db006cb8c12db1019618b228791a251e2c73490b", size = 466346, upload-time = "2025-06-04T10:04:26.23Z" },
82
- { url = "https://files.pythonhosted.org/packages/f0/06/b6afb9348df5c782134931274576cc09e3cc333f5f2a39a5ed434fa6193f/aiohttp-3.12.8-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cc7a47a7fcad1a396abe7b7951cd4e9c50824e50bb5ddd6de2d465ad7e9f40be", size = 1713143, upload-time = "2025-06-04T10:04:28.422Z" },
83
- { url = "https://files.pythonhosted.org/packages/95/f2/f4ebe2972b55a9f2cde27bed78b052c3ab5f8fb3af82414f5de072b2e076/aiohttp-3.12.8-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:2fa21401a7fd516cafcf44511d356dbf15f77bdd2c53a92aa8760cf97af41c36", size = 1695793, upload-time = "2025-06-04T10:04:30.246Z" },
84
- { url = "https://files.pythonhosted.org/packages/75/e4/03080ebce1ad2529ccc5a94576a3af1aa82a2e866334943d4a8dba5a95ee/aiohttp-3.12.8-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2edb5286a4c924974f12798863ef81568c45e1ce2191f483a981276f82ce64e9", size = 1750889, upload-time = "2025-06-04T10:04:32.291Z" },
85
- { url = "https://files.pythonhosted.org/packages/f1/99/955ff89eebdb6939e3db9726aa5f24a00f2096d8d1269377bb7828c5ff6c/aiohttp-3.12.8-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:db28ab4a5b409ae7e747575d6dcb5bff75aa98d750b8366fa036135b5446d3c8", size = 1797043, upload-time = "2025-06-04T10:04:34.193Z" },
86
- { url = "https://files.pythonhosted.org/packages/c2/97/53e2c5b4ba7d0dbd1a9832cf5a65958921c9534f297b54d6506a28bee17c/aiohttp-3.12.8-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4c03c0a5a8169cec51b8447700fd96183c0917c4a29aed707d2775cda20abbed", size = 1716482, upload-time = "2025-06-04T10:04:36.174Z" },
87
- { url = "https://files.pythonhosted.org/packages/ab/89/dc5faa9aa20d83cb37dae40773ad273b3de75532d57f3c60a432474dedf2/aiohttp-3.12.8-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ee2821809ddfa441263f616c644c5ba8b6a0c9586555efc804c0cfabccc8a1e5", size = 1632284, upload-time = "2025-06-04T10:04:38.585Z" },
88
- { url = "https://files.pythonhosted.org/packages/48/d9/d2066059c3afb0dd6479444fc57ee633058140c90f8e61e80b28a06bf4be/aiohttp-3.12.8-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:4fceb45ff7b539c8e5af00aaee38d13e50c9ac7a024da0f9ecc832347f77ed3e", size = 1693348, upload-time = "2025-06-04T10:04:40.442Z" },
89
- { url = "https://files.pythonhosted.org/packages/7f/47/42945ecc9c86834c7c46f2e16b204da15fc6ce3a041b42d48ab799f030c7/aiohttp-3.12.8-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:db7fd45e72947f555bd4c8a529f017a8d519f814d45a071f9da66d04166ed6ed", size = 1714802, upload-time = "2025-06-04T10:04:42.615Z" },
90
- { url = "https://files.pythonhosted.org/packages/11/e0/4583e90fb518243182d5ccfd9011524a50a9d6a7a73443ad6bbed91dc5c8/aiohttp-3.12.8-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:5da5aabbd47a95d7cfd65a9b6b201b628474471f0e49fc4d6d8af8c15d544957", size = 1655450, upload-time = "2025-06-04T10:04:44.482Z" },
91
- { url = "https://files.pythonhosted.org/packages/1b/a4/7ebe22478b51b1076db3a9a7658579121d21deec1de66460eda4104897ff/aiohttp-3.12.8-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:be1b38de5c846e2ea0589a5967f5d9d37e522d5ee4df8393af7550d038662ba1", size = 1735014, upload-time = "2025-06-04T10:04:46.444Z" },
92
- { url = "https://files.pythonhosted.org/packages/e5/61/9e616aec811817f3a9da1a162787ffbf22761d857a9cd06ba9de74d87140/aiohttp-3.12.8-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:7e88efdb0e4373ac7040cb9009527f2f859e0035639aa57ff8281f0206a75bc4", size = 1762986, upload-time = "2025-06-04T10:04:48.692Z" },
93
- { url = "https://files.pythonhosted.org/packages/c3/31/934ed9adeda538b221913f9e96426680c993bbbf9f4ae2f58afa42aa5309/aiohttp-3.12.8-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:afd2e80e229ecc30c8b773910c2c381fd89b1f0662ecbf4fc4494a7a25788f8d", size = 1722598, upload-time = "2025-06-04T10:04:50.782Z" },
94
- { url = "https://files.pythonhosted.org/packages/4a/e2/d9fc4a49c31ad294900c56a435b000e7a700c548386b8ff43f9413efd22b/aiohttp-3.12.8-cp312-cp312-win32.whl", hash = "sha256:b20d42b621287ac12bd3e627d401615c80397bd3a4ec3ece50654af5b2b30c58", size = 420074, upload-time = "2025-06-04T10:04:52.863Z" },
95
- { url = "https://files.pythonhosted.org/packages/1e/47/2c1d2783d9f4c1a6bb943b48e27f8cd71794358b761b70aa978ff5c28e88/aiohttp-3.12.8-cp312-cp312-win_amd64.whl", hash = "sha256:58a90c26603a7ed89f2dcaeb8dbdf4805d55b363666870c71106a6f60ee93efd", size = 446178, upload-time = "2025-06-04T10:04:54.677Z" },
96
- { url = "https://files.pythonhosted.org/packages/83/2d/f1661c5069c94e5236ebc94aedf3071dcdbdf3e826d768f563a79dd677bf/aiohttp-3.12.8-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:0cfe91b12a86f1a1f292f46201f8801263f1df3b843c1f9020b98e6007838918", size = 693300, upload-time = "2025-06-04T10:04:57.001Z" },
97
- { url = "https://files.pythonhosted.org/packages/4f/53/c63430c4aaaf00407a2a3889182b66c9888386ae7737b11d76336f0a21d7/aiohttp-3.12.8-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:326396e1c174e775ac1bd49d41689128a28434d86af2d5dd9adfb211686f16c8", size = 470964, upload-time = "2025-06-04T10:04:59.007Z" },
98
- { url = "https://files.pythonhosted.org/packages/8c/87/ae2ec08f33742c3cc71bcf2bdd50e2d08e0e886a13a16579243c4105abf6/aiohttp-3.12.8-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:e0e7de9631c3163997a34d8ed55a2165e2df2ec6082dc4bd16eea92d00145c4c", size = 463265, upload-time = "2025-06-04T10:05:00.937Z" },
99
- { url = "https://files.pythonhosted.org/packages/c7/35/b17b894e129176639fcfdef2d859c6602e206e032ad8b41d050899296190/aiohttp-3.12.8-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0759cbdca820a6a5a8562606052792ef9acb79633c3e79e6733a3c1c133d4c7d", size = 1702083, upload-time = "2025-06-04T10:05:02.988Z" },
100
- { url = "https://files.pythonhosted.org/packages/58/57/c0ec6bf62c390956e6c66369abb23e3369cf5f9472744ecdbedf2c884886/aiohttp-3.12.8-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:311060ebd0832074968dd7d1b204a3b155203f7f9159c5b0908b76c5430be50f", size = 1683349, upload-time = "2025-06-04T10:05:04.978Z" },
101
- { url = "https://files.pythonhosted.org/packages/45/07/288839d84b64a525e332e8e71b38de67549887aaaf7352896ab4ef7ab42e/aiohttp-3.12.8-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:268a7c20eb404e9154b77fa521f832bbfd876cf5ff7b3e0dcb744d5b46738149", size = 1735419, upload-time = "2025-06-04T10:05:06.986Z" },
102
- { url = "https://files.pythonhosted.org/packages/81/1f/2db47efa2325b05869ed4eb0935ac3adee9c82689e8c43824f84979343b2/aiohttp-3.12.8-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0725406d0c512d589be41141391d11d56b447f4b56eee9bd9a17424b0e3e1d78", size = 1784790, upload-time = "2025-06-04T10:05:09.617Z" },
103
- { url = "https://files.pythonhosted.org/packages/23/26/e667da558e29b30a1d758b7f0719a3be0c44bd14fb326bf3d988596075af/aiohttp-3.12.8-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3a8edf6c68eb4397136591d66ce4bda8cdb47ca585948223bc98e8492d37c71f", size = 1707122, upload-time = "2025-06-04T10:05:12.113Z" },
104
- { url = "https://files.pythonhosted.org/packages/b0/4a/621345bcc17c7045b97b5e4374cc30e343e03f1434f710aa4c573d25d676/aiohttp-3.12.8-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:25aa7f26286769210938a159db2f2f65d05bcc06190e34fca03eeb643f20dfc7", size = 1620825, upload-time = "2025-06-04T10:05:14.32Z" },
105
- { url = "https://files.pythonhosted.org/packages/6f/08/dd7d243b2f44914d647614503c5616d1393930fef5acf74ea6da1fe0e181/aiohttp-3.12.8-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:952d2fa762ba6a946f3498a3a62c19dadb066539f5ac0dfa20dfe58bb8f733b5", size = 1673847, upload-time = "2025-06-04T10:05:16.357Z" },
106
- { url = "https://files.pythonhosted.org/packages/2a/04/c58e5347960a385bc360678e1fee3ea021db99b0c7b83adaedf98b54e6b1/aiohttp-3.12.8-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:c2b7f82193482c7778d2de25d67dcc29a65895f5281ef177609ed4ebfb015d68", size = 1705511, upload-time = "2025-06-04T10:05:22.63Z" },
107
- { url = "https://files.pythonhosted.org/packages/48/88/dd5866d495dd07ca76d97b8a90373310b3ae9d9da845a8621038a36d289b/aiohttp-3.12.8-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:0a99972b368e370882994a72bd2e7b2d89a886288f0ff0ea09793452865b97a3", size = 1648108, upload-time = "2025-06-04T10:05:24.775Z" },
108
- { url = "https://files.pythonhosted.org/packages/ed/81/151c62ec0fdeca4952ea716a197c54b36272b0dd23d202321a01e4b76997/aiohttp-3.12.8-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:ae8c65d708a473fcfa5b972a1dc6bf31257d58a07f4e4c93d0327384deab5cae", size = 1724241, upload-time = "2025-06-04T10:05:26.825Z" },
109
- { url = "https://files.pythonhosted.org/packages/f5/4e/578938d73e73187d835623a2902979d775b25600320244724f7fb47677ad/aiohttp-3.12.8-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:a9e0be4d239794c065e1ba439d19de7e4773b4b4b3b9849af2c3c233f3e5b3eb", size = 1757713, upload-time = "2025-06-04T10:05:29.368Z" },
110
- { url = "https://files.pythonhosted.org/packages/47/c0/02c94b8d4dcc790976ef047737faa995aff1b3eaebd506d781ca43371d9c/aiohttp-3.12.8-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:ad754910e7acce5bd52326b308ca58d404e8ba1a5bcd5a0c8607ce3dee4a1d65", size = 1706603, upload-time = "2025-06-04T10:05:31.682Z" },
111
- { url = "https://files.pythonhosted.org/packages/fe/2d/6303861ebd2ac90753f0f789892c3ff841df0fcee7527cbd8e5be82c354f/aiohttp-3.12.8-cp313-cp313-win32.whl", hash = "sha256:3ca646524940dd62a96658ccc1e64dc548c633dd0468a0bf8525dd3163e2c60c", size = 419100, upload-time = "2025-06-04T10:05:34.303Z" },
112
- { url = "https://files.pythonhosted.org/packages/2e/44/3ba175afa2d6d6db7cfe27136dfcd0f3c0e4c9d48dd2f3c58f955b61597f/aiohttp-3.12.8-cp313-cp313-win_amd64.whl", hash = "sha256:2f7e553bd4ff72d7e3b06ff60fc2d29457865ddb8cb7d7dc9287991c660151c5", size = 445038, upload-time = "2025-06-04T10:05:36.371Z" },
113
  ]
114
 
115
  [[package]]
@@ -498,12 +498,21 @@ wheels = [
498
  { url = "https://files.pythonhosted.org/packages/91/a1/cf2472db20f7ce4a6be1253a81cfdf85ad9c7885ffbed7047fb72c24cf87/distlib-0.3.9-py2.py3-none-any.whl", hash = "sha256:47f8c22fd27c27e25a65601af709b38e4f0a45ea4fc2e710f65755fa8caaaf87", size = 468973, upload-time = "2024-10-09T18:35:44.272Z" },
499
  ]
500
 
 
 
 
 
 
 
 
 
 
501
  [[package]]
502
  name = "exceptiongroup"
503
  version = "1.3.0"
504
  source = { registry = "https://pypi.org/simple" }
505
  dependencies = [
506
- { name = "typing-extensions", marker = "python_full_version < '3.11'" },
507
  ]
508
  sdist = { url = "https://files.pythonhosted.org/packages/0b/9f/a65090624ecf468cdca03533906e7c69ed7588582240cfe7cc9e770b50eb/exceptiongroup-1.3.0.tar.gz", hash = "sha256:b241f5885f560bc56a59ee63ca4c6a8bfa46ae4ad651af316d4e81817bb9fd88", size = 29749, upload-time = "2025-05-10T17:42:51.123Z" }
509
  wheels = [
@@ -647,7 +656,7 @@ wheels = [
647
 
648
  [[package]]
649
  name = "gradio"
650
- version = "5.32.1"
651
  source = { registry = "https://pypi.org/simple" }
652
  dependencies = [
653
  { name = "aiofiles" },
@@ -680,9 +689,9 @@ dependencies = [
680
  { name = "urllib3", marker = "sys_platform == 'emscripten'" },
681
  { name = "uvicorn", marker = "sys_platform != 'emscripten'" },
682
  ]
683
- sdist = { url = "https://files.pythonhosted.org/packages/69/b9/a5ebc2e667ee30c47a96c3c2276c0db63cb9ae9db45a08d693c1c9250b5d/gradio-5.32.1.tar.gz", hash = "sha256:6026fc458d6e642e1832c7becc17d9e17439c41d29bf14cb39dfb23365e759c6", size = 64779509, upload-time = "2025-06-02T21:04:44.816Z" }
684
  wheels = [
685
- { url = "https://files.pythonhosted.org/packages/e4/27/2f14c2a408301cda16eb6d2e84ce548ca444dc22c3e4209663337addbde2/gradio-5.32.1-py3-none-any.whl", hash = "sha256:994c9437c1abc2663d7a9ec3bd2f0dfe6e4279bfc3cdca1dd265bf6d21722bcc", size = 54202770, upload-time = "2025-06-02T21:04:39.68Z" },
686
  ]
687
 
688
  [package.optional-dependencies]
@@ -728,17 +737,17 @@ wheels = [
728
 
729
  [[package]]
730
  name = "hf-xet"
731
- version = "1.1.2"
732
  source = { registry = "https://pypi.org/simple" }
733
- sdist = { url = "https://files.pythonhosted.org/packages/95/be/58f20728a5b445f8b064e74f0618897b3439f5ef90934da1916b9dfac76f/hf_xet-1.1.2.tar.gz", hash = "sha256:3712d6d4819d3976a1c18e36db9f503e296283f9363af818f50703506ed63da3", size = 467009, upload-time = "2025-05-16T20:44:34.944Z" }
734
  wheels = [
735
- { url = "https://files.pythonhosted.org/packages/45/ae/f1a63f75d9886f18a80220ba31a1c7b9c4752f03aae452f358f538c6a991/hf_xet-1.1.2-cp37-abi3-macosx_10_12_x86_64.whl", hash = "sha256:dfd1873fd648488c70735cb60f7728512bca0e459e61fcd107069143cd798469", size = 2642559, upload-time = "2025-05-16T20:44:30.217Z" },
736
- { url = "https://files.pythonhosted.org/packages/50/ab/d2c83ae18f1015d926defd5bfbe94c62d15e93f900e6a192e318ee947105/hf_xet-1.1.2-cp37-abi3-macosx_11_0_arm64.whl", hash = "sha256:29b584983b2d977c44157d9241dcf0fd50acde0b7bff8897fe4386912330090d", size = 2541360, upload-time = "2025-05-16T20:44:29.056Z" },
737
- { url = "https://files.pythonhosted.org/packages/9f/a7/693dc9f34f979e30a378125e2150a0b2d8d166e6d83ce3950eeb81e560aa/hf_xet-1.1.2-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6b29ac84298147fe9164cc55ad994ba47399f90b5d045b0b803b99cf5f06d8ec", size = 5183081, upload-time = "2025-05-16T20:44:27.505Z" },
738
- { url = "https://files.pythonhosted.org/packages/3d/23/c48607883f692a36c0a7735f47f98bad32dbe459a32d1568c0f21576985d/hf_xet-1.1.2-cp37-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:d921ba32615676e436a0d15e162331abc9ed43d440916b1d836dc27ce1546173", size = 5356100, upload-time = "2025-05-16T20:44:25.681Z" },
739
- { url = "https://files.pythonhosted.org/packages/eb/5b/b2316c7f1076da0582b52ea228f68bea95e243c388440d1dc80297c9d813/hf_xet-1.1.2-cp37-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:d9b03c34e13c44893ab6e8fea18ee8d2a6878c15328dd3aabedbdd83ee9f2ed3", size = 5647688, upload-time = "2025-05-16T20:44:31.867Z" },
740
- { url = "https://files.pythonhosted.org/packages/2c/98/e6995f0fa579929da7795c961f403f4ee84af36c625963f52741d56f242c/hf_xet-1.1.2-cp37-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:01b18608955b3d826307d37da8bd38b28a46cd2d9908b3a3655d1363274f941a", size = 5322627, upload-time = "2025-05-16T20:44:33.677Z" },
741
- { url = "https://files.pythonhosted.org/packages/59/40/8f1d5a44a64d8bf9e3c19576e789f716af54875b46daae65426714e75db1/hf_xet-1.1.2-cp37-abi3-win_amd64.whl", hash = "sha256:3562902c81299b09f3582ddfb324400c6a901a2f3bc854f83556495755f4954c", size = 2739542, upload-time = "2025-05-16T20:44:36.287Z" },
742
  ]
743
 
744
  [[package]]
@@ -1283,11 +1292,11 @@ wheels = [
1283
 
1284
  [[package]]
1285
  name = "packageurl-python"
1286
- version = "0.16.0"
1287
  source = { registry = "https://pypi.org/simple" }
1288
- sdist = { url = "https://files.pythonhosted.org/packages/68/7d/0bd319dc94c7956b4d864e87d3dc03739f125ce174671e3128edd566a63e/packageurl_python-0.16.0.tar.gz", hash = "sha256:69e3bf8a3932fe9c2400f56aaeb9f86911ecee2f9398dbe1b58ec34340be365d", size = 40492, upload-time = "2024-10-22T05:51:25.708Z" }
1289
  wheels = [
1290
- { url = "https://files.pythonhosted.org/packages/c4/47/3c197fb7596a813afef2e4198d507b761aed2c7150d90be64dff9fe0ea71/packageurl_python-0.16.0-py3-none-any.whl", hash = "sha256:5c3872638b177b0f1cf01c3673017b7b27ebee485693ae12a8bed70fa7fa7c35", size = 28544, upload-time = "2024-10-22T05:51:23.924Z" },
1291
  ]
1292
 
1293
  [[package]]
@@ -1301,7 +1310,7 @@ wheels = [
1301
 
1302
  [[package]]
1303
  name = "pandas"
1304
- version = "2.2.3"
1305
  source = { registry = "https://pypi.org/simple" }
1306
  dependencies = [
1307
  { name = "numpy" },
@@ -1309,42 +1318,33 @@ dependencies = [
1309
  { name = "pytz" },
1310
  { name = "tzdata" },
1311
  ]
1312
- sdist = { url = "https://files.pythonhosted.org/packages/9c/d6/9f8431bacc2e19dca897724cd097b1bb224a6ad5433784a44b587c7c13af/pandas-2.2.3.tar.gz", hash = "sha256:4f18ba62b61d7e192368b84517265a99b4d7ee8912f8708660fb4a366cc82667", size = 4399213, upload-time = "2024-09-20T13:10:04.827Z" }
1313
- wheels = [
1314
- { url = "https://files.pythonhosted.org/packages/aa/70/c853aec59839bceed032d52010ff5f1b8d87dc3114b762e4ba2727661a3b/pandas-2.2.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:1948ddde24197a0f7add2bdc4ca83bf2b1ef84a1bc8ccffd95eda17fd836ecb5", size = 12580827, upload-time = "2024-09-20T13:08:42.347Z" },
1315
- { url = "https://files.pythonhosted.org/packages/99/f2/c4527768739ffa4469b2b4fff05aa3768a478aed89a2f271a79a40eee984/pandas-2.2.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:381175499d3802cde0eabbaf6324cce0c4f5d52ca6f8c377c29ad442f50f6348", size = 11303897, upload-time = "2024-09-20T13:08:45.807Z" },
1316
- { url = "https://files.pythonhosted.org/packages/ed/12/86c1747ea27989d7a4064f806ce2bae2c6d575b950be087837bdfcabacc9/pandas-2.2.3-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:d9c45366def9a3dd85a6454c0e7908f2b3b8e9c138f5dc38fed7ce720d8453ed", size = 66480908, upload-time = "2024-09-20T18:37:13.513Z" },
1317
- { url = "https://files.pythonhosted.org/packages/44/50/7db2cd5e6373ae796f0ddad3675268c8d59fb6076e66f0c339d61cea886b/pandas-2.2.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:86976a1c5b25ae3f8ccae3a5306e443569ee3c3faf444dfd0f41cda24667ad57", size = 13064210, upload-time = "2024-09-20T13:08:48.325Z" },
1318
- { url = "https://files.pythonhosted.org/packages/61/61/a89015a6d5536cb0d6c3ba02cebed51a95538cf83472975275e28ebf7d0c/pandas-2.2.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:b8661b0238a69d7aafe156b7fa86c44b881387509653fdf857bebc5e4008ad42", size = 16754292, upload-time = "2024-09-20T19:01:54.443Z" },
1319
- { url = "https://files.pythonhosted.org/packages/ce/0d/4cc7b69ce37fac07645a94e1d4b0880b15999494372c1523508511b09e40/pandas-2.2.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:37e0aced3e8f539eccf2e099f65cdb9c8aa85109b0be6e93e2baff94264bdc6f", size = 14416379, upload-time = "2024-09-20T13:08:50.882Z" },
1320
- { url = "https://files.pythonhosted.org/packages/31/9e/6ebb433de864a6cd45716af52a4d7a8c3c9aaf3a98368e61db9e69e69a9c/pandas-2.2.3-cp310-cp310-win_amd64.whl", hash = "sha256:56534ce0746a58afaf7942ba4863e0ef81c9c50d3f0ae93e9497d6a41a057645", size = 11598471, upload-time = "2024-09-20T13:08:53.332Z" },
1321
- { url = "https://files.pythonhosted.org/packages/a8/44/d9502bf0ed197ba9bf1103c9867d5904ddcaf869e52329787fc54ed70cc8/pandas-2.2.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:66108071e1b935240e74525006034333f98bcdb87ea116de573a6a0dccb6c039", size = 12602222, upload-time = "2024-09-20T13:08:56.254Z" },
1322
- { url = "https://files.pythonhosted.org/packages/52/11/9eac327a38834f162b8250aab32a6781339c69afe7574368fffe46387edf/pandas-2.2.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:7c2875855b0ff77b2a64a0365e24455d9990730d6431b9e0ee18ad8acee13dbd", size = 11321274, upload-time = "2024-09-20T13:08:58.645Z" },
1323
- { url = "https://files.pythonhosted.org/packages/45/fb/c4beeb084718598ba19aa9f5abbc8aed8b42f90930da861fcb1acdb54c3a/pandas-2.2.3-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:cd8d0c3be0515c12fed0bdbae072551c8b54b7192c7b1fda0ba56059a0179698", size = 15579836, upload-time = "2024-09-20T19:01:57.571Z" },
1324
- { url = "https://files.pythonhosted.org/packages/cd/5f/4dba1d39bb9c38d574a9a22548c540177f78ea47b32f99c0ff2ec499fac5/pandas-2.2.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c124333816c3a9b03fbeef3a9f230ba9a737e9e5bb4060aa2107a86cc0a497fc", size = 13058505, upload-time = "2024-09-20T13:09:01.501Z" },
1325
- { url = "https://files.pythonhosted.org/packages/b9/57/708135b90391995361636634df1f1130d03ba456e95bcf576fada459115a/pandas-2.2.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:63cc132e40a2e084cf01adf0775b15ac515ba905d7dcca47e9a251819c575ef3", size = 16744420, upload-time = "2024-09-20T19:02:00.678Z" },
1326
- { url = "https://files.pythonhosted.org/packages/86/4a/03ed6b7ee323cf30404265c284cee9c65c56a212e0a08d9ee06984ba2240/pandas-2.2.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:29401dbfa9ad77319367d36940cd8a0b3a11aba16063e39632d98b0e931ddf32", size = 14440457, upload-time = "2024-09-20T13:09:04.105Z" },
1327
- { url = "https://files.pythonhosted.org/packages/ed/8c/87ddf1fcb55d11f9f847e3c69bb1c6f8e46e2f40ab1a2d2abadb2401b007/pandas-2.2.3-cp311-cp311-win_amd64.whl", hash = "sha256:3fc6873a41186404dad67245896a6e440baacc92f5b716ccd1bc9ed2995ab2c5", size = 11617166, upload-time = "2024-09-20T13:09:06.917Z" },
1328
- { url = "https://files.pythonhosted.org/packages/17/a3/fb2734118db0af37ea7433f57f722c0a56687e14b14690edff0cdb4b7e58/pandas-2.2.3-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:b1d432e8d08679a40e2a6d8b2f9770a5c21793a6f9f47fdd52c5ce1948a5a8a9", size = 12529893, upload-time = "2024-09-20T13:09:09.655Z" },
1329
- { url = "https://files.pythonhosted.org/packages/e1/0c/ad295fd74bfac85358fd579e271cded3ac969de81f62dd0142c426b9da91/pandas-2.2.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:a5a1595fe639f5988ba6a8e5bc9649af3baf26df3998a0abe56c02609392e0a4", size = 11363475, upload-time = "2024-09-20T13:09:14.718Z" },
1330
- { url = "https://files.pythonhosted.org/packages/c6/2a/4bba3f03f7d07207481fed47f5b35f556c7441acddc368ec43d6643c5777/pandas-2.2.3-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:5de54125a92bb4d1c051c0659e6fcb75256bf799a732a87184e5ea503965bce3", size = 15188645, upload-time = "2024-09-20T19:02:03.88Z" },
1331
- { url = "https://files.pythonhosted.org/packages/38/f8/d8fddee9ed0d0c0f4a2132c1dfcf0e3e53265055da8df952a53e7eaf178c/pandas-2.2.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fffb8ae78d8af97f849404f21411c95062db1496aeb3e56f146f0355c9989319", size = 12739445, upload-time = "2024-09-20T13:09:17.621Z" },
1332
- { url = "https://files.pythonhosted.org/packages/20/e8/45a05d9c39d2cea61ab175dbe6a2de1d05b679e8de2011da4ee190d7e748/pandas-2.2.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:6dfcb5ee8d4d50c06a51c2fffa6cff6272098ad6540aed1a76d15fb9318194d8", size = 16359235, upload-time = "2024-09-20T19:02:07.094Z" },
1333
- { url = "https://files.pythonhosted.org/packages/1d/99/617d07a6a5e429ff90c90da64d428516605a1ec7d7bea494235e1c3882de/pandas-2.2.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:062309c1b9ea12a50e8ce661145c6aab431b1e99530d3cd60640e255778bd43a", size = 14056756, upload-time = "2024-09-20T13:09:20.474Z" },
1334
- { url = "https://files.pythonhosted.org/packages/29/d4/1244ab8edf173a10fd601f7e13b9566c1b525c4f365d6bee918e68381889/pandas-2.2.3-cp312-cp312-win_amd64.whl", hash = "sha256:59ef3764d0fe818125a5097d2ae867ca3fa64df032331b7e0917cf5d7bf66b13", size = 11504248, upload-time = "2024-09-20T13:09:23.137Z" },
1335
- { url = "https://files.pythonhosted.org/packages/64/22/3b8f4e0ed70644e85cfdcd57454686b9057c6c38d2f74fe4b8bc2527214a/pandas-2.2.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:f00d1345d84d8c86a63e476bb4955e46458b304b9575dcf71102b5c705320015", size = 12477643, upload-time = "2024-09-20T13:09:25.522Z" },
1336
- { url = "https://files.pythonhosted.org/packages/e4/93/b3f5d1838500e22c8d793625da672f3eec046b1a99257666c94446969282/pandas-2.2.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:3508d914817e153ad359d7e069d752cdd736a247c322d932eb89e6bc84217f28", size = 11281573, upload-time = "2024-09-20T13:09:28.012Z" },
1337
- { url = "https://files.pythonhosted.org/packages/f5/94/6c79b07f0e5aab1dcfa35a75f4817f5c4f677931d4234afcd75f0e6a66ca/pandas-2.2.3-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:22a9d949bfc9a502d320aa04e5d02feab689d61da4e7764b62c30b991c42c5f0", size = 15196085, upload-time = "2024-09-20T19:02:10.451Z" },
1338
- { url = "https://files.pythonhosted.org/packages/e8/31/aa8da88ca0eadbabd0a639788a6da13bb2ff6edbbb9f29aa786450a30a91/pandas-2.2.3-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f3a255b2c19987fbbe62a9dfd6cff7ff2aa9ccab3fc75218fd4b7530f01efa24", size = 12711809, upload-time = "2024-09-20T13:09:30.814Z" },
1339
- { url = "https://files.pythonhosted.org/packages/ee/7c/c6dbdb0cb2a4344cacfb8de1c5808ca885b2e4dcfde8008266608f9372af/pandas-2.2.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:800250ecdadb6d9c78eae4990da62743b857b470883fa27f652db8bdde7f6659", size = 16356316, upload-time = "2024-09-20T19:02:13.825Z" },
1340
- { url = "https://files.pythonhosted.org/packages/57/b7/8b757e7d92023b832869fa8881a992696a0bfe2e26f72c9ae9f255988d42/pandas-2.2.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:6374c452ff3ec675a8f46fd9ab25c4ad0ba590b71cf0656f8b6daa5202bca3fb", size = 14022055, upload-time = "2024-09-20T13:09:33.462Z" },
1341
- { url = "https://files.pythonhosted.org/packages/3b/bc/4b18e2b8c002572c5a441a64826252ce5da2aa738855747247a971988043/pandas-2.2.3-cp313-cp313-win_amd64.whl", hash = "sha256:61c5ad4043f791b61dd4752191d9f07f0ae412515d59ba8f005832a532f8736d", size = 11481175, upload-time = "2024-09-20T13:09:35.871Z" },
1342
- { url = "https://files.pythonhosted.org/packages/76/a3/a5d88146815e972d40d19247b2c162e88213ef51c7c25993942c39dbf41d/pandas-2.2.3-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:3b71f27954685ee685317063bf13c7709a7ba74fc996b84fc6821c59b0f06468", size = 12615650, upload-time = "2024-09-20T13:09:38.685Z" },
1343
- { url = "https://files.pythonhosted.org/packages/9c/8c/f0fd18f6140ddafc0c24122c8a964e48294acc579d47def376fef12bcb4a/pandas-2.2.3-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:38cf8125c40dae9d5acc10fa66af8ea6fdf760b2714ee482ca691fc66e6fcb18", size = 11290177, upload-time = "2024-09-20T13:09:41.141Z" },
1344
- { url = "https://files.pythonhosted.org/packages/ed/f9/e995754eab9c0f14c6777401f7eece0943840b7a9fc932221c19d1abee9f/pandas-2.2.3-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:ba96630bc17c875161df3818780af30e43be9b166ce51c9a18c1feae342906c2", size = 14651526, upload-time = "2024-09-20T19:02:16.905Z" },
1345
- { url = "https://files.pythonhosted.org/packages/25/b0/98d6ae2e1abac4f35230aa756005e8654649d305df9a28b16b9ae4353bff/pandas-2.2.3-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1db71525a1538b30142094edb9adc10be3f3e176748cd7acc2240c2f2e5aa3a4", size = 11871013, upload-time = "2024-09-20T13:09:44.39Z" },
1346
- { url = "https://files.pythonhosted.org/packages/cc/57/0f72a10f9db6a4628744c8e8f0df4e6e21de01212c7c981d31e50ffc8328/pandas-2.2.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:15c0e1e02e93116177d29ff83e8b1619c93ddc9c49083f237d4312337a61165d", size = 15711620, upload-time = "2024-09-20T19:02:20.639Z" },
1347
- { url = "https://files.pythonhosted.org/packages/ab/5f/b38085618b950b79d2d9164a711c52b10aefc0ae6833b96f626b7021b2ed/pandas-2.2.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:ad5b65698ab28ed8d7f18790a0dc58005c7629f227be9ecc1072aa74c0c1d43a", size = 13098436, upload-time = "2024-09-20T13:09:48.112Z" },
1348
  ]
1349
 
1350
  [[package]]
@@ -2148,6 +2148,7 @@ dependencies = [
2148
  { name = "attackcti" },
2149
  { name = "black" },
2150
  { name = "cachetools" },
 
2151
  { name = "gradio", extra = ["mcp"] },
2152
  { name = "python-whois" },
2153
  { name = "requests" },
@@ -2173,6 +2174,7 @@ requires-dist = [
2173
  { name = "attackcti", specifier = ">=0.5.4" },
2174
  { name = "black", specifier = ">=25.1.0" },
2175
  { name = "cachetools", specifier = ">=6.0.0" },
 
2176
  { name = "gradio", extras = ["mcp"], specifier = ">=5.32.1" },
2177
  { name = "python-whois", specifier = ">=0.9.5" },
2178
  { name = "requests", specifier = ">=2.32.3" },
@@ -2243,11 +2245,11 @@ wheels = [
2243
 
2244
  [[package]]
2245
  name = "tomlkit"
2246
- version = "0.13.2"
2247
  source = { registry = "https://pypi.org/simple" }
2248
- sdist = { url = "https://files.pythonhosted.org/packages/b1/09/a439bec5888f00a54b8b9f05fa94d7f901d6735ef4e55dcec9bc37b5d8fa/tomlkit-0.13.2.tar.gz", hash = "sha256:fff5fe59a87295b278abd31bec92c15d9bc4a06885ab12bcea52c71119392e79", size = 192885, upload-time = "2024-08-14T08:19:41.488Z" }
2249
  wheels = [
2250
- { url = "https://files.pythonhosted.org/packages/f9/b6/a447b5e4ec71e13871be01ba81f5dfc9d0af7e473da256ff46bc0e24026f/tomlkit-0.13.2-py3-none-any.whl", hash = "sha256:7a974427f6e119197f670fbbbeae7bef749a6c14e793db934baefc1b5f03efde", size = 37955, upload-time = "2024-08-14T08:19:40.05Z" },
2251
  ]
2252
 
2253
  [[package]]
 
28
 
29
  [[package]]
30
  name = "aiohttp"
31
+ version = "3.12.9"
32
  source = { registry = "https://pypi.org/simple" }
33
  dependencies = [
34
  { name = "aiohappyeyeballs" },
 
40
  { name = "propcache" },
41
  { name = "yarl" },
42
  ]
43
+ sdist = { url = "https://files.pythonhosted.org/packages/4b/ad/5b0f3451c2275af09966f1d7c0965facd4729a5b7efdc2eb728654679f85/aiohttp-3.12.9.tar.gz", hash = "sha256:2c9914c8914ff40b68c6e4ed5da33e88d4e8f368fddd03ceb0eb3175905ca782", size = 7810207, upload-time = "2025-06-04T16:26:40.157Z" }
44
+ wheels = [
45
+ { url = "https://files.pythonhosted.org/packages/e1/fa/a843c04c15287d5c0abbfe6e2996e9a74fa4dd0470f280ae893357640fac/aiohttp-3.12.9-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:abb01935bb606bbc080424799bfda358d38374c45a7cbbc89f9bb330deb1db26", size = 700518, upload-time = "2025-06-04T16:23:09.783Z" },
46
+ { url = "https://files.pythonhosted.org/packages/dc/9f/79feb65d4e8c193e56fe2fca5d352cc1e98548b43462f9ceb8c9fb740484/aiohttp-3.12.9-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e2337516411cd15b7257736484dfd5101fa0e6b11ef2086b4bb6db9365373dcb", size = 476888, upload-time = "2025-06-04T16:23:14.205Z" },
47
+ { url = "https://files.pythonhosted.org/packages/cc/b4/136399c69fef6c412ef5b7a24fa5adf5b07965f686aa52ecb2d494b8bfe5/aiohttp-3.12.9-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:26874b2c61ab5d1e05d942d7254a565eeec11750bf8f1a8995c33d6d772f5015", size = 464660, upload-time = "2025-06-04T16:23:16.374Z" },
48
+ { url = "https://files.pythonhosted.org/packages/cc/f4/9245dd38d760d92504fdc1a1cdaa3468b8642e0692875badc509312728a4/aiohttp-3.12.9-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:43dbedb626c6bb03cc8e9ab27b9da4414bc5540d3fe1bce0e687e50c20553689", size = 1646712, upload-time = "2025-06-04T16:23:19.012Z" },
49
+ { url = "https://files.pythonhosted.org/packages/f7/52/907028e57dd34d89424f9adc03bdf2dcbf8ca66b1799a4b0362b3291adf3/aiohttp-3.12.9-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:18897f24e80bac4e7df5d37375ab22391f8b7beedfe617f8de064dbfd76ca36b", size = 1620767, upload-time = "2025-06-04T16:23:21.016Z" },
50
+ { url = "https://files.pythonhosted.org/packages/d8/71/615d3f8fcbec363c998856726daeb8d7a1de348618ddbebf2799694d3f46/aiohttp-3.12.9-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2466804eaa42bf6340de28fba7254709db788989b891a7c5bd57a84f5a11c04b", size = 1693176, upload-time = "2025-06-04T16:23:23.465Z" },
51
+ { url = "https://files.pythonhosted.org/packages/6d/f1/c815a3e91b89f678bbbd053e199438067c554d669f00b5d3a3ddcd4e31e9/aiohttp-3.12.9-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:85ddf89da86915ab327fafe9059540707b9deac7cfad1dfda4621eac6590aa16", size = 1735490, upload-time = "2025-06-04T16:23:25.418Z" },
52
+ { url = "https://files.pythonhosted.org/packages/d2/55/ff9a6951fb8aa04d95d4c206f189a62bf616a9ab7a325c8e72f1bd817f84/aiohttp-3.12.9-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f8d89c0ea455b8e8e386db8b82a55671703d4868c7c1e38cca0d643232f50f8d", size = 1640156, upload-time = "2025-06-04T16:23:27.788Z" },
53
+ { url = "https://files.pythonhosted.org/packages/22/97/c7d8d8ac53862a612dc06574f591d30b64326ef910c43bc5c0cbeffb9210/aiohttp-3.12.9-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2ee5ca28436b9203d020924c6dacc1cca4e77acf5f8f5c5d236b123c0158a012", size = 1580277, upload-time = "2025-06-04T16:23:29.813Z" },
54
+ { url = "https://files.pythonhosted.org/packages/d2/e8/6cdfe6f65713c4957311a4fad1b343bc93eb3a87b84ef8e5c18f06c77a69/aiohttp-3.12.9-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:7ca2ad779958e1beb2f139e7d45f84c13f94f6c0f63025e435e31f3247cb5a05", size = 1624126, upload-time = "2025-06-04T16:23:31.756Z" },
55
+ { url = "https://files.pythonhosted.org/packages/10/1d/9a63f309928ff6494626659c68bb4e0c8e2678dd5aa9e7a22a47305f297c/aiohttp-3.12.9-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:daae5ea9c06daacb056351273a38d4465446fbb5c8c8107a6f93db3e1d5bc4e8", size = 1634913, upload-time = "2025-06-04T16:23:35.171Z" },
56
+ { url = "https://files.pythonhosted.org/packages/92/be/9a90641bc61777d9fbd037b12cafa0208726172c22decfdfbea5b82b931d/aiohttp-3.12.9-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:52cec94fa76e488b0ebc6586507421116d7993c7984ea020529107796b206117", size = 1610367, upload-time = "2025-06-04T16:23:37.519Z" },
57
+ { url = "https://files.pythonhosted.org/packages/0f/63/16730d255cd92bf8f834b0199a7faf850989628129b6fa3684d541a4effe/aiohttp-3.12.9-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:db2aef30d877f44716c8ce4adb2162c7ccb9c58d6153bc68bd2cfb3fbd7d6a95", size = 1689952, upload-time = "2025-06-04T16:23:39.497Z" },
58
+ { url = "https://files.pythonhosted.org/packages/35/aa/e7410f300a66b6db014873e0efcc277206433c89b60502e7434efccde43a/aiohttp-3.12.9-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:1d205549f965bc69c377206643b06fd78d77ed20b8735765c54153cf00a51465", size = 1713189, upload-time = "2025-06-04T16:23:41.528Z" },
59
+ { url = "https://files.pythonhosted.org/packages/69/18/d36db9ae9ae972310abbfbd8ebcf53e434e4973a017c9f5677efeb36f31f/aiohttp-3.12.9-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:3fdaaf63a778ae020b9bf8a7ae4a80f87deb88152aad259764e994b3efe44d38", size = 1641531, upload-time = "2025-06-04T16:23:43.458Z" },
60
+ { url = "https://files.pythonhosted.org/packages/ea/49/f4b6d7ada60b40328cf4b6430fc7677045cef4262cfb87818fb7f706964a/aiohttp-3.12.9-cp310-cp310-win32.whl", hash = "sha256:7aecd5546e5c65e4904fc697806a4830c2a4870cb7bae28a7f483db008bba3dc", size = 425901, upload-time = "2025-06-04T16:23:45.329Z" },
61
+ { url = "https://files.pythonhosted.org/packages/df/5d/69701dee7c6a5248baea27df1609b8ecb3d0789969cf6e32424afb688824/aiohttp-3.12.9-cp310-cp310-win_amd64.whl", hash = "sha256:5cf338d75be82709bf1c8d8404f347661819c1cc9f34798d5b762377fd70ccd6", size = 449109, upload-time = "2025-06-04T16:23:47.686Z" },
62
+ { url = "https://files.pythonhosted.org/packages/b8/6a/9df1a8463e19d1ad2f349c81c0a05a1d5762f42855fec3aae3bd88f9eefe/aiohttp-3.12.9-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:301eebd8e1134a8457151b451841a47d3440ce79fa9a0d1c70650bda624cbd69", size = 707827, upload-time = "2025-06-04T16:23:49.629Z" },
63
+ { url = "https://files.pythonhosted.org/packages/44/a4/080e5aa0aabcd2cf75320169727b5ef0ffadd1774d1b07a27903b513f972/aiohttp-3.12.9-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:0d8ba7652d815bd5b99189d5b685db5509a08f1282e047a849b7f4353df8a95c", size = 480110, upload-time = "2025-06-04T16:23:51.414Z" },
64
+ { url = "https://files.pythonhosted.org/packages/ec/3e/d2e3f6864ca88f8b91afb20558fdcd43e11224fc4b4aad2103f05f37c98f/aiohttp-3.12.9-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:998a6e143b2a4ffee14fb2c2ff5a3338d70d811be3f5d4a13a305ee0f4c6ac42", size = 468371, upload-time = "2025-06-04T16:23:53.817Z" },
65
+ { url = "https://files.pythonhosted.org/packages/83/c0/3347524ee435e13a9bfa54ae59a9e479f7cd05bf5062bee8471a6b39d933/aiohttp-3.12.9-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0d011b13f3bfcf711ce9007ea08305a582135ee2105dc3202b011c055c1ac6f1", size = 1738567, upload-time = "2025-06-04T16:23:56.431Z" },
66
+ { url = "https://files.pythonhosted.org/packages/98/af/96f10bc9f71aa806cdb1e4af3aa00352e20dc0e70b53a7147526b2f95e81/aiohttp-3.12.9-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:3c7b314d565e235051893a46e14ea14ab05bb17fe99bdb2cf85e9adc62b4836c", size = 1687239, upload-time = "2025-06-04T16:23:58.428Z" },
67
+ { url = "https://files.pythonhosted.org/packages/c7/f8/049a08282f9e5a45e903cc81ded19de718133daf21924c715ef0435038b3/aiohttp-3.12.9-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2bb6408bc2cb8ee5be4efb18bcfcfce4d76448f62237074917e146a425daf425", size = 1786031, upload-time = "2025-06-04T16:24:00.988Z" },
68
+ { url = "https://files.pythonhosted.org/packages/26/3a/dc6ce1731d6a116d927c6c47e9f8dab283582d2e8fb31f49615ea2447b4c/aiohttp-3.12.9-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b9ad4fe8d068544ba5d77500ea2d450f130109a4b0caf6d9197167303250f683", size = 1825076, upload-time = "2025-06-04T16:24:03.072Z" },
69
+ { url = "https://files.pythonhosted.org/packages/d6/49/9e635c2f0a4d296e204ef87858ec2d6c590c944d5c3166c01d19813d3dc1/aiohttp-3.12.9-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:55721245164191ac92808ad39f3b2876195b1e6521ead0aad7f1c9ae69568b1a", size = 1727537, upload-time = "2025-06-04T16:24:05.062Z" },
70
+ { url = "https://files.pythonhosted.org/packages/67/92/64cbc47a73282eefca62e44ca44d771ccd40441e295b6b33531eed2d9f8f/aiohttp-3.12.9-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b5c5fbc9217578f5c9b5a65f27dfb044283b437cfa9cf52531f3ce94dca1e912", size = 1664613, upload-time = "2025-06-04T16:24:08.56Z" },
71
+ { url = "https://files.pythonhosted.org/packages/11/52/8e78137d1145f5bc5e77d39a4072da3bbe4216ddc13624a91d4061913846/aiohttp-3.12.9-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:5c7e03f6dd8210b76587cb17088b3e5e0dabfc6787d42db58bc933da932230b7", size = 1712887, upload-time = "2025-06-04T16:24:10.806Z" },
72
+ { url = "https://files.pythonhosted.org/packages/07/e9/beb9b75a38be8746242d76d5d4671d5467e54e53208d654ee921cb331fc5/aiohttp-3.12.9-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:c892b2400c0795bbf00303282029c66e8ba912dc9fabf4728ba69a63046c8020", size = 1708045, upload-time = "2025-06-04T16:24:14.321Z" },
73
+ { url = "https://files.pythonhosted.org/packages/f9/14/91da26fd19abf723b61f0861a73a917b15f25b6473191a5d597b67ff9c4e/aiohttp-3.12.9-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:4de97019fec6f236671ee5d5831cebf67fbd52ee6bd47e2b8c9941cd39698db1", size = 1688229, upload-time = "2025-06-04T16:24:16.459Z" },
74
+ { url = "https://files.pythonhosted.org/packages/c6/a4/d8a68c5c3f618e29ae978497c93d05718a98614659336672bbac37d227d9/aiohttp-3.12.9-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:941cd1ce3d1f605fd062857b339f7c3cde5ce83392bfb1029c3de782b8f98b52", size = 1781830, upload-time = "2025-06-04T16:24:19.363Z" },
75
+ { url = "https://files.pythonhosted.org/packages/bb/4a/2e526757885e0d69ef796c470b470084073d2f9286784f34457139a8c2a5/aiohttp-3.12.9-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:43f3d4d6264629d97d44a6d75603923c2c63dad6aff2f72b172635c43db739db", size = 1802292, upload-time = "2025-06-04T16:24:21.63Z" },
76
+ { url = "https://files.pythonhosted.org/packages/77/92/5269deb655ee3ec8b48551b228ceccaa21e4fd61d44e7b6720618f09b958/aiohttp-3.12.9-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:bbe5ab33a6810e9839270b3673eba683b9f91ed011be66feb4823f9fecf1bb73", size = 1715349, upload-time = "2025-06-04T16:24:23.873Z" },
77
+ { url = "https://files.pythonhosted.org/packages/5b/a6/6be201fbeee6d80d4e84e7eae04a55a5b4ecce25aab012427094144bab26/aiohttp-3.12.9-cp311-cp311-win32.whl", hash = "sha256:9ec207177e0adc694ed4a41ca8ebdb4008edb8d475a8b94d71d73414fc4707b6", size = 425412, upload-time = "2025-06-04T16:24:25.882Z" },
78
+ { url = "https://files.pythonhosted.org/packages/12/a3/8419c2493d19acba6fb13f4618ba71fb22ddd6178303f565aa8814792f87/aiohttp-3.12.9-cp311-cp311-win_amd64.whl", hash = "sha256:965d93b08eed59359721a324b998ebf5354c9049b17cd93d9de50c14092b6ace", size = 449801, upload-time = "2025-06-04T16:24:27.92Z" },
79
+ { url = "https://files.pythonhosted.org/packages/45/2d/3234b91245a6f6cd0445c02604ac46c9e1d97cf50cfe421219533f061092/aiohttp-3.12.9-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:7ae744b61b395e04b3d1acbbd301d98249397333f49419039517226ff32f3aa7", size = 698923, upload-time = "2025-06-04T16:24:30.016Z" },
80
+ { url = "https://files.pythonhosted.org/packages/63/d0/a81d09aea9d1aef10582c4d8fbc0158898ce2247f326a9c9922c9556212c/aiohttp-3.12.9-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:d467a2049c4405853799dea41474b0ea9852fd465e7e2df819d3a33ac53214e8", size = 473547, upload-time = "2025-06-04T16:24:32.131Z" },
81
+ { url = "https://files.pythonhosted.org/packages/3b/ab/a282806eac098ddbd922038b1c2c5711ea4bb10fdb282f65986ae59c9096/aiohttp-3.12.9-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ba7a8b5f02c2826eb29e8d6c38f1bc509efb506a2862131079b5b8d880ed4b62", size = 466383, upload-time = "2025-06-04T16:24:34.201Z" },
82
+ { url = "https://files.pythonhosted.org/packages/4d/2d/c6e796e6d7e57a3935772333d80e0407d66e551e2c7c2b930b7e18f527a4/aiohttp-3.12.9-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bfe590ddb0dca3cdb601787079276545f00cfb9493f73f00fa011e71dae6f5fd", size = 1713182, upload-time = "2025-06-04T16:24:36.314Z" },
83
+ { url = "https://files.pythonhosted.org/packages/93/b7/bf9010f6dfe633147d74e93d41ec982b2538bfebcb6521a4139d187d07e3/aiohttp-3.12.9-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:fc441aba05efec5c72127393f56206d0f3fb113aadcd1685033c10da1ff582ad", size = 1695833, upload-time = "2025-06-04T16:24:38.599Z" },
84
+ { url = "https://files.pythonhosted.org/packages/9e/b9/fe87b305d1a0272cb5c499402525c06571840349f2b2a4ffdc20e2996ac2/aiohttp-3.12.9-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1a3f20a1b72643a0be5c9fcb97eb22607fcca32f1ca497f09a88d1ec3109daae", size = 1750928, upload-time = "2025-06-04T16:24:41.319Z" },
85
+ { url = "https://files.pythonhosted.org/packages/37/24/3ece3ca9c43b95a5836675c11f3be295fb65068ffffaad0e99a7a5b93c84/aiohttp-3.12.9-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3647dd1da43d595a52c5071b68fd8d39c0fd25b80f2cdd83eaabd9d59cd1f139", size = 1797083, upload-time = "2025-06-04T16:24:43.583Z" },
86
+ { url = "https://files.pythonhosted.org/packages/1c/d2/c153f7858d9c6db578b495b15f533182bd95f24c62ab125cc039d97bf588/aiohttp-3.12.9-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:970bae350cedbabb7c9d0fc8564b004a547d4a27cf12dc986be0abf7d8cc8d81", size = 1716522, upload-time = "2025-06-04T16:24:46.356Z" },
87
+ { url = "https://files.pythonhosted.org/packages/1a/a9/ecfffc1659d8e3f02e109afec4df58a600128a2f48819af7e76a398a1ad3/aiohttp-3.12.9-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7ccc5a5a4ccfa0ef0191dad2926e9752c37f368d846a70e40095a8529c5fb6eb", size = 1632325, upload-time = "2025-06-04T16:24:48.639Z" },
88
+ { url = "https://files.pythonhosted.org/packages/aa/07/69889c2e598661418f646038fc344769712a6dbc625c4b16f2d0191d872b/aiohttp-3.12.9-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:55197e86994682a332e8943eb01b462ae25630b10f245812e517251d7a922f25", size = 1693386, upload-time = "2025-06-04T16:24:51.032Z" },
89
+ { url = "https://files.pythonhosted.org/packages/c3/fb/23e292231a5d6d7413c998d096ed7dae049e7fb2c3406019eb04cb93c5b7/aiohttp-3.12.9-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:94d0cf6606ed9f2373565b8d0005bb070afbb81525ef6fa6e0725b8aec0c0843", size = 1714841, upload-time = "2025-06-04T16:24:53.227Z" },
90
+ { url = "https://files.pythonhosted.org/packages/80/bf/4d12162630ac2a39025c67bfeae94fdaeaec3b0438e65122f0012a570667/aiohttp-3.12.9-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:0575d7ae9a9c206276a6aaa3ce364b467f29f0497c0db4449de060dc341d88d6", size = 1655490, upload-time = "2025-06-04T16:24:56Z" },
91
+ { url = "https://files.pythonhosted.org/packages/bc/a0/6c4f84197d9d04f548405d89d504afaef4c94dfea3842c52fa852f7f4c28/aiohttp-3.12.9-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:9f44a4ebd717cc39796c4647495bc2901d0c168c71cd0132691ae3d0312215a9", size = 1735055, upload-time = "2025-06-04T16:24:59.458Z" },
92
+ { url = "https://files.pythonhosted.org/packages/aa/ae/6a9f1863e5d4b210890fb85b4b33e383351cc0588f1f30ea6866faef2141/aiohttp-3.12.9-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:f9cdadfe84beb8ceafa98ab676e8c0caf1e5d60e8b33c385c11259ee0f7f2587", size = 1763027, upload-time = "2025-06-04T16:25:01.841Z" },
93
+ { url = "https://files.pythonhosted.org/packages/5e/8c/7c0ca97b65f38d3453cee496da8d465a7b0b44d302c6b5c1da4d83b62f1b/aiohttp-3.12.9-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:995b5640969b1250e37be6fc92d185e523e8df446f8bfa723b347e52d7ae80f9", size = 1722637, upload-time = "2025-06-04T16:25:04.119Z" },
94
+ { url = "https://files.pythonhosted.org/packages/4e/7b/9220a3c8d18398fa5195ece36970f71d8c5ba0b601c819b128dfe5171885/aiohttp-3.12.9-cp312-cp312-win32.whl", hash = "sha256:4cfa37e0797510fdb20ab0ee3ad483ae7cfacb27c6fb8de872a998705ad2286a", size = 420144, upload-time = "2025-06-04T16:25:06.369Z" },
95
+ { url = "https://files.pythonhosted.org/packages/f2/7e/adc99e6dd37bb2d762f4d78df3abd4635531e36bf489b4b580decb7166a1/aiohttp-3.12.9-cp312-cp312-win_amd64.whl", hash = "sha256:fdbd04e9b05885eaaefdb81c163b6dc1431eb13ee2da16d82ee980d4dd123890", size = 446243, upload-time = "2025-06-04T16:25:08.554Z" },
96
+ { url = "https://files.pythonhosted.org/packages/2b/5e/e7ee4927e72d65b68f612ca2013800c91aab38fd1f487926c2a8e4f1c8ea/aiohttp-3.12.9-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:bf6fac88666d7e4c6cfe649d133fcedbc68e37a4472e8662d98a7cf576207303", size = 693344, upload-time = "2025-06-04T16:25:11.187Z" },
97
+ { url = "https://files.pythonhosted.org/packages/65/b5/f1dfda86a66913bfa9b7c3fe30d13f4d5a3642d3176ad0019968cda35d97/aiohttp-3.12.9-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:74e87ea6c832311b18a32b06baa6fee90a83dd630de951cca1aa175c3c9fa1ce", size = 471005, upload-time = "2025-06-04T16:25:13.924Z" },
98
+ { url = "https://files.pythonhosted.org/packages/09/e2/1502272a6e98665c71f9e996f126b64598c6e1660804eb4d78cad7ab3106/aiohttp-3.12.9-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:16627b4caf6a36b605e3e1c4847e6d14af8e8d6b7dad322935be43237d4eb10d", size = 463304, upload-time = "2025-06-04T16:25:16.171Z" },
99
+ { url = "https://files.pythonhosted.org/packages/88/38/5c308d02754e346ca9eae63a086f438aae9a4fc36cdd1708fe41588b3883/aiohttp-3.12.9-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:998e323c107c3f6396c1f9de72289009057c611942771f24114ae78a76af0af5", size = 1702124, upload-time = "2025-06-04T16:25:18.701Z" },
100
+ { url = "https://files.pythonhosted.org/packages/ad/25/ab0af26f80c1b6035794d1c769d5671f7ecb59c93b64ea7dfced28df0dca/aiohttp-3.12.9-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:20f8a6d3af13f043a09726add6d096b533f180cf8b43970a8d9c9ca978bf45c5", size = 1683390, upload-time = "2025-06-04T16:25:20.98Z" },
101
+ { url = "https://files.pythonhosted.org/packages/23/fa/9a510d5ec8e1a75008a1c0e985e1db2ce339b9f82d838c7598b85f8f16d4/aiohttp-3.12.9-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0bd0e06c8626361027f69df510c8484e17568ba2f91b2de51ea055f86ed3b071", size = 1735458, upload-time = "2025-06-04T16:25:23.864Z" },
102
+ { url = "https://files.pythonhosted.org/packages/0b/b2/870cabf883512f0f2cd9505bd7bce1e4574d137f132ab8d597ac5367b0ee/aiohttp-3.12.9-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:64e22f12dd940a6e7b923637b10b611b752f6117bc3a780b7e61cc43c9e04892", size = 1784830, upload-time = "2025-06-04T16:25:26.212Z" },
103
+ { url = "https://files.pythonhosted.org/packages/68/cd/ab572264f5efbb8059f40d92d411918215bc4e669a7684bfa1ea0617745d/aiohttp-3.12.9-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:11b5bf453056b6ac4924ede1188d01e8b8d4801a6aa5351da3a7dbdbc03cb44e", size = 1707162, upload-time = "2025-06-04T16:25:28.663Z" },
104
+ { url = "https://files.pythonhosted.org/packages/19/6f/8a6a1dedb8ee5a4034e49bb3cb81ced4fe239d4d047f6bab538320fcb5bc/aiohttp-3.12.9-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:00369db59f09860e0e26c75035f80f92881103e90f5858c18f29eb4f8cb8970f", size = 1620865, upload-time = "2025-06-04T16:25:31.092Z" },
105
+ { url = "https://files.pythonhosted.org/packages/ed/cf/6b7ab3b221a900a62e8cf26a47476377278675191aa2ea28327ba105c5c9/aiohttp-3.12.9-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:80fa1efc71d423be25db9dddefe8dcd90e487fbc9351a59549521b66405e71de", size = 1673887, upload-time = "2025-06-04T16:25:33.577Z" },
106
+ { url = "https://files.pythonhosted.org/packages/16/5c/aaa1fe022e86291c34a4e15e41d7cad589b4bdd66d473d6d537420763ab2/aiohttp-3.12.9-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:5cade22a0f0a4665003ded2bc4d43bb69fde790e5a287187569509c33333a3ab", size = 1705551, upload-time = "2025-06-04T16:25:36.053Z" },
107
+ { url = "https://files.pythonhosted.org/packages/86/bf/0f7393a2ef0df4464945c3081d0629a9cb9bfaefaaa922dba225f7c47824/aiohttp-3.12.9-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:d4a0fe3cd45cf6fb18222deef92af1c3efe090b7f43d477de61b2360c90a4b32", size = 1648148, upload-time = "2025-06-04T16:25:38.961Z" },
108
+ { url = "https://files.pythonhosted.org/packages/f9/71/286923ff54ae69c54e84bfbcc741b5833d980f192a93438f8d6cf153dae8/aiohttp-3.12.9-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:97b036ce251825fd5ab69d302ca8a99d3352af1c616cf40b2306fdb734cd6d30", size = 1724280, upload-time = "2025-06-04T16:25:41.423Z" },
109
+ { url = "https://files.pythonhosted.org/packages/58/48/808167d6f115165da3fcc6b7bb49bce6cc648471aa30634bcd47a7c96a32/aiohttp-3.12.9-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:eeac3a965552dbf79bcc0b9b963b5f7d6364b1542eb609937278d70d27ae997f", size = 1757753, upload-time = "2025-06-04T16:25:43.893Z" },
110
+ { url = "https://files.pythonhosted.org/packages/c9/1b/949e7965d642cdd82c7d9576fd27c24b27f4e0e35586fceb81057a99f617/aiohttp-3.12.9-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:4a1f72b2560beaa949b5d3b324fc07b66846d39a8e7cc106ca450312a5771e3e", size = 1706642, upload-time = "2025-06-04T16:25:46.299Z" },
111
+ { url = "https://files.pythonhosted.org/packages/90/43/ea621cb45fc0e3e0a7906a1fdfd7a3176892c29e4e3d9d4dfa05159ac485/aiohttp-3.12.9-cp313-cp313-win32.whl", hash = "sha256:e429fce99ac3fd6423622713d2474a5911f24816ccdaf9a74c3ece854b7375c1", size = 419167, upload-time = "2025-06-04T16:25:49.178Z" },
112
+ { url = "https://files.pythonhosted.org/packages/ff/02/452bfb8285b980e463ca35c9d57b333a4defbb603983709dacfd27ca49a1/aiohttp-3.12.9-cp313-cp313-win_amd64.whl", hash = "sha256:ccb1931cc8b4dc6d7a2d83db39db18c3f9ac3d46a59289cea301acbad57f3d12", size = 445108, upload-time = "2025-06-04T16:25:51.544Z" },
113
  ]
114
 
115
  [[package]]
 
498
  { url = "https://files.pythonhosted.org/packages/91/a1/cf2472db20f7ce4a6be1253a81cfdf85ad9c7885ffbed7047fb72c24cf87/distlib-0.3.9-py2.py3-none-any.whl", hash = "sha256:47f8c22fd27c27e25a65601af709b38e4f0a45ea4fc2e710f65755fa8caaaf87", size = 468973, upload-time = "2024-10-09T18:35:44.272Z" },
499
  ]
500
 
501
+ [[package]]
502
+ name = "dnspython"
503
+ version = "2.7.0"
504
+ source = { registry = "https://pypi.org/simple" }
505
+ sdist = { url = "https://files.pythonhosted.org/packages/b5/4a/263763cb2ba3816dd94b08ad3a33d5fdae34ecb856678773cc40a3605829/dnspython-2.7.0.tar.gz", hash = "sha256:ce9c432eda0dc91cf618a5cedf1a4e142651196bbcd2c80e89ed5a907e5cfaf1", size = 345197, upload-time = "2024-10-05T20:14:59.362Z" }
506
+ wheels = [
507
+ { url = "https://files.pythonhosted.org/packages/68/1b/e0a87d256e40e8c888847551b20a017a6b98139178505dc7ffb96f04e954/dnspython-2.7.0-py3-none-any.whl", hash = "sha256:b4c34b7d10b51bcc3a5071e7b8dee77939f1e878477eeecc965e9835f63c6c86", size = 313632, upload-time = "2024-10-05T20:14:57.687Z" },
508
+ ]
509
+
510
  [[package]]
511
  name = "exceptiongroup"
512
  version = "1.3.0"
513
  source = { registry = "https://pypi.org/simple" }
514
  dependencies = [
515
+ { name = "typing-extensions", marker = "python_full_version < '3.13'" },
516
  ]
517
  sdist = { url = "https://files.pythonhosted.org/packages/0b/9f/a65090624ecf468cdca03533906e7c69ed7588582240cfe7cc9e770b50eb/exceptiongroup-1.3.0.tar.gz", hash = "sha256:b241f5885f560bc56a59ee63ca4c6a8bfa46ae4ad651af316d4e81817bb9fd88", size = 29749, upload-time = "2025-05-10T17:42:51.123Z" }
518
  wheels = [
 
656
 
657
  [[package]]
658
  name = "gradio"
659
+ version = "5.33.0"
660
  source = { registry = "https://pypi.org/simple" }
661
  dependencies = [
662
  { name = "aiofiles" },
 
689
  { name = "urllib3", marker = "sys_platform == 'emscripten'" },
690
  { name = "uvicorn", marker = "sys_platform != 'emscripten'" },
691
  ]
692
+ sdist = { url = "https://files.pythonhosted.org/packages/b0/97/908eb543fbce7c69250d6fbe87b6ccf4ce397d31bceb360b40316357c68c/gradio-5.33.0.tar.gz", hash = "sha256:0cba3a1596fda6cb0048dd7ddc2d57e6238a047c0df9dee5a4a0e5c2a74e8e50", size = 64888401, upload-time = "2025-06-04T21:47:57.431Z" }
693
  wheels = [
694
+ { url = "https://files.pythonhosted.org/packages/4f/c3/c9b09b8d7efd63d83a9c8d9c53b02e1b77238e14305a7ee561e0a8990465/gradio-5.33.0-py3-none-any.whl", hash = "sha256:165e412e1510a22471901744722f99a52cb56465a7e9609f1e400cac9999e9d8", size = 54208887, upload-time = "2025-06-04T21:47:52.002Z" },
695
  ]
696
 
697
  [package.optional-dependencies]
 
737
 
738
  [[package]]
739
  name = "hf-xet"
740
+ version = "1.1.3"
741
  source = { registry = "https://pypi.org/simple" }
742
+ sdist = { url = "https://files.pythonhosted.org/packages/75/dc/dc091aeeb671e71cbec30e84963f9c0202c17337b24b0a800e7d205543e8/hf_xet-1.1.3.tar.gz", hash = "sha256:a5f09b1dd24e6ff6bcedb4b0ddab2d81824098bb002cf8b4ffa780545fa348c3", size = 488127, upload-time = "2025-06-04T00:47:27.456Z" }
743
  wheels = [
744
+ { url = "https://files.pythonhosted.org/packages/9b/1f/bc01a4c0894973adebbcd4aa338a06815c76333ebb3921d94dcbd40dae6a/hf_xet-1.1.3-cp37-abi3-macosx_10_12_x86_64.whl", hash = "sha256:c3b508b5f583a75641aebf732853deb058953370ce8184f5dabc49f803b0819b", size = 2256929, upload-time = "2025-06-04T00:47:21.206Z" },
745
+ { url = "https://files.pythonhosted.org/packages/78/07/6ef50851b5c6b45b77a6e018fa299c69a2db3b8bbd0d5af594c0238b1ceb/hf_xet-1.1.3-cp37-abi3-macosx_11_0_arm64.whl", hash = "sha256:b788a61977fbe6b5186e66239e2a329a3f0b7e7ff50dad38984c0c74f44aeca1", size = 2153719, upload-time = "2025-06-04T00:47:19.302Z" },
746
+ { url = "https://files.pythonhosted.org/packages/52/48/e929e6e3db6e4758c2adf0f2ca2c59287f1b76229d8bdc1a4c9cfc05212e/hf_xet-1.1.3-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fd2da210856444a34aad8ada2fc12f70dabed7cc20f37e90754d1d9b43bc0534", size = 4820519, upload-time = "2025-06-04T00:47:17.244Z" },
747
+ { url = "https://files.pythonhosted.org/packages/28/2e/03f89c5014a5aafaa9b150655f811798a317036646623bdaace25f485ae8/hf_xet-1.1.3-cp37-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:8203f52827e3df65981984936654a5b390566336956f65765a8aa58c362bb841", size = 4964121, upload-time = "2025-06-04T00:47:15.17Z" },
748
+ { url = "https://files.pythonhosted.org/packages/47/8b/5cd399a92b47d98086f55fc72d69bc9ea5e5c6f27a9ed3e0cdd6be4e58a3/hf_xet-1.1.3-cp37-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:30c575a5306f8e6fda37edb866762140a435037365eba7a17ce7bd0bc0216a8b", size = 5283017, upload-time = "2025-06-04T00:47:23.239Z" },
749
+ { url = "https://files.pythonhosted.org/packages/53/e3/2fcec58d2fcfd25ff07feb876f466cfa11f8dcf9d3b742c07fe9dd51ee0a/hf_xet-1.1.3-cp37-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:7c1a6aa6abed1f696f8099aa9796ca04c9ee778a58728a115607de9cc4638ff1", size = 4970349, upload-time = "2025-06-04T00:47:25.383Z" },
750
+ { url = "https://files.pythonhosted.org/packages/53/bf/10ca917e335861101017ff46044c90e517b574fbb37219347b83be1952f6/hf_xet-1.1.3-cp37-abi3-win_amd64.whl", hash = "sha256:b578ae5ac9c056296bb0df9d018e597c8dc6390c5266f35b5c44696003cde9f3", size = 2310934, upload-time = "2025-06-04T00:47:29.632Z" },
751
  ]
752
 
753
  [[package]]
 
1292
 
1293
  [[package]]
1294
  name = "packageurl-python"
1295
+ version = "0.17.0"
1296
  source = { registry = "https://pypi.org/simple" }
1297
+ sdist = { url = "https://files.pythonhosted.org/packages/12/d4/9d61ab5d98abbe8c70a87d26a605548a69346bcf318aa932299d83259812/packageurl_python-0.17.0.tar.gz", hash = "sha256:3cc44a01c9549c237f14c34981bae1008eb57c858c0af9039f4f13091807e1f3", size = 40767, upload-time = "2025-06-04T15:58:16.124Z" }
1298
  wheels = [
1299
+ { url = "https://files.pythonhosted.org/packages/64/e2/54b0b1fe702952c74f594f69634a8611ed6ebc20f87eeac97e26db8a0151/packageurl_python-0.17.0-py3-none-any.whl", hash = "sha256:c2a8e48d7b393b18806fd096abe326260b3aed82a07eda6c6628689b36ba52c4", size = 28518, upload-time = "2025-06-04T15:58:14.78Z" },
1300
  ]
1301
 
1302
  [[package]]
 
1310
 
1311
  [[package]]
1312
  name = "pandas"
1313
+ version = "2.3.0"
1314
  source = { registry = "https://pypi.org/simple" }
1315
  dependencies = [
1316
  { name = "numpy" },
 
1318
  { name = "pytz" },
1319
  { name = "tzdata" },
1320
  ]
1321
+ sdist = { url = "https://files.pythonhosted.org/packages/72/51/48f713c4c728d7c55ef7444ba5ea027c26998d96d1a40953b346438602fc/pandas-2.3.0.tar.gz", hash = "sha256:34600ab34ebf1131a7613a260a61dbe8b62c188ec0ea4c296da7c9a06b004133", size = 4484490, upload-time = "2025-06-05T03:27:54.133Z" }
1322
+ wheels = [
1323
+ { url = "https://files.pythonhosted.org/packages/e2/2d/df6b98c736ba51b8eaa71229e8fcd91233a831ec00ab520e1e23090cc072/pandas-2.3.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:625466edd01d43b75b1883a64d859168e4556261a5035b32f9d743b67ef44634", size = 11527531, upload-time = "2025-06-05T03:25:48.648Z" },
1324
+ { url = "https://files.pythonhosted.org/packages/77/1c/3f8c331d223f86ba1d0ed7d3ed7fcf1501c6f250882489cc820d2567ddbf/pandas-2.3.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a6872d695c896f00df46b71648eea332279ef4077a409e2fe94220208b6bb675", size = 10774764, upload-time = "2025-06-05T03:25:53.228Z" },
1325
+ { url = "https://files.pythonhosted.org/packages/1b/45/d2599400fad7fe06b849bd40b52c65684bc88fbe5f0a474d0513d057a377/pandas-2.3.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f4dd97c19bd06bc557ad787a15b6489d2614ddaab5d104a0310eb314c724b2d2", size = 11711963, upload-time = "2025-06-05T03:25:56.855Z" },
1326
+ { url = "https://files.pythonhosted.org/packages/66/f8/5508bc45e994e698dbc93607ee6b9b6eb67df978dc10ee2b09df80103d9e/pandas-2.3.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:034abd6f3db8b9880aaee98f4f5d4dbec7c4829938463ec046517220b2f8574e", size = 12349446, upload-time = "2025-06-05T03:26:01.292Z" },
1327
+ { url = "https://files.pythonhosted.org/packages/a1/9b/8743be105989c81fa33f8e2a4e9822ac0ad4aaf812c00fee6bb09fc814f9/pandas-2.3.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:39ff73ec07be5e90330cc6ff5705c651ace83374189dcdcb46e6ff54b4a72cd6", size = 13651218, upload-time = "2025-06-05T03:26:09.731Z" },
1328
+ { url = "https://files.pythonhosted.org/packages/26/fa/8eeb2353f6d40974a6a9fd4081ad1700e2386cf4264a8f28542fd10b3e38/pandas-2.3.0-cp310-cp310-win_amd64.whl", hash = "sha256:40cecc4ea5abd2921682b57532baea5588cc5f80f0231c624056b146887274d2", size = 11082485, upload-time = "2025-06-05T03:26:17.572Z" },
1329
+ { url = "https://files.pythonhosted.org/packages/96/1e/ba313812a699fe37bf62e6194265a4621be11833f5fce46d9eae22acb5d7/pandas-2.3.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:8adff9f138fc614347ff33812046787f7d43b3cef7c0f0171b3340cae333f6ca", size = 11551836, upload-time = "2025-06-05T03:26:22.784Z" },
1330
+ { url = "https://files.pythonhosted.org/packages/ee/3e/8c0fb7e2cf4a55198466ced1ca6a9054ae3b7e7630df7757031df10001fd/pandas-2.3.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fa35c266c8cd1a67d75971a1912b185b492d257092bdd2709bbdebe574ed228d", size = 11788230, upload-time = "2025-06-05T03:26:27.417Z" },
1331
+ { url = "https://files.pythonhosted.org/packages/14/22/b493ec614582307faf3f94989be0f7f0a71932ed6f56c9a80c0bb4a3b51e/pandas-2.3.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:14a0cc77b0f089d2d2ffe3007db58f170dae9b9f54e569b299db871a3ab5bf46", size = 12370423, upload-time = "2025-06-05T03:26:34.142Z" },
1332
+ { url = "https://files.pythonhosted.org/packages/95/81/b310e60d033ab64b08e66c635b94076488f0b6ce6a674379dd5b224fc51c/pandas-2.3.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:ed16339bc354a73e0a609df36d256672c7d296f3f767ac07257801aa064ff73c", size = 13745952, upload-time = "2025-06-05T03:26:39.475Z" },
1333
+ { url = "https://files.pythonhosted.org/packages/25/ac/f6ee5250a8881b55bd3aecde9b8cfddea2f2b43e3588bca68a4e9aaf46c8/pandas-2.3.0-cp311-cp311-win_amd64.whl", hash = "sha256:fa07e138b3f6c04addfeaf56cc7fdb96c3b68a3fe5e5401251f231fce40a0d7a", size = 11094534, upload-time = "2025-06-05T03:26:43.23Z" },
1334
+ { url = "https://files.pythonhosted.org/packages/94/46/24192607058dd607dbfacdd060a2370f6afb19c2ccb617406469b9aeb8e7/pandas-2.3.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:2eb4728a18dcd2908c7fccf74a982e241b467d178724545a48d0caf534b38ebf", size = 11573865, upload-time = "2025-06-05T03:26:46.774Z" },
1335
+ { url = "https://files.pythonhosted.org/packages/01/a5/931fc3ad333d9d87b10107d948d757d67ebcfc33b1988d5faccc39c6845c/pandas-2.3.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba24af48643b12ffe49b27065d3babd52702d95ab70f50e1b34f71ca703e2c0d", size = 11991493, upload-time = "2025-06-05T03:26:51.813Z" },
1336
+ { url = "https://files.pythonhosted.org/packages/a4/0e/21eb48a3a34a7d4bac982afc2c4eb5ab09f2d988bdf29d92ba9ae8e90a79/pandas-2.3.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:6021910b086b3ca756755e86ddc64e0ddafd5e58e076c72cb1585162e5ad259b", size = 13212406, upload-time = "2025-06-05T03:26:55.992Z" },
1337
+ { url = "https://files.pythonhosted.org/packages/1f/d9/74017c4eec7a28892d8d6e31ae9de3baef71f5a5286e74e6b7aad7f8c837/pandas-2.3.0-cp312-cp312-win_amd64.whl", hash = "sha256:094e271a15b579650ebf4c5155c05dcd2a14fd4fdd72cf4854b2f7ad31ea30be", size = 10976199, upload-time = "2025-06-05T03:26:59.594Z" },
1338
+ { url = "https://files.pythonhosted.org/packages/d3/57/5cb75a56a4842bbd0511c3d1c79186d8315b82dac802118322b2de1194fe/pandas-2.3.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:2c7e2fc25f89a49a11599ec1e76821322439d90820108309bf42130d2f36c983", size = 11518913, upload-time = "2025-06-05T03:27:02.757Z" },
1339
+ { url = "https://files.pythonhosted.org/packages/e8/6a/47fd7517cd8abe72a58706aab2b99e9438360d36dcdb052cf917b7bf3bdc/pandas-2.3.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bb32dc743b52467d488e7a7c8039b821da2826a9ba4f85b89ea95274f863280f", size = 11328359, upload-time = "2025-06-05T03:27:06.431Z" },
1340
+ { url = "https://files.pythonhosted.org/packages/2a/b3/463bfe819ed60fb7e7ddffb4ae2ee04b887b3444feee6c19437b8f834837/pandas-2.3.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:213cd63c43263dbb522c1f8a7c9d072e25900f6975596f883f4bebd77295d4f3", size = 12024789, upload-time = "2025-06-05T03:27:09.875Z" },
1341
+ { url = "https://files.pythonhosted.org/packages/e9/df/815d6583967001153bb27f5cf075653d69d51ad887ebbf4cfe1173a1ac58/pandas-2.3.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:430a63bae10b5086995db1b02694996336e5a8ac9a96b4200572b413dfdfccb9", size = 13223381, upload-time = "2025-06-05T03:27:15.641Z" },
1342
+ { url = "https://files.pythonhosted.org/packages/79/88/ca5973ed07b7f484c493e941dbff990861ca55291ff7ac67c815ce347395/pandas-2.3.0-cp313-cp313-win_amd64.whl", hash = "sha256:4930255e28ff5545e2ca404637bcc56f031893142773b3468dc021c6c32a1390", size = 10970135, upload-time = "2025-06-05T03:27:24.131Z" },
1343
+ { url = "https://files.pythonhosted.org/packages/24/fb/0994c14d1f7909ce83f0b1fb27958135513c4f3f2528bde216180aa73bfc/pandas-2.3.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:f925f1ef673b4bd0271b1809b72b3270384f2b7d9d14a189b12b7fc02574d575", size = 12141356, upload-time = "2025-06-05T03:27:34.547Z" },
1344
+ { url = "https://files.pythonhosted.org/packages/9d/a2/9b903e5962134497ac4f8a96f862ee3081cb2506f69f8e4778ce3d9c9d82/pandas-2.3.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:e78ad363ddb873a631e92a3c063ade1ecfb34cae71e9a2be6ad100f875ac1042", size = 11474674, upload-time = "2025-06-05T03:27:39.448Z" },
1345
+ { url = "https://files.pythonhosted.org/packages/81/3a/3806d041bce032f8de44380f866059437fb79e36d6b22c82c187e65f765b/pandas-2.3.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:951805d146922aed8357e4cc5671b8b0b9be1027f0619cea132a9f3f65f2f09c", size = 11439876, upload-time = "2025-06-05T03:27:43.652Z" },
1346
+ { url = "https://files.pythonhosted.org/packages/15/aa/3fc3181d12b95da71f5c2537c3e3b3af6ab3a8c392ab41ebb766e0929bc6/pandas-2.3.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1a881bc1309f3fce34696d07b00f13335c41f5f5a8770a33b09ebe23261cfc67", size = 11966182, upload-time = "2025-06-05T03:27:47.652Z" },
1347
+ { url = "https://files.pythonhosted.org/packages/39/c2/646d2e93e0af70f4e5359d870a63584dacbc324b54d73e6b3267920ff117/pandas-2.3.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:bb3be958022198531eb7ec2008cfc78c5b1eed51af8600c6c5d9160d89d8d249", size = 13231847, upload-time = "2025-06-05T03:27:51.465Z" },
 
 
 
 
 
 
 
 
 
1348
  ]
1349
 
1350
  [[package]]
 
2148
  { name = "attackcti" },
2149
  { name = "black" },
2150
  { name = "cachetools" },
2151
+ { name = "dnspython" },
2152
  { name = "gradio", extra = ["mcp"] },
2153
  { name = "python-whois" },
2154
  { name = "requests" },
 
2174
  { name = "attackcti", specifier = ">=0.5.4" },
2175
  { name = "black", specifier = ">=25.1.0" },
2176
  { name = "cachetools", specifier = ">=6.0.0" },
2177
+ { name = "dnspython", specifier = ">=2.7.0" },
2178
  { name = "gradio", extras = ["mcp"], specifier = ">=5.32.1" },
2179
  { name = "python-whois", specifier = ">=0.9.5" },
2180
  { name = "requests", specifier = ">=2.32.3" },
 
2245
 
2246
  [[package]]
2247
  name = "tomlkit"
2248
+ version = "0.13.3"
2249
  source = { registry = "https://pypi.org/simple" }
2250
+ sdist = { url = "https://files.pythonhosted.org/packages/cc/18/0bbf3884e9eaa38819ebe46a7bd25dcd56b67434402b66a58c4b8e552575/tomlkit-0.13.3.tar.gz", hash = "sha256:430cf247ee57df2b94ee3fbe588e71d362a941ebb545dec29b53961d61add2a1", size = 185207, upload-time = "2025-06-05T07:13:44.947Z" }
2251
  wheels = [
2252
+ { url = "https://files.pythonhosted.org/packages/bd/75/8539d011f6be8e29f339c42e633aae3cb73bffa95dd0f9adec09b9c58e85/tomlkit-0.13.3-py3-none-any.whl", hash = "sha256:c89c649d79ee40629a9fda55f8ace8c6a1b42deb912b2a8fd8d942ddadb606b0", size = 38901, upload-time = "2025-06-05T07:13:43.546Z" },
2253
  ]
2254
 
2255
  [[package]]