secator 0.5.0__tar.gz → 0.5.1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of secator might be problematic. Click here for more details.
- {secator-0.5.0 → secator-0.5.1}/CHANGELOG.md +8 -0
- {secator-0.5.0 → secator-0.5.1}/PKG-INFO +1 -1
- {secator-0.5.0 → secator-0.5.1}/pyproject.toml +1 -1
- {secator-0.5.0 → secator-0.5.1}/secator/celery.py +4 -52
- {secator-0.5.0 → secator-0.5.1}/secator/config.py +1 -0
- {secator-0.5.0 → secator-0.5.1}/secator/output_types/url.py +3 -0
- {secator-0.5.0 → secator-0.5.1}/secator/report.py +4 -1
- {secator-0.5.0 → secator-0.5.1}/secator/utils.py +3 -1
- {secator-0.5.0 → secator-0.5.1}/.flake8 +0 -0
- {secator-0.5.0 → secator-0.5.1}/.gitignore +0 -0
- {secator-0.5.0 → secator-0.5.1}/CONTRIBUTING.md +0 -0
- {secator-0.5.0 → secator-0.5.1}/Dockerfile +0 -0
- {secator-0.5.0 → secator-0.5.1}/LICENSE +0 -0
- {secator-0.5.0 → secator-0.5.1}/README.md +0 -0
- {secator-0.5.0 → secator-0.5.1}/SECURITY.md +0 -0
- {secator-0.5.0 → secator-0.5.1}/cloudbuild.yaml +0 -0
- {secator-0.5.0 → secator-0.5.1}/images/aliases.cast +0 -0
- {secator-0.5.0 → secator-0.5.1}/images/aliases.gif +0 -0
- {secator-0.5.0 → secator-0.5.1}/images/demo.gif +0 -0
- {secator-0.5.0 → secator-0.5.1}/images/demo.tap +0 -0
- {secator-0.5.0 → secator-0.5.1}/images/fmt.cast +0 -0
- {secator-0.5.0 → secator-0.5.1}/images/fmt.gif +0 -0
- {secator-0.5.0 → secator-0.5.1}/images/help.png +0 -0
- {secator-0.5.0 → secator-0.5.1}/images/input.cast +0 -0
- {secator-0.5.0 → secator-0.5.1}/images/input.gif +0 -0
- {secator-0.5.0 → secator-0.5.1}/images/pipe.cast +0 -0
- {secator-0.5.0 → secator-0.5.1}/images/pipe.gif +0 -0
- {secator-0.5.0 → secator-0.5.1}/images/short_demo.cast +0 -0
- {secator-0.5.0 → secator-0.5.1}/images/short_demo.gif +0 -0
- {secator-0.5.0 → secator-0.5.1}/scripts/download_cves.sh +0 -0
- {secator-0.5.0 → secator-0.5.1}/scripts/install.sh +0 -0
- {secator-0.5.0 → secator-0.5.1}/scripts/install_asciinema.sh +0 -0
- {secator-0.5.0 → secator-0.5.1}/scripts/install_go.sh +0 -0
- {secator-0.5.0 → secator-0.5.1}/scripts/install_ruby.sh +0 -0
- {secator-0.5.0 → secator-0.5.1}/scripts/msf/exploit_cve.rc +0 -0
- {secator-0.5.0 → secator-0.5.1}/scripts/msf/ftp_anonymous.rc +0 -0
- {secator-0.5.0 → secator-0.5.1}/scripts/msf/ftp_version.rc +0 -0
- {secator-0.5.0 → secator-0.5.1}/scripts/msf/ftp_vsftpd_234_backdoor.rc +0 -0
- {secator-0.5.0 → secator-0.5.1}/scripts/msf/redis.rc +0 -0
- {secator-0.5.0 → secator-0.5.1}/scripts/msfinstall.sh +0 -0
- {secator-0.5.0 → secator-0.5.1}/scripts/stories/STORY.md +0 -0
- {secator-0.5.0 → secator-0.5.1}/scripts/stories/aliases.sh +0 -0
- {secator-0.5.0 → secator-0.5.1}/scripts/stories/demo.sh +0 -0
- {secator-0.5.0 → secator-0.5.1}/scripts/stories/fmt.sh +0 -0
- {secator-0.5.0 → secator-0.5.1}/scripts/stories/input.sh +0 -0
- {secator-0.5.0 → secator-0.5.1}/scripts/stories/pipe.sh +0 -0
- {secator-0.5.0 → secator-0.5.1}/scripts/stories/short_demo.sh +0 -0
- {secator-0.5.0 → secator-0.5.1}/secator/.gitignore +0 -0
- {secator-0.5.0 → secator-0.5.1}/secator/__init__.py +0 -0
- {secator-0.5.0 → secator-0.5.1}/secator/cli.py +0 -0
- {secator-0.5.0 → secator-0.5.1}/secator/configs/__init__.py +0 -0
- {secator-0.5.0 → secator-0.5.1}/secator/configs/profiles/__init__.py +0 -0
- {secator-0.5.0 → secator-0.5.1}/secator/configs/profiles/aggressive.yaml +0 -0
- {secator-0.5.0 → secator-0.5.1}/secator/configs/profiles/default.yaml +0 -0
- {secator-0.5.0 → secator-0.5.1}/secator/configs/profiles/stealth.yaml +0 -0
- {secator-0.5.0 → secator-0.5.1}/secator/configs/scans/__init__.py +0 -0
- {secator-0.5.0 → secator-0.5.1}/secator/configs/scans/domain.yaml +0 -0
- {secator-0.5.0 → secator-0.5.1}/secator/configs/scans/host.yaml +0 -0
- {secator-0.5.0 → secator-0.5.1}/secator/configs/scans/network.yaml +0 -0
- {secator-0.5.0 → secator-0.5.1}/secator/configs/scans/subdomain.yaml +0 -0
- {secator-0.5.0 → secator-0.5.1}/secator/configs/scans/url.yaml +0 -0
- {secator-0.5.0 → secator-0.5.1}/secator/configs/workflows/__init__.py +0 -0
- {secator-0.5.0 → secator-0.5.1}/secator/configs/workflows/cidr_recon.yaml +0 -0
- {secator-0.5.0 → secator-0.5.1}/secator/configs/workflows/code_scan.yaml +0 -0
- {secator-0.5.0 → secator-0.5.1}/secator/configs/workflows/host_recon.yaml +0 -0
- {secator-0.5.0 → secator-0.5.1}/secator/configs/workflows/port_scan.yaml +0 -0
- {secator-0.5.0 → secator-0.5.1}/secator/configs/workflows/subdomain_recon.yaml +0 -0
- {secator-0.5.0 → secator-0.5.1}/secator/configs/workflows/url_crawl.yaml +0 -0
- {secator-0.5.0 → secator-0.5.1}/secator/configs/workflows/url_dirsearch.yaml +0 -0
- {secator-0.5.0 → secator-0.5.1}/secator/configs/workflows/url_fuzz.yaml +0 -0
- {secator-0.5.0 → secator-0.5.1}/secator/configs/workflows/url_nuclei.yaml +0 -0
- {secator-0.5.0 → secator-0.5.1}/secator/configs/workflows/url_vuln.yaml +0 -0
- {secator-0.5.0 → secator-0.5.1}/secator/configs/workflows/user_hunt.yaml +0 -0
- {secator-0.5.0 → secator-0.5.1}/secator/configs/workflows/wordpress.yaml +0 -0
- {secator-0.5.0 → secator-0.5.1}/secator/decorators.py +0 -0
- {secator-0.5.0 → secator-0.5.1}/secator/definitions.py +0 -0
- {secator-0.5.0 → secator-0.5.1}/secator/exporters/__init__.py +0 -0
- {secator-0.5.0 → secator-0.5.1}/secator/exporters/_base.py +0 -0
- {secator-0.5.0 → secator-0.5.1}/secator/exporters/csv.py +0 -0
- {secator-0.5.0 → secator-0.5.1}/secator/exporters/gdrive.py +0 -0
- {secator-0.5.0 → secator-0.5.1}/secator/exporters/json.py +0 -0
- {secator-0.5.0 → secator-0.5.1}/secator/exporters/table.py +0 -0
- {secator-0.5.0 → secator-0.5.1}/secator/exporters/txt.py +0 -0
- {secator-0.5.0 → secator-0.5.1}/secator/hooks/__init__.py +0 -0
- {secator-0.5.0 → secator-0.5.1}/secator/hooks/mongodb.py +0 -0
- {secator-0.5.0 → secator-0.5.1}/secator/installer.py +0 -0
- {secator-0.5.0 → secator-0.5.1}/secator/output_types/__init__.py +0 -0
- {secator-0.5.0 → secator-0.5.1}/secator/output_types/_base.py +0 -0
- {secator-0.5.0 → secator-0.5.1}/secator/output_types/exploit.py +0 -0
- {secator-0.5.0 → secator-0.5.1}/secator/output_types/ip.py +0 -0
- {secator-0.5.0 → secator-0.5.1}/secator/output_types/port.py +0 -0
- {secator-0.5.0 → secator-0.5.1}/secator/output_types/progress.py +0 -0
- {secator-0.5.0 → secator-0.5.1}/secator/output_types/record.py +0 -0
- {secator-0.5.0 → secator-0.5.1}/secator/output_types/subdomain.py +0 -0
- {secator-0.5.0 → secator-0.5.1}/secator/output_types/tag.py +0 -0
- {secator-0.5.0 → secator-0.5.1}/secator/output_types/target.py +0 -0
- {secator-0.5.0 → secator-0.5.1}/secator/output_types/user_account.py +0 -0
- {secator-0.5.0 → secator-0.5.1}/secator/output_types/vulnerability.py +0 -0
- {secator-0.5.0 → secator-0.5.1}/secator/rich.py +0 -0
- {secator-0.5.0 → secator-0.5.1}/secator/runners/__init__.py +0 -0
- {secator-0.5.0 → secator-0.5.1}/secator/runners/_base.py +0 -0
- {secator-0.5.0 → secator-0.5.1}/secator/runners/_helpers.py +0 -0
- {secator-0.5.0 → secator-0.5.1}/secator/runners/command.py +0 -0
- {secator-0.5.0 → secator-0.5.1}/secator/runners/scan.py +0 -0
- {secator-0.5.0 → secator-0.5.1}/secator/runners/task.py +0 -0
- {secator-0.5.0 → secator-0.5.1}/secator/runners/workflow.py +0 -0
- {secator-0.5.0 → secator-0.5.1}/secator/serializers/__init__.py +0 -0
- {secator-0.5.0 → secator-0.5.1}/secator/serializers/dataclass.py +0 -0
- {secator-0.5.0 → secator-0.5.1}/secator/serializers/json.py +0 -0
- {secator-0.5.0 → secator-0.5.1}/secator/serializers/regex.py +0 -0
- {secator-0.5.0 → secator-0.5.1}/secator/tasks/__init__.py +0 -0
- {secator-0.5.0 → secator-0.5.1}/secator/tasks/_categories.py +0 -0
- {secator-0.5.0 → secator-0.5.1}/secator/tasks/cariddi.py +0 -0
- {secator-0.5.0 → secator-0.5.1}/secator/tasks/dalfox.py +0 -0
- {secator-0.5.0 → secator-0.5.1}/secator/tasks/dirsearch.py +0 -0
- {secator-0.5.0 → secator-0.5.1}/secator/tasks/dnsx.py +0 -0
- {secator-0.5.0 → secator-0.5.1}/secator/tasks/dnsxbrute.py +0 -0
- {secator-0.5.0 → secator-0.5.1}/secator/tasks/feroxbuster.py +0 -0
- {secator-0.5.0 → secator-0.5.1}/secator/tasks/ffuf.py +0 -0
- {secator-0.5.0 → secator-0.5.1}/secator/tasks/fping.py +0 -0
- {secator-0.5.0 → secator-0.5.1}/secator/tasks/gau.py +0 -0
- {secator-0.5.0 → secator-0.5.1}/secator/tasks/gf.py +0 -0
- {secator-0.5.0 → secator-0.5.1}/secator/tasks/gospider.py +0 -0
- {secator-0.5.0 → secator-0.5.1}/secator/tasks/grype.py +0 -0
- {secator-0.5.0 → secator-0.5.1}/secator/tasks/h8mail.py +0 -0
- {secator-0.5.0 → secator-0.5.1}/secator/tasks/httpx.py +0 -0
- {secator-0.5.0 → secator-0.5.1}/secator/tasks/katana.py +0 -0
- {secator-0.5.0 → secator-0.5.1}/secator/tasks/maigret.py +0 -0
- {secator-0.5.0 → secator-0.5.1}/secator/tasks/mapcidr.py +0 -0
- {secator-0.5.0 → secator-0.5.1}/secator/tasks/msfconsole.py +0 -0
- {secator-0.5.0 → secator-0.5.1}/secator/tasks/naabu.py +0 -0
- {secator-0.5.0 → secator-0.5.1}/secator/tasks/nmap.py +0 -0
- {secator-0.5.0 → secator-0.5.1}/secator/tasks/nuclei.py +0 -0
- {secator-0.5.0 → secator-0.5.1}/secator/tasks/searchsploit.py +0 -0
- {secator-0.5.0 → secator-0.5.1}/secator/tasks/subfinder.py +0 -0
- {secator-0.5.0 → secator-0.5.1}/secator/tasks/wpscan.py +0 -0
- {secator-0.5.0 → secator-0.5.1}/secator/template.py +0 -0
- {secator-0.5.0 → secator-0.5.1}/secator/utils_test.py +0 -0
- {secator-0.5.0 → secator-0.5.1}/tests/__init__.py +0 -0
- {secator-0.5.0 → secator-0.5.1}/tests/fixtures/h8mail_breach.txt +0 -0
- {secator-0.5.0 → secator-0.5.1}/tests/fixtures/ls.py +0 -0
- {secator-0.5.0 → secator-0.5.1}/tests/fixtures/msfconsole_input.rc +0 -0
- {secator-0.5.0 → secator-0.5.1}/tests/fixtures/nmap_output.xml +0 -0
- {secator-0.5.0 → secator-0.5.1}/tests/integration/__init__.py +0 -0
- {secator-0.5.0 → secator-0.5.1}/tests/integration/inputs.py +0 -0
- {secator-0.5.0 → secator-0.5.1}/tests/integration/outputs.py +0 -0
- {secator-0.5.0 → secator-0.5.1}/tests/integration/setup.sh +0 -0
- {secator-0.5.0 → secator-0.5.1}/tests/integration/teardown.sh +0 -0
- {secator-0.5.0 → secator-0.5.1}/tests/integration/test_scans.py +0 -0
- {secator-0.5.0 → secator-0.5.1}/tests/integration/test_tasks.py +0 -0
- {secator-0.5.0 → secator-0.5.1}/tests/integration/test_worker.py +0 -0
- {secator-0.5.0 → secator-0.5.1}/tests/integration/test_workflows.py +0 -0
- {secator-0.5.0 → secator-0.5.1}/tests/integration/wordlist.txt +0 -0
- {secator-0.5.0 → secator-0.5.1}/tests/integration/wordlist_dns.txt +0 -0
- {secator-0.5.0 → secator-0.5.1}/tests/integration/wordpress_toolbox/Dockerfile +0 -0
- {secator-0.5.0 → secator-0.5.1}/tests/integration/wordpress_toolbox/Makefile +0 -0
- {secator-0.5.0 → secator-0.5.1}/tests/performance/__init__.py +0 -0
- {secator-0.5.0 → secator-0.5.1}/tests/performance/loadtester.py +0 -0
- {secator-0.5.0 → secator-0.5.1}/tests/unit/__init__.py +0 -0
- {secator-0.5.0 → secator-0.5.1}/tests/unit/test_celery.py +0 -0
- {secator-0.5.0 → secator-0.5.1}/tests/unit/test_config.py +0 -0
- {secator-0.5.0 → secator-0.5.1}/tests/unit/test_offline.py +0 -0
- {secator-0.5.0 → secator-0.5.1}/tests/unit/test_scans.py +0 -0
- {secator-0.5.0 → secator-0.5.1}/tests/unit/test_serializers.py +0 -0
- {secator-0.5.0 → secator-0.5.1}/tests/unit/test_tasks.py +0 -0
- {secator-0.5.0 → secator-0.5.1}/tests/unit/test_template.py +0 -0
- {secator-0.5.0 → secator-0.5.1}/tests/unit/test_workflows.py +0 -0
|
@@ -1,5 +1,13 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [0.5.1](https://github.com/freelabz/secator/compare/v0.5.0...v0.5.1) (2024-05-06)
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
### Bug Fixes
|
|
7
|
+
|
|
8
|
+
* **output:** add headers to Url and print HTTP method when not GET ([#390](https://github.com/freelabz/secator/issues/390)) ([5a87d7b](https://github.com/freelabz/secator/commit/5a87d7b8bc1dd098999f3864952e98068fd32efc))
|
|
9
|
+
* **report:** do not remove duplicate in reports by default ([#392](https://github.com/freelabz/secator/issues/392)) ([7d74ae8](https://github.com/freelabz/secator/commit/7d74ae80bfd99c31714a5e7e25f2bd1caa642eb4))
|
|
10
|
+
|
|
3
11
|
## [0.5.0](https://github.com/freelabz/secator/compare/v0.4.1...v0.5.0) (2024-05-03)
|
|
4
12
|
|
|
5
13
|
|
|
@@ -1,11 +1,10 @@
|
|
|
1
1
|
import gc
|
|
2
2
|
import logging
|
|
3
3
|
import traceback
|
|
4
|
-
from time import sleep
|
|
5
4
|
|
|
6
5
|
from celery import Celery, chain, chord, signals
|
|
7
6
|
from celery.app import trace
|
|
8
|
-
from celery.result import
|
|
7
|
+
from celery.result import allow_join_result
|
|
9
8
|
# from pyinstrument import Profiler # TODO: make pyinstrument optional
|
|
10
9
|
from rich.logging import RichHandler
|
|
11
10
|
|
|
@@ -354,56 +353,9 @@ def forward_results(results):
|
|
|
354
353
|
results = deduplicate(results, attr='_uuid')
|
|
355
354
|
return results
|
|
356
355
|
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
#---------------------#
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
def poll_task(result, seen=[]):
|
|
364
|
-
"""Poll Celery result tree recursively to get results live.
|
|
365
|
-
|
|
366
|
-
TODO: function is incomplete, as it does not parse all results.
|
|
367
|
-
|
|
368
|
-
Args:
|
|
369
|
-
result (Union[AsyncResult, GroupResult]): Celery result object.
|
|
370
|
-
seen (list): List of seen results (do not yield again).
|
|
371
|
-
|
|
372
|
-
Yields:
|
|
373
|
-
dict: Result.
|
|
374
|
-
"""
|
|
375
|
-
if result is None:
|
|
376
|
-
return
|
|
377
|
-
|
|
378
|
-
if result.children:
|
|
379
|
-
for child in result.children:
|
|
380
|
-
yield from poll_task(child, seen=seen)
|
|
381
|
-
else:
|
|
382
|
-
res = AsyncResult(result.id)
|
|
383
|
-
if not res.info:
|
|
384
|
-
sleep(0.1)
|
|
385
|
-
yield from poll_task(result, seen=seen)
|
|
386
|
-
|
|
387
|
-
# Task done running
|
|
388
|
-
if isinstance(res.info, list):
|
|
389
|
-
for item in res.info:
|
|
390
|
-
if item._uuid not in seen:
|
|
391
|
-
yield res.id, None, item
|
|
392
|
-
seen.append(item._uuid)
|
|
393
|
-
return
|
|
394
|
-
|
|
395
|
-
# Get task partial results, remove duplicates
|
|
396
|
-
results = res.info['results']
|
|
397
|
-
name = res.info['name']
|
|
398
|
-
for item in results:
|
|
399
|
-
if item._uuid not in seen:
|
|
400
|
-
yield res.id, name, item
|
|
401
|
-
seen.append(item._uuid)
|
|
402
|
-
|
|
403
|
-
# Task still running, keep polling
|
|
404
|
-
if not res.ready():
|
|
405
|
-
sleep(0.1)
|
|
406
|
-
yield from poll_task(result, seen=seen)
|
|
356
|
+
#--------------#
|
|
357
|
+
# Celery utils #
|
|
358
|
+
#--------------#
|
|
407
359
|
|
|
408
360
|
|
|
409
361
|
def is_celery_worker_alive():
|
|
@@ -23,6 +23,7 @@ class Url(OutputType):
|
|
|
23
23
|
lines: int = field(default=0, compare=False)
|
|
24
24
|
screenshot_path: str = field(default='', compare=False)
|
|
25
25
|
stored_response_path: str = field(default='', compare=False)
|
|
26
|
+
headers: dict = field(default_factory=dict, repr=True, compare=False)
|
|
26
27
|
_source: str = field(default='', repr=True, compare=False)
|
|
27
28
|
_type: str = field(default='url', repr=True)
|
|
28
29
|
_timestamp: int = field(default_factory=lambda: time.time(), compare=False)
|
|
@@ -55,6 +56,8 @@ class Url(OutputType):
|
|
|
55
56
|
|
|
56
57
|
def __repr__(self):
|
|
57
58
|
s = f'🔗 [white]{self.url}'
|
|
59
|
+
if self.method and self.method != 'GET':
|
|
60
|
+
s += f' \[[turquoise4]{self.method}[/]]'
|
|
58
61
|
if self.status_code and self.status_code != 0:
|
|
59
62
|
if self.status_code < 400:
|
|
60
63
|
s += f' \[[green]{self.status_code}[/]]'
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import operator
|
|
2
2
|
|
|
3
|
+
from secator.config import CONFIG
|
|
3
4
|
from secator.output_types import OUTPUT_TYPES, OutputType
|
|
4
5
|
from secator.utils import merge_opts, get_file_timestamp
|
|
5
6
|
from secator.rich import console
|
|
@@ -64,8 +65,10 @@ class Report:
|
|
|
64
65
|
sort_by, _ = get_table_fields(output_type)
|
|
65
66
|
items = [
|
|
66
67
|
item for item in self.runner.results
|
|
67
|
-
if isinstance(item, OutputType) and item._type == output_name
|
|
68
|
+
if isinstance(item, OutputType) and item._type == output_name
|
|
68
69
|
]
|
|
70
|
+
if CONFIG.runners.remove_duplicates:
|
|
71
|
+
items = [item for item in items if not item._duplicate]
|
|
69
72
|
if items:
|
|
70
73
|
if sort_by and all(sort_by):
|
|
71
74
|
items = sorted(items, key=operator.attrgetter(*sort_by))
|
|
@@ -343,8 +343,10 @@ def print_results_table(results, title=None, exclude_fields=[], log=False):
|
|
|
343
343
|
if output_type.__name__ == 'Progress':
|
|
344
344
|
continue
|
|
345
345
|
items = [
|
|
346
|
-
item for item in results if item._type == output_type.get_name()
|
|
346
|
+
item for item in results if item._type == output_type.get_name()
|
|
347
347
|
]
|
|
348
|
+
if CONFIG.runners.remove_duplicates:
|
|
349
|
+
items = [item for item in items if not item._duplicate]
|
|
348
350
|
if items:
|
|
349
351
|
_table = build_table(
|
|
350
352
|
items,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|