##\
# This file is a part of the CIDRAM package.
# Homepage: https://cidram.github.io/
#
# CIDRAM COPYRIGHT 2016 and beyond by Caleb Mazalevskis (Maikuolan).
#
# License: GNU/GPLv2
# @see LICENSE.txt
#
# This file: Defaults file (last modified: 2023.11.26).
##/

Config Defaults:
 general:
  stages:
   type: "checkbox"
   default: |
    Tests:Enable
    Tests:LogErrors
    Modules:Enable
    Modules:LogErrors
    Modules:Tracking
    SearchEngineVerification:Enable
    SearchEngineVerification:LogErrors
    SearchEngineVerification:Tracking
    SocialMediaVerification:Enable
    SocialMediaVerification:LogErrors
    SocialMediaVerification:Tracking
    OtherVerification:Enable
    OtherVerification:LogErrors
    OtherVerification:Tracking
    Aux:Enable
    Aux:LogErrors
    Aux:Tracking
    Tracking:Enable
    Tracking:LogErrors
    RL:Enable
    RL:LogErrors
    CAPTCHA:Enable
    CAPTCHA:LogErrors
    Reporting:Enable
    Reporting:LogErrors
    Statistics:Enable
    Statistics:LogErrors
    Webhooks:Enable
    Webhooks:LogErrors
    PrepareFields:Enable
    PrepareFields:LogErrors
    Output:Enable
    Output:LogErrors
    WriteLogs:Enable
    WriteLogs:LogErrors
    Terminate:Enable
    Terminate:LogErrors
    AuxRedirect:Enable
    AuxRedirect:LogErrors
    NonBlockedCAPTCHA:Enable
    NonBlockedCAPTCHA:LogErrors
   labels:
    Enable: "checkbox.Enable this stage"
    LogErrors: "checkbox.Log any errors generated during this stage"
    Tracking: "checkbox.Should infractions generated during this stage count towards IP tracking"
   choices:
    Tests: "stages.Execute signature files tests"
    Modules: "stages.Execute modules"
    SearchEngineVerification: "stages.Execute search engine verification"
    SocialMediaVerification: "stages.Execute social media verification"
    OtherVerification: "stages.Execute other verification"
    Aux: "stages.Execute auxiliary rules"
    Tracking: "stages.Execute IP tracking"
    RL: "stages.Execute rate limiting"
    CAPTCHA: "stages.Deploy CAPTCHAs (blocked requests)"
    Reporting: "stages.Execute reporting"
    Statistics: "stages.Update statistics"
    Webhooks: "stages.Execute webhooks"
    PrepareFields: "stages.Prepare fields for output and logs"
    Output: "stages.Generate output (blocked requests)"
    WriteLogs: "stages.Write to logs (blocked requests)"
    Terminate: "stages.Terminate the request (blocked requests)"
    AuxRedirect: "stages.Redirect according to auxiliary rules"
    NonBlockedCAPTCHA: "stages.Deploy CAPTCHAs (non-blocked requests)"
   nonsense: |
    Tracking:Tracking
    RL:Tracking
    CAPTCHA:Tracking
    Reporting:Tracking
    Statistics:Tracking
    Webhooks:Tracking
    PrepareFields:Tracking
    Output:Tracking
    WriteLogs:Tracking
    Terminate:Tracking
    AuxRedirect:Tracking
    NonBlockedCAPTCHA:Tracking
  fields:
   type: "checkbox"
   default: |
    ID:ShowInLogs
    ID:ShowInPageOutput
    ScriptIdent:ShowInLogs
    ScriptIdent:ShowInPageOutput
    DateTime:ShowInLogs
    DateTime:ShowInPageOutput
    IPAddr:ShowInLogs
    IPAddr:ShowInPageOutput
    IPAddrResolved:ShowInLogs
    IPAddrResolved:ShowInPageOutput
    IPAddrResolved:OmitIfEmpty
    Query:ShowInLogs
    Query:ShowInPageOutput
    Query:OmitIfEmpty
    Referrer:ShowInLogs
    Referrer:ShowInPageOutput
    Referrer:OmitIfEmpty
    UA:ShowInLogs
    UA:ShowInPageOutput
    UA:OmitIfEmpty
    UALC:OmitIfEmpty
    SignatureCount:ShowInLogs
    SignatureCount:ShowInPageOutput
    Signatures:ShowInLogs
    Signatures:ShowInPageOutput
    WhyReason:ShowInLogs
    WhyReason:ShowInPageOutput
    ReasonMessage:ShowInPageOutput
    ReasonMessage:OmitIfEmpty
    rURI:ShowInLogs
    rURI:ShowInPageOutput
    rURI:OmitIfEmpty
    Infractions:ShowInLogs
    Infractions:OmitIfEmpty
    ASNLookup:ShowInLogs
    ASNLookup:OmitIfEmpty
    CCLookup:ShowInLogs
    CCLookup:OmitIfEmpty
    Verified:ShowInLogs
    Verified:OmitIfEmpty
    Expired:OmitIfEmpty
    Ignored:OmitIfEmpty
    Request_Method:ShowInLogs
    Request_Method:OmitIfEmpty
    Hostname:ShowInLogs
    Hostname:ShowInPageOutput
    Hostname:OmitIfEmpty
    CAPTCHA:ShowInLogs
    CAPTCHA:OmitIfEmpty
    Inspection:OmitIfEmpty
   labels:
    ShowInLogs: "checkbox.Should this field appear in log entries"
    ShowInPageOutput: "checkbox.Should this field appear on the access denied page"
    OmitIfEmpty: "checkbox.Omit this field when it_s empty"
   choices:
    ID: "field.ID"
    ScriptIdent: "field.Script version"
    DateTime: "field.DateTime"
    IPAddr: "field.IP address"
    IPAddrResolved: "field.IP address (resolved)"
    Query: "field.Query"
    Referrer: "field.Referrer"
    UA: "field.User agent"
    UALC: "field.User agent (lower-case)"
    SignatureCount: "field.Signatures count"
    Signatures: "field.Signatures reference"
    WhyReason: "field.Why blocked"
    ReasonMessage: "field.Why blocked (detailed)"
    rURI: "field.Reconstructed URI"
    Infractions: "field.Infractions"
    ASNLookup: "** {field.ASN lookup}"
    CCLookup: "** {field.Country code lookup}"
    Verified: "field.Verified identity"
    Expired: "state_expired"
    Ignored: "state_ignored"
    Request_Method: "field.Request method"
    Protocol: "field.Protocol"
    Hostname: "field.Hostname"
    CAPTCHA: "field.CAPTCHA state"
    Inspection: "* {field.Conditions inspection}"
   nonsense: |
    ID:OmitIfEmpty
    ScriptIdent:OmitIfEmpty
    DateTime:OmitIfEmpty
    SignatureCount:OmitIfEmpty
    Infractions:OmitIfEmpty
    Inspection:ShowInPageOutput
   hints:
    - "hints_inspection"
    - "hints_asnlookup"
  timezone:
   type: "timezone"
   default: "SYSTEM"
  time_offset:
   type: "int"
   default: 0
   preview: "minutes"
  time_format:
   type: "string"
   default: "{Day}, {dd} {Mon} {yyyy} {hh}:{ii}:{ss} {tz}"
   preview: "allow_other"
   allow_other: true
   choices:
    "{Day}, {dd} {Mon} {yyyy} {hh}:{ii}:{ss} {tz}": "{Day}, {dd} {Mon} {yyyy} {hh}:{ii}:{ss} {tz}"
    "{Day}, {dd} {Mon} {yyyy} {hh}:{ii}:{ss}": "{Day}, {dd} {Mon} {yyyy} {hh}:{ii}:{ss}"
    "{Day}, {dd} {Mon} {yyyy}": "{Day}, {dd} {Mon} {yyyy}"
    "{yyyy}.{mm}.{dd} {hh}:{ii}:{ss} {tz}": "{yyyy}.{mm}.{dd} {hh}:{ii}:{ss} {tz}"
    "{yyyy}.{mm}.{dd} {hh}:{ii}:{ss}": "{yyyy}.{mm}.{dd} {hh}:{ii}:{ss}"
    "{yyyy}.{mm}.{dd}": "{yyyy}.{mm}.{dd}"
    "{yyyy}-{mm}-{dd} {hh}:{ii}:{ss} {tz}": "{yyyy}-{mm}-{dd} {hh}:{ii}:{ss} {tz}"
    "{yyyy}-{mm}-{dd} {hh}:{ii}:{ss}": "{yyyy}-{mm}-{dd} {hh}:{ii}:{ss}"
    "{yyyy}-{mm}-{dd}": "{yyyy}-{mm}-{dd}"
    "{yyyy}/{mm}/{dd} {hh}:{ii}:{ss} {tz}": "{yyyy}/{mm}/{dd} {hh}:{ii}:{ss} {tz}"
    "{yyyy}/{mm}/{dd} {hh}:{ii}:{ss}": "{yyyy}/{mm}/{dd} {hh}:{ii}:{ss}"
    "{yyyy}/{mm}/{dd}": "{yyyy}/{mm}/{dd}"
    "{dd}.{mm}.{yyyy} {hh}:{ii}:{ss} {tz}": "{dd}.{mm}.{yyyy} {hh}:{ii}:{ss} {tz}"
    "{dd}.{mm}.{yyyy} {hh}:{ii}:{ss}": "{dd}.{mm}.{yyyy} {hh}:{ii}:{ss}"
    "{dd}.{mm}.{yyyy}": "{dd}.{mm}.{yyyy}"
    "{dd}-{mm}-{yyyy} {hh}:{ii}:{ss} {tz}": "{dd}-{mm}-{yyyy} {hh}:{ii}:{ss} {tz}"
    "{dd}-{mm}-{yyyy} {hh}:{ii}:{ss}": "{dd}-{mm}-{yyyy} {hh}:{ii}:{ss}"
    "{dd}-{mm}-{yyyy}": "{dd}-{mm}-{yyyy}"
    "{dd}/{mm}/{yyyy} {hh}:{ii}:{ss} {tz}": "{dd}/{mm}/{yyyy} {hh}:{ii}:{ss} {tz}"
    "{dd}/{mm}/{yyyy} {hh}:{ii}:{ss}": "{dd}/{mm}/{yyyy} {hh}:{ii}:{ss}"
    "{dd}/{mm}/{yyyy}": "{dd}/{mm}/{yyyy}"
    "{mm}.{dd}.{yyyy} {hh}:{ii}:{ss} {tz}": "{mm}.{dd}.{yyyy} {hh}:{ii}:{ss} {tz}"
    "{mm}.{dd}.{yyyy} {hh}:{ii}:{ss}": "{mm}.{dd}.{yyyy} {hh}:{ii}:{ss}"
    "{mm}.{dd}.{yyyy}": "{mm}.{dd}.{yyyy}"
    "{mm}-{dd}-{yyyy} {hh}:{ii}:{ss} {tz}": "{mm}-{dd}-{yyyy} {hh}:{ii}:{ss} {tz}"
    "{mm}-{dd}-{yyyy} {hh}:{ii}:{ss}": "{mm}-{dd}-{yyyy} {hh}:{ii}:{ss}"
    "{mm}-{dd}-{yyyy}": "{mm}-{dd}-{yyyy}"
    "{mm}/{dd}/{yyyy} {hh}:{ii}:{ss} {tz}": "{mm}/{dd}/{yyyy} {hh}:{ii}:{ss} {tz}"
    "{mm}/{dd}/{yyyy} {hh}:{ii}:{ss}": "{mm}/{dd}/{yyyy} {hh}:{ii}:{ss}"
    "{mm}/{dd}/{yyyy}": "{mm}/{dd}/{yyyy}"
    "{yy}.{mm}.{dd} {hh}:{ii}:{ss} {tz}": "{yy}.{mm}.{dd} {hh}:{ii}:{ss} {tz}"
    "{yy}.{mm}.{dd} {hh}:{ii}:{ss}": "{yy}.{mm}.{dd} {hh}:{ii}:{ss}"
    "{yy}.{mm}.{dd}": "{yy}.{mm}.{dd}"
    "{yy}-{mm}-{dd} {hh}:{ii}:{ss} {tz}": "{yy}-{mm}-{dd} {hh}:{ii}:{ss} {tz}"
    "{yy}-{mm}-{dd} {hh}:{ii}:{ss}": "{yy}-{mm}-{dd} {hh}:{ii}:{ss}"
    "{yy}-{mm}-{dd}": "{yy}-{mm}-{dd}"
    "{yy}/{mm}/{dd} {hh}:{ii}:{ss} {tz}": "{yy}/{mm}/{dd} {hh}:{ii}:{ss} {tz}"
    "{yy}/{mm}/{dd} {hh}:{ii}:{ss}": "{yy}/{mm}/{dd} {hh}:{ii}:{ss}"
    "{yy}/{mm}/{dd}": "{yy}/{mm}/{dd}"
    "{dd}.{mm}.{yy} {hh}:{ii}:{ss} {tz}": "{dd}.{mm}.{yy} {hh}:{ii}:{ss} {tz}"
    "{dd}.{mm}.{yy} {hh}:{ii}:{ss}": "{dd}.{mm}.{yy} {hh}:{ii}:{ss}"
    "{dd}.{mm}.{yy}": "{dd}.{mm}.{yy}"
    "{dd}-{mm}-{yy} {hh}:{ii}:{ss} {tz}": "{dd}-{mm}-{yy} {hh}:{ii}:{ss} {tz}"
    "{dd}-{mm}-{yy} {hh}:{ii}:{ss}": "{dd}-{mm}-{yy} {hh}:{ii}:{ss}"
    "{dd}-{mm}-{yy}": "{dd}-{mm}-{yy}"
    "{dd}/{mm}/{yy} {hh}:{ii}:{ss} {tz}": "{dd}/{mm}/{yy} {hh}:{ii}:{ss} {tz}"
    "{dd}/{mm}/{yy} {hh}:{ii}:{ss}": "{dd}/{mm}/{yy} {hh}:{ii}:{ss}"
    "{dd}/{mm}/{yy}": "{dd}/{mm}/{yy}"
    "{mm}.{dd}.{yy} {hh}:{ii}:{ss} {tz}": "{mm}.{dd}.{yy} {hh}:{ii}:{ss} {tz}"
    "{mm}.{dd}.{yy} {hh}:{ii}:{ss}": "{mm}.{dd}.{yy} {hh}:{ii}:{ss}"
    "{mm}.{dd}.{yy}": "{mm}.{dd}.{yy}"
    "{mm}-{dd}-{yy} {hh}:{ii}:{ss} {tz}": "{mm}-{dd}-{yy} {hh}:{ii}:{ss} {tz}"
    "{mm}-{dd}-{yy} {hh}:{ii}:{ss}": "{mm}-{dd}-{yy} {hh}:{ii}:{ss}"
    "{mm}-{dd}-{yy}": "{mm}-{dd}-{yy}"
    "{mm}/{dd}/{yy} {hh}:{ii}:{ss} {tz}": "{mm}/{dd}/{yy} {hh}:{ii}:{ss} {tz}"
    "{mm}/{dd}/{yy} {hh}:{ii}:{ss}": "{mm}/{dd}/{yy} {hh}:{ii}:{ss}"
    "{mm}/{dd}/{yy}": "{mm}/{dd}/{yy}"
    "{yyyy}年{m}月{d}日 {hh}時{ii}分{ss}秒": "{yyyy}年{m}月{d}日 {hh}時{ii}分{ss}秒"
    "{yyyy}年{m}月{d}日 {hh}:{ii}:{ss} {tz}": "{yyyy}年{m}月{d}日 {hh}:{ii}:{ss} {tz}"
    "{yyyy}年{m}月{d}日": "{yyyy}年{m}月{d}日"
    "{yy}年{m}月{d}日 {hh}時{ii}分{ss}秒": "{yy}年{m}月{d}日 {hh}時{ii}分{ss}秒"
    "{yy}年{m}月{d}日 {hh}:{ii}:{ss} {tz}": "{yy}年{m}月{d}日 {hh}:{ii}:{ss} {tz}"
    "{yy}年{m}月{d}日": "{yy}年{m}月{d}日"
    "{yyyy}년 {m}월 {d}일 {hh}시 {ii}분 {ss}초": "{yyyy}년 {m}월 {d}일 {hh}시 {ii}분 {ss}초"
    "{yyyy}년 {m}월 {d}일 {hh}:{ii}:{ss} {tz}": "{yyyy}년 {m}월 {d}일 {hh}:{ii}:{ss} {tz}"
    "{yyyy}년 {m}월 {d}일": "{yyyy}년 {m}월 {d}일"
    "{yy}년 {m}월 {d}일 {hh}시 {ii}분 {ss}초": "{yy}년 {m}월 {d}일 {hh}시 {ii}분 {ss}초"
    "{yy}년 {m}월 {d}일 {hh}:{ii}:{ss} {tz}": "{yy}년 {m}월 {d}일 {hh}:{ii}:{ss} {tz}"
    "{yy}년 {m}월 {d}일": "{yy}년 {m}월 {d}일"
    "{yyyy}-{mm}-{dd}T{hh}:{ii}:{ss}{t:z}": "{yyyy}-{mm}-{dd}T{hh}:{ii}:{ss}{t:z}"
    "{d}. {m}. {yyyy}": "{d}. {m}. {yyyy}"
  ipaddr:
   type: "string"
   default: "REMOTE_ADDR"
   preview: "allow_other"
   allow_other: true
   choices:
    HTTP_INCAP_CLIENT_IP: "HTTP_INCAP_CLIENT_IP (Incapsula)"
    HTTP_CF_CONNECTING_IP: "HTTP_CF_CONNECTING_IP (Cloudflare)"
    CF-Connecting-IP: "CF-Connecting-IP (Cloudflare)"
    HTTP_X_FORWARDED_FOR: "HTTP_X_FORWARDED_FOR (Cloudbric)"
    X-Forwarded-For: "X-Forwarded-For (Squid)"
    Forwarded: "Forwarded"
    REMOTE_ADDR: "REMOTE_ADDR ({label.Default})"
   See also:
    "NGINX Reverse Proxy": "https://docs.nginx.com/nginx/admin-guide/web-server/reverse-proxy/"
    "Squid configuration directive forwarded_for": "http://www.squid-cache.org/Doc/config/forwarded_for/"
    "Forwarded - HTTP | MDN": "https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Forwarded"
  http_response_header_code:
   type: "int"
   default: 403
   choices:
    200: &200 "label.200 OK"
    403: &403 "label.403 Forbidden"
    410: &410 "label.410 Gone"
    418: &418 "label.418 I_m a teapot"
    451: &451 "label.451 Unavailable For Legal Reasons"
    503: &503 "label.503 Service Unavailable"
   style: "radio"
  silent_mode:
   type: "url"
   default: ""
   autocomplete: "url"
  silent_mode_response_header_code:
   type: "int"
   default: 301
   choices:
    301: &301 "label.301 Moved Permanently"
    302: &302 "label.302 Found"
    307: &307 "label.307 Temporary Redirect"
    308: &308 "label.308 Permanent Redirect"
   style: "radio"
   hints: "hints_client_honour"
  lang:
   type: "string"
   default: "en"
   choices:
    af: "Afrikaans"
    ar: "العربية"
    bg: "Български"
    bn: "বাংলা"
    cs: "Čeština"
    de: "Deutsch"
    en: "English (AU/GB/NZ)"
    en-CA: "English (CA)"
    en-US: "English (US)"
    es: "Español"
    fa: "فارسی"
    fr: "Français"
    he: "עברית"
    hi: "हिंदी"
    id: "Bahasa Indonesia"
    it: "Italiano"
    ja: "日本語"
    ko: "한국어"
    lv: "Latviešu"
    ms: "Bahasa Melayu"
    nl: "Nederlandse"
    no: "Norsk"
    pa: "ਪੰਜਾਬੀ"
    pl: "Polski"
    pt-BR: "Português (Brasil)"
    pt-PT: "Português (Europeu)"
    ro: "Română"
    ru: "Русский"
    sv: "Svenska"
    ta: "தமிழ்"
    th: "ภาษาไทย"
    tr: "Türkçe"
    uk: "Українська"
    ur: "اردو"
    vi: "Tiếng Việt"
    zh-CN: "中文（简体）"
    zh-TW: "中文（傳統）"
   defer:
    mo: "ro"
    nb: "no"
    zh-HK: "zh-TW"
    zh-MO: "zh-TW"
   assume:
    af: "af-ZA"
    bg: "bg-BG"
    bn: "bn-BD"
    cs: "cs-CZ"
    de: "de-DE"
    en: "en-AU"
    es: "es-ES"
    fa: "fa-IR"
    fr: "fr-FR"
    he: "he-IL"
    hi: "hi-IN"
    id: "id-ID"
    it: "it-IT"
    ja: "ja-JP"
    ko: "ko-KR"
    lv: "lv-LV"
    mo: "ro-MO"
    ms: "ms-MY"
    nb: "nb-NO"
    nl: "nl-NL"
    no: "nb-NO"
    pa: "pa-IN"
    pl: "pl-PL"
    pt: "pt-BR"
    ro: "ro-RO"
    ru: "ru-RU"
    sv: "sv-SE"
    ta: "ta-IN"
    th: "th-TH"
    tr: "tr-TR"
    uk: "uk-UA"
    ur: "ur-PK"
    vi: "vi-VN"
    zh: "zh-CN"
  lang_override:
   type: "bool"
   default: true
  numbers:
   type: "string"
   default: "Latin-1"
   choices:
    Arabic-1: "١٢٣٤٥٦٧٫٨٩"
    Arabic-2: "١٬٢٣٤٬٥٦٧٫٨٩"
    Arabic-3: "۱٬۲۳۴٬۵۶۷٫۸۹"
    Arabic-4: "۱۲٬۳۴٬۵۶۷٫۸۹"
    Armenian: "Ռ̅Մ̅Լ̅ՏՇԿԷ"
    Base-12: "4b6547.a8"
    Base-16: "12d687.e3"
    Bengali-1: "১২,৩৪,৫৬৭.৮৯"
    Burmese-1: "၁၂၃၄၅၆၇.၈၉"
    China-1: "123,4567.89"
    Chinese-Simplified: "一百二十三万四千五百六十七点八九"
    Chinese-Simplified-Financial: "壹佰贰拾叁萬肆仟伍佰陆拾柒点捌玖"
    Chinese-Traditional: "一百二十三萬四千五百六十七點八九"
    Chinese-Traditional-Financial: "壹佰貳拾叄萬肆仟伍佰陸拾柒點捌玖"
    Fullwidth: "１２３４５６７.８９"
    Hebrew: "א׳׳ב׳קג׳יד׳ךסז"
    India-1: "12,34,567.89"
    India-2: "१२,३४,५६७.८९"
    India-3: "૧૨,૩૪,૫૬૭.૮૯"
    India-4: "੧੨,੩੪,੫੬੭.੮੯"
    India-5: "೧೨,೩೪,೫೬೭.೮೯"
    India-6: "౧౨,౩౪,౫౬౭.౮౯"
    Japanese: "百万二十万三万四千五百六十七・八九分"
    Javanese: "꧑꧒꧓꧔꧕꧖꧗.꧘꧙"
    Khmer-1: "១.២៣៤.៥៦៧,៨៩"
    Lao-1: "໑໒໓໔໕໖໗.໘໙"
    Latin-1: "1,234,567.89"
    Latin-2: "1 234 567.89"
    Latin-3: "1.234.567,89"
    Latin-4: "1 234 567,89"
    Latin-5: "1,234,567·89"
    Mayan: "𝋧𝋮𝋦𝋨𝋧.𝋱𝋰"
    Mongolian: "᠑᠒᠓᠔᠕᠖᠗.᠘᠙"
    NoSep-1: "1234567.89"
    NoSep-2: "1234567,89"
    Odia: "୧୨୩୪୫୬୭.୮୯"
    Roman: "M̅C̅C̅X̅X̅X̅I̅V̅DLXVII"
    SDN-Dwiggins: "4E6,547;X8"
    SDN-Pitman: "4↋6,547;↊8"
    Tamil: "௲௲௨௱௲௩௰௲௪௲௫௱௬௰௭"
    Thai-1: "๑,๒๓๔,๕๖๗.๘๙"
    Thai-2: "๑๒๓๔๕๖๗.๘๙"
    Tibetan: "༡༢༣༤༥༦༧.༨༩"
  emailaddr:
   type: "string"
   default: ""
  emailaddr_display_style:
   type: "string"
   default: "default"
   choices:
    default: "field.Clickable link"
    noclick: "field.Non-clickable text"
  ban_override:
   type: "int"
   default: 200
   choices:
    200: *200
    403: *403
    410: *410
    418: *418
    451: *451
    503: *503
   style: "radio"
  default_dns:
   type: "string"
   default: |
    8.8.8.8
    8.8.4.4
   hints: "hints_default_dns"
  default_algo:
   type: "string"
   default: "PASSWORD_DEFAULT"
   choices:
    PASSWORD_DEFAULT: "PASSWORD_DEFAULT"
    PASSWORD_BCRYPT: "PASSWORD_BCRYPT"
    PASSWORD_ARGON2I: "PASSWORD_ARGON2I"
    PASSWORD_ARGON2ID: "PASSWORD_ARGON2ID (PHP >= 7.3.0)"
   choice_filter: "filterByDefined"
  statistics:
   type: "checkbox"
   default: |
    Blocked-IPv4
    Blocked-IPv6
    Blocked-Other
    Banned-IPv4
    Banned-IPv6
    CAPTCHAs-Failed
    CAPTCHAs-Passed
    Reported-IPv4-OK
    Reported-IPv4-Failed
    Reported-IPv6-OK
    Reported-IPv6-Failed
   choices:
    Blocked-IPv4: "{label.Requests blocked} – IPv4"
    Blocked-IPv6: "{label.Requests blocked} – IPv6"
    Blocked-Other: "{label.Requests blocked} – {label.Other}"
    Banned-IPv4: "{label.Requests banned} – IPv4"
    Banned-IPv6: "{label.Requests banned} – IPv6"
    Passed-IPv4: "{label.Requests passed} – IPv4"
    Passed-IPv6: "{label.Requests passed} – IPv6"
    Passed-Other: "{label.Requests passed} – {label.Other}"
    CAPTCHAs-Failed: "{label.CAPTCHA attempts} – {state_failed}"
    CAPTCHAs-Passed: "{label.CAPTCHA attempts} – {state_passed}"
    Reported-IPv4-OK: "{label.Requests reported to external APIs} – IPv4 – {field.OK}"
    Reported-IPv4-Failed: "{label.Requests reported to external APIs} – IPv4 – {response.Failed}"
    Reported-IPv6-OK: "{label.Requests reported to external APIs} – IPv6 – {field.OK}"
    Reported-IPv6-Failed: "{label.Requests reported to external APIs} – IPv6 – {response.Failed}"
   hints: "hints_aux_stats"
  force_hostname_lookup:
   type: "bool"
   default: false
  allow_gethostbyaddr_lookup:
   type: "bool"
   default: true
   hints: "hints_ipv6_on_32bit"
  disabled_channels:
   type: "checkbox"
   default: ""
   choices:
    GitHub: "GitHub"
    BitBucket: "BitBucket"
    GoogleDNS: "GoogleDNS"
  default_timeout:
   type: "int"
   default: 12
   preview: "seconds"
  sensitive:
   type: "string"
   default: "~/(?:comprofiler|user)/(?:login|register)|[/=](?:activate|contact|login|regist(?:er|ration)|signup)|act(?:ion)?=(?:edit|reg)|(?:activate|con(?:firm|tact)|login|newuser|reg(?:ist(?:er|ration))?|signin|signup)(?:\.php|[/=])|special:userlogin&|verifyemail|wp-comments-post~i"
 components:
  ipv4:
   type: "string"
   default: |
    ipv4.dat
    ipv4_bogons.dat
    ipv4_isps.dat
    ipv4_nonblocking.dat
    ipv4_other.dat
  ipv6:
   type: "string"
   default: |
    ipv6.dat
    ipv6_bogons.dat
    ipv6_isps.dat
    ipv6_nonblocking.dat
    ipv6_other.dat
  modules:
   type: "string"
   default: |
    botua.php
    cookies.php
  imports:
   type: "string"
   default: |
    bypasses.yml
  events:
   type: "string"
   default: ""
 logging:
  standard_log:
   type: "string"
   default: ""
  apache_style_log:
   type: "string"
   default: ""
  serialised_log:
   type: "string"
   default: ""
  error_log:
   type: "string"
   default: ""
  outbound_request_log:
   type: "string"
   default: ""
  report_log:
   type: "string"
   default: ""
  truncate:
   type: "kb"
   default: "0KB"
  log_rotation_limit:
   type: "int"
   default: 0
  log_rotation_action:
   type: "string"
   default: "Delete"
   choices:
    Delete: "field.log_rotation_delete"
    Archive: "field.log_rotation_archive"
   style: "radio"
  log_banned_ips:
   type: "bool"
   default: true
  log_sanitisation:
   type: "bool"
   default: false
 frontend:
  frontend_log:
   type: "string"
   default: ""
  signatures_update_event_log:
   type: "string"
   default: ""
  max_login_attempts:
   type: "int"
   default: 5
  theme:
   type: "string"
   default: "default"
   preview: "allow_other"
   allow_other: true
   choices:
    default: "Default"
    bluemetal: "Blue Metal"
    fullmoon: "Full Moon"
    moss: "Moss"
    primer: "Primer"
    primerdark: "Primer Dark"
    rbi: "Red-Blue Inverted"
    slate: "Slate"
   choice_filter: "filterThemeFrontEnd"
  magnification:
   type: "float"
   step: "any"
   default: 1
  custom_header:
   type: "string"
   default: ""
  custom_footer:
   type: "string"
   default: ""
  remotes:
   type: "string"
   default: |
    https://raw.githubusercontent.com/CIDRAM/CIDRAM/v3/vault/installed.yml
    https://raw.githubusercontent.com/CIDRAM/CIDRAM-Extras/master/modules/modules.yml
  enable_two_factor:
   type: "bool"
   default: false
 signatures:
  shorthand:
   type: "checkbox"
   default: |
    Attacks:Block
    Attacks:Profile
    Bogon:Profile
    Cloud:Block
    Cloud:Profile
    Generic:Block
    Generic:Profile
    Legal:Block
    Legal:Profile
    Malware:Block
    Malware:Profile
    Proxy:Profile
    Spam:Block
    Spam:Profile
    Banned:Suppress
    RL:Suppress
    Other:Block
    Other:Profile
   labels:
    Block: "checkbox.Block it"
    Profile: "checkbox.Profile it"
    Suppress: "checkbox.When blocked, suppress output template"
   choices:
    Attacks: "Short_Attacks"
    Bogon: "⁰ {Short_Bogon}"
    Cloud: "Short_Cloud"
    Generic: "Short_Generic"
    Legal: "¹ {Short_Legal}"
    Malware: "Short_Malware"
    Proxy: "² {Short_Proxy}"
    Spam: "Short_Spam"
    Banned: "³ {Short_Banned}"
    BadIP: "³ {Short_BadIP}"
    RL: "³ {Short_RL}"
    Other: "⁴ {label.Other}"
   nonsense: |
    Banned:Block
    Banned:Profile
    BadIP:Block
    BadIP:Profile
    RL:Block
    RL:Profile
   hints: "hints_shorthand"
  default_tracktime:
   type: "duration"
   default: "7d0°0′0″"
  infraction_limit:
   type: "int"
   default: 10
  tracking_override:
   type: "bool"
   default: true
 verification:
  search_engines:
   type: "checkbox"
   default: |
    Amazonbot:Verify
    Amazonbot:BlockNegatives
    Amazonbot:SingleHitBypass
    Amazonbot:UntrackPositives
    Applebot:Verify
    Applebot:BlockNegatives
    Applebot:UntrackPositives
    Baidu:Verify
    Baidu:BlockNegatives
    Baidu:UntrackPositives
    Bingbot:Verify
    Bingbot:BlockNegatives
    Bingbot:SingleHitBypass
    Bingbot:UntrackPositives
    DuckDuckBot:Verify
    DuckDuckBot:BlockNegatives
    DuckDuckBot:SingleHitBypass
    DuckDuckBot:UntrackPositives
    Googlebot:Verify
    Googlebot:BlockNegatives
    Googlebot:SingleHitBypass
    Googlebot:UntrackPositives
    MojeekBot:Verify
    MojeekBot:BlockNegatives
    MojeekBot:UntrackPositives
    Neevabot:Verify
    Neevabot:BlockNegatives
    Neevabot:UntrackPositives
    PetalBot:Verify
    PetalBot:BlockNegatives
    PetalBot:UntrackPositives
    Qwantify:Verify
    Qwantify:BlockNegatives
    Qwantify:UntrackPositives
    SeznamBot:Verify
    SeznamBot:BlockNegatives
    SeznamBot:UntrackPositives
    Sogou:Verify
    Sogou:BlockNegatives
    Sogou:UntrackPositives
    Yahoo:Verify
    Yahoo:BlockNegatives
    Yahoo:UntrackPositives
    Yandex:Verify
    Yandex:BlockNegatives
    Yandex:UntrackPositives
    YoudaoBot:Verify
    YoudaoBot:BlockNegatives
    YoudaoBot:UntrackPositives
   labels:
    Verify: "checkbox.Attempt to verify"
    BlockNegatives: "checkbox.Block negatives"
    BlockNonVerified: "checkbox.Block non-verified requests"
    SingleHitBypass: "checkbox.Allow single-hit bypasses"
    UntrackPositives: "checkbox.Untrack positives"
   choices:
    Amazonbot: "Amazonbot"
    Applebot: "Applebot"
    Baidu: "* Baiduspider/百度"
    Bingbot: "* Bingbot"
    DuckDuckBot: "* DuckDuckBot"
    Googlebot: "* Googlebot"
    MojeekBot: "MojeekBot"
    Neevabot: "* Neevabot"
    PetalBot: "* PetalBot"
    Qwantify: "Qwantify/Bleriot"
    SeznamBot: "SeznamBot"
    Sogou: "* Sogou/搜狗"
    Yahoo: "Yahoo/Slurp"
    Yandex: "* Yandex/Яндекс"
    YoudaoBot: "YoudaoBot"
   hints:
    - "hints_verification"
    - "hints_has_bypass"
  social_media:
   type: "checkbox"
   default: |
    Embedly:Verify
    Embedly:BlockNegatives
    Facebook:Verify
    Facebook:BlockNegatives
    Facebook:UntrackPositives
    Pinterest:Verify
    Pinterest:BlockNegatives
    Pinterest:UntrackPositives
    Snapchat:Verify
    Snapchat:BlockNegatives
    Snapchat:UntrackPositives
    Twitterbot:UntrackPositives
   labels:
    Verify: "checkbox.Attempt to verify"
    BlockNegatives: "checkbox.Block negatives"
    BlockNonVerified: "checkbox.Block non-verified requests"
    SingleHitBypass: "checkbox.Allow single-hit bypasses"
    UntrackPositives: "checkbox.Untrack positives"
   choices:
    Embedly: "* Embedly"
    Facebook: "** Facebook"
    Pinterest: "* Pinterest"
    Snapchat: "* Snapchat"
    Twitterbot: "*!! Twitterbot"
   hints:
    - "hints_verification"
    - "hints_has_bypass"
    - "hints_asnlookup"
    - "hints_cause_fp iMessage"
  other:
   type: "checkbox"
   default: |
    AdSense:Verify
    AdSense:BlockNegatives
    AdSense:SingleHitBypass
    AdSense:UntrackPositives
    AmazonAdBot:Verify
    AmazonAdBot:BlockNegatives
    AmazonAdBot:SingleHitBypass
    AmazonAdBot:UntrackPositives
    ChatGPT-User:BlockNonVerified
    GPTBot:BlockNonVerified
    Grapeshot:Verify
    Grapeshot:BlockNegatives
    Grapeshot:UntrackPositives
   labels:
    Verify: "checkbox.Attempt to verify"
    BlockNegatives: "checkbox.Block negatives"
    BlockNonVerified: "checkbox.Block non-verified requests"
    SingleHitBypass: "checkbox.Allow single-hit bypasses"
    UntrackPositives: "checkbox.Untrack positives"
   choices:
    AdSense: "AdSense"
    AmazonAdBot: "* AmazonAdBot"
    ChatGPT-User: "!! ChatGPT-User"
    GPTBot: "!! GPTBot"
    Grapeshot: "* Oracle Data Cloud Crawler (Grapeshot)"
   hints:
    - "hints_verification"
    - "hints_has_bypass"
    - "hints_want_to_block"
  adjust:
   type: "checkbox"
   default: |
    Negatives:ReCaptcha
    Negatives:HCaptcha
    NonVerified:ReCaptcha
    NonVerified:HCaptcha
   labels:
    ReCaptcha: "checkbox.Suppress ReCaptcha"
    HCaptcha: "checkbox.Suppress HCaptcha"
   choices:
    Negatives: "checkbox.Blocked negatives"
    NonVerified: "checkbox.Blocked non-verified"
 recaptcha:
  usemode:
   type: "int"
   default: 0
   choices:
    0: "{label.Never} !!!"
    1: "label.Only when blocked, within the signature limit, and not banned"
    2: "label.Only when blocked, specially marked for use, within the signature limit, and not banned"
    3: "label.Only when within the signature limit, and not banned (regardless of whether blocked)"
    4: "label.Only when not blocked"
    5: "label.Only when not blocked, or when specially marked for use, within the signature limit, and not banned"
    6: "label.Only when not blocked, at sensitive page requests"
   style: "radio"
  lockip:
   type: "bool"
   default: false
  lockuser:
   type: "bool"
   default: true
  sitekey:
   type: "string"
   default: ""
   See also:
    Invisible reCAPTCHA: &ReCaptchaInvisible "https://developers.google.com/recaptcha/docs/invisible"
    reCAPTCHA v2: &ReCaptchaV2 "https://developers.google.com/recaptcha/docs/display"
    reCAPTCHA v3: &ReCaptchaV3 "https://developers.google.com/recaptcha/docs/v3"
  secret:
   type: "string"
   default: ""
   See also:
    Invisible reCAPTCHA: *ReCaptchaInvisible
    reCAPTCHA v2: *ReCaptchaV2
    reCAPTCHA v3: *ReCaptchaV3
  expiry:
   type: "float"
   step: "any"
   default: 720
   preview: "hours"
  recaptcha_log:
   type: "string"
   default: ""
  signature_limit:
   type: "int"
   default: 1
  api:
   type: "string"
   default: "V2"
   choices:
    V2: "V2 ({label.Checkbox})"
    Invisible: "V2 ({label.Invisible})"
  show_cookie_warning:
   type: "bool"
   default: true
  show_api_message:
   type: "bool"
   default: true
  nonblocked_status_code:
   type: "int"
   default: 200
   choices:
    200: *200
    403: *403
    418: *418
    429: &429 "label.429 Too Many Requests"
    451: *451
   style: "radio"
 hcaptcha:
  usemode:
   type: "int"
   default: 0
   choices:
    0: "{label.Never} !!!"
    1: "label.Only when blocked, within the signature limit, and not banned"
    2: "label.Only when blocked, specially marked for use, within the signature limit, and not banned"
    3: "label.Only when within the signature limit, and not banned (regardless of whether blocked)"
    4: "label.Only when not blocked"
    5: "label.Only when not blocked, or when specially marked for use, within the signature limit, and not banned"
    6: "label.Only when not blocked, at sensitive page requests"
   style: "radio"
  lockip:
   type: "bool"
   default: false
  lockuser:
   type: "bool"
   default: true
  sitekey:
   type: "string"
   default: ""
   See also:
    HCaptcha Dashboard: &HCaptchaDashboard "https://dashboard.hcaptcha.com/overview"
  secret:
   type: "string"
   default: ""
   See also:
    HCaptcha Dashboard: *HCaptchaDashboard
  expiry:
   type: "float"
   step: "any"
   default: 720
   preview: "hours"
  hcaptcha_log:
   type: "string"
   default: ""
  signature_limit:
   type: "int"
   default: 1
  api:
   type: "string"
   default: "V1"
   choices:
    V1: "V1"
    Invisible: "V1 ({label.Invisible})"
  show_cookie_warning:
   type: "bool"
   default: true
  show_api_message:
   type: "bool"
   default: true
  nonblocked_status_code:
   type: "int"
   default: 200
   choices:
    200: *200
    403: *403
    418: *418
    429: *429
    451: *451
   style: "radio"
 legal:
  pseudonymise_ip_addresses:
   type: "bool"
   default: true
  privacy_policy:
   type: "url"
   default: ""
   autocomplete: "url"
 template_data:
  theme:
   type: "string"
   default: "default"
   preview: "allow_other"
   allow_other: true
   choices:
    default: "Default"
    bluemetal: "Blue Metal"
    fullmoon: "Full Moon"
    moss: "Moss"
    primer: "Primer"
    primerdark: "Primer Dark"
    rbi: "Red-Blue Inverted"
    slate: "Slate"
   choice_filter: "filterThemeCore"
   lightdark:
    default: "light"
    bluemetal: "dark"
    fullmoon: "dark"
    moss: "light"
    primer: "light"
    primerdark: "dark"
    rbi: "light"
    slate: "dark"
  magnification:
   type: "float"
   step: "any"
   default: 1
  css_url:
   type: "url"
   default: ""
   autocomplete: "url"
  block_event_title:
   type: "string"
   default: "CIDRAM"
   choices:
    CIDRAM: "CIDRAM"
    denied: "denied"
   preview: "allow_other"
   allow_other: true
  captcha_title:
   type: "string"
   default: "CIDRAM"
   choices:
    CIDRAM: "CIDRAM"
   preview: "allow_other"
   allow_other: true
  custom_header:
   type: "string"
   default: ""
  custom_footer:
   type: "string"
   default: ""
 rate_limiting:
  max_bandwidth:
   type: "kb"
   default: "0KB"
  max_requests:
   type: "int"
   default: 0
  precision_ipv4:
   type: "int"
   default: 32
   min: 1
   max: 32
  precision_ipv6:
   type: "int"
   default: 128
   min: 1
   max: 128
  allowance_period:
   type: "duration"
   default: "0°0′0″"
  exceptions:
   type: "checkbox"
   default: "FE"
   choices:
    Whitelisted: "field.Whitelisted requests"
    Verified: "field.Verified search engine and social media requests"
    FE: "field.Requests to the CIDRAM front-end"
  segregate:
   type: "bool"
   default: false
 supplementary_cache_options:
  prefix:
   type: "string"
   default: "CIDRAM_"
  enable_apcu:
   type: "bool"
   default: true
   required:
    apcu: "APCu"
  enable_memcached:
   type: "bool"
   default: false
   required:
    memcached: "Memcached"
  enable_redis:
   type: "bool"
   default: false
   required:
    redis: "Redis"
  enable_pdo:
   type: "bool"
   default: false
   required:
    pdo: "PDO"
  memcached_host:
   type: "string"
   default: "localhost"
  memcached_port:
   type: "int"
   default: 11211
   min: 0
   max: 65535
  redis_host:
   type: "string"
   default: "localhost"
  redis_port:
   type: "int"
   default: 6379
   min: 0
   max: 65535
  redis_timeout:
   type: "float"
   step: "any"
   default: 2.5
  pdo_dsn:
   type: "string"
   default: "mysql:dbname=cidram;host=localhost;port=3306"
   hints: "hints_pdo_dsn"
  pdo_username:
   type: "string"
   default: ""
   autocomplete: "username"
  pdo_password:
   type: "string"
   default: ""
   autocomplete: "current-password"
