secator 0.5.1__tar.gz → 0.5.2__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.1 → secator-0.5.2}/CHANGELOG.md +7 -0
- {secator-0.5.1 → secator-0.5.2}/PKG-INFO +1 -1
- {secator-0.5.1 → secator-0.5.2}/pyproject.toml +1 -1
- {secator-0.5.1 → secator-0.5.2}/secator/tasks/httpx.py +17 -13
- {secator-0.5.1 → secator-0.5.2}/secator/tasks/katana.py +13 -7
- {secator-0.5.1 → secator-0.5.2}/.flake8 +0 -0
- {secator-0.5.1 → secator-0.5.2}/.gitignore +0 -0
- {secator-0.5.1 → secator-0.5.2}/CONTRIBUTING.md +0 -0
- {secator-0.5.1 → secator-0.5.2}/Dockerfile +0 -0
- {secator-0.5.1 → secator-0.5.2}/LICENSE +0 -0
- {secator-0.5.1 → secator-0.5.2}/README.md +0 -0
- {secator-0.5.1 → secator-0.5.2}/SECURITY.md +0 -0
- {secator-0.5.1 → secator-0.5.2}/cloudbuild.yaml +0 -0
- {secator-0.5.1 → secator-0.5.2}/images/aliases.cast +0 -0
- {secator-0.5.1 → secator-0.5.2}/images/aliases.gif +0 -0
- {secator-0.5.1 → secator-0.5.2}/images/demo.gif +0 -0
- {secator-0.5.1 → secator-0.5.2}/images/demo.tap +0 -0
- {secator-0.5.1 → secator-0.5.2}/images/fmt.cast +0 -0
- {secator-0.5.1 → secator-0.5.2}/images/fmt.gif +0 -0
- {secator-0.5.1 → secator-0.5.2}/images/help.png +0 -0
- {secator-0.5.1 → secator-0.5.2}/images/input.cast +0 -0
- {secator-0.5.1 → secator-0.5.2}/images/input.gif +0 -0
- {secator-0.5.1 → secator-0.5.2}/images/pipe.cast +0 -0
- {secator-0.5.1 → secator-0.5.2}/images/pipe.gif +0 -0
- {secator-0.5.1 → secator-0.5.2}/images/short_demo.cast +0 -0
- {secator-0.5.1 → secator-0.5.2}/images/short_demo.gif +0 -0
- {secator-0.5.1 → secator-0.5.2}/scripts/download_cves.sh +0 -0
- {secator-0.5.1 → secator-0.5.2}/scripts/install.sh +0 -0
- {secator-0.5.1 → secator-0.5.2}/scripts/install_asciinema.sh +0 -0
- {secator-0.5.1 → secator-0.5.2}/scripts/install_go.sh +0 -0
- {secator-0.5.1 → secator-0.5.2}/scripts/install_ruby.sh +0 -0
- {secator-0.5.1 → secator-0.5.2}/scripts/msf/exploit_cve.rc +0 -0
- {secator-0.5.1 → secator-0.5.2}/scripts/msf/ftp_anonymous.rc +0 -0
- {secator-0.5.1 → secator-0.5.2}/scripts/msf/ftp_version.rc +0 -0
- {secator-0.5.1 → secator-0.5.2}/scripts/msf/ftp_vsftpd_234_backdoor.rc +0 -0
- {secator-0.5.1 → secator-0.5.2}/scripts/msf/redis.rc +0 -0
- {secator-0.5.1 → secator-0.5.2}/scripts/msfinstall.sh +0 -0
- {secator-0.5.1 → secator-0.5.2}/scripts/stories/STORY.md +0 -0
- {secator-0.5.1 → secator-0.5.2}/scripts/stories/aliases.sh +0 -0
- {secator-0.5.1 → secator-0.5.2}/scripts/stories/demo.sh +0 -0
- {secator-0.5.1 → secator-0.5.2}/scripts/stories/fmt.sh +0 -0
- {secator-0.5.1 → secator-0.5.2}/scripts/stories/input.sh +0 -0
- {secator-0.5.1 → secator-0.5.2}/scripts/stories/pipe.sh +0 -0
- {secator-0.5.1 → secator-0.5.2}/scripts/stories/short_demo.sh +0 -0
- {secator-0.5.1 → secator-0.5.2}/secator/.gitignore +0 -0
- {secator-0.5.1 → secator-0.5.2}/secator/__init__.py +0 -0
- {secator-0.5.1 → secator-0.5.2}/secator/celery.py +0 -0
- {secator-0.5.1 → secator-0.5.2}/secator/cli.py +0 -0
- {secator-0.5.1 → secator-0.5.2}/secator/config.py +0 -0
- {secator-0.5.1 → secator-0.5.2}/secator/configs/__init__.py +0 -0
- {secator-0.5.1 → secator-0.5.2}/secator/configs/profiles/__init__.py +0 -0
- {secator-0.5.1 → secator-0.5.2}/secator/configs/profiles/aggressive.yaml +0 -0
- {secator-0.5.1 → secator-0.5.2}/secator/configs/profiles/default.yaml +0 -0
- {secator-0.5.1 → secator-0.5.2}/secator/configs/profiles/stealth.yaml +0 -0
- {secator-0.5.1 → secator-0.5.2}/secator/configs/scans/__init__.py +0 -0
- {secator-0.5.1 → secator-0.5.2}/secator/configs/scans/domain.yaml +0 -0
- {secator-0.5.1 → secator-0.5.2}/secator/configs/scans/host.yaml +0 -0
- {secator-0.5.1 → secator-0.5.2}/secator/configs/scans/network.yaml +0 -0
- {secator-0.5.1 → secator-0.5.2}/secator/configs/scans/subdomain.yaml +0 -0
- {secator-0.5.1 → secator-0.5.2}/secator/configs/scans/url.yaml +0 -0
- {secator-0.5.1 → secator-0.5.2}/secator/configs/workflows/__init__.py +0 -0
- {secator-0.5.1 → secator-0.5.2}/secator/configs/workflows/cidr_recon.yaml +0 -0
- {secator-0.5.1 → secator-0.5.2}/secator/configs/workflows/code_scan.yaml +0 -0
- {secator-0.5.1 → secator-0.5.2}/secator/configs/workflows/host_recon.yaml +0 -0
- {secator-0.5.1 → secator-0.5.2}/secator/configs/workflows/port_scan.yaml +0 -0
- {secator-0.5.1 → secator-0.5.2}/secator/configs/workflows/subdomain_recon.yaml +0 -0
- {secator-0.5.1 → secator-0.5.2}/secator/configs/workflows/url_crawl.yaml +0 -0
- {secator-0.5.1 → secator-0.5.2}/secator/configs/workflows/url_dirsearch.yaml +0 -0
- {secator-0.5.1 → secator-0.5.2}/secator/configs/workflows/url_fuzz.yaml +0 -0
- {secator-0.5.1 → secator-0.5.2}/secator/configs/workflows/url_nuclei.yaml +0 -0
- {secator-0.5.1 → secator-0.5.2}/secator/configs/workflows/url_vuln.yaml +0 -0
- {secator-0.5.1 → secator-0.5.2}/secator/configs/workflows/user_hunt.yaml +0 -0
- {secator-0.5.1 → secator-0.5.2}/secator/configs/workflows/wordpress.yaml +0 -0
- {secator-0.5.1 → secator-0.5.2}/secator/decorators.py +0 -0
- {secator-0.5.1 → secator-0.5.2}/secator/definitions.py +0 -0
- {secator-0.5.1 → secator-0.5.2}/secator/exporters/__init__.py +0 -0
- {secator-0.5.1 → secator-0.5.2}/secator/exporters/_base.py +0 -0
- {secator-0.5.1 → secator-0.5.2}/secator/exporters/csv.py +0 -0
- {secator-0.5.1 → secator-0.5.2}/secator/exporters/gdrive.py +0 -0
- {secator-0.5.1 → secator-0.5.2}/secator/exporters/json.py +0 -0
- {secator-0.5.1 → secator-0.5.2}/secator/exporters/table.py +0 -0
- {secator-0.5.1 → secator-0.5.2}/secator/exporters/txt.py +0 -0
- {secator-0.5.1 → secator-0.5.2}/secator/hooks/__init__.py +0 -0
- {secator-0.5.1 → secator-0.5.2}/secator/hooks/mongodb.py +0 -0
- {secator-0.5.1 → secator-0.5.2}/secator/installer.py +0 -0
- {secator-0.5.1 → secator-0.5.2}/secator/output_types/__init__.py +0 -0
- {secator-0.5.1 → secator-0.5.2}/secator/output_types/_base.py +0 -0
- {secator-0.5.1 → secator-0.5.2}/secator/output_types/exploit.py +0 -0
- {secator-0.5.1 → secator-0.5.2}/secator/output_types/ip.py +0 -0
- {secator-0.5.1 → secator-0.5.2}/secator/output_types/port.py +0 -0
- {secator-0.5.1 → secator-0.5.2}/secator/output_types/progress.py +0 -0
- {secator-0.5.1 → secator-0.5.2}/secator/output_types/record.py +0 -0
- {secator-0.5.1 → secator-0.5.2}/secator/output_types/subdomain.py +0 -0
- {secator-0.5.1 → secator-0.5.2}/secator/output_types/tag.py +0 -0
- {secator-0.5.1 → secator-0.5.2}/secator/output_types/target.py +0 -0
- {secator-0.5.1 → secator-0.5.2}/secator/output_types/url.py +0 -0
- {secator-0.5.1 → secator-0.5.2}/secator/output_types/user_account.py +0 -0
- {secator-0.5.1 → secator-0.5.2}/secator/output_types/vulnerability.py +0 -0
- {secator-0.5.1 → secator-0.5.2}/secator/report.py +0 -0
- {secator-0.5.1 → secator-0.5.2}/secator/rich.py +0 -0
- {secator-0.5.1 → secator-0.5.2}/secator/runners/__init__.py +0 -0
- {secator-0.5.1 → secator-0.5.2}/secator/runners/_base.py +0 -0
- {secator-0.5.1 → secator-0.5.2}/secator/runners/_helpers.py +0 -0
- {secator-0.5.1 → secator-0.5.2}/secator/runners/command.py +0 -0
- {secator-0.5.1 → secator-0.5.2}/secator/runners/scan.py +0 -0
- {secator-0.5.1 → secator-0.5.2}/secator/runners/task.py +0 -0
- {secator-0.5.1 → secator-0.5.2}/secator/runners/workflow.py +0 -0
- {secator-0.5.1 → secator-0.5.2}/secator/serializers/__init__.py +0 -0
- {secator-0.5.1 → secator-0.5.2}/secator/serializers/dataclass.py +0 -0
- {secator-0.5.1 → secator-0.5.2}/secator/serializers/json.py +0 -0
- {secator-0.5.1 → secator-0.5.2}/secator/serializers/regex.py +0 -0
- {secator-0.5.1 → secator-0.5.2}/secator/tasks/__init__.py +0 -0
- {secator-0.5.1 → secator-0.5.2}/secator/tasks/_categories.py +0 -0
- {secator-0.5.1 → secator-0.5.2}/secator/tasks/cariddi.py +0 -0
- {secator-0.5.1 → secator-0.5.2}/secator/tasks/dalfox.py +0 -0
- {secator-0.5.1 → secator-0.5.2}/secator/tasks/dirsearch.py +0 -0
- {secator-0.5.1 → secator-0.5.2}/secator/tasks/dnsx.py +0 -0
- {secator-0.5.1 → secator-0.5.2}/secator/tasks/dnsxbrute.py +0 -0
- {secator-0.5.1 → secator-0.5.2}/secator/tasks/feroxbuster.py +0 -0
- {secator-0.5.1 → secator-0.5.2}/secator/tasks/ffuf.py +0 -0
- {secator-0.5.1 → secator-0.5.2}/secator/tasks/fping.py +0 -0
- {secator-0.5.1 → secator-0.5.2}/secator/tasks/gau.py +0 -0
- {secator-0.5.1 → secator-0.5.2}/secator/tasks/gf.py +0 -0
- {secator-0.5.1 → secator-0.5.2}/secator/tasks/gospider.py +0 -0
- {secator-0.5.1 → secator-0.5.2}/secator/tasks/grype.py +0 -0
- {secator-0.5.1 → secator-0.5.2}/secator/tasks/h8mail.py +0 -0
- {secator-0.5.1 → secator-0.5.2}/secator/tasks/maigret.py +0 -0
- {secator-0.5.1 → secator-0.5.2}/secator/tasks/mapcidr.py +0 -0
- {secator-0.5.1 → secator-0.5.2}/secator/tasks/msfconsole.py +0 -0
- {secator-0.5.1 → secator-0.5.2}/secator/tasks/naabu.py +0 -0
- {secator-0.5.1 → secator-0.5.2}/secator/tasks/nmap.py +0 -0
- {secator-0.5.1 → secator-0.5.2}/secator/tasks/nuclei.py +0 -0
- {secator-0.5.1 → secator-0.5.2}/secator/tasks/searchsploit.py +0 -0
- {secator-0.5.1 → secator-0.5.2}/secator/tasks/subfinder.py +0 -0
- {secator-0.5.1 → secator-0.5.2}/secator/tasks/wpscan.py +0 -0
- {secator-0.5.1 → secator-0.5.2}/secator/template.py +0 -0
- {secator-0.5.1 → secator-0.5.2}/secator/utils.py +0 -0
- {secator-0.5.1 → secator-0.5.2}/secator/utils_test.py +0 -0
- {secator-0.5.1 → secator-0.5.2}/tests/__init__.py +0 -0
- {secator-0.5.1 → secator-0.5.2}/tests/fixtures/h8mail_breach.txt +0 -0
- {secator-0.5.1 → secator-0.5.2}/tests/fixtures/ls.py +0 -0
- {secator-0.5.1 → secator-0.5.2}/tests/fixtures/msfconsole_input.rc +0 -0
- {secator-0.5.1 → secator-0.5.2}/tests/fixtures/nmap_output.xml +0 -0
- {secator-0.5.1 → secator-0.5.2}/tests/integration/__init__.py +0 -0
- {secator-0.5.1 → secator-0.5.2}/tests/integration/inputs.py +0 -0
- {secator-0.5.1 → secator-0.5.2}/tests/integration/outputs.py +0 -0
- {secator-0.5.1 → secator-0.5.2}/tests/integration/setup.sh +0 -0
- {secator-0.5.1 → secator-0.5.2}/tests/integration/teardown.sh +0 -0
- {secator-0.5.1 → secator-0.5.2}/tests/integration/test_scans.py +0 -0
- {secator-0.5.1 → secator-0.5.2}/tests/integration/test_tasks.py +0 -0
- {secator-0.5.1 → secator-0.5.2}/tests/integration/test_worker.py +0 -0
- {secator-0.5.1 → secator-0.5.2}/tests/integration/test_workflows.py +0 -0
- {secator-0.5.1 → secator-0.5.2}/tests/integration/wordlist.txt +0 -0
- {secator-0.5.1 → secator-0.5.2}/tests/integration/wordlist_dns.txt +0 -0
- {secator-0.5.1 → secator-0.5.2}/tests/integration/wordpress_toolbox/Dockerfile +0 -0
- {secator-0.5.1 → secator-0.5.2}/tests/integration/wordpress_toolbox/Makefile +0 -0
- {secator-0.5.1 → secator-0.5.2}/tests/performance/__init__.py +0 -0
- {secator-0.5.1 → secator-0.5.2}/tests/performance/loadtester.py +0 -0
- {secator-0.5.1 → secator-0.5.2}/tests/unit/__init__.py +0 -0
- {secator-0.5.1 → secator-0.5.2}/tests/unit/test_celery.py +0 -0
- {secator-0.5.1 → secator-0.5.2}/tests/unit/test_config.py +0 -0
- {secator-0.5.1 → secator-0.5.2}/tests/unit/test_offline.py +0 -0
- {secator-0.5.1 → secator-0.5.2}/tests/unit/test_scans.py +0 -0
- {secator-0.5.1 → secator-0.5.2}/tests/unit/test_serializers.py +0 -0
- {secator-0.5.1 → secator-0.5.2}/tests/unit/test_tasks.py +0 -0
- {secator-0.5.1 → secator-0.5.2}/tests/unit/test_template.py +0 -0
- {secator-0.5.1 → secator-0.5.2}/tests/unit/test_workflows.py +0 -0
|
@@ -1,5 +1,12 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [0.5.2](https://github.com/freelabz/secator/compare/v0.5.1...v0.5.2) (2024-05-07)
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
### Bug Fixes
|
|
7
|
+
|
|
8
|
+
* **nuclei,katana:** add -sr flag and write http responses and screenshot to correct folder ([#395](https://github.com/freelabz/secator/issues/395)) ([1a51790](https://github.com/freelabz/secator/commit/1a51790c9231f593631c2780b6d5e0fa89f1aa55))
|
|
9
|
+
|
|
3
10
|
## [0.5.1](https://github.com/freelabz/secator/compare/v0.5.0...v0.5.1) (2024-05-06)
|
|
4
11
|
|
|
5
12
|
|
|
@@ -31,6 +31,7 @@ class httpx(Http):
|
|
|
31
31
|
'cdn': {'is_flag': True, 'default': False, 'help': 'CDN detection'},
|
|
32
32
|
'debug_resp': {'is_flag': True, 'default': False, 'help': 'Debug response'},
|
|
33
33
|
'vhost': {'is_flag': True, 'default': False, 'help': 'Probe and display server supporting VHOST'},
|
|
34
|
+
'store_responses': {'is_flag': True, 'short': 'sr', 'default': CONFIG.http.store_responses, 'help': 'Save HTTP responses'}, # noqa: E501
|
|
34
35
|
'screenshot': {'is_flag': True, 'short': 'ss', 'default': False, 'help': 'Screenshot response'},
|
|
35
36
|
'system_chrome': {'is_flag': True, 'default': False, 'help': 'Use local installed Chrome for screenshot'},
|
|
36
37
|
'headless_options': {'is_flag': False, 'short': 'ho', 'default': None, 'help': 'Headless Chrome additional options'},
|
|
@@ -55,6 +56,7 @@ class httpx(Http):
|
|
|
55
56
|
THREADS: 'threads',
|
|
56
57
|
TIMEOUT: 'timeout',
|
|
57
58
|
USER_AGENT: OPT_NOT_SUPPORTED,
|
|
59
|
+
'store_responses': 'sr',
|
|
58
60
|
}
|
|
59
61
|
opt_value_map = {
|
|
60
62
|
DELAY: lambda x: str(x) + 's' if x else None,
|
|
@@ -71,15 +73,10 @@ class httpx(Http):
|
|
|
71
73
|
debug_resp = self.get_opt_value('debug_resp')
|
|
72
74
|
if debug_resp:
|
|
73
75
|
self.cmd = self.cmd.replace('-silent', '')
|
|
74
|
-
if CONFIG.http.store_responses:
|
|
75
|
-
self.output_response_path = f'{self.reports_folder}/response'
|
|
76
|
-
self.output_screenshot_path = f'{self.reports_folder}/screenshot'
|
|
77
|
-
os.makedirs(self.output_response_path, exist_ok=True)
|
|
78
|
-
os.makedirs(self.output_screenshot_path, exist_ok=True)
|
|
79
|
-
self.cmd += f' -sr -srd {self.reports_folder}'
|
|
80
|
-
|
|
81
|
-
# Remove screenshot bytes and body bytes when screenshot
|
|
82
76
|
screenshot = self.get_opt_value('screenshot')
|
|
77
|
+
store_responses = self.get_opt_value('store_responses')
|
|
78
|
+
if store_responses or screenshot:
|
|
79
|
+
self.cmd += f' -srd {self.reports_folder}/.outputs'
|
|
83
80
|
if screenshot:
|
|
84
81
|
self.cmd += ' -esb -ehb'
|
|
85
82
|
|
|
@@ -98,8 +95,15 @@ class httpx(Http):
|
|
|
98
95
|
|
|
99
96
|
@staticmethod
|
|
100
97
|
def on_end(self):
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
98
|
+
store_responses = self.get_opt_value('store_responses')
|
|
99
|
+
response_dir = f'{self.reports_folder}/.outputs'
|
|
100
|
+
if store_responses:
|
|
101
|
+
index_rpath = f'{response_dir}/response/index.txt'
|
|
102
|
+
index_spath = f'{response_dir}/screenshot/index_screenshot.txt'
|
|
103
|
+
index_spath2 = f'{response_dir}/screenshot/screenshot.html'
|
|
104
|
+
if os.path.exists(index_rpath):
|
|
105
|
+
os.remove(index_rpath)
|
|
106
|
+
if os.path.exists(index_spath):
|
|
107
|
+
os.remove(index_spath)
|
|
108
|
+
if os.path.exists(index_spath2):
|
|
109
|
+
os.remove(index_spath2)
|
|
@@ -29,7 +29,8 @@ class katana(HttpCrawler):
|
|
|
29
29
|
opts = {
|
|
30
30
|
'headless': {'is_flag': True, 'short': 'hl', 'help': 'Headless mode'},
|
|
31
31
|
'system_chrome': {'is_flag': True, 'short': 'sc', 'help': 'Use local installed chrome browser'},
|
|
32
|
-
'form_extraction': {'is_flag': True, 'short': 'fx', 'help': 'Detect forms'}
|
|
32
|
+
'form_extraction': {'is_flag': True, 'short': 'fx', 'help': 'Detect forms'},
|
|
33
|
+
'store_responses': {'is_flag': True, 'short': 'sr', 'default': CONFIG.http.store_responses, 'help': 'Store responses'}
|
|
33
34
|
}
|
|
34
35
|
opt_key_map = {
|
|
35
36
|
HEADER: 'headers',
|
|
@@ -50,7 +51,8 @@ class katana(HttpCrawler):
|
|
|
50
51
|
RETRIES: 'retry',
|
|
51
52
|
THREADS: 'concurrency',
|
|
52
53
|
TIMEOUT: 'timeout',
|
|
53
|
-
USER_AGENT: OPT_NOT_SUPPORTED
|
|
54
|
+
USER_AGENT: OPT_NOT_SUPPORTED,
|
|
55
|
+
'store_responses': 'sr'
|
|
54
56
|
}
|
|
55
57
|
opt_value_map = {
|
|
56
58
|
DELAY: lambda x: int(x) if isinstance(x, float) else x
|
|
@@ -107,14 +109,16 @@ class katana(HttpCrawler):
|
|
|
107
109
|
debug_resp = self.get_opt_value('debug_resp')
|
|
108
110
|
if debug_resp:
|
|
109
111
|
self.cmd = self.cmd.replace('-silent', '')
|
|
110
|
-
|
|
111
|
-
|
|
112
|
+
store_responses = self.get_opt_value('store_responses')
|
|
113
|
+
if store_responses:
|
|
114
|
+
self.cmd += f' -srd {self.reports_folder}/.outputs'
|
|
112
115
|
|
|
113
116
|
@staticmethod
|
|
114
117
|
def on_item(self, item):
|
|
115
118
|
if not isinstance(item, Url):
|
|
116
119
|
return item
|
|
117
|
-
|
|
120
|
+
store_responses = self.get_opt_value('store_responses')
|
|
121
|
+
if store_responses and os.path.exists(item.stored_response_path):
|
|
118
122
|
with open(item.stored_response_path, 'r', encoding='latin-1') as fin:
|
|
119
123
|
data = fin.read().splitlines(True)
|
|
120
124
|
first_line = data[0]
|
|
@@ -126,5 +130,7 @@ class katana(HttpCrawler):
|
|
|
126
130
|
|
|
127
131
|
@staticmethod
|
|
128
132
|
def on_end(self):
|
|
129
|
-
|
|
130
|
-
|
|
133
|
+
store_responses = self.get_opt_value('store_responses')
|
|
134
|
+
index_rpath = f'{self.reports_folder}/.outputs/index.txt'
|
|
135
|
+
if store_responses and os.path.exists(index_rpath):
|
|
136
|
+
os.remove(index_rpath)
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|