Provide:
 Initialise SimulateBlockEvent:
  CIDRAM:
   Aux Redirect: ""
   Aux Status Code: 200
   Banned: false
   Hostname: ""
   Suppress logging: false
   Suppress output template: false
   ThisStatusHTTP: 200
   Trackable: null
   Tracking options override: ""
  Configuration:
   hcaptcha: {enabled: false, forcibly_disabled: false}
   recaptcha: {enabled: false, forcibly_disabled: false}
 Auxiliary Rules:
  Modes:
   - "Whitelist"
   - "Greylist"
   - "Block"
   - "Bypass"
   - "Don't log"
   - "Redirect"
   - "Run"
   - "Profile"
  Sources:
   BlockInfo:
    IPAddr: "field.IP address"
    IPAddrResolved: "field.IP address (resolved)"
    Query: "field.Query"
    Referrer: "field.Referrer"
    UA: "field.User agent"
    UALC: "field.User agent (lower-case)"
    SignatureCount: "field.Signatures count"
    Signatures: "field.Signatures reference"
    WhyReason: "field.Why blocked"
    ReasonMessage: "field.Why blocked (detailed)"
    rURI: "field.Reconstructed URI"
    Infractions: "field.Infractions"
    ASNLookup: "field.ASN lookup"
    CCLookup: "field.Country code lookup"
    Verified: "field.Verified identity"
    Expired: "state_expired"
    Ignored: "state_ignored"
    Request_Method: "field.Request method"
    Protocol: "field.Protocol"
   Profiles: "field.Profile"
   CIDRAM:
    Hostname: "field.Hostname"
    Factors: "CIDR"
  Flags:
   reCAPTCHA:
    Mark for use with reCAPTCHA:
     Label: "label.aux_special_recaptcha_mark"
     Sets:
      Configuration:
       recaptcha: {enabled: true}
    Forcibly disable reCAPTCHA:
     Label: "label.aux_special_recaptcha_disable"
     Sets:
      Configuration:
       recaptcha: {usemode: 0, forcibly_disabled: true}
   HCaptcha:
    Mark for use with HCaptcha:
     Label: "label.aux_special_hcaptcha_mark"
     Sets:
      Configuration:
       hcaptcha: {enabled: true}
    Forcibly disable HCaptcha:
     Label: "label.aux_special_hcaptcha_disable"
     Sets:
      Configuration:
       hcaptcha: {usemode: 0, forcibly_disabled: true}
   Output template:
    Label: "label.aux_special_suppress"
    Suppress output template:
     Label: "label.aux_special_suppress"
     Sets:
      CIDRAM: {Suppress output template: true}
   Logging:
    Label: "label.aux_special_suppress_logging"
    Suppress logging:
     Label: "label.aux_special_suppress_logging"
     Sets:
      CIDRAM: {Suppress logging: true}
   IP Tracking:
    Label: "link.IP Tracking"
    Forcibly enable IP tracking:
     Label: "label.aux_special_ip_tracking_enable"
     Sets:
      CIDRAM: {Trackable: true}
    Forcibly disable IP tracking:
     Label: "label.aux_special_ip_tracking_disable"
     Sets:
      CIDRAM: {Trackable: false}
   Values for IP tracking:
    Label: "label.Values for IP tracking"
    Enforce extended IP tracking options:
     Label: "label.aux_special_tracking_extended"
     Sets:
      CIDRAM: {Tracking options override: "extended"}
    Enforce default IP tracking options:
     Label: "label.aux_special_tracking_default"
     Sets:
      CIDRAM: {Tracking options override: "default"}
   Statistics:
    Label: "link.Statistics"
    Track this rule:
     Label: "label.aux_special_statistics"
   Disable this rule:
    Label: "label.aux_special_disable"
    Disable this rule:
     Label: "label.aux_special_disable"
Links:
 AbuseIPDB: "<a href="https://abuseipdb.com/" dir="ltr" hreflang="en-US" rel="noopener noreferrer external">AbuseIPDB</a>"
 BGPView: "<a href="https://bgpview.io/" dir="ltr" hreflang="en-US" rel="noopener noreferrer external">BGPView</a>"
 Chart:
  js: "<a href="https://github.com/chartjs/Chart.js" dir="ltr" hreflang="en-US" rel="noopener noreferrer external">Chart.js</a>"
 CIDRAM:
  Extras: "<a href="https://github.com/CIDRAM/CIDRAM-Extras" dir="ltr" hreflang="en" rel="noopener noreferrer external">CIDRAM/CIDRAM-Extras</a>"
  Issues: "<a href="https://github.com/CIDRAM/CIDRAM/issues" dir="ltr" hreflang="en" rel="noopener noreferrer external">CIDRAM/CIDRAM/issues</a>"
  WordPress: "<a href="https://wordpress.org/plugins/cidram/" dir="ltr" hreflang="en" rel="noopener noreferrer external">CIDRAM@WordPress.org</a>"
 Discussions: "https://github.com/CIDRAM/CIDRAM/discussions"
 Documentation: "https://cidram.github.io/\#documentation"
 IP-API: "<a href="https://ip-api.com/" dir="ltr" hreflang="en-US" rel="noopener noreferrer external">IP-API</a>"
 ISO:
  3166: "<a href="https://en.wikipedia.org/wiki/List_of_ISO_3166_country_codes" dir="ltr" hreflang="en-US" rel="nofollow noopener noreferrer external" target="_blank">ISO-3166</a>"
 MIT: "<a href="https://opensource.org/licenses/MIT" dir="ltr" hreflang="en-US" rel="noopener noreferrer external">MIT</a>"
 PHP:
  Earth:
   Facebook: "<a href="https://www.facebook.com/groups/2204685680/" dir="ltr" rel="noopener noreferrer external">PHP.earth@Facebook</a>"
   Website: "<a href="https://php.earth/" dir="ltr" hreflang="en" rel="noopener noreferrer external">PHP.earth</a>"
 PHPMailer:
  License: "<a href="https://github.com/PHPMailer/PHPMailer/blob/master/LICENSE" dir="ltr" hreflang="en-US" rel="noopener external">LGPLv2.1</a>"
  PHPMailer: "<a href="https://github.com/PHPMailer/PHPMailer" dir="ltr" hreflang="en-US" rel="noopener noreferrer external">PHPMailer</a>"
 RFC2324: "<a href="https://tools.ietf.org/html/rfc2324" dir="ltr" hreflang="en-US" rel="noopener noreferrer external">RFC 2324</a>"
 SFS: "<a href="https://www.stopforumspam.com/" dir="ltr" rel="noopener noreferrer external">Stop Forum Spam</a>"
 Symfony:
  Intl/Idn: "<a href="https://github.com/symfony/polyfill-intl-idn" dir="ltr" hreflang="en" rel="noopener noreferrer external">Intl/Idn</a>"
 Website: "<a href="https://cidram.github.io/" hreflang="en-US" rel="noopener external"><span class="navicon link"></span>cidram.github.io</a>"
