# WARNING ABOUT GENERATED CODE
#
# This file is generated. See the contributing guide for more information:
# https://github.com/aws/aws-sdk-ruby/blob/version-3/CONTRIBUTING.md
#
# WARNING ABOUT GENERATED CODE

module Aws
  module WAFV2
    class Client < ::Seahorse::Client::Base
      include ::Aws::ClientStubs

      # https://docs.aws.amazon.com/sdk-for-ruby/v3/api/Aws/WAFV2/Client.html#initialize-instance_method
      def self.new: (
                      ?credentials: untyped,
                      ?region: String,
                      ?access_key_id: String,
                      ?account_id: String,
                      ?active_endpoint_cache: bool,
                      ?adaptive_retry_wait_to_fill: bool,
                      ?client_side_monitoring: bool,
                      ?client_side_monitoring_client_id: String,
                      ?client_side_monitoring_host: String,
                      ?client_side_monitoring_port: Integer,
                      ?client_side_monitoring_publisher: untyped,
                      ?convert_params: bool,
                      ?correct_clock_skew: bool,
                      ?defaults_mode: String,
                      ?disable_host_prefix_injection: bool,
                      ?disable_request_compression: bool,
                      ?endpoint: String,
                      ?endpoint_cache_max_entries: Integer,
                      ?endpoint_cache_max_threads: Integer,
                      ?endpoint_cache_poll_interval: Integer,
                      ?endpoint_discovery: bool,
                      ?ignore_configured_endpoint_urls: bool,
                      ?log_formatter: untyped,
                      ?log_level: Symbol,
                      ?logger: untyped,
                      ?max_attempts: Integer,
                      ?profile: String,
                      ?request_min_compression_size_bytes: Integer,
                      ?retry_backoff: Proc,
                      ?retry_base_delay: Float,
                      ?retry_jitter: (:none | :equal | :full | ^(Integer) -> Integer),
                      ?retry_limit: Integer,
                      ?retry_max_delay: Integer,
                      ?retry_mode: ("legacy" | "standard" | "adaptive"),
                      ?sdk_ua_app_id: String,
                      ?secret_access_key: String,
                      ?session_token: String,
                      ?sigv4a_signing_region_set: Array[String],
                      ?simple_json: bool,
                      ?stub_responses: untyped,
                      ?telemetry_provider: Aws::Telemetry::TelemetryProviderBase,
                      ?token_provider: untyped,
                      ?use_dualstack_endpoint: bool,
                      ?use_fips_endpoint: bool,
                      ?validate_params: bool,
                      ?endpoint_provider: untyped,
                      ?http_proxy: String,
                      ?http_open_timeout: (Float | Integer),
                      ?http_read_timeout: (Float | Integer),
                      ?http_idle_timeout: (Float | Integer),
                      ?http_continue_timeout: (Float | Integer),
                      ?ssl_timeout: (Float | Integer | nil),
                      ?http_wire_trace: bool,
                      ?ssl_verify_peer: bool,
                      ?ssl_ca_bundle: String,
                      ?ssl_ca_directory: String,
                      ?ssl_ca_store: String,
                      ?on_chunk_received: Proc,
                      ?on_chunk_sent: Proc,
                      ?raise_response_errors: bool
                    ) -> instance
                  | (?Hash[Symbol, untyped]) -> instance


      interface _AssociateWebACLResponseSuccess
        include ::Seahorse::Client::_ResponseSuccess[Types::AssociateWebACLResponse]
      end
      # https://docs.aws.amazon.com/sdk-for-ruby/v3/api/Aws/WAFV2/Client.html#associate_web_acl-instance_method
      def associate_web_acl: (
                               web_acl_arn: ::String,
                               resource_arn: ::String
                             ) -> _AssociateWebACLResponseSuccess
                           | (Hash[Symbol, untyped] params, ?Hash[Symbol, untyped] options) -> _AssociateWebACLResponseSuccess

      interface _CheckCapacityResponseSuccess
        include ::Seahorse::Client::_ResponseSuccess[Types::CheckCapacityResponse]
        def capacity: () -> ::Integer
      end
      # https://docs.aws.amazon.com/sdk-for-ruby/v3/api/Aws/WAFV2/Client.html#check_capacity-instance_method
      def check_capacity: (
                            scope: ("CLOUDFRONT" | "REGIONAL"),
                            rules: Array[
                              {
                                name: ::String,
                                priority: ::Integer,
                                statement: {
                                  byte_match_statement: {
                                    search_string: ::String,
                                    field_to_match: {
                                      single_header: {
                                        name: ::String
                                      }?,
                                      single_query_argument: {
                                        name: ::String
                                      }?,
                                      all_query_arguments: {
                                      }?,
                                      uri_path: {
                                      }?,
                                      query_string: {
                                      }?,
                                      body: {
                                        oversize_handling: ("CONTINUE" | "MATCH" | "NO_MATCH")?
                                      }?,
                                      method: {
                                      }?,
                                      json_body: {
                                        match_pattern: {
                                          all: {
                                          }?,
                                          included_paths: Array[::String]?
                                        },
                                        match_scope: ("ALL" | "KEY" | "VALUE"),
                                        invalid_fallback_behavior: ("MATCH" | "NO_MATCH" | "EVALUATE_AS_STRING")?,
                                        oversize_handling: ("CONTINUE" | "MATCH" | "NO_MATCH")?
                                      }?,
                                      headers: {
                                        match_pattern: {
                                          all: {
                                          }?,
                                          included_headers: Array[::String]?,
                                          excluded_headers: Array[::String]?
                                        },
                                        match_scope: ("ALL" | "KEY" | "VALUE"),
                                        oversize_handling: ("CONTINUE" | "MATCH" | "NO_MATCH")
                                      }?,
                                      cookies: {
                                        match_pattern: {
                                          all: {
                                          }?,
                                          included_cookies: Array[::String]?,
                                          excluded_cookies: Array[::String]?
                                        },
                                        match_scope: ("ALL" | "KEY" | "VALUE"),
                                        oversize_handling: ("CONTINUE" | "MATCH" | "NO_MATCH")
                                      }?,
                                      header_order: {
                                        oversize_handling: ("CONTINUE" | "MATCH" | "NO_MATCH")
                                      }?,
                                      ja3_fingerprint: {
                                        fallback_behavior: ("MATCH" | "NO_MATCH")
                                      }?
                                    },
                                    text_transformations: Array[
                                      {
                                        priority: ::Integer,
                                        type: ("NONE" | "COMPRESS_WHITE_SPACE" | "HTML_ENTITY_DECODE" | "LOWERCASE" | "CMD_LINE" | "URL_DECODE" | "BASE64_DECODE" | "HEX_DECODE" | "MD5" | "REPLACE_COMMENTS" | "ESCAPE_SEQ_DECODE" | "SQL_HEX_DECODE" | "CSS_DECODE" | "JS_DECODE" | "NORMALIZE_PATH" | "NORMALIZE_PATH_WIN" | "REMOVE_NULLS" | "REPLACE_NULLS" | "BASE64_DECODE_EXT" | "URL_DECODE_UNI" | "UTF8_TO_UNICODE")
                                      },
                                    ],
                                    positional_constraint: ("EXACTLY" | "STARTS_WITH" | "ENDS_WITH" | "CONTAINS" | "CONTAINS_WORD")
                                  }?,
                                  sqli_match_statement: {
                                    field_to_match: {
                                      single_header: {
                                        name: ::String
                                      }?,
                                      single_query_argument: {
                                        name: ::String
                                      }?,
                                      all_query_arguments: {
                                      }?,
                                      uri_path: {
                                      }?,
                                      query_string: {
                                      }?,
                                      body: {
                                        oversize_handling: ("CONTINUE" | "MATCH" | "NO_MATCH")?
                                      }?,
                                      method: {
                                      }?,
                                      json_body: {
                                        match_pattern: {
                                          all: {
                                          }?,
                                          included_paths: Array[::String]?
                                        },
                                        match_scope: ("ALL" | "KEY" | "VALUE"),
                                        invalid_fallback_behavior: ("MATCH" | "NO_MATCH" | "EVALUATE_AS_STRING")?,
                                        oversize_handling: ("CONTINUE" | "MATCH" | "NO_MATCH")?
                                      }?,
                                      headers: {
                                        match_pattern: {
                                          all: {
                                          }?,
                                          included_headers: Array[::String]?,
                                          excluded_headers: Array[::String]?
                                        },
                                        match_scope: ("ALL" | "KEY" | "VALUE"),
                                        oversize_handling: ("CONTINUE" | "MATCH" | "NO_MATCH")
                                      }?,
                                      cookies: {
                                        match_pattern: {
                                          all: {
                                          }?,
                                          included_cookies: Array[::String]?,
                                          excluded_cookies: Array[::String]?
                                        },
                                        match_scope: ("ALL" | "KEY" | "VALUE"),
                                        oversize_handling: ("CONTINUE" | "MATCH" | "NO_MATCH")
                                      }?,
                                      header_order: {
                                        oversize_handling: ("CONTINUE" | "MATCH" | "NO_MATCH")
                                      }?,
                                      ja3_fingerprint: {
                                        fallback_behavior: ("MATCH" | "NO_MATCH")
                                      }?
                                    },
                                    text_transformations: Array[
                                      {
                                        priority: ::Integer,
                                        type: ("NONE" | "COMPRESS_WHITE_SPACE" | "HTML_ENTITY_DECODE" | "LOWERCASE" | "CMD_LINE" | "URL_DECODE" | "BASE64_DECODE" | "HEX_DECODE" | "MD5" | "REPLACE_COMMENTS" | "ESCAPE_SEQ_DECODE" | "SQL_HEX_DECODE" | "CSS_DECODE" | "JS_DECODE" | "NORMALIZE_PATH" | "NORMALIZE_PATH_WIN" | "REMOVE_NULLS" | "REPLACE_NULLS" | "BASE64_DECODE_EXT" | "URL_DECODE_UNI" | "UTF8_TO_UNICODE")
                                      },
                                    ],
                                    sensitivity_level: ("LOW" | "HIGH")?
                                  }?,
                                  xss_match_statement: {
                                    field_to_match: {
                                      single_header: {
                                        name: ::String
                                      }?,
                                      single_query_argument: {
                                        name: ::String
                                      }?,
                                      all_query_arguments: {
                                      }?,
                                      uri_path: {
                                      }?,
                                      query_string: {
                                      }?,
                                      body: {
                                        oversize_handling: ("CONTINUE" | "MATCH" | "NO_MATCH")?
                                      }?,
                                      method: {
                                      }?,
                                      json_body: {
                                        match_pattern: {
                                          all: {
                                          }?,
                                          included_paths: Array[::String]?
                                        },
                                        match_scope: ("ALL" | "KEY" | "VALUE"),
                                        invalid_fallback_behavior: ("MATCH" | "NO_MATCH" | "EVALUATE_AS_STRING")?,
                                        oversize_handling: ("CONTINUE" | "MATCH" | "NO_MATCH")?
                                      }?,
                                      headers: {
                                        match_pattern: {
                                          all: {
                                          }?,
                                          included_headers: Array[::String]?,
                                          excluded_headers: Array[::String]?
                                        },
                                        match_scope: ("ALL" | "KEY" | "VALUE"),
                                        oversize_handling: ("CONTINUE" | "MATCH" | "NO_MATCH")
                                      }?,
                                      cookies: {
                                        match_pattern: {
                                          all: {
                                          }?,
                                          included_cookies: Array[::String]?,
                                          excluded_cookies: Array[::String]?
                                        },
                                        match_scope: ("ALL" | "KEY" | "VALUE"),
                                        oversize_handling: ("CONTINUE" | "MATCH" | "NO_MATCH")
                                      }?,
                                      header_order: {
                                        oversize_handling: ("CONTINUE" | "MATCH" | "NO_MATCH")
                                      }?,
                                      ja3_fingerprint: {
                                        fallback_behavior: ("MATCH" | "NO_MATCH")
                                      }?
                                    },
                                    text_transformations: Array[
                                      {
                                        priority: ::Integer,
                                        type: ("NONE" | "COMPRESS_WHITE_SPACE" | "HTML_ENTITY_DECODE" | "LOWERCASE" | "CMD_LINE" | "URL_DECODE" | "BASE64_DECODE" | "HEX_DECODE" | "MD5" | "REPLACE_COMMENTS" | "ESCAPE_SEQ_DECODE" | "SQL_HEX_DECODE" | "CSS_DECODE" | "JS_DECODE" | "NORMALIZE_PATH" | "NORMALIZE_PATH_WIN" | "REMOVE_NULLS" | "REPLACE_NULLS" | "BASE64_DECODE_EXT" | "URL_DECODE_UNI" | "UTF8_TO_UNICODE")
                                      },
                                    ]
                                  }?,
                                  size_constraint_statement: {
                                    field_to_match: {
                                      single_header: {
                                        name: ::String
                                      }?,
                                      single_query_argument: {
                                        name: ::String
                                      }?,
                                      all_query_arguments: {
                                      }?,
                                      uri_path: {
                                      }?,
                                      query_string: {
                                      }?,
                                      body: {
                                        oversize_handling: ("CONTINUE" | "MATCH" | "NO_MATCH")?
                                      }?,
                                      method: {
                                      }?,
                                      json_body: {
                                        match_pattern: {
                                          all: {
                                          }?,
                                          included_paths: Array[::String]?
                                        },
                                        match_scope: ("ALL" | "KEY" | "VALUE"),
                                        invalid_fallback_behavior: ("MATCH" | "NO_MATCH" | "EVALUATE_AS_STRING")?,
                                        oversize_handling: ("CONTINUE" | "MATCH" | "NO_MATCH")?
                                      }?,
                                      headers: {
                                        match_pattern: {
                                          all: {
                                          }?,
                                          included_headers: Array[::String]?,
                                          excluded_headers: Array[::String]?
                                        },
                                        match_scope: ("ALL" | "KEY" | "VALUE"),
                                        oversize_handling: ("CONTINUE" | "MATCH" | "NO_MATCH")
                                      }?,
                                      cookies: {
                                        match_pattern: {
                                          all: {
                                          }?,
                                          included_cookies: Array[::String]?,
                                          excluded_cookies: Array[::String]?
                                        },
                                        match_scope: ("ALL" | "KEY" | "VALUE"),
                                        oversize_handling: ("CONTINUE" | "MATCH" | "NO_MATCH")
                                      }?,
                                      header_order: {
                                        oversize_handling: ("CONTINUE" | "MATCH" | "NO_MATCH")
                                      }?,
                                      ja3_fingerprint: {
                                        fallback_behavior: ("MATCH" | "NO_MATCH")
                                      }?
                                    },
                                    comparison_operator: ("EQ" | "NE" | "LE" | "LT" | "GE" | "GT"),
                                    size: ::Integer,
                                    text_transformations: Array[
                                      {
                                        priority: ::Integer,
                                        type: ("NONE" | "COMPRESS_WHITE_SPACE" | "HTML_ENTITY_DECODE" | "LOWERCASE" | "CMD_LINE" | "URL_DECODE" | "BASE64_DECODE" | "HEX_DECODE" | "MD5" | "REPLACE_COMMENTS" | "ESCAPE_SEQ_DECODE" | "SQL_HEX_DECODE" | "CSS_DECODE" | "JS_DECODE" | "NORMALIZE_PATH" | "NORMALIZE_PATH_WIN" | "REMOVE_NULLS" | "REPLACE_NULLS" | "BASE64_DECODE_EXT" | "URL_DECODE_UNI" | "UTF8_TO_UNICODE")
                                      },
                                    ]
                                  }?,
                                  geo_match_statement: {
                                    country_codes: Array[("AF" | "AX" | "AL" | "DZ" | "AS" | "AD" | "AO" | "AI" | "AQ" | "AG" | "AR" | "AM" | "AW" | "AU" | "AT" | "AZ" | "BS" | "BH" | "BD" | "BB" | "BY" | "BE" | "BZ" | "BJ" | "BM" | "BT" | "BO" | "BQ" | "BA" | "BW" | "BV" | "BR" | "IO" | "BN" | "BG" | "BF" | "BI" | "KH" | "CM" | "CA" | "CV" | "KY" | "CF" | "TD" | "CL" | "CN" | "CX" | "CC" | "CO" | "KM" | "CG" | "CD" | "CK" | "CR" | "CI" | "HR" | "CU" | "CW" | "CY" | "CZ" | "DK" | "DJ" | "DM" | "DO" | "EC" | "EG" | "SV" | "GQ" | "ER" | "EE" | "ET" | "FK" | "FO" | "FJ" | "FI" | "FR" | "GF" | "PF" | "TF" | "GA" | "GM" | "GE" | "DE" | "GH" | "GI" | "GR" | "GL" | "GD" | "GP" | "GU" | "GT" | "GG" | "GN" | "GW" | "GY" | "HT" | "HM" | "VA" | "HN" | "HK" | "HU" | "IS" | "IN" | "ID" | "IR" | "IQ" | "IE" | "IM" | "IL" | "IT" | "JM" | "JP" | "JE" | "JO" | "KZ" | "KE" | "KI" | "KP" | "KR" | "KW" | "KG" | "LA" | "LV" | "LB" | "LS" | "LR" | "LY" | "LI" | "LT" | "LU" | "MO" | "MK" | "MG" | "MW" | "MY" | "MV" | "ML" | "MT" | "MH" | "MQ" | "MR" | "MU" | "YT" | "MX" | "FM" | "MD" | "MC" | "MN" | "ME" | "MS" | "MA" | "MZ" | "MM" | "NA" | "NR" | "NP" | "NL" | "NC" | "NZ" | "NI" | "NE" | "NG" | "NU" | "NF" | "MP" | "NO" | "OM" | "PK" | "PW" | "PS" | "PA" | "PG" | "PY" | "PE" | "PH" | "PN" | "PL" | "PT" | "PR" | "QA" | "RE" | "RO" | "RU" | "RW" | "BL" | "SH" | "KN" | "LC" | "MF" | "PM" | "VC" | "WS" | "SM" | "ST" | "SA" | "SN" | "RS" | "SC" | "SL" | "SG" | "SX" | "SK" | "SI" | "SB" | "SO" | "ZA" | "GS" | "SS" | "ES" | "LK" | "SD" | "SR" | "SJ" | "SZ" | "SE" | "CH" | "SY" | "TW" | "TJ" | "TZ" | "TH" | "TL" | "TG" | "TK" | "TO" | "TT" | "TN" | "TR" | "TM" | "TC" | "TV" | "UG" | "UA" | "AE" | "GB" | "US" | "UM" | "UY" | "UZ" | "VU" | "VE" | "VN" | "VG" | "VI" | "WF" | "EH" | "YE" | "ZM" | "ZW" | "XK")]?,
                                    forwarded_ip_config: {
                                      header_name: ::String,
                                      fallback_behavior: ("MATCH" | "NO_MATCH")
                                    }?
                                  }?,
                                  rule_group_reference_statement: {
                                    arn: ::String,
                                    excluded_rules: Array[
                                      {
                                        name: ::String
                                      },
                                    ]?,
                                    rule_action_overrides: Array[
                                      {
                                        name: ::String,
                                        action_to_use: {
                                          block: {
                                            custom_response: {
                                              response_code: ::Integer,
                                              custom_response_body_key: ::String?,
                                              response_headers: Array[
                                                {
                                                  name: ::String,
                                                  value: ::String
                                                },
                                              ]?
                                            }?
                                          }?,
                                          allow: {
                                            custom_request_handling: {
                                              insert_headers: Array[
                                                {
                                                  name: ::String,
                                                  value: ::String
                                                },
                                              ]
                                            }?
                                          }?,
                                          count: {
                                            custom_request_handling: {
                                              insert_headers: Array[
                                                {
                                                  name: ::String,
                                                  value: ::String
                                                },
                                              ]
                                            }?
                                          }?,
                                          captcha: {
                                            custom_request_handling: {
                                              insert_headers: Array[
                                                {
                                                  name: ::String,
                                                  value: ::String
                                                },
                                              ]
                                            }?
                                          }?,
                                          challenge: {
                                            custom_request_handling: {
                                              insert_headers: Array[
                                                {
                                                  name: ::String,
                                                  value: ::String
                                                },
                                              ]
                                            }?
                                          }?
                                        }
                                      },
                                    ]?
                                  }?,
                                  ip_set_reference_statement: {
                                    arn: ::String,
                                    ip_set_forwarded_ip_config: {
                                      header_name: ::String,
                                      fallback_behavior: ("MATCH" | "NO_MATCH"),
                                      position: ("FIRST" | "LAST" | "ANY")
                                    }?
                                  }?,
                                  regex_pattern_set_reference_statement: {
                                    arn: ::String,
                                    field_to_match: {
                                      single_header: {
                                        name: ::String
                                      }?,
                                      single_query_argument: {
                                        name: ::String
                                      }?,
                                      all_query_arguments: {
                                      }?,
                                      uri_path: {
                                      }?,
                                      query_string: {
                                      }?,
                                      body: {
                                        oversize_handling: ("CONTINUE" | "MATCH" | "NO_MATCH")?
                                      }?,
                                      method: {
                                      }?,
                                      json_body: {
                                        match_pattern: {
                                          all: {
                                          }?,
                                          included_paths: Array[::String]?
                                        },
                                        match_scope: ("ALL" | "KEY" | "VALUE"),
                                        invalid_fallback_behavior: ("MATCH" | "NO_MATCH" | "EVALUATE_AS_STRING")?,
                                        oversize_handling: ("CONTINUE" | "MATCH" | "NO_MATCH")?
                                      }?,
                                      headers: {
                                        match_pattern: {
                                          all: {
                                          }?,
                                          included_headers: Array[::String]?,
                                          excluded_headers: Array[::String]?
                                        },
                                        match_scope: ("ALL" | "KEY" | "VALUE"),
                                        oversize_handling: ("CONTINUE" | "MATCH" | "NO_MATCH")
                                      }?,
                                      cookies: {
                                        match_pattern: {
                                          all: {
                                          }?,
                                          included_cookies: Array[::String]?,
                                          excluded_cookies: Array[::String]?
                                        },
                                        match_scope: ("ALL" | "KEY" | "VALUE"),
                                        oversize_handling: ("CONTINUE" | "MATCH" | "NO_MATCH")
                                      }?,
                                      header_order: {
                                        oversize_handling: ("CONTINUE" | "MATCH" | "NO_MATCH")
                                      }?,
                                      ja3_fingerprint: {
                                        fallback_behavior: ("MATCH" | "NO_MATCH")
                                      }?
                                    },
                                    text_transformations: Array[
                                      {
                                        priority: ::Integer,
                                        type: ("NONE" | "COMPRESS_WHITE_SPACE" | "HTML_ENTITY_DECODE" | "LOWERCASE" | "CMD_LINE" | "URL_DECODE" | "BASE64_DECODE" | "HEX_DECODE" | "MD5" | "REPLACE_COMMENTS" | "ESCAPE_SEQ_DECODE" | "SQL_HEX_DECODE" | "CSS_DECODE" | "JS_DECODE" | "NORMALIZE_PATH" | "NORMALIZE_PATH_WIN" | "REMOVE_NULLS" | "REPLACE_NULLS" | "BASE64_DECODE_EXT" | "URL_DECODE_UNI" | "UTF8_TO_UNICODE")
                                      },
                                    ]
                                  }?,
                                  rate_based_statement: {
                                    limit: ::Integer,
                                    evaluation_window_sec: ::Integer?,
                                    aggregate_key_type: ("IP" | "FORWARDED_IP" | "CUSTOM_KEYS" | "CONSTANT"),
                                    scope_down_statement: untyped?,
                                    forwarded_ip_config: {
                                      header_name: ::String,
                                      fallback_behavior: ("MATCH" | "NO_MATCH")
                                    }?,
                                    custom_keys: Array[
                                      {
                                        header: {
                                          name: ::String,
                                          text_transformations: Array[
                                            {
                                              priority: ::Integer,
                                              type: ("NONE" | "COMPRESS_WHITE_SPACE" | "HTML_ENTITY_DECODE" | "LOWERCASE" | "CMD_LINE" | "URL_DECODE" | "BASE64_DECODE" | "HEX_DECODE" | "MD5" | "REPLACE_COMMENTS" | "ESCAPE_SEQ_DECODE" | "SQL_HEX_DECODE" | "CSS_DECODE" | "JS_DECODE" | "NORMALIZE_PATH" | "NORMALIZE_PATH_WIN" | "REMOVE_NULLS" | "REPLACE_NULLS" | "BASE64_DECODE_EXT" | "URL_DECODE_UNI" | "UTF8_TO_UNICODE")
                                            },
                                          ]
                                        }?,
                                        cookie: {
                                          name: ::String,
                                          text_transformations: Array[
                                            {
                                              priority: ::Integer,
                                              type: ("NONE" | "COMPRESS_WHITE_SPACE" | "HTML_ENTITY_DECODE" | "LOWERCASE" | "CMD_LINE" | "URL_DECODE" | "BASE64_DECODE" | "HEX_DECODE" | "MD5" | "REPLACE_COMMENTS" | "ESCAPE_SEQ_DECODE" | "SQL_HEX_DECODE" | "CSS_DECODE" | "JS_DECODE" | "NORMALIZE_PATH" | "NORMALIZE_PATH_WIN" | "REMOVE_NULLS" | "REPLACE_NULLS" | "BASE64_DECODE_EXT" | "URL_DECODE_UNI" | "UTF8_TO_UNICODE")
                                            },
                                          ]
                                        }?,
                                        query_argument: {
                                          name: ::String,
                                          text_transformations: Array[
                                            {
                                              priority: ::Integer,
                                              type: ("NONE" | "COMPRESS_WHITE_SPACE" | "HTML_ENTITY_DECODE" | "LOWERCASE" | "CMD_LINE" | "URL_DECODE" | "BASE64_DECODE" | "HEX_DECODE" | "MD5" | "REPLACE_COMMENTS" | "ESCAPE_SEQ_DECODE" | "SQL_HEX_DECODE" | "CSS_DECODE" | "JS_DECODE" | "NORMALIZE_PATH" | "NORMALIZE_PATH_WIN" | "REMOVE_NULLS" | "REPLACE_NULLS" | "BASE64_DECODE_EXT" | "URL_DECODE_UNI" | "UTF8_TO_UNICODE")
                                            },
                                          ]
                                        }?,
                                        query_string: {
                                          text_transformations: Array[
                                            {
                                              priority: ::Integer,
                                              type: ("NONE" | "COMPRESS_WHITE_SPACE" | "HTML_ENTITY_DECODE" | "LOWERCASE" | "CMD_LINE" | "URL_DECODE" | "BASE64_DECODE" | "HEX_DECODE" | "MD5" | "REPLACE_COMMENTS" | "ESCAPE_SEQ_DECODE" | "SQL_HEX_DECODE" | "CSS_DECODE" | "JS_DECODE" | "NORMALIZE_PATH" | "NORMALIZE_PATH_WIN" | "REMOVE_NULLS" | "REPLACE_NULLS" | "BASE64_DECODE_EXT" | "URL_DECODE_UNI" | "UTF8_TO_UNICODE")
                                            },
                                          ]
                                        }?,
                                        http_method: {
                                        }?,
                                        forwarded_ip: {
                                        }?,
                                        ip: {
                                        }?,
                                        label_namespace: {
                                          namespace: ::String
                                        }?,
                                        uri_path: {
                                          text_transformations: Array[
                                            {
                                              priority: ::Integer,
                                              type: ("NONE" | "COMPRESS_WHITE_SPACE" | "HTML_ENTITY_DECODE" | "LOWERCASE" | "CMD_LINE" | "URL_DECODE" | "BASE64_DECODE" | "HEX_DECODE" | "MD5" | "REPLACE_COMMENTS" | "ESCAPE_SEQ_DECODE" | "SQL_HEX_DECODE" | "CSS_DECODE" | "JS_DECODE" | "NORMALIZE_PATH" | "NORMALIZE_PATH_WIN" | "REMOVE_NULLS" | "REPLACE_NULLS" | "BASE64_DECODE_EXT" | "URL_DECODE_UNI" | "UTF8_TO_UNICODE")
                                            },
                                          ]
                                        }?
                                      },
                                    ]?
                                  }?,
                                  and_statement: {
                                    statements: Array[
                                      untyped,
                                    ]
                                  }?,
                                  or_statement: {
                                    statements: Array[
                                      untyped,
                                    ]
                                  }?,
                                  not_statement: {
                                    statement: untyped
                                  }?,
                                  managed_rule_group_statement: {
                                    vendor_name: ::String,
                                    name: ::String,
                                    version: ::String?,
                                    excluded_rules: Array[
                                      {
                                        name: ::String
                                      },
                                    ]?,
                                    scope_down_statement: untyped?,
                                    managed_rule_group_configs: Array[
                                      {
                                        login_path: ::String?,
                                        payload_type: ("JSON" | "FORM_ENCODED")?,
                                        username_field: {
                                          identifier: ::String
                                        }?,
                                        password_field: {
                                          identifier: ::String
                                        }?,
                                        aws_managed_rules_bot_control_rule_set: {
                                          inspection_level: ("COMMON" | "TARGETED"),
                                          enable_machine_learning: bool?
                                        }?,
                                        aws_managed_rules_atp_rule_set: {
                                          login_path: ::String,
                                          request_inspection: {
                                            payload_type: ("JSON" | "FORM_ENCODED"),
                                            username_field: {
                                              identifier: ::String
                                            },
                                            password_field: {
                                              identifier: ::String
                                            }
                                          }?,
                                          response_inspection: {
                                            status_code: {
                                              success_codes: Array[::Integer],
                                              failure_codes: Array[::Integer]
                                            }?,
                                            header: {
                                              name: ::String,
                                              success_values: Array[::String],
                                              failure_values: Array[::String]
                                            }?,
                                            body_contains: {
                                              success_strings: Array[::String],
                                              failure_strings: Array[::String]
                                            }?,
                                            json: {
                                              identifier: ::String,
                                              success_values: Array[::String],
                                              failure_values: Array[::String]
                                            }?
                                          }?,
                                          enable_regex_in_path: bool?
                                        }?,
                                        aws_managed_rules_acfp_rule_set: {
                                          creation_path: ::String,
                                          registration_page_path: ::String,
                                          request_inspection: {
                                            payload_type: ("JSON" | "FORM_ENCODED"),
                                            username_field: {
                                              identifier: ::String
                                            }?,
                                            password_field: {
                                              identifier: ::String
                                            }?,
                                            email_field: {
                                              identifier: ::String
                                            }?,
                                            phone_number_fields: Array[
                                              {
                                                identifier: ::String
                                              },
                                            ]?,
                                            address_fields: Array[
                                              {
                                                identifier: ::String
                                              },
                                            ]?
                                          },
                                          response_inspection: {
                                            status_code: {
                                              success_codes: Array[::Integer],
                                              failure_codes: Array[::Integer]
                                            }?,
                                            header: {
                                              name: ::String,
                                              success_values: Array[::String],
                                              failure_values: Array[::String]
                                            }?,
                                            body_contains: {
                                              success_strings: Array[::String],
                                              failure_strings: Array[::String]
                                            }?,
                                            json: {
                                              identifier: ::String,
                                              success_values: Array[::String],
                                              failure_values: Array[::String]
                                            }?
                                          }?,
                                          enable_regex_in_path: bool?
                                        }?
                                      },
                                    ]?,
                                    rule_action_overrides: Array[
                                      {
                                        name: ::String,
                                        action_to_use: {
                                          block: {
                                            custom_response: {
                                              response_code: ::Integer,
                                              custom_response_body_key: ::String?,
                                              response_headers: Array[
                                                {
                                                  name: ::String,
                                                  value: ::String
                                                },
                                              ]?
                                            }?
                                          }?,
                                          allow: {
                                            custom_request_handling: {
                                              insert_headers: Array[
                                                {
                                                  name: ::String,
                                                  value: ::String
                                                },
                                              ]
                                            }?
                                          }?,
                                          count: {
                                            custom_request_handling: {
                                              insert_headers: Array[
                                                {
                                                  name: ::String,
                                                  value: ::String
                                                },
                                              ]
                                            }?
                                          }?,
                                          captcha: {
                                            custom_request_handling: {
                                              insert_headers: Array[
                                                {
                                                  name: ::String,
                                                  value: ::String
                                                },
                                              ]
                                            }?
                                          }?,
                                          challenge: {
                                            custom_request_handling: {
                                              insert_headers: Array[
                                                {
                                                  name: ::String,
                                                  value: ::String
                                                },
                                              ]
                                            }?
                                          }?
                                        }
                                      },
                                    ]?
                                  }?,
                                  label_match_statement: {
                                    scope: ("LABEL" | "NAMESPACE"),
                                    key: ::String
                                  }?,
                                  regex_match_statement: {
                                    regex_string: ::String,
                                    field_to_match: {
                                      single_header: {
                                        name: ::String
                                      }?,
                                      single_query_argument: {
                                        name: ::String
                                      }?,
                                      all_query_arguments: {
                                      }?,
                                      uri_path: {
                                      }?,
                                      query_string: {
                                      }?,
                                      body: {
                                        oversize_handling: ("CONTINUE" | "MATCH" | "NO_MATCH")?
                                      }?,
                                      method: {
                                      }?,
                                      json_body: {
                                        match_pattern: {
                                          all: {
                                          }?,
                                          included_paths: Array[::String]?
                                        },
                                        match_scope: ("ALL" | "KEY" | "VALUE"),
                                        invalid_fallback_behavior: ("MATCH" | "NO_MATCH" | "EVALUATE_AS_STRING")?,
                                        oversize_handling: ("CONTINUE" | "MATCH" | "NO_MATCH")?
                                      }?,
                                      headers: {
                                        match_pattern: {
                                          all: {
                                          }?,
                                          included_headers: Array[::String]?,
                                          excluded_headers: Array[::String]?
                                        },
                                        match_scope: ("ALL" | "KEY" | "VALUE"),
                                        oversize_handling: ("CONTINUE" | "MATCH" | "NO_MATCH")
                                      }?,
                                      cookies: {
                                        match_pattern: {
                                          all: {
                                          }?,
                                          included_cookies: Array[::String]?,
                                          excluded_cookies: Array[::String]?
                                        },
                                        match_scope: ("ALL" | "KEY" | "VALUE"),
                                        oversize_handling: ("CONTINUE" | "MATCH" | "NO_MATCH")
                                      }?,
                                      header_order: {
                                        oversize_handling: ("CONTINUE" | "MATCH" | "NO_MATCH")
                                      }?,
                                      ja3_fingerprint: {
                                        fallback_behavior: ("MATCH" | "NO_MATCH")
                                      }?
                                    },
                                    text_transformations: Array[
                                      {
                                        priority: ::Integer,
                                        type: ("NONE" | "COMPRESS_WHITE_SPACE" | "HTML_ENTITY_DECODE" | "LOWERCASE" | "CMD_LINE" | "URL_DECODE" | "BASE64_DECODE" | "HEX_DECODE" | "MD5" | "REPLACE_COMMENTS" | "ESCAPE_SEQ_DECODE" | "SQL_HEX_DECODE" | "CSS_DECODE" | "JS_DECODE" | "NORMALIZE_PATH" | "NORMALIZE_PATH_WIN" | "REMOVE_NULLS" | "REPLACE_NULLS" | "BASE64_DECODE_EXT" | "URL_DECODE_UNI" | "UTF8_TO_UNICODE")
                                      },
                                    ]
                                  }?
                                },
                                action: {
                                  block: {
                                    custom_response: {
                                      response_code: ::Integer,
                                      custom_response_body_key: ::String?,
                                      response_headers: Array[
                                        {
                                          name: ::String,
                                          value: ::String
                                        },
                                      ]?
                                    }?
                                  }?,
                                  allow: {
                                    custom_request_handling: {
                                      insert_headers: Array[
                                        {
                                          name: ::String,
                                          value: ::String
                                        },
                                      ]
                                    }?
                                  }?,
                                  count: {
                                    custom_request_handling: {
                                      insert_headers: Array[
                                        {
                                          name: ::String,
                                          value: ::String
                                        },
                                      ]
                                    }?
                                  }?,
                                  captcha: {
                                    custom_request_handling: {
                                      insert_headers: Array[
                                        {
                                          name: ::String,
                                          value: ::String
                                        },
                                      ]
                                    }?
                                  }?,
                                  challenge: {
                                    custom_request_handling: {
                                      insert_headers: Array[
                                        {
                                          name: ::String,
                                          value: ::String
                                        },
                                      ]
                                    }?
                                  }?
                                }?,
                                override_action: {
                                  count: {
                                    custom_request_handling: {
                                      insert_headers: Array[
                                        {
                                          name: ::String,
                                          value: ::String
                                        },
                                      ]
                                    }?
                                  }?,
                                  none: {
                                  }?
                                }?,
                                rule_labels: Array[
                                  {
                                    name: ::String
                                  },
                                ]?,
                                visibility_config: {
                                  sampled_requests_enabled: bool,
                                  cloud_watch_metrics_enabled: bool,
                                  metric_name: ::String
                                },
                                captcha_config: {
                                  immunity_time_property: {
                                    immunity_time: ::Integer
                                  }?
                                }?,
                                challenge_config: {
                                  immunity_time_property: {
                                    immunity_time: ::Integer
                                  }?
                                }?
                              },
                            ]
                          ) -> _CheckCapacityResponseSuccess
                        | (Hash[Symbol, untyped] params, ?Hash[Symbol, untyped] options) -> _CheckCapacityResponseSuccess

      interface _CreateAPIKeyResponseSuccess
        include ::Seahorse::Client::_ResponseSuccess[Types::CreateAPIKeyResponse]
        def api_key: () -> ::String
      end
      # https://docs.aws.amazon.com/sdk-for-ruby/v3/api/Aws/WAFV2/Client.html#create_api_key-instance_method
      def create_api_key: (
                            scope: ("CLOUDFRONT" | "REGIONAL"),
                            token_domains: Array[::String]
                          ) -> _CreateAPIKeyResponseSuccess
                        | (Hash[Symbol, untyped] params, ?Hash[Symbol, untyped] options) -> _CreateAPIKeyResponseSuccess

      interface _CreateIPSetResponseSuccess
        include ::Seahorse::Client::_ResponseSuccess[Types::CreateIPSetResponse]
        def summary: () -> Types::IPSetSummary
      end
      # https://docs.aws.amazon.com/sdk-for-ruby/v3/api/Aws/WAFV2/Client.html#create_ip_set-instance_method
      def create_ip_set: (
                           name: ::String,
                           scope: ("CLOUDFRONT" | "REGIONAL"),
                           ?description: ::String,
                           ip_address_version: ("IPV4" | "IPV6"),
                           addresses: Array[::String],
                           ?tags: Array[
                             {
                               key: ::String,
                               value: ::String
                             },
                           ]
                         ) -> _CreateIPSetResponseSuccess
                       | (Hash[Symbol, untyped] params, ?Hash[Symbol, untyped] options) -> _CreateIPSetResponseSuccess

      interface _CreateRegexPatternSetResponseSuccess
        include ::Seahorse::Client::_ResponseSuccess[Types::CreateRegexPatternSetResponse]
        def summary: () -> Types::RegexPatternSetSummary
      end
      # https://docs.aws.amazon.com/sdk-for-ruby/v3/api/Aws/WAFV2/Client.html#create_regex_pattern_set-instance_method
      def create_regex_pattern_set: (
                                      name: ::String,
                                      scope: ("CLOUDFRONT" | "REGIONAL"),
                                      ?description: ::String,
                                      regular_expression_list: Array[
                                        {
                                          regex_string: ::String?
                                        },
                                      ],
                                      ?tags: Array[
                                        {
                                          key: ::String,
                                          value: ::String
                                        },
                                      ]
                                    ) -> _CreateRegexPatternSetResponseSuccess
                                  | (Hash[Symbol, untyped] params, ?Hash[Symbol, untyped] options) -> _CreateRegexPatternSetResponseSuccess

      interface _CreateRuleGroupResponseSuccess
        include ::Seahorse::Client::_ResponseSuccess[Types::CreateRuleGroupResponse]
        def summary: () -> Types::RuleGroupSummary
      end
      # https://docs.aws.amazon.com/sdk-for-ruby/v3/api/Aws/WAFV2/Client.html#create_rule_group-instance_method
      def create_rule_group: (
                               name: ::String,
                               scope: ("CLOUDFRONT" | "REGIONAL"),
                               capacity: ::Integer,
                               ?description: ::String,
                               ?rules: Array[
                                 {
                                   name: ::String,
                                   priority: ::Integer,
                                   statement: {
                                     byte_match_statement: {
                                       search_string: ::String,
                                       field_to_match: {
                                         single_header: {
                                           name: ::String
                                         }?,
                                         single_query_argument: {
                                           name: ::String
                                         }?,
                                         all_query_arguments: {
                                         }?,
                                         uri_path: {
                                         }?,
                                         query_string: {
                                         }?,
                                         body: {
                                           oversize_handling: ("CONTINUE" | "MATCH" | "NO_MATCH")?
                                         }?,
                                         method: {
                                         }?,
                                         json_body: {
                                           match_pattern: {
                                             all: {
                                             }?,
                                             included_paths: Array[::String]?
                                           },
                                           match_scope: ("ALL" | "KEY" | "VALUE"),
                                           invalid_fallback_behavior: ("MATCH" | "NO_MATCH" | "EVALUATE_AS_STRING")?,
                                           oversize_handling: ("CONTINUE" | "MATCH" | "NO_MATCH")?
                                         }?,
                                         headers: {
                                           match_pattern: {
                                             all: {
                                             }?,
                                             included_headers: Array[::String]?,
                                             excluded_headers: Array[::String]?
                                           },
                                           match_scope: ("ALL" | "KEY" | "VALUE"),
                                           oversize_handling: ("CONTINUE" | "MATCH" | "NO_MATCH")
                                         }?,
                                         cookies: {
                                           match_pattern: {
                                             all: {
                                             }?,
                                             included_cookies: Array[::String]?,
                                             excluded_cookies: Array[::String]?
                                           },
                                           match_scope: ("ALL" | "KEY" | "VALUE"),
                                           oversize_handling: ("CONTINUE" | "MATCH" | "NO_MATCH")
                                         }?,
                                         header_order: {
                                           oversize_handling: ("CONTINUE" | "MATCH" | "NO_MATCH")
                                         }?,
                                         ja3_fingerprint: {
                                           fallback_behavior: ("MATCH" | "NO_MATCH")
                                         }?
                                       },
                                       text_transformations: Array[
                                         {
                                           priority: ::Integer,
                                           type: ("NONE" | "COMPRESS_WHITE_SPACE" | "HTML_ENTITY_DECODE" | "LOWERCASE" | "CMD_LINE" | "URL_DECODE" | "BASE64_DECODE" | "HEX_DECODE" | "MD5" | "REPLACE_COMMENTS" | "ESCAPE_SEQ_DECODE" | "SQL_HEX_DECODE" | "CSS_DECODE" | "JS_DECODE" | "NORMALIZE_PATH" | "NORMALIZE_PATH_WIN" | "REMOVE_NULLS" | "REPLACE_NULLS" | "BASE64_DECODE_EXT" | "URL_DECODE_UNI" | "UTF8_TO_UNICODE")
                                         },
                                       ],
                                       positional_constraint: ("EXACTLY" | "STARTS_WITH" | "ENDS_WITH" | "CONTAINS" | "CONTAINS_WORD")
                                     }?,
                                     sqli_match_statement: {
                                       field_to_match: {
                                         single_header: {
                                           name: ::String
                                         }?,
                                         single_query_argument: {
                                           name: ::String
                                         }?,
                                         all_query_arguments: {
                                         }?,
                                         uri_path: {
                                         }?,
                                         query_string: {
                                         }?,
                                         body: {
                                           oversize_handling: ("CONTINUE" | "MATCH" | "NO_MATCH")?
                                         }?,
                                         method: {
                                         }?,
                                         json_body: {
                                           match_pattern: {
                                             all: {
                                             }?,
                                             included_paths: Array[::String]?
                                           },
                                           match_scope: ("ALL" | "KEY" | "VALUE"),
                                           invalid_fallback_behavior: ("MATCH" | "NO_MATCH" | "EVALUATE_AS_STRING")?,
                                           oversize_handling: ("CONTINUE" | "MATCH" | "NO_MATCH")?
                                         }?,
                                         headers: {
                                           match_pattern: {
                                             all: {
                                             }?,
                                             included_headers: Array[::String]?,
                                             excluded_headers: Array[::String]?
                                           },
                                           match_scope: ("ALL" | "KEY" | "VALUE"),
                                           oversize_handling: ("CONTINUE" | "MATCH" | "NO_MATCH")
                                         }?,
                                         cookies: {
                                           match_pattern: {
                                             all: {
                                             }?,
                                             included_cookies: Array[::String]?,
                                             excluded_cookies: Array[::String]?
                                           },
                                           match_scope: ("ALL" | "KEY" | "VALUE"),
                                           oversize_handling: ("CONTINUE" | "MATCH" | "NO_MATCH")
                                         }?,
                                         header_order: {
                                           oversize_handling: ("CONTINUE" | "MATCH" | "NO_MATCH")
                                         }?,
                                         ja3_fingerprint: {
                                           fallback_behavior: ("MATCH" | "NO_MATCH")
                                         }?
                                       },
                                       text_transformations: Array[
                                         {
                                           priority: ::Integer,
                                           type: ("NONE" | "COMPRESS_WHITE_SPACE" | "HTML_ENTITY_DECODE" | "LOWERCASE" | "CMD_LINE" | "URL_DECODE" | "BASE64_DECODE" | "HEX_DECODE" | "MD5" | "REPLACE_COMMENTS" | "ESCAPE_SEQ_DECODE" | "SQL_HEX_DECODE" | "CSS_DECODE" | "JS_DECODE" | "NORMALIZE_PATH" | "NORMALIZE_PATH_WIN" | "REMOVE_NULLS" | "REPLACE_NULLS" | "BASE64_DECODE_EXT" | "URL_DECODE_UNI" | "UTF8_TO_UNICODE")
                                         },
                                       ],
                                       sensitivity_level: ("LOW" | "HIGH")?
                                     }?,
                                     xss_match_statement: {
                                       field_to_match: {
                                         single_header: {
                                           name: ::String
                                         }?,
                                         single_query_argument: {
                                           name: ::String
                                         }?,
                                         all_query_arguments: {
                                         }?,
                                         uri_path: {
                                         }?,
                                         query_string: {
                                         }?,
                                         body: {
                                           oversize_handling: ("CONTINUE" | "MATCH" | "NO_MATCH")?
                                         }?,
                                         method: {
                                         }?,
                                         json_body: {
                                           match_pattern: {
                                             all: {
                                             }?,
                                             included_paths: Array[::String]?
                                           },
                                           match_scope: ("ALL" | "KEY" | "VALUE"),
                                           invalid_fallback_behavior: ("MATCH" | "NO_MATCH" | "EVALUATE_AS_STRING")?,
                                           oversize_handling: ("CONTINUE" | "MATCH" | "NO_MATCH")?
                                         }?,
                                         headers: {
                                           match_pattern: {
                                             all: {
                                             }?,
                                             included_headers: Array[::String]?,
                                             excluded_headers: Array[::String]?
                                           },
                                           match_scope: ("ALL" | "KEY" | "VALUE"),
                                           oversize_handling: ("CONTINUE" | "MATCH" | "NO_MATCH")
                                         }?,
                                         cookies: {
                                           match_pattern: {
                                             all: {
                                             }?,
                                             included_cookies: Array[::String]?,
                                             excluded_cookies: Array[::String]?
                                           },
                                           match_scope: ("ALL" | "KEY" | "VALUE"),
                                           oversize_handling: ("CONTINUE" | "MATCH" | "NO_MATCH")
                                         }?,
                                         header_order: {
                                           oversize_handling: ("CONTINUE" | "MATCH" | "NO_MATCH")
                                         }?,
                                         ja3_fingerprint: {
                                           fallback_behavior: ("MATCH" | "NO_MATCH")
                                         }?
                                       },
                                       text_transformations: Array[
                                         {
                                           priority: ::Integer,
                                           type: ("NONE" | "COMPRESS_WHITE_SPACE" | "HTML_ENTITY_DECODE" | "LOWERCASE" | "CMD_LINE" | "URL_DECODE" | "BASE64_DECODE" | "HEX_DECODE" | "MD5" | "REPLACE_COMMENTS" | "ESCAPE_SEQ_DECODE" | "SQL_HEX_DECODE" | "CSS_DECODE" | "JS_DECODE" | "NORMALIZE_PATH" | "NORMALIZE_PATH_WIN" | "REMOVE_NULLS" | "REPLACE_NULLS" | "BASE64_DECODE_EXT" | "URL_DECODE_UNI" | "UTF8_TO_UNICODE")
                                         },
                                       ]
                                     }?,
                                     size_constraint_statement: {
                                       field_to_match: {
                                         single_header: {
                                           name: ::String
                                         }?,
                                         single_query_argument: {
                                           name: ::String
                                         }?,
                                         all_query_arguments: {
                                         }?,
                                         uri_path: {
                                         }?,
                                         query_string: {
                                         }?,
                                         body: {
                                           oversize_handling: ("CONTINUE" | "MATCH" | "NO_MATCH")?
                                         }?,
                                         method: {
                                         }?,
                                         json_body: {
                                           match_pattern: {
                                             all: {
                                             }?,
                                             included_paths: Array[::String]?
                                           },
                                           match_scope: ("ALL" | "KEY" | "VALUE"),
                                           invalid_fallback_behavior: ("MATCH" | "NO_MATCH" | "EVALUATE_AS_STRING")?,
                                           oversize_handling: ("CONTINUE" | "MATCH" | "NO_MATCH")?
                                         }?,
                                         headers: {
                                           match_pattern: {
                                             all: {
                                             }?,
                                             included_headers: Array[::String]?,
                                             excluded_headers: Array[::String]?
                                           },
                                           match_scope: ("ALL" | "KEY" | "VALUE"),
                                           oversize_handling: ("CONTINUE" | "MATCH" | "NO_MATCH")
                                         }?,
                                         cookies: {
                                           match_pattern: {
                                             all: {
                                             }?,
                                             included_cookies: Array[::String]?,
                                             excluded_cookies: Array[::String]?
                                           },
                                           match_scope: ("ALL" | "KEY" | "VALUE"),
                                           oversize_handling: ("CONTINUE" | "MATCH" | "NO_MATCH")
                                         }?,
                                         header_order: {
                                           oversize_handling: ("CONTINUE" | "MATCH" | "NO_MATCH")
                                         }?,
                                         ja3_fingerprint: {
                                           fallback_behavior: ("MATCH" | "NO_MATCH")
                                         }?
                                       },
                                       comparison_operator: ("EQ" | "NE" | "LE" | "LT" | "GE" | "GT"),
                                       size: ::Integer,
                                       text_transformations: Array[
                                         {
                                           priority: ::Integer,
                                           type: ("NONE" | "COMPRESS_WHITE_SPACE" | "HTML_ENTITY_DECODE" | "LOWERCASE" | "CMD_LINE" | "URL_DECODE" | "BASE64_DECODE" | "HEX_DECODE" | "MD5" | "REPLACE_COMMENTS" | "ESCAPE_SEQ_DECODE" | "SQL_HEX_DECODE" | "CSS_DECODE" | "JS_DECODE" | "NORMALIZE_PATH" | "NORMALIZE_PATH_WIN" | "REMOVE_NULLS" | "REPLACE_NULLS" | "BASE64_DECODE_EXT" | "URL_DECODE_UNI" | "UTF8_TO_UNICODE")
                                         },
                                       ]
                                     }?,
                                     geo_match_statement: {
                                       country_codes: Array[("AF" | "AX" | "AL" | "DZ" | "AS" | "AD" | "AO" | "AI" | "AQ" | "AG" | "AR" | "AM" | "AW" | "AU" | "AT" | "AZ" | "BS" | "BH" | "BD" | "BB" | "BY" | "BE" | "BZ" | "BJ" | "BM" | "BT" | "BO" | "BQ" | "BA" | "BW" | "BV" | "BR" | "IO" | "BN" | "BG" | "BF" | "BI" | "KH" | "CM" | "CA" | "CV" | "KY" | "CF" | "TD" | "CL" | "CN" | "CX" | "CC" | "CO" | "KM" | "CG" | "CD" | "CK" | "CR" | "CI" | "HR" | "CU" | "CW" | "CY" | "CZ" | "DK" | "DJ" | "DM" | "DO" | "EC" | "EG" | "SV" | "GQ" | "ER" | "EE" | "ET" | "FK" | "FO" | "FJ" | "FI" | "FR" | "GF" | "PF" | "TF" | "GA" | "GM" | "GE" | "DE" | "GH" | "GI" | "GR" | "GL" | "GD" | "GP" | "GU" | "GT" | "GG" | "GN" | "GW" | "GY" | "HT" | "HM" | "VA" | "HN" | "HK" | "HU" | "IS" | "IN" | "ID" | "IR" | "IQ" | "IE" | "IM" | "IL" | "IT" | "JM" | "JP" | "JE" | "JO" | "KZ" | "KE" | "KI" | "KP" | "KR" | "KW" | "KG" | "LA" | "LV" | "LB" | "LS" | "LR" | "LY" | "LI" | "LT" | "LU" | "MO" | "MK" | "MG" | "MW" | "MY" | "MV" | "ML" | "MT" | "MH" | "MQ" | "MR" | "MU" | "YT" | "MX" | "FM" | "MD" | "MC" | "MN" | "ME" | "MS" | "MA" | "MZ" | "MM" | "NA" | "NR" | "NP" | "NL" | "NC" | "NZ" | "NI" | "NE" | "NG" | "NU" | "NF" | "MP" | "NO" | "OM" | "PK" | "PW" | "PS" | "PA" | "PG" | "PY" | "PE" | "PH" | "PN" | "PL" | "PT" | "PR" | "QA" | "RE" | "RO" | "RU" | "RW" | "BL" | "SH" | "KN" | "LC" | "MF" | "PM" | "VC" | "WS" | "SM" | "ST" | "SA" | "SN" | "RS" | "SC" | "SL" | "SG" | "SX" | "SK" | "SI" | "SB" | "SO" | "ZA" | "GS" | "SS" | "ES" | "LK" | "SD" | "SR" | "SJ" | "SZ" | "SE" | "CH" | "SY" | "TW" | "TJ" | "TZ" | "TH" | "TL" | "TG" | "TK" | "TO" | "TT" | "TN" | "TR" | "TM" | "TC" | "TV" | "UG" | "UA" | "AE" | "GB" | "US" | "UM" | "UY" | "UZ" | "VU" | "VE" | "VN" | "VG" | "VI" | "WF" | "EH" | "YE" | "ZM" | "ZW" | "XK")]?,
                                       forwarded_ip_config: {
                                         header_name: ::String,
                                         fallback_behavior: ("MATCH" | "NO_MATCH")
                                       }?
                                     }?,
                                     rule_group_reference_statement: {
                                       arn: ::String,
                                       excluded_rules: Array[
                                         {
                                           name: ::String
                                         },
                                       ]?,
                                       rule_action_overrides: Array[
                                         {
                                           name: ::String,
                                           action_to_use: {
                                             block: {
                                               custom_response: {
                                                 response_code: ::Integer,
                                                 custom_response_body_key: ::String?,
                                                 response_headers: Array[
                                                   {
                                                     name: ::String,
                                                     value: ::String
                                                   },
                                                 ]?
                                               }?
                                             }?,
                                             allow: {
                                               custom_request_handling: {
                                                 insert_headers: Array[
                                                   {
                                                     name: ::String,
                                                     value: ::String
                                                   },
                                                 ]
                                               }?
                                             }?,
                                             count: {
                                               custom_request_handling: {
                                                 insert_headers: Array[
                                                   {
                                                     name: ::String,
                                                     value: ::String
                                                   },
                                                 ]
                                               }?
                                             }?,
                                             captcha: {
                                               custom_request_handling: {
                                                 insert_headers: Array[
                                                   {
                                                     name: ::String,
                                                     value: ::String
                                                   },
                                                 ]
                                               }?
                                             }?,
                                             challenge: {
                                               custom_request_handling: {
                                                 insert_headers: Array[
                                                   {
                                                     name: ::String,
                                                     value: ::String
                                                   },
                                                 ]
                                               }?
                                             }?
                                           }
                                         },
                                       ]?
                                     }?,
                                     ip_set_reference_statement: {
                                       arn: ::String,
                                       ip_set_forwarded_ip_config: {
                                         header_name: ::String,
                                         fallback_behavior: ("MATCH" | "NO_MATCH"),
                                         position: ("FIRST" | "LAST" | "ANY")
                                       }?
                                     }?,
                                     regex_pattern_set_reference_statement: {
                                       arn: ::String,
                                       field_to_match: {
                                         single_header: {
                                           name: ::String
                                         }?,
                                         single_query_argument: {
                                           name: ::String
                                         }?,
                                         all_query_arguments: {
                                         }?,
                                         uri_path: {
                                         }?,
                                         query_string: {
                                         }?,
                                         body: {
                                           oversize_handling: ("CONTINUE" | "MATCH" | "NO_MATCH")?
                                         }?,
                                         method: {
                                         }?,
                                         json_body: {
                                           match_pattern: {
                                             all: {
                                             }?,
                                             included_paths: Array[::String]?
                                           },
                                           match_scope: ("ALL" | "KEY" | "VALUE"),
                                           invalid_fallback_behavior: ("MATCH" | "NO_MATCH" | "EVALUATE_AS_STRING")?,
                                           oversize_handling: ("CONTINUE" | "MATCH" | "NO_MATCH")?
                                         }?,
                                         headers: {
                                           match_pattern: {
                                             all: {
                                             }?,
                                             included_headers: Array[::String]?,
                                             excluded_headers: Array[::String]?
                                           },
                                           match_scope: ("ALL" | "KEY" | "VALUE"),
                                           oversize_handling: ("CONTINUE" | "MATCH" | "NO_MATCH")
                                         }?,
                                         cookies: {
                                           match_pattern: {
                                             all: {
                                             }?,
                                             included_cookies: Array[::String]?,
                                             excluded_cookies: Array[::String]?
                                           },
                                           match_scope: ("ALL" | "KEY" | "VALUE"),
                                           oversize_handling: ("CONTINUE" | "MATCH" | "NO_MATCH")
                                         }?,
                                         header_order: {
                                           oversize_handling: ("CONTINUE" | "MATCH" | "NO_MATCH")
                                         }?,
                                         ja3_fingerprint: {
                                           fallback_behavior: ("MATCH" | "NO_MATCH")
                                         }?
                                       },
                                       text_transformations: Array[
                                         {
                                           priority: ::Integer,
                                           type: ("NONE" | "COMPRESS_WHITE_SPACE" | "HTML_ENTITY_DECODE" | "LOWERCASE" | "CMD_LINE" | "URL_DECODE" | "BASE64_DECODE" | "HEX_DECODE" | "MD5" | "REPLACE_COMMENTS" | "ESCAPE_SEQ_DECODE" | "SQL_HEX_DECODE" | "CSS_DECODE" | "JS_DECODE" | "NORMALIZE_PATH" | "NORMALIZE_PATH_WIN" | "REMOVE_NULLS" | "REPLACE_NULLS" | "BASE64_DECODE_EXT" | "URL_DECODE_UNI" | "UTF8_TO_UNICODE")
                                         },
                                       ]
                                     }?,
                                     rate_based_statement: {
                                       limit: ::Integer,
                                       evaluation_window_sec: ::Integer?,
                                       aggregate_key_type: ("IP" | "FORWARDED_IP" | "CUSTOM_KEYS" | "CONSTANT"),
                                       scope_down_statement: untyped?,
                                       forwarded_ip_config: {
                                         header_name: ::String,
                                         fallback_behavior: ("MATCH" | "NO_MATCH")
                                       }?,
                                       custom_keys: Array[
                                         {
                                           header: {
                                             name: ::String,
                                             text_transformations: Array[
                                               {
                                                 priority: ::Integer,
                                                 type: ("NONE" | "COMPRESS_WHITE_SPACE" | "HTML_ENTITY_DECODE" | "LOWERCASE" | "CMD_LINE" | "URL_DECODE" | "BASE64_DECODE" | "HEX_DECODE" | "MD5" | "REPLACE_COMMENTS" | "ESCAPE_SEQ_DECODE" | "SQL_HEX_DECODE" | "CSS_DECODE" | "JS_DECODE" | "NORMALIZE_PATH" | "NORMALIZE_PATH_WIN" | "REMOVE_NULLS" | "REPLACE_NULLS" | "BASE64_DECODE_EXT" | "URL_DECODE_UNI" | "UTF8_TO_UNICODE")
                                               },
                                             ]
                                           }?,
                                           cookie: {
                                             name: ::String,
                                             text_transformations: Array[
                                               {
                                                 priority: ::Integer,
                                                 type: ("NONE" | "COMPRESS_WHITE_SPACE" | "HTML_ENTITY_DECODE" | "LOWERCASE" | "CMD_LINE" | "URL_DECODE" | "BASE64_DECODE" | "HEX_DECODE" | "MD5" | "REPLACE_COMMENTS" | "ESCAPE_SEQ_DECODE" | "SQL_HEX_DECODE" | "CSS_DECODE" | "JS_DECODE" | "NORMALIZE_PATH" | "NORMALIZE_PATH_WIN" | "REMOVE_NULLS" | "REPLACE_NULLS" | "BASE64_DECODE_EXT" | "URL_DECODE_UNI" | "UTF8_TO_UNICODE")
                                               },
                                             ]
                                           }?,
                                           query_argument: {
                                             name: ::String,
                                             text_transformations: Array[
                                               {
                                                 priority: ::Integer,
                                                 type: ("NONE" | "COMPRESS_WHITE_SPACE" | "HTML_ENTITY_DECODE" | "LOWERCASE" | "CMD_LINE" | "URL_DECODE" | "BASE64_DECODE" | "HEX_DECODE" | "MD5" | "REPLACE_COMMENTS" | "ESCAPE_SEQ_DECODE" | "SQL_HEX_DECODE" | "CSS_DECODE" | "JS_DECODE" | "NORMALIZE_PATH" | "NORMALIZE_PATH_WIN" | "REMOVE_NULLS" | "REPLACE_NULLS" | "BASE64_DECODE_EXT" | "URL_DECODE_UNI" | "UTF8_TO_UNICODE")
                                               },
                                             ]
                                           }?,
                                           query_string: {
                                             text_transformations: Array[
                                               {
                                                 priority: ::Integer,
                                                 type: ("NONE" | "COMPRESS_WHITE_SPACE" | "HTML_ENTITY_DECODE" | "LOWERCASE" | "CMD_LINE" | "URL_DECODE" | "BASE64_DECODE" | "HEX_DECODE" | "MD5" | "REPLACE_COMMENTS" | "ESCAPE_SEQ_DECODE" | "SQL_HEX_DECODE" | "CSS_DECODE" | "JS_DECODE" | "NORMALIZE_PATH" | "NORMALIZE_PATH_WIN" | "REMOVE_NULLS" | "REPLACE_NULLS" | "BASE64_DECODE_EXT" | "URL_DECODE_UNI" | "UTF8_TO_UNICODE")
                                               },
                                             ]
                                           }?,
                                           http_method: {
                                           }?,
                                           forwarded_ip: {
                                           }?,
                                           ip: {
                                           }?,
                                           label_namespace: {
                                             namespace: ::String
                                           }?,
                                           uri_path: {
                                             text_transformations: Array[
                                               {
                                                 priority: ::Integer,
                                                 type: ("NONE" | "COMPRESS_WHITE_SPACE" | "HTML_ENTITY_DECODE" | "LOWERCASE" | "CMD_LINE" | "URL_DECODE" | "BASE64_DECODE" | "HEX_DECODE" | "MD5" | "REPLACE_COMMENTS" | "ESCAPE_SEQ_DECODE" | "SQL_HEX_DECODE" | "CSS_DECODE" | "JS_DECODE" | "NORMALIZE_PATH" | "NORMALIZE_PATH_WIN" | "REMOVE_NULLS" | "REPLACE_NULLS" | "BASE64_DECODE_EXT" | "URL_DECODE_UNI" | "UTF8_TO_UNICODE")
                                               },
                                             ]
                                           }?
                                         },
                                       ]?
                                     }?,
                                     and_statement: {
                                       statements: Array[
                                         untyped,
                                       ]
                                     }?,
                                     or_statement: {
                                       statements: Array[
                                         untyped,
                                       ]
                                     }?,
                                     not_statement: {
                                       statement: untyped
                                     }?,
                                     managed_rule_group_statement: {
                                       vendor_name: ::String,
                                       name: ::String,
                                       version: ::String?,
                                       excluded_rules: Array[
                                         {
                                           name: ::String
                                         },
                                       ]?,
                                       scope_down_statement: untyped?,
                                       managed_rule_group_configs: Array[
                                         {
                                           login_path: ::String?,
                                           payload_type: ("JSON" | "FORM_ENCODED")?,
                                           username_field: {
                                             identifier: ::String
                                           }?,
                                           password_field: {
                                             identifier: ::String
                                           }?,
                                           aws_managed_rules_bot_control_rule_set: {
                                             inspection_level: ("COMMON" | "TARGETED"),
                                             enable_machine_learning: bool?
                                           }?,
                                           aws_managed_rules_atp_rule_set: {
                                             login_path: ::String,
                                             request_inspection: {
                                               payload_type: ("JSON" | "FORM_ENCODED"),
                                               username_field: {
                                                 identifier: ::String
                                               },
                                               password_field: {
                                                 identifier: ::String
                                               }
                                             }?,
                                             response_inspection: {
                                               status_code: {
                                                 success_codes: Array[::Integer],
                                                 failure_codes: Array[::Integer]
                                               }?,
                                               header: {
                                                 name: ::String,
                                                 success_values: Array[::String],
                                                 failure_values: Array[::String]
                                               }?,
                                               body_contains: {
                                                 success_strings: Array[::String],
                                                 failure_strings: Array[::String]
                                               }?,
                                               json: {
                                                 identifier: ::String,
                                                 success_values: Array[::String],
                                                 failure_values: Array[::String]
                                               }?
                                             }?,
                                             enable_regex_in_path: bool?
                                           }?,
                                           aws_managed_rules_acfp_rule_set: {
                                             creation_path: ::String,
                                             registration_page_path: ::String,
                                             request_inspection: {
                                               payload_type: ("JSON" | "FORM_ENCODED"),
                                               username_field: {
                                                 identifier: ::String
                                               }?,
                                               password_field: {
                                                 identifier: ::String
                                               }?,
                                               email_field: {
                                                 identifier: ::String
                                               }?,
                                               phone_number_fields: Array[
                                                 {
                                                   identifier: ::String
                                                 },
                                               ]?,
                                               address_fields: Array[
                                                 {
                                                   identifier: ::String
                                                 },
                                               ]?
                                             },
                                             response_inspection: {
                                               status_code: {
                                                 success_codes: Array[::Integer],
                                                 failure_codes: Array[::Integer]
                                               }?,
                                               header: {
                                                 name: ::String,
                                                 success_values: Array[::String],
                                                 failure_values: Array[::String]
                                               }?,
                                               body_contains: {
                                                 success_strings: Array[::String],
                                                 failure_strings: Array[::String]
                                               }?,
                                               json: {
                                                 identifier: ::String,
                                                 success_values: Array[::String],
                                                 failure_values: Array[::String]
                                               }?
                                             }?,
                                             enable_regex_in_path: bool?
                                           }?
                                         },
                                       ]?,
                                       rule_action_overrides: Array[
                                         {
                                           name: ::String,
                                           action_to_use: {
                                             block: {
                                               custom_response: {
                                                 response_code: ::Integer,
                                                 custom_response_body_key: ::String?,
                                                 response_headers: Array[
                                                   {
                                                     name: ::String,
                                                     value: ::String
                                                   },
                                                 ]?
                                               }?
                                             }?,
                                             allow: {
                                               custom_request_handling: {
                                                 insert_headers: Array[
                                                   {
                                                     name: ::String,
                                                     value: ::String
                                                   },
                                                 ]
                                               }?
                                             }?,
                                             count: {
                                               custom_request_handling: {
                                                 insert_headers: Array[
                                                   {
                                                     name: ::String,
                                                     value: ::String
                                                   },
                                                 ]
                                               }?
                                             }?,
                                             captcha: {
                                               custom_request_handling: {
                                                 insert_headers: Array[
                                                   {
                                                     name: ::String,
                                                     value: ::String
                                                   },
                                                 ]
                                               }?
                                             }?,
                                             challenge: {
                                               custom_request_handling: {
                                                 insert_headers: Array[
                                                   {
                                                     name: ::String,
                                                     value: ::String
                                                   },
                                                 ]
                                               }?
                                             }?
                                           }
                                         },
                                       ]?
                                     }?,
                                     label_match_statement: {
                                       scope: ("LABEL" | "NAMESPACE"),
                                       key: ::String
                                     }?,
                                     regex_match_statement: {
                                       regex_string: ::String,
                                       field_to_match: {
                                         single_header: {
                                           name: ::String
                                         }?,
                                         single_query_argument: {
                                           name: ::String
                                         }?,
                                         all_query_arguments: {
                                         }?,
                                         uri_path: {
                                         }?,
                                         query_string: {
                                         }?,
                                         body: {
                                           oversize_handling: ("CONTINUE" | "MATCH" | "NO_MATCH")?
                                         }?,
                                         method: {
                                         }?,
                                         json_body: {
                                           match_pattern: {
                                             all: {
                                             }?,
                                             included_paths: Array[::String]?
                                           },
                                           match_scope: ("ALL" | "KEY" | "VALUE"),
                                           invalid_fallback_behavior: ("MATCH" | "NO_MATCH" | "EVALUATE_AS_STRING")?,
                                           oversize_handling: ("CONTINUE" | "MATCH" | "NO_MATCH")?
                                         }?,
                                         headers: {
                                           match_pattern: {
                                             all: {
                                             }?,
                                             included_headers: Array[::String]?,
                                             excluded_headers: Array[::String]?
                                           },
                                           match_scope: ("ALL" | "KEY" | "VALUE"),
                                           oversize_handling: ("CONTINUE" | "MATCH" | "NO_MATCH")
                                         }?,
                                         cookies: {
                                           match_pattern: {
                                             all: {
                                             }?,
                                             included_cookies: Array[::String]?,
                                             excluded_cookies: Array[::String]?
                                           },
                                           match_scope: ("ALL" | "KEY" | "VALUE"),
                                           oversize_handling: ("CONTINUE" | "MATCH" | "NO_MATCH")
                                         }?,
                                         header_order: {
                                           oversize_handling: ("CONTINUE" | "MATCH" | "NO_MATCH")
                                         }?,
                                         ja3_fingerprint: {
                                           fallback_behavior: ("MATCH" | "NO_MATCH")
                                         }?
                                       },
                                       text_transformations: Array[
                                         {
                                           priority: ::Integer,
                                           type: ("NONE" | "COMPRESS_WHITE_SPACE" | "HTML_ENTITY_DECODE" | "LOWERCASE" | "CMD_LINE" | "URL_DECODE" | "BASE64_DECODE" | "HEX_DECODE" | "MD5" | "REPLACE_COMMENTS" | "ESCAPE_SEQ_DECODE" | "SQL_HEX_DECODE" | "CSS_DECODE" | "JS_DECODE" | "NORMALIZE_PATH" | "NORMALIZE_PATH_WIN" | "REMOVE_NULLS" | "REPLACE_NULLS" | "BASE64_DECODE_EXT" | "URL_DECODE_UNI" | "UTF8_TO_UNICODE")
                                         },
                                       ]
                                     }?
                                   },
                                   action: {
                                     block: {
                                       custom_response: {
                                         response_code: ::Integer,
                                         custom_response_body_key: ::String?,
                                         response_headers: Array[
                                           {
                                             name: ::String,
                                             value: ::String
                                           },
                                         ]?
                                       }?
                                     }?,
                                     allow: {
                                       custom_request_handling: {
                                         insert_headers: Array[
                                           {
                                             name: ::String,
                                             value: ::String
                                           },
                                         ]
                                       }?
                                     }?,
                                     count: {
                                       custom_request_handling: {
                                         insert_headers: Array[
                                           {
                                             name: ::String,
                                             value: ::String
                                           },
                                         ]
                                       }?
                                     }?,
                                     captcha: {
                                       custom_request_handling: {
                                         insert_headers: Array[
                                           {
                                             name: ::String,
                                             value: ::String
                                           },
                                         ]
                                       }?
                                     }?,
                                     challenge: {
                                       custom_request_handling: {
                                         insert_headers: Array[
                                           {
                                             name: ::String,
                                             value: ::String
                                           },
                                         ]
                                       }?
                                     }?
                                   }?,
                                   override_action: {
                                     count: {
                                       custom_request_handling: {
                                         insert_headers: Array[
                                           {
                                             name: ::String,
                                             value: ::String
                                           },
                                         ]
                                       }?
                                     }?,
                                     none: {
                                     }?
                                   }?,
                                   rule_labels: Array[
                                     {
                                       name: ::String
                                     },
                                   ]?,
                                   visibility_config: {
                                     sampled_requests_enabled: bool,
                                     cloud_watch_metrics_enabled: bool,
                                     metric_name: ::String
                                   },
                                   captcha_config: {
                                     immunity_time_property: {
                                       immunity_time: ::Integer
                                     }?
                                   }?,
                                   challenge_config: {
                                     immunity_time_property: {
                                       immunity_time: ::Integer
                                     }?
                                   }?
                                 },
                               ],
                               visibility_config: {
                                 sampled_requests_enabled: bool,
                                 cloud_watch_metrics_enabled: bool,
                                 metric_name: ::String
                               },
                               ?tags: Array[
                                 {
                                   key: ::String,
                                   value: ::String
                                 },
                               ],
                               ?custom_response_bodies: Hash[::String, {
                                   content_type: ("TEXT_PLAIN" | "TEXT_HTML" | "APPLICATION_JSON"),
                                   content: ::String
                                 }]
                             ) -> _CreateRuleGroupResponseSuccess
                           | (Hash[Symbol, untyped] params, ?Hash[Symbol, untyped] options) -> _CreateRuleGroupResponseSuccess

      interface _CreateWebACLResponseSuccess
        include ::Seahorse::Client::_ResponseSuccess[Types::CreateWebACLResponse]
        def summary: () -> Types::WebACLSummary
      end
      # https://docs.aws.amazon.com/sdk-for-ruby/v3/api/Aws/WAFV2/Client.html#create_web_acl-instance_method
      def create_web_acl: (
                            name: ::String,
                            scope: ("CLOUDFRONT" | "REGIONAL"),
                            default_action: {
                              block: {
                                custom_response: {
                                  response_code: ::Integer,
                                  custom_response_body_key: ::String?,
                                  response_headers: Array[
                                    {
                                      name: ::String,
                                      value: ::String
                                    },
                                  ]?
                                }?
                              }?,
                              allow: {
                                custom_request_handling: {
                                  insert_headers: Array[
                                    {
                                      name: ::String,
                                      value: ::String
                                    },
                                  ]
                                }?
                              }?
                            },
                            ?description: ::String,
                            ?rules: Array[
                              {
                                name: ::String,
                                priority: ::Integer,
                                statement: {
                                  byte_match_statement: {
                                    search_string: ::String,
                                    field_to_match: {
                                      single_header: {
                                        name: ::String
                                      }?,
                                      single_query_argument: {
                                        name: ::String
                                      }?,
                                      all_query_arguments: {
                                      }?,
                                      uri_path: {
                                      }?,
                                      query_string: {
                                      }?,
                                      body: {
                                        oversize_handling: ("CONTINUE" | "MATCH" | "NO_MATCH")?
                                      }?,
                                      method: {
                                      }?,
                                      json_body: {
                                        match_pattern: {
                                          all: {
                                          }?,
                                          included_paths: Array[::String]?
                                        },
                                        match_scope: ("ALL" | "KEY" | "VALUE"),
                                        invalid_fallback_behavior: ("MATCH" | "NO_MATCH" | "EVALUATE_AS_STRING")?,
                                        oversize_handling: ("CONTINUE" | "MATCH" | "NO_MATCH")?
                                      }?,
                                      headers: {
                                        match_pattern: {
                                          all: {
                                          }?,
                                          included_headers: Array[::String]?,
                                          excluded_headers: Array[::String]?
                                        },
                                        match_scope: ("ALL" | "KEY" | "VALUE"),
                                        oversize_handling: ("CONTINUE" | "MATCH" | "NO_MATCH")
                                      }?,
                                      cookies: {
                                        match_pattern: {
                                          all: {
                                          }?,
                                          included_cookies: Array[::String]?,
                                          excluded_cookies: Array[::String]?
                                        },
                                        match_scope: ("ALL" | "KEY" | "VALUE"),
                                        oversize_handling: ("CONTINUE" | "MATCH" | "NO_MATCH")
                                      }?,
                                      header_order: {
                                        oversize_handling: ("CONTINUE" | "MATCH" | "NO_MATCH")
                                      }?,
                                      ja3_fingerprint: {
                                        fallback_behavior: ("MATCH" | "NO_MATCH")
                                      }?
                                    },
                                    text_transformations: Array[
                                      {
                                        priority: ::Integer,
                                        type: ("NONE" | "COMPRESS_WHITE_SPACE" | "HTML_ENTITY_DECODE" | "LOWERCASE" | "CMD_LINE" | "URL_DECODE" | "BASE64_DECODE" | "HEX_DECODE" | "MD5" | "REPLACE_COMMENTS" | "ESCAPE_SEQ_DECODE" | "SQL_HEX_DECODE" | "CSS_DECODE" | "JS_DECODE" | "NORMALIZE_PATH" | "NORMALIZE_PATH_WIN" | "REMOVE_NULLS" | "REPLACE_NULLS" | "BASE64_DECODE_EXT" | "URL_DECODE_UNI" | "UTF8_TO_UNICODE")
                                      },
                                    ],
                                    positional_constraint: ("EXACTLY" | "STARTS_WITH" | "ENDS_WITH" | "CONTAINS" | "CONTAINS_WORD")
                                  }?,
                                  sqli_match_statement: {
                                    field_to_match: {
                                      single_header: {
                                        name: ::String
                                      }?,
                                      single_query_argument: {
                                        name: ::String
                                      }?,
                                      all_query_arguments: {
                                      }?,
                                      uri_path: {
                                      }?,
                                      query_string: {
                                      }?,
                                      body: {
                                        oversize_handling: ("CONTINUE" | "MATCH" | "NO_MATCH")?
                                      }?,
                                      method: {
                                      }?,
                                      json_body: {
                                        match_pattern: {
                                          all: {
                                          }?,
                                          included_paths: Array[::String]?
                                        },
                                        match_scope: ("ALL" | "KEY" | "VALUE"),
                                        invalid_fallback_behavior: ("MATCH" | "NO_MATCH" | "EVALUATE_AS_STRING")?,
                                        oversize_handling: ("CONTINUE" | "MATCH" | "NO_MATCH")?
                                      }?,
                                      headers: {
                                        match_pattern: {
                                          all: {
                                          }?,
                                          included_headers: Array[::String]?,
                                          excluded_headers: Array[::String]?
                                        },
                                        match_scope: ("ALL" | "KEY" | "VALUE"),
                                        oversize_handling: ("CONTINUE" | "MATCH" | "NO_MATCH")
                                      }?,
                                      cookies: {
                                        match_pattern: {
                                          all: {
                                          }?,
                                          included_cookies: Array[::String]?,
                                          excluded_cookies: Array[::String]?
                                        },
                                        match_scope: ("ALL" | "KEY" | "VALUE"),
                                        oversize_handling: ("CONTINUE" | "MATCH" | "NO_MATCH")
                                      }?,
                                      header_order: {
                                        oversize_handling: ("CONTINUE" | "MATCH" | "NO_MATCH")
                                      }?,
                                      ja3_fingerprint: {
                                        fallback_behavior: ("MATCH" | "NO_MATCH")
                                      }?
                                    },
                                    text_transformations: Array[
                                      {
                                        priority: ::Integer,
                                        type: ("NONE" | "COMPRESS_WHITE_SPACE" | "HTML_ENTITY_DECODE" | "LOWERCASE" | "CMD_LINE" | "URL_DECODE" | "BASE64_DECODE" | "HEX_DECODE" | "MD5" | "REPLACE_COMMENTS" | "ESCAPE_SEQ_DECODE" | "SQL_HEX_DECODE" | "CSS_DECODE" | "JS_DECODE" | "NORMALIZE_PATH" | "NORMALIZE_PATH_WIN" | "REMOVE_NULLS" | "REPLACE_NULLS" | "BASE64_DECODE_EXT" | "URL_DECODE_UNI" | "UTF8_TO_UNICODE")
                                      },
                                    ],
                                    sensitivity_level: ("LOW" | "HIGH")?
                                  }?,
                                  xss_match_statement: {
                                    field_to_match: {
                                      single_header: {
                                        name: ::String
                                      }?,
                                      single_query_argument: {
                                        name: ::String
                                      }?,
                                      all_query_arguments: {
                                      }?,
                                      uri_path: {
                                      }?,
                                      query_string: {
                                      }?,
                                      body: {
                                        oversize_handling: ("CONTINUE" | "MATCH" | "NO_MATCH")?
                                      }?,
                                      method: {
                                      }?,
                                      json_body: {
                                        match_pattern: {
                                          all: {
                                          }?,
                                          included_paths: Array[::String]?
                                        },
                                        match_scope: ("ALL" | "KEY" | "VALUE"),
                                        invalid_fallback_behavior: ("MATCH" | "NO_MATCH" | "EVALUATE_AS_STRING")?,
                                        oversize_handling: ("CONTINUE" | "MATCH" | "NO_MATCH")?
                                      }?,
                                      headers: {
                                        match_pattern: {
                                          all: {
                                          }?,
                                          included_headers: Array[::String]?,
                                          excluded_headers: Array[::String]?
                                        },
                                        match_scope: ("ALL" | "KEY" | "VALUE"),
                                        oversize_handling: ("CONTINUE" | "MATCH" | "NO_MATCH")
                                      }?,
                                      cookies: {
                                        match_pattern: {
                                          all: {
                                          }?,
                                          included_cookies: Array[::String]?,
                                          excluded_cookies: Array[::String]?
                                        },
                                        match_scope: ("ALL" | "KEY" | "VALUE"),
                                        oversize_handling: ("CONTINUE" | "MATCH" | "NO_MATCH")
                                      }?,
                                      header_order: {
                                        oversize_handling: ("CONTINUE" | "MATCH" | "NO_MATCH")
                                      }?,
                                      ja3_fingerprint: {
                                        fallback_behavior: ("MATCH" | "NO_MATCH")
                                      }?
                                    },
                                    text_transformations: Array[
                                      {
                                        priority: ::Integer,
                                        type: ("NONE" | "COMPRESS_WHITE_SPACE" | "HTML_ENTITY_DECODE" | "LOWERCASE" | "CMD_LINE" | "URL_DECODE" | "BASE64_DECODE" | "HEX_DECODE" | "MD5" | "REPLACE_COMMENTS" | "ESCAPE_SEQ_DECODE" | "SQL_HEX_DECODE" | "CSS_DECODE" | "JS_DECODE" | "NORMALIZE_PATH" | "NORMALIZE_PATH_WIN" | "REMOVE_NULLS" | "REPLACE_NULLS" | "BASE64_DECODE_EXT" | "URL_DECODE_UNI" | "UTF8_TO_UNICODE")
                                      },
                                    ]
                                  }?,
                                  size_constraint_statement: {
                                    field_to_match: {
                                      single_header: {
                                        name: ::String
                                      }?,
                                      single_query_argument: {
                                        name: ::String
                                      }?,
                                      all_query_arguments: {
                                      }?,
                                      uri_path: {
                                      }?,
                                      query_string: {
                                      }?,
                                      body: {
                                        oversize_handling: ("CONTINUE" | "MATCH" | "NO_MATCH")?
                                      }?,
                                      method: {
                                      }?,
                                      json_body: {
                                        match_pattern: {
                                          all: {
                                          }?,
                                          included_paths: Array[::String]?
                                        },
                                        match_scope: ("ALL" | "KEY" | "VALUE"),
                                        invalid_fallback_behavior: ("MATCH" | "NO_MATCH" | "EVALUATE_AS_STRING")?,
                                        oversize_handling: ("CONTINUE" | "MATCH" | "NO_MATCH")?
                                      }?,
                                      headers: {
                                        match_pattern: {
                                          all: {
                                          }?,
                                          included_headers: Array[::String]?,
                                          excluded_headers: Array[::String]?
                                        },
                                        match_scope: ("ALL" | "KEY" | "VALUE"),
                                        oversize_handling: ("CONTINUE" | "MATCH" | "NO_MATCH")
                                      }?,
                                      cookies: {
                                        match_pattern: {
                                          all: {
                                          }?,
                                          included_cookies: Array[::String]?,
                                          excluded_cookies: Array[::String]?
                                        },
                                        match_scope: ("ALL" | "KEY" | "VALUE"),
                                        oversize_handling: ("CONTINUE" | "MATCH" | "NO_MATCH")
                                      }?,
                                      header_order: {
                                        oversize_handling: ("CONTINUE" | "MATCH" | "NO_MATCH")
                                      }?,
                                      ja3_fingerprint: {
                                        fallback_behavior: ("MATCH" | "NO_MATCH")
                                      }?
                                    },
                                    comparison_operator: ("EQ" | "NE" | "LE" | "LT" | "GE" | "GT"),
                                    size: ::Integer,
                                    text_transformations: Array[
                                      {
                                        priority: ::Integer,
                                        type: ("NONE" | "COMPRESS_WHITE_SPACE" | "HTML_ENTITY_DECODE" | "LOWERCASE" | "CMD_LINE" | "URL_DECODE" | "BASE64_DECODE" | "HEX_DECODE" | "MD5" | "REPLACE_COMMENTS" | "ESCAPE_SEQ_DECODE" | "SQL_HEX_DECODE" | "CSS_DECODE" | "JS_DECODE" | "NORMALIZE_PATH" | "NORMALIZE_PATH_WIN" | "REMOVE_NULLS" | "REPLACE_NULLS" | "BASE64_DECODE_EXT" | "URL_DECODE_UNI" | "UTF8_TO_UNICODE")
                                      },
                                    ]
                                  }?,
                                  geo_match_statement: {
                                    country_codes: Array[("AF" | "AX" | "AL" | "DZ" | "AS" | "AD" | "AO" | "AI" | "AQ" | "AG" | "AR" | "AM" | "AW" | "AU" | "AT" | "AZ" | "BS" | "BH" | "BD" | "BB" | "BY" | "BE" | "BZ" | "BJ" | "BM" | "BT" | "BO" | "BQ" | "BA" | "BW" | "BV" | "BR" | "IO" | "BN" | "BG" | "BF" | "BI" | "KH" | "CM" | "CA" | "CV" | "KY" | "CF" | "TD" | "CL" | "CN" | "CX" | "CC" | "CO" | "KM" | "CG" | "CD" | "CK" | "CR" | "CI" | "HR" | "CU" | "CW" | "CY" | "CZ" | "DK" | "DJ" | "DM" | "DO" | "EC" | "EG" | "SV" | "GQ" | "ER" | "EE" | "ET" | "FK" | "FO" | "FJ" | "FI" | "FR" | "GF" | "PF" | "TF" | "GA" | "GM" | "GE" | "DE" | "GH" | "GI" | "GR" | "GL" | "GD" | "GP" | "GU" | "GT" | "GG" | "GN" | "GW" | "GY" | "HT" | "HM" | "VA" | "HN" | "HK" | "HU" | "IS" | "IN" | "ID" | "IR" | "IQ" | "IE" | "IM" | "IL" | "IT" | "JM" | "JP" | "JE" | "JO" | "KZ" | "KE" | "KI" | "KP" | "KR" | "KW" | "KG" | "LA" | "LV" | "LB" | "LS" | "LR" | "LY" | "LI" | "LT" | "LU" | "MO" | "MK" | "MG" | "MW" | "MY" | "MV" | "ML" | "MT" | "MH" | "MQ" | "MR" | "MU" | "YT" | "MX" | "FM" | "MD" | "MC" | "MN" | "ME" | "MS" | "MA" | "MZ" | "MM" | "NA" | "NR" | "NP" | "NL" | "NC" | "NZ" | "NI" | "NE" | "NG" | "NU" | "NF" | "MP" | "NO" | "OM" | "PK" | "PW" | "PS" | "PA" | "PG" | "PY" | "PE" | "PH" | "PN" | "PL" | "PT" | "PR" | "QA" | "RE" | "RO" | "RU" | "RW" | "BL" | "SH" | "KN" | "LC" | "MF" | "PM" | "VC" | "WS" | "SM" | "ST" | "SA" | "SN" | "RS" | "SC" | "SL" | "SG" | "SX" | "SK" | "SI" | "SB" | "SO" | "ZA" | "GS" | "SS" | "ES" | "LK" | "SD" | "SR" | "SJ" | "SZ" | "SE" | "CH" | "SY" | "TW" | "TJ" | "TZ" | "TH" | "TL" | "TG" | "TK" | "TO" | "TT" | "TN" | "TR" | "TM" | "TC" | "TV" | "UG" | "UA" | "AE" | "GB" | "US" | "UM" | "UY" | "UZ" | "VU" | "VE" | "VN" | "VG" | "VI" | "WF" | "EH" | "YE" | "ZM" | "ZW" | "XK")]?,
                                    forwarded_ip_config: {
                                      header_name: ::String,
                                      fallback_behavior: ("MATCH" | "NO_MATCH")
                                    }?
                                  }?,
                                  rule_group_reference_statement: {
                                    arn: ::String,
                                    excluded_rules: Array[
                                      {
                                        name: ::String
                                      },
                                    ]?,
                                    rule_action_overrides: Array[
                                      {
                                        name: ::String,
                                        action_to_use: {
                                          block: {
                                            custom_response: {
                                              response_code: ::Integer,
                                              custom_response_body_key: ::String?,
                                              response_headers: Array[
                                                {
                                                  name: ::String,
                                                  value: ::String
                                                },
                                              ]?
                                            }?
                                          }?,
                                          allow: {
                                            custom_request_handling: {
                                              insert_headers: Array[
                                                {
                                                  name: ::String,
                                                  value: ::String
                                                },
                                              ]
                                            }?
                                          }?,
                                          count: {
                                            custom_request_handling: {
                                              insert_headers: Array[
                                                {
                                                  name: ::String,
                                                  value: ::String
                                                },
                                              ]
                                            }?
                                          }?,
                                          captcha: {
                                            custom_request_handling: {
                                              insert_headers: Array[
                                                {
                                                  name: ::String,
                                                  value: ::String
                                                },
                                              ]
                                            }?
                                          }?,
                                          challenge: {
                                            custom_request_handling: {
                                              insert_headers: Array[
                                                {
                                                  name: ::String,
                                                  value: ::String
                                                },
                                              ]
                                            }?
                                          }?
                                        }
                                      },
                                    ]?
                                  }?,
                                  ip_set_reference_statement: {
                                    arn: ::String,
                                    ip_set_forwarded_ip_config: {
                                      header_name: ::String,
                                      fallback_behavior: ("MATCH" | "NO_MATCH"),
                                      position: ("FIRST" | "LAST" | "ANY")
                                    }?
                                  }?,
                                  regex_pattern_set_reference_statement: {
                                    arn: ::String,
                                    field_to_match: {
                                      single_header: {
                                        name: ::String
                                      }?,
                                      single_query_argument: {
                                        name: ::String
                                      }?,
                                      all_query_arguments: {
                                      }?,
                                      uri_path: {
                                      }?,
                                      query_string: {
                                      }?,
                                      body: {
                                        oversize_handling: ("CONTINUE" | "MATCH" | "NO_MATCH")?
                                      }?,
                                      method: {
                                      }?,
                                      json_body: {
                                        match_pattern: {
                                          all: {
                                          }?,
                                          included_paths: Array[::String]?
                                        },
                                        match_scope: ("ALL" | "KEY" | "VALUE"),
                                        invalid_fallback_behavior: ("MATCH" | "NO_MATCH" | "EVALUATE_AS_STRING")?,
                                        oversize_handling: ("CONTINUE" | "MATCH" | "NO_MATCH")?
                                      }?,
                                      headers: {
                                        match_pattern: {
                                          all: {
                                          }?,
                                          included_headers: Array[::String]?,
                                          excluded_headers: Array[::String]?
                                        },
                                        match_scope: ("ALL" | "KEY" | "VALUE"),
                                        oversize_handling: ("CONTINUE" | "MATCH" | "NO_MATCH")
                                      }?,
                                      cookies: {
                                        match_pattern: {
                                          all: {
                                          }?,
                                          included_cookies: Array[::String]?,
                                          excluded_cookies: Array[::String]?
                                        },
                                        match_scope: ("ALL" | "KEY" | "VALUE"),
                                        oversize_handling: ("CONTINUE" | "MATCH" | "NO_MATCH")
                                      }?,
                                      header_order: {
                                        oversize_handling: ("CONTINUE" | "MATCH" | "NO_MATCH")
                                      }?,
                                      ja3_fingerprint: {
                                        fallback_behavior: ("MATCH" | "NO_MATCH")
                                      }?
                                    },
                                    text_transformations: Array[
                                      {
                                        priority: ::Integer,
                                        type: ("NONE" | "COMPRESS_WHITE_SPACE" | "HTML_ENTITY_DECODE" | "LOWERCASE" | "CMD_LINE" | "URL_DECODE" | "BASE64_DECODE" | "HEX_DECODE" | "MD5" | "REPLACE_COMMENTS" | "ESCAPE_SEQ_DECODE" | "SQL_HEX_DECODE" | "CSS_DECODE" | "JS_DECODE" | "NORMALIZE_PATH" | "NORMALIZE_PATH_WIN" | "REMOVE_NULLS" | "REPLACE_NULLS" | "BASE64_DECODE_EXT" | "URL_DECODE_UNI" | "UTF8_TO_UNICODE")
                                      },
                                    ]
                                  }?,
                                  rate_based_statement: {
                                    limit: ::Integer,
                                    evaluation_window_sec: ::Integer?,
                                    aggregate_key_type: ("IP" | "FORWARDED_IP" | "CUSTOM_KEYS" | "CONSTANT"),
                                    scope_down_statement: untyped?,
                                    forwarded_ip_config: {
                                      header_name: ::String,
                                      fallback_behavior: ("MATCH" | "NO_MATCH")
                                    }?,
                                    custom_keys: Array[
                                      {
                                        header: {
                                          name: ::String,
                                          text_transformations: Array[
                                            {
                                              priority: ::Integer,
                                              type: ("NONE" | "COMPRESS_WHITE_SPACE" | "HTML_ENTITY_DECODE" | "LOWERCASE" | "CMD_LINE" | "URL_DECODE" | "BASE64_DECODE" | "HEX_DECODE" | "MD5" | "REPLACE_COMMENTS" | "ESCAPE_SEQ_DECODE" | "SQL_HEX_DECODE" | "CSS_DECODE" | "JS_DECODE" | "NORMALIZE_PATH" | "NORMALIZE_PATH_WIN" | "REMOVE_NULLS" | "REPLACE_NULLS" | "BASE64_DECODE_EXT" | "URL_DECODE_UNI" | "UTF8_TO_UNICODE")
                                            },
                                          ]
                                        }?,
                                        cookie: {
                                          name: ::String,
                                          text_transformations: Array[
                                            {
                                              priority: ::Integer,
                                              type: ("NONE" | "COMPRESS_WHITE_SPACE" | "HTML_ENTITY_DECODE" | "LOWERCASE" | "CMD_LINE" | "URL_DECODE" | "BASE64_DECODE" | "HEX_DECODE" | "MD5" | "REPLACE_COMMENTS" | "ESCAPE_SEQ_DECODE" | "SQL_HEX_DECODE" | "CSS_DECODE" | "JS_DECODE" | "NORMALIZE_PATH" | "NORMALIZE_PATH_WIN" | "REMOVE_NULLS" | "REPLACE_NULLS" | "BASE64_DECODE_EXT" | "URL_DECODE_UNI" | "UTF8_TO_UNICODE")
                                            },
                                          ]
                                        }?,
                                        query_argument: {
                                          name: ::String,
                                          text_transformations: Array[
                                            {
                                              priority: ::Integer,
                                              type: ("NONE" | "COMPRESS_WHITE_SPACE" | "HTML_ENTITY_DECODE" | "LOWERCASE" | "CMD_LINE" | "URL_DECODE" | "BASE64_DECODE" | "HEX_DECODE" | "MD5" | "REPLACE_COMMENTS" | "ESCAPE_SEQ_DECODE" | "SQL_HEX_DECODE" | "CSS_DECODE" | "JS_DECODE" | "NORMALIZE_PATH" | "NORMALIZE_PATH_WIN" | "REMOVE_NULLS" | "REPLACE_NULLS" | "BASE64_DECODE_EXT" | "URL_DECODE_UNI" | "UTF8_TO_UNICODE")
                                            },
                                          ]
                                        }?,
                                        query_string: {
                                          text_transformations: Array[
                                            {
                                              priority: ::Integer,
                                              type: ("NONE" | "COMPRESS_WHITE_SPACE" | "HTML_ENTITY_DECODE" | "LOWERCASE" | "CMD_LINE" | "URL_DECODE" | "BASE64_DECODE" | "HEX_DECODE" | "MD5" | "REPLACE_COMMENTS" | "ESCAPE_SEQ_DECODE" | "SQL_HEX_DECODE" | "CSS_DECODE" | "JS_DECODE" | "NORMALIZE_PATH" | "NORMALIZE_PATH_WIN" | "REMOVE_NULLS" | "REPLACE_NULLS" | "BASE64_DECODE_EXT" | "URL_DECODE_UNI" | "UTF8_TO_UNICODE")
                                            },
                                          ]
                                        }?,
                                        http_method: {
                                        }?,
                                        forwarded_ip: {
                                        }?,
                                        ip: {
                                        }?,
                                        label_namespace: {
                                          namespace: ::String
                                        }?,
                                        uri_path: {
                                          text_transformations: Array[
                                            {
                                              priority: ::Integer,
                                              type: ("NONE" | "COMPRESS_WHITE_SPACE" | "HTML_ENTITY_DECODE" | "LOWERCASE" | "CMD_LINE" | "URL_DECODE" | "BASE64_DECODE" | "HEX_DECODE" | "MD5" | "REPLACE_COMMENTS" | "ESCAPE_SEQ_DECODE" | "SQL_HEX_DECODE" | "CSS_DECODE" | "JS_DECODE" | "NORMALIZE_PATH" | "NORMALIZE_PATH_WIN" | "REMOVE_NULLS" | "REPLACE_NULLS" | "BASE64_DECODE_EXT" | "URL_DECODE_UNI" | "UTF8_TO_UNICODE")
                                            },
                                          ]
                                        }?
                                      },
                                    ]?
                                  }?,
                                  and_statement: {
                                    statements: Array[
                                      untyped,
                                    ]
                                  }?,
                                  or_statement: {
                                    statements: Array[
                                      untyped,
                                    ]
                                  }?,
                                  not_statement: {
                                    statement: untyped
                                  }?,
                                  managed_rule_group_statement: {
                                    vendor_name: ::String,
                                    name: ::String,
                                    version: ::String?,
                                    excluded_rules: Array[
                                      {
                                        name: ::String
                                      },
                                    ]?,
                                    scope_down_statement: untyped?,
                                    managed_rule_group_configs: Array[
                                      {
                                        login_path: ::String?,
                                        payload_type: ("JSON" | "FORM_ENCODED")?,
                                        username_field: {
                                          identifier: ::String
                                        }?,
                                        password_field: {
                                          identifier: ::String
                                        }?,
                                        aws_managed_rules_bot_control_rule_set: {
                                          inspection_level: ("COMMON" | "TARGETED"),
                                          enable_machine_learning: bool?
                                        }?,
                                        aws_managed_rules_atp_rule_set: {
                                          login_path: ::String,
                                          request_inspection: {
                                            payload_type: ("JSON" | "FORM_ENCODED"),
                                            username_field: {
                                              identifier: ::String
                                            },
                                            password_field: {
                                              identifier: ::String
                                            }
                                          }?,
                                          response_inspection: {
                                            status_code: {
                                              success_codes: Array[::Integer],
                                              failure_codes: Array[::Integer]
                                            }?,
                                            header: {
                                              name: ::String,
                                              success_values: Array[::String],
                                              failure_values: Array[::String]
                                            }?,
                                            body_contains: {
                                              success_strings: Array[::String],
                                              failure_strings: Array[::String]
                                            }?,
                                            json: {
                                              identifier: ::String,
                                              success_values: Array[::String],
                                              failure_values: Array[::String]
                                            }?
                                          }?,
                                          enable_regex_in_path: bool?
                                        }?,
                                        aws_managed_rules_acfp_rule_set: {
                                          creation_path: ::String,
                                          registration_page_path: ::String,
                                          request_inspection: {
                                            payload_type: ("JSON" | "FORM_ENCODED"),
                                            username_field: {
                                              identifier: ::String
                                            }?,
                                            password_field: {
                                              identifier: ::String
                                            }?,
                                            email_field: {
                                              identifier: ::String
                                            }?,
                                            phone_number_fields: Array[
                                              {
                                                identifier: ::String
                                              },
                                            ]?,
                                            address_fields: Array[
                                              {
                                                identifier: ::String
                                              },
                                            ]?
                                          },
                                          response_inspection: {
                                            status_code: {
                                              success_codes: Array[::Integer],
                                              failure_codes: Array[::Integer]
                                            }?,
                                            header: {
                                              name: ::String,
                                              success_values: Array[::String],
                                              failure_values: Array[::String]
                                            }?,
                                            body_contains: {
                                              success_strings: Array[::String],
                                              failure_strings: Array[::String]
                                            }?,
                                            json: {
                                              identifier: ::String,
                                              success_values: Array[::String],
                                              failure_values: Array[::String]
                                            }?
                                          }?,
                                          enable_regex_in_path: bool?
                                        }?
                                      },
                                    ]?,
                                    rule_action_overrides: Array[
                                      {
                                        name: ::String,
                                        action_to_use: {
                                          block: {
                                            custom_response: {
                                              response_code: ::Integer,
                                              custom_response_body_key: ::String?,
                                              response_headers: Array[
                                                {
                                                  name: ::String,
                                                  value: ::String
                                                },
                                              ]?
                                            }?
                                          }?,
                                          allow: {
                                            custom_request_handling: {
                                              insert_headers: Array[
                                                {
                                                  name: ::String,
                                                  value: ::String
                                                },
                                              ]
                                            }?
                                          }?,
                                          count: {
                                            custom_request_handling: {
                                              insert_headers: Array[
                                                {
                                                  name: ::String,
                                                  value: ::String
                                                },
                                              ]
                                            }?
                                          }?,
                                          captcha: {
                                            custom_request_handling: {
                                              insert_headers: Array[
                                                {
                                                  name: ::String,
                                                  value: ::String
                                                },
                                              ]
                                            }?
                                          }?,
                                          challenge: {
                                            custom_request_handling: {
                                              insert_headers: Array[
                                                {
                                                  name: ::String,
                                                  value: ::String
                                                },
                                              ]
                                            }?
                                          }?
                                        }
                                      },
                                    ]?
                                  }?,
                                  label_match_statement: {
                                    scope: ("LABEL" | "NAMESPACE"),
                                    key: ::String
                                  }?,
                                  regex_match_statement: {
                                    regex_string: ::String,
                                    field_to_match: {
                                      single_header: {
                                        name: ::String
                                      }?,
                                      single_query_argument: {
                                        name: ::String
                                      }?,
                                      all_query_arguments: {
                                      }?,
                                      uri_path: {
                                      }?,
                                      query_string: {
                                      }?,
                                      body: {
                                        oversize_handling: ("CONTINUE" | "MATCH" | "NO_MATCH")?
                                      }?,
                                      method: {
                                      }?,
                                      json_body: {
                                        match_pattern: {
                                          all: {
                                          }?,
                                          included_paths: Array[::String]?
                                        },
                                        match_scope: ("ALL" | "KEY" | "VALUE"),
                                        invalid_fallback_behavior: ("MATCH" | "NO_MATCH" | "EVALUATE_AS_STRING")?,
                                        oversize_handling: ("CONTINUE" | "MATCH" | "NO_MATCH")?
                                      }?,
                                      headers: {
                                        match_pattern: {
                                          all: {
                                          }?,
                                          included_headers: Array[::String]?,
                                          excluded_headers: Array[::String]?
                                        },
                                        match_scope: ("ALL" | "KEY" | "VALUE"),
                                        oversize_handling: ("CONTINUE" | "MATCH" | "NO_MATCH")
                                      }?,
                                      cookies: {
                                        match_pattern: {
                                          all: {
                                          }?,
                                          included_cookies: Array[::String]?,
                                          excluded_cookies: Array[::String]?
                                        },
                                        match_scope: ("ALL" | "KEY" | "VALUE"),
                                        oversize_handling: ("CONTINUE" | "MATCH" | "NO_MATCH")
                                      }?,
                                      header_order: {
                                        oversize_handling: ("CONTINUE" | "MATCH" | "NO_MATCH")
                                      }?,
                                      ja3_fingerprint: {
                                        fallback_behavior: ("MATCH" | "NO_MATCH")
                                      }?
                                    },
                                    text_transformations: Array[
                                      {
                                        priority: ::Integer,
                                        type: ("NONE" | "COMPRESS_WHITE_SPACE" | "HTML_ENTITY_DECODE" | "LOWERCASE" | "CMD_LINE" | "URL_DECODE" | "BASE64_DECODE" | "HEX_DECODE" | "MD5" | "REPLACE_COMMENTS" | "ESCAPE_SEQ_DECODE" | "SQL_HEX_DECODE" | "CSS_DECODE" | "JS_DECODE" | "NORMALIZE_PATH" | "NORMALIZE_PATH_WIN" | "REMOVE_NULLS" | "REPLACE_NULLS" | "BASE64_DECODE_EXT" | "URL_DECODE_UNI" | "UTF8_TO_UNICODE")
                                      },
                                    ]
                                  }?
                                },
                                action: {
                                  block: {
                                    custom_response: {
                                      response_code: ::Integer,
                                      custom_response_body_key: ::String?,
                                      response_headers: Array[
                                        {
                                          name: ::String,
                                          value: ::String
                                        },
                                      ]?
                                    }?
                                  }?,
                                  allow: {
                                    custom_request_handling: {
                                      insert_headers: Array[
                                        {
                                          name: ::String,
                                          value: ::String
                                        },
                                      ]
                                    }?
                                  }?,
                                  count: {
                                    custom_request_handling: {
                                      insert_headers: Array[
                                        {
                                          name: ::String,
                                          value: ::String
                                        },
                                      ]
                                    }?
                                  }?,
                                  captcha: {
                                    custom_request_handling: {
                                      insert_headers: Array[
                                        {
                                          name: ::String,
                                          value: ::String
                                        },
                                      ]
                                    }?
                                  }?,
                                  challenge: {
                                    custom_request_handling: {
                                      insert_headers: Array[
                                        {
                                          name: ::String,
                                          value: ::String
                                        },
                                      ]
                                    }?
                                  }?
                                }?,
                                override_action: {
                                  count: {
                                    custom_request_handling: {
                                      insert_headers: Array[
                                        {
                                          name: ::String,
                                          value: ::String
                                        },
                                      ]
                                    }?
                                  }?,
                                  none: {
                                  }?
                                }?,
                                rule_labels: Array[
                                  {
                                    name: ::String
                                  },
                                ]?,
                                visibility_config: {
                                  sampled_requests_enabled: bool,
                                  cloud_watch_metrics_enabled: bool,
                                  metric_name: ::String
                                },
                                captcha_config: {
                                  immunity_time_property: {
                                    immunity_time: ::Integer
                                  }?
                                }?,
                                challenge_config: {
                                  immunity_time_property: {
                                    immunity_time: ::Integer
                                  }?
                                }?
                              },
                            ],
                            visibility_config: {
                              sampled_requests_enabled: bool,
                              cloud_watch_metrics_enabled: bool,
                              metric_name: ::String
                            },
                            ?tags: Array[
                              {
                                key: ::String,
                                value: ::String
                              },
                            ],
                            ?custom_response_bodies: Hash[::String, {
                                content_type: ("TEXT_PLAIN" | "TEXT_HTML" | "APPLICATION_JSON"),
                                content: ::String
                              }],
                            ?captcha_config: {
                              immunity_time_property: {
                                immunity_time: ::Integer
                              }?
                            },
                            ?challenge_config: {
                              immunity_time_property: {
                                immunity_time: ::Integer
                              }?
                            },
                            ?token_domains: Array[::String],
                            ?association_config: {
                              request_body: Hash[("CLOUDFRONT" | "API_GATEWAY" | "COGNITO_USER_POOL" | "APP_RUNNER_SERVICE" | "VERIFIED_ACCESS_INSTANCE"), {
                                  default_size_inspection_limit: ("KB_16" | "KB_32" | "KB_48" | "KB_64")
                                }]?
                            }
                          ) -> _CreateWebACLResponseSuccess
                        | (Hash[Symbol, untyped] params, ?Hash[Symbol, untyped] options) -> _CreateWebACLResponseSuccess

      interface _DeleteAPIKeyResponseSuccess
        include ::Seahorse::Client::_ResponseSuccess[Types::DeleteAPIKeyResponse]
      end
      # https://docs.aws.amazon.com/sdk-for-ruby/v3/api/Aws/WAFV2/Client.html#delete_api_key-instance_method
      def delete_api_key: (
                            scope: ("CLOUDFRONT" | "REGIONAL"),
                            api_key: ::String
                          ) -> _DeleteAPIKeyResponseSuccess
                        | (Hash[Symbol, untyped] params, ?Hash[Symbol, untyped] options) -> _DeleteAPIKeyResponseSuccess

      interface _DeleteFirewallManagerRuleGroupsResponseSuccess
        include ::Seahorse::Client::_ResponseSuccess[Types::DeleteFirewallManagerRuleGroupsResponse]
        def next_web_acl_lock_token: () -> ::String
      end
      # https://docs.aws.amazon.com/sdk-for-ruby/v3/api/Aws/WAFV2/Client.html#delete_firewall_manager_rule_groups-instance_method
      def delete_firewall_manager_rule_groups: (
                                                 web_acl_arn: ::String,
                                                 web_acl_lock_token: ::String
                                               ) -> _DeleteFirewallManagerRuleGroupsResponseSuccess
                                             | (Hash[Symbol, untyped] params, ?Hash[Symbol, untyped] options) -> _DeleteFirewallManagerRuleGroupsResponseSuccess

      interface _DeleteIPSetResponseSuccess
        include ::Seahorse::Client::_ResponseSuccess[Types::DeleteIPSetResponse]
      end
      # https://docs.aws.amazon.com/sdk-for-ruby/v3/api/Aws/WAFV2/Client.html#delete_ip_set-instance_method
      def delete_ip_set: (
                           name: ::String,
                           scope: ("CLOUDFRONT" | "REGIONAL"),
                           id: ::String,
                           lock_token: ::String
                         ) -> _DeleteIPSetResponseSuccess
                       | (Hash[Symbol, untyped] params, ?Hash[Symbol, untyped] options) -> _DeleteIPSetResponseSuccess

      interface _DeleteLoggingConfigurationResponseSuccess
        include ::Seahorse::Client::_ResponseSuccess[Types::DeleteLoggingConfigurationResponse]
      end
      # https://docs.aws.amazon.com/sdk-for-ruby/v3/api/Aws/WAFV2/Client.html#delete_logging_configuration-instance_method
      def delete_logging_configuration: (
                                          resource_arn: ::String,
                                          ?log_type: ("WAF_LOGS"),
                                          ?log_scope: ("CUSTOMER" | "SECURITY_LAKE")
                                        ) -> _DeleteLoggingConfigurationResponseSuccess
                                      | (Hash[Symbol, untyped] params, ?Hash[Symbol, untyped] options) -> _DeleteLoggingConfigurationResponseSuccess

      interface _DeletePermissionPolicyResponseSuccess
        include ::Seahorse::Client::_ResponseSuccess[Types::DeletePermissionPolicyResponse]
      end
      # https://docs.aws.amazon.com/sdk-for-ruby/v3/api/Aws/WAFV2/Client.html#delete_permission_policy-instance_method
      def delete_permission_policy: (
                                      resource_arn: ::String
                                    ) -> _DeletePermissionPolicyResponseSuccess
                                  | (Hash[Symbol, untyped] params, ?Hash[Symbol, untyped] options) -> _DeletePermissionPolicyResponseSuccess

      interface _DeleteRegexPatternSetResponseSuccess
        include ::Seahorse::Client::_ResponseSuccess[Types::DeleteRegexPatternSetResponse]
      end
      # https://docs.aws.amazon.com/sdk-for-ruby/v3/api/Aws/WAFV2/Client.html#delete_regex_pattern_set-instance_method
      def delete_regex_pattern_set: (
                                      name: ::String,
                                      scope: ("CLOUDFRONT" | "REGIONAL"),
                                      id: ::String,
                                      lock_token: ::String
                                    ) -> _DeleteRegexPatternSetResponseSuccess
                                  | (Hash[Symbol, untyped] params, ?Hash[Symbol, untyped] options) -> _DeleteRegexPatternSetResponseSuccess

      interface _DeleteRuleGroupResponseSuccess
        include ::Seahorse::Client::_ResponseSuccess[Types::DeleteRuleGroupResponse]
      end
      # https://docs.aws.amazon.com/sdk-for-ruby/v3/api/Aws/WAFV2/Client.html#delete_rule_group-instance_method
      def delete_rule_group: (
                               name: ::String,
                               scope: ("CLOUDFRONT" | "REGIONAL"),
                               id: ::String,
                               lock_token: ::String
                             ) -> _DeleteRuleGroupResponseSuccess
                           | (Hash[Symbol, untyped] params, ?Hash[Symbol, untyped] options) -> _DeleteRuleGroupResponseSuccess

      interface _DeleteWebACLResponseSuccess
        include ::Seahorse::Client::_ResponseSuccess[Types::DeleteWebACLResponse]
      end
      # https://docs.aws.amazon.com/sdk-for-ruby/v3/api/Aws/WAFV2/Client.html#delete_web_acl-instance_method
      def delete_web_acl: (
                            name: ::String,
                            scope: ("CLOUDFRONT" | "REGIONAL"),
                            id: ::String,
                            lock_token: ::String
                          ) -> _DeleteWebACLResponseSuccess
                        | (Hash[Symbol, untyped] params, ?Hash[Symbol, untyped] options) -> _DeleteWebACLResponseSuccess

      interface _DescribeAllManagedProductsResponseSuccess
        include ::Seahorse::Client::_ResponseSuccess[Types::DescribeAllManagedProductsResponse]
        def managed_products: () -> ::Array[Types::ManagedProductDescriptor]
      end
      # https://docs.aws.amazon.com/sdk-for-ruby/v3/api/Aws/WAFV2/Client.html#describe_all_managed_products-instance_method
      def describe_all_managed_products: (
                                           scope: ("CLOUDFRONT" | "REGIONAL")
                                         ) -> _DescribeAllManagedProductsResponseSuccess
                                       | (Hash[Symbol, untyped] params, ?Hash[Symbol, untyped] options) -> _DescribeAllManagedProductsResponseSuccess

      interface _DescribeManagedProductsByVendorResponseSuccess
        include ::Seahorse::Client::_ResponseSuccess[Types::DescribeManagedProductsByVendorResponse]
        def managed_products: () -> ::Array[Types::ManagedProductDescriptor]
      end
      # https://docs.aws.amazon.com/sdk-for-ruby/v3/api/Aws/WAFV2/Client.html#describe_managed_products_by_vendor-instance_method
      def describe_managed_products_by_vendor: (
                                                 vendor_name: ::String,
                                                 scope: ("CLOUDFRONT" | "REGIONAL")
                                               ) -> _DescribeManagedProductsByVendorResponseSuccess
                                             | (Hash[Symbol, untyped] params, ?Hash[Symbol, untyped] options) -> _DescribeManagedProductsByVendorResponseSuccess

      interface _DescribeManagedRuleGroupResponseSuccess
        include ::Seahorse::Client::_ResponseSuccess[Types::DescribeManagedRuleGroupResponse]
        def version_name: () -> ::String
        def sns_topic_arn: () -> ::String
        def capacity: () -> ::Integer
        def rules: () -> ::Array[Types::RuleSummary]
        def label_namespace: () -> ::String
        def available_labels: () -> ::Array[Types::LabelSummary]
        def consumed_labels: () -> ::Array[Types::LabelSummary]
      end
      # https://docs.aws.amazon.com/sdk-for-ruby/v3/api/Aws/WAFV2/Client.html#describe_managed_rule_group-instance_method
      def describe_managed_rule_group: (
                                         vendor_name: ::String,
                                         name: ::String,
                                         scope: ("CLOUDFRONT" | "REGIONAL"),
                                         ?version_name: ::String
                                       ) -> _DescribeManagedRuleGroupResponseSuccess
                                     | (Hash[Symbol, untyped] params, ?Hash[Symbol, untyped] options) -> _DescribeManagedRuleGroupResponseSuccess

      interface _DisassociateWebACLResponseSuccess
        include ::Seahorse::Client::_ResponseSuccess[Types::DisassociateWebACLResponse]
      end
      # https://docs.aws.amazon.com/sdk-for-ruby/v3/api/Aws/WAFV2/Client.html#disassociate_web_acl-instance_method
      def disassociate_web_acl: (
                                  resource_arn: ::String
                                ) -> _DisassociateWebACLResponseSuccess
                              | (Hash[Symbol, untyped] params, ?Hash[Symbol, untyped] options) -> _DisassociateWebACLResponseSuccess

      interface _GenerateMobileSdkReleaseUrlResponseSuccess
        include ::Seahorse::Client::_ResponseSuccess[Types::GenerateMobileSdkReleaseUrlResponse]
        def url: () -> ::String
      end
      # https://docs.aws.amazon.com/sdk-for-ruby/v3/api/Aws/WAFV2/Client.html#generate_mobile_sdk_release_url-instance_method
      def generate_mobile_sdk_release_url: (
                                             platform: ("IOS" | "ANDROID"),
                                             release_version: ::String
                                           ) -> _GenerateMobileSdkReleaseUrlResponseSuccess
                                         | (Hash[Symbol, untyped] params, ?Hash[Symbol, untyped] options) -> _GenerateMobileSdkReleaseUrlResponseSuccess

      interface _GetDecryptedAPIKeyResponseSuccess
        include ::Seahorse::Client::_ResponseSuccess[Types::GetDecryptedAPIKeyResponse]
        def token_domains: () -> ::Array[::String]
        def creation_timestamp: () -> ::Time
      end
      # https://docs.aws.amazon.com/sdk-for-ruby/v3/api/Aws/WAFV2/Client.html#get_decrypted_api_key-instance_method
      def get_decrypted_api_key: (
                                   scope: ("CLOUDFRONT" | "REGIONAL"),
                                   api_key: ::String
                                 ) -> _GetDecryptedAPIKeyResponseSuccess
                               | (Hash[Symbol, untyped] params, ?Hash[Symbol, untyped] options) -> _GetDecryptedAPIKeyResponseSuccess

      interface _GetIPSetResponseSuccess
        include ::Seahorse::Client::_ResponseSuccess[Types::GetIPSetResponse]
        def ip_set: () -> Types::IPSet
        def lock_token: () -> ::String
      end
      # https://docs.aws.amazon.com/sdk-for-ruby/v3/api/Aws/WAFV2/Client.html#get_ip_set-instance_method
      def get_ip_set: (
                        name: ::String,
                        scope: ("CLOUDFRONT" | "REGIONAL"),
                        id: ::String
                      ) -> _GetIPSetResponseSuccess
                    | (Hash[Symbol, untyped] params, ?Hash[Symbol, untyped] options) -> _GetIPSetResponseSuccess

      interface _GetLoggingConfigurationResponseSuccess
        include ::Seahorse::Client::_ResponseSuccess[Types::GetLoggingConfigurationResponse]
        def logging_configuration: () -> Types::LoggingConfiguration
      end
      # https://docs.aws.amazon.com/sdk-for-ruby/v3/api/Aws/WAFV2/Client.html#get_logging_configuration-instance_method
      def get_logging_configuration: (
                                       resource_arn: ::String,
                                       ?log_type: ("WAF_LOGS"),
                                       ?log_scope: ("CUSTOMER" | "SECURITY_LAKE")
                                     ) -> _GetLoggingConfigurationResponseSuccess
                                   | (Hash[Symbol, untyped] params, ?Hash[Symbol, untyped] options) -> _GetLoggingConfigurationResponseSuccess

      interface _GetManagedRuleSetResponseSuccess
        include ::Seahorse::Client::_ResponseSuccess[Types::GetManagedRuleSetResponse]
        def managed_rule_set: () -> Types::ManagedRuleSet
        def lock_token: () -> ::String
      end
      # https://docs.aws.amazon.com/sdk-for-ruby/v3/api/Aws/WAFV2/Client.html#get_managed_rule_set-instance_method
      def get_managed_rule_set: (
                                  name: ::String,
                                  scope: ("CLOUDFRONT" | "REGIONAL"),
                                  id: ::String
                                ) -> _GetManagedRuleSetResponseSuccess
                              | (Hash[Symbol, untyped] params, ?Hash[Symbol, untyped] options) -> _GetManagedRuleSetResponseSuccess

      interface _GetMobileSdkReleaseResponseSuccess
        include ::Seahorse::Client::_ResponseSuccess[Types::GetMobileSdkReleaseResponse]
        def mobile_sdk_release: () -> Types::MobileSdkRelease
      end
      # https://docs.aws.amazon.com/sdk-for-ruby/v3/api/Aws/WAFV2/Client.html#get_mobile_sdk_release-instance_method
      def get_mobile_sdk_release: (
                                    platform: ("IOS" | "ANDROID"),
                                    release_version: ::String
                                  ) -> _GetMobileSdkReleaseResponseSuccess
                                | (Hash[Symbol, untyped] params, ?Hash[Symbol, untyped] options) -> _GetMobileSdkReleaseResponseSuccess

      interface _GetPermissionPolicyResponseSuccess
        include ::Seahorse::Client::_ResponseSuccess[Types::GetPermissionPolicyResponse]
        def policy: () -> ::String
      end
      # https://docs.aws.amazon.com/sdk-for-ruby/v3/api/Aws/WAFV2/Client.html#get_permission_policy-instance_method
      def get_permission_policy: (
                                   resource_arn: ::String
                                 ) -> _GetPermissionPolicyResponseSuccess
                               | (Hash[Symbol, untyped] params, ?Hash[Symbol, untyped] options) -> _GetPermissionPolicyResponseSuccess

      interface _GetRateBasedStatementManagedKeysResponseSuccess
        include ::Seahorse::Client::_ResponseSuccess[Types::GetRateBasedStatementManagedKeysResponse]
        def managed_keys_ipv4: () -> Types::RateBasedStatementManagedKeysIPSet
        def managed_keys_ipv6: () -> Types::RateBasedStatementManagedKeysIPSet
      end
      # https://docs.aws.amazon.com/sdk-for-ruby/v3/api/Aws/WAFV2/Client.html#get_rate_based_statement_managed_keys-instance_method
      def get_rate_based_statement_managed_keys: (
                                                   scope: ("CLOUDFRONT" | "REGIONAL"),
                                                   web_acl_name: ::String,
                                                   web_acl_id: ::String,
                                                   ?rule_group_rule_name: ::String,
                                                   rule_name: ::String
                                                 ) -> _GetRateBasedStatementManagedKeysResponseSuccess
                                               | (Hash[Symbol, untyped] params, ?Hash[Symbol, untyped] options) -> _GetRateBasedStatementManagedKeysResponseSuccess

      interface _GetRegexPatternSetResponseSuccess
        include ::Seahorse::Client::_ResponseSuccess[Types::GetRegexPatternSetResponse]
        def regex_pattern_set: () -> Types::RegexPatternSet
        def lock_token: () -> ::String
      end
      # https://docs.aws.amazon.com/sdk-for-ruby/v3/api/Aws/WAFV2/Client.html#get_regex_pattern_set-instance_method
      def get_regex_pattern_set: (
                                   name: ::String,
                                   scope: ("CLOUDFRONT" | "REGIONAL"),
                                   id: ::String
                                 ) -> _GetRegexPatternSetResponseSuccess
                               | (Hash[Symbol, untyped] params, ?Hash[Symbol, untyped] options) -> _GetRegexPatternSetResponseSuccess

      interface _GetRuleGroupResponseSuccess
        include ::Seahorse::Client::_ResponseSuccess[Types::GetRuleGroupResponse]
        def rule_group: () -> Types::RuleGroup
        def lock_token: () -> ::String
      end
      # https://docs.aws.amazon.com/sdk-for-ruby/v3/api/Aws/WAFV2/Client.html#get_rule_group-instance_method
      def get_rule_group: (
                            ?name: ::String,
                            ?scope: ("CLOUDFRONT" | "REGIONAL"),
                            ?id: ::String,
                            ?arn: ::String
                          ) -> _GetRuleGroupResponseSuccess
                        | (?Hash[Symbol, untyped] params, ?Hash[Symbol, untyped] options) -> _GetRuleGroupResponseSuccess

      interface _GetSampledRequestsResponseSuccess
        include ::Seahorse::Client::_ResponseSuccess[Types::GetSampledRequestsResponse]
        def sampled_requests: () -> ::Array[Types::SampledHTTPRequest]
        def population_size: () -> ::Integer
        def time_window: () -> Types::TimeWindow
      end
      # https://docs.aws.amazon.com/sdk-for-ruby/v3/api/Aws/WAFV2/Client.html#get_sampled_requests-instance_method
      def get_sampled_requests: (
                                  web_acl_arn: ::String,
                                  rule_metric_name: ::String,
                                  scope: ("CLOUDFRONT" | "REGIONAL"),
                                  time_window: {
                                    start_time: ::Time,
                                    end_time: ::Time
                                  },
                                  max_items: ::Integer
                                ) -> _GetSampledRequestsResponseSuccess
                              | (Hash[Symbol, untyped] params, ?Hash[Symbol, untyped] options) -> _GetSampledRequestsResponseSuccess

      interface _GetWebACLResponseSuccess
        include ::Seahorse::Client::_ResponseSuccess[Types::GetWebACLResponse]
        def web_acl: () -> Types::WebACL
        def lock_token: () -> ::String
        def application_integration_url: () -> ::String
      end
      # https://docs.aws.amazon.com/sdk-for-ruby/v3/api/Aws/WAFV2/Client.html#get_web_acl-instance_method
      def get_web_acl: (
                         name: ::String,
                         scope: ("CLOUDFRONT" | "REGIONAL"),
                         id: ::String
                       ) -> _GetWebACLResponseSuccess
                     | (Hash[Symbol, untyped] params, ?Hash[Symbol, untyped] options) -> _GetWebACLResponseSuccess

      interface _GetWebACLForResourceResponseSuccess
        include ::Seahorse::Client::_ResponseSuccess[Types::GetWebACLForResourceResponse]
        def web_acl: () -> Types::WebACL
      end
      # https://docs.aws.amazon.com/sdk-for-ruby/v3/api/Aws/WAFV2/Client.html#get_web_acl_for_resource-instance_method
      def get_web_acl_for_resource: (
                                      resource_arn: ::String
                                    ) -> _GetWebACLForResourceResponseSuccess
                                  | (Hash[Symbol, untyped] params, ?Hash[Symbol, untyped] options) -> _GetWebACLForResourceResponseSuccess

      interface _ListAPIKeysResponseSuccess
        include ::Seahorse::Client::_ResponseSuccess[Types::ListAPIKeysResponse]
        def next_marker: () -> ::String
        def api_key_summaries: () -> ::Array[Types::APIKeySummary]
        def application_integration_url: () -> ::String
      end
      # https://docs.aws.amazon.com/sdk-for-ruby/v3/api/Aws/WAFV2/Client.html#list_api_keys-instance_method
      def list_api_keys: (
                           scope: ("CLOUDFRONT" | "REGIONAL"),
                           ?next_marker: ::String,
                           ?limit: ::Integer
                         ) -> _ListAPIKeysResponseSuccess
                       | (Hash[Symbol, untyped] params, ?Hash[Symbol, untyped] options) -> _ListAPIKeysResponseSuccess

      interface _ListAvailableManagedRuleGroupVersionsResponseSuccess
        include ::Seahorse::Client::_ResponseSuccess[Types::ListAvailableManagedRuleGroupVersionsResponse]
        def next_marker: () -> ::String
        def versions: () -> ::Array[Types::ManagedRuleGroupVersion]
        def current_default_version: () -> ::String
      end
      # https://docs.aws.amazon.com/sdk-for-ruby/v3/api/Aws/WAFV2/Client.html#list_available_managed_rule_group_versions-instance_method
      def list_available_managed_rule_group_versions: (
                                                        vendor_name: ::String,
                                                        name: ::String,
                                                        scope: ("CLOUDFRONT" | "REGIONAL"),
                                                        ?next_marker: ::String,
                                                        ?limit: ::Integer
                                                      ) -> _ListAvailableManagedRuleGroupVersionsResponseSuccess
                                                    | (Hash[Symbol, untyped] params, ?Hash[Symbol, untyped] options) -> _ListAvailableManagedRuleGroupVersionsResponseSuccess

      interface _ListAvailableManagedRuleGroupsResponseSuccess
        include ::Seahorse::Client::_ResponseSuccess[Types::ListAvailableManagedRuleGroupsResponse]
        def next_marker: () -> ::String
        def managed_rule_groups: () -> ::Array[Types::ManagedRuleGroupSummary]
      end
      # https://docs.aws.amazon.com/sdk-for-ruby/v3/api/Aws/WAFV2/Client.html#list_available_managed_rule_groups-instance_method
      def list_available_managed_rule_groups: (
                                                scope: ("CLOUDFRONT" | "REGIONAL"),
                                                ?next_marker: ::String,
                                                ?limit: ::Integer
                                              ) -> _ListAvailableManagedRuleGroupsResponseSuccess
                                            | (Hash[Symbol, untyped] params, ?Hash[Symbol, untyped] options) -> _ListAvailableManagedRuleGroupsResponseSuccess

      interface _ListIPSetsResponseSuccess
        include ::Seahorse::Client::_ResponseSuccess[Types::ListIPSetsResponse]
        def next_marker: () -> ::String
        def ip_sets: () -> ::Array[Types::IPSetSummary]
      end
      # https://docs.aws.amazon.com/sdk-for-ruby/v3/api/Aws/WAFV2/Client.html#list_ip_sets-instance_method
      def list_ip_sets: (
                          scope: ("CLOUDFRONT" | "REGIONAL"),
                          ?next_marker: ::String,
                          ?limit: ::Integer
                        ) -> _ListIPSetsResponseSuccess
                      | (Hash[Symbol, untyped] params, ?Hash[Symbol, untyped] options) -> _ListIPSetsResponseSuccess

      interface _ListLoggingConfigurationsResponseSuccess
        include ::Seahorse::Client::_ResponseSuccess[Types::ListLoggingConfigurationsResponse]
        def logging_configurations: () -> ::Array[Types::LoggingConfiguration]
        def next_marker: () -> ::String
      end
      # https://docs.aws.amazon.com/sdk-for-ruby/v3/api/Aws/WAFV2/Client.html#list_logging_configurations-instance_method
      def list_logging_configurations: (
                                         scope: ("CLOUDFRONT" | "REGIONAL"),
                                         ?next_marker: ::String,
                                         ?limit: ::Integer,
                                         ?log_scope: ("CUSTOMER" | "SECURITY_LAKE")
                                       ) -> _ListLoggingConfigurationsResponseSuccess
                                     | (Hash[Symbol, untyped] params, ?Hash[Symbol, untyped] options) -> _ListLoggingConfigurationsResponseSuccess

      interface _ListManagedRuleSetsResponseSuccess
        include ::Seahorse::Client::_ResponseSuccess[Types::ListManagedRuleSetsResponse]
        def next_marker: () -> ::String
        def managed_rule_sets: () -> ::Array[Types::ManagedRuleSetSummary]
      end
      # https://docs.aws.amazon.com/sdk-for-ruby/v3/api/Aws/WAFV2/Client.html#list_managed_rule_sets-instance_method
      def list_managed_rule_sets: (
                                    scope: ("CLOUDFRONT" | "REGIONAL"),
                                    ?next_marker: ::String,
                                    ?limit: ::Integer
                                  ) -> _ListManagedRuleSetsResponseSuccess
                                | (Hash[Symbol, untyped] params, ?Hash[Symbol, untyped] options) -> _ListManagedRuleSetsResponseSuccess

      interface _ListMobileSdkReleasesResponseSuccess
        include ::Seahorse::Client::_ResponseSuccess[Types::ListMobileSdkReleasesResponse]
        def release_summaries: () -> ::Array[Types::ReleaseSummary]
        def next_marker: () -> ::String
      end
      # https://docs.aws.amazon.com/sdk-for-ruby/v3/api/Aws/WAFV2/Client.html#list_mobile_sdk_releases-instance_method
      def list_mobile_sdk_releases: (
                                      platform: ("IOS" | "ANDROID"),
                                      ?next_marker: ::String,
                                      ?limit: ::Integer
                                    ) -> _ListMobileSdkReleasesResponseSuccess
                                  | (Hash[Symbol, untyped] params, ?Hash[Symbol, untyped] options) -> _ListMobileSdkReleasesResponseSuccess

      interface _ListRegexPatternSetsResponseSuccess
        include ::Seahorse::Client::_ResponseSuccess[Types::ListRegexPatternSetsResponse]
        def next_marker: () -> ::String
        def regex_pattern_sets: () -> ::Array[Types::RegexPatternSetSummary]
      end
      # https://docs.aws.amazon.com/sdk-for-ruby/v3/api/Aws/WAFV2/Client.html#list_regex_pattern_sets-instance_method
      def list_regex_pattern_sets: (
                                     scope: ("CLOUDFRONT" | "REGIONAL"),
                                     ?next_marker: ::String,
                                     ?limit: ::Integer
                                   ) -> _ListRegexPatternSetsResponseSuccess
                                 | (Hash[Symbol, untyped] params, ?Hash[Symbol, untyped] options) -> _ListRegexPatternSetsResponseSuccess

      interface _ListResourcesForWebACLResponseSuccess
        include ::Seahorse::Client::_ResponseSuccess[Types::ListResourcesForWebACLResponse]
        def resource_arns: () -> ::Array[::String]
      end
      # https://docs.aws.amazon.com/sdk-for-ruby/v3/api/Aws/WAFV2/Client.html#list_resources_for_web_acl-instance_method
      def list_resources_for_web_acl: (
                                        web_acl_arn: ::String,
                                        ?resource_type: ("APPLICATION_LOAD_BALANCER" | "API_GATEWAY" | "APPSYNC" | "COGNITO_USER_POOL" | "APP_RUNNER_SERVICE" | "VERIFIED_ACCESS_INSTANCE")
                                      ) -> _ListResourcesForWebACLResponseSuccess
                                    | (Hash[Symbol, untyped] params, ?Hash[Symbol, untyped] options) -> _ListResourcesForWebACLResponseSuccess

      interface _ListRuleGroupsResponseSuccess
        include ::Seahorse::Client::_ResponseSuccess[Types::ListRuleGroupsResponse]
        def next_marker: () -> ::String
        def rule_groups: () -> ::Array[Types::RuleGroupSummary]
      end
      # https://docs.aws.amazon.com/sdk-for-ruby/v3/api/Aws/WAFV2/Client.html#list_rule_groups-instance_method
      def list_rule_groups: (
                              scope: ("CLOUDFRONT" | "REGIONAL"),
                              ?next_marker: ::String,
                              ?limit: ::Integer
                            ) -> _ListRuleGroupsResponseSuccess
                          | (Hash[Symbol, untyped] params, ?Hash[Symbol, untyped] options) -> _ListRuleGroupsResponseSuccess

      interface _ListTagsForResourceResponseSuccess
        include ::Seahorse::Client::_ResponseSuccess[Types::ListTagsForResourceResponse]
        def next_marker: () -> ::String
        def tag_info_for_resource: () -> Types::TagInfoForResource
      end
      # https://docs.aws.amazon.com/sdk-for-ruby/v3/api/Aws/WAFV2/Client.html#list_tags_for_resource-instance_method
      def list_tags_for_resource: (
                                    ?next_marker: ::String,
                                    ?limit: ::Integer,
                                    resource_arn: ::String
                                  ) -> _ListTagsForResourceResponseSuccess
                                | (Hash[Symbol, untyped] params, ?Hash[Symbol, untyped] options) -> _ListTagsForResourceResponseSuccess

      interface _ListWebACLsResponseSuccess
        include ::Seahorse::Client::_ResponseSuccess[Types::ListWebACLsResponse]
        def next_marker: () -> ::String
        def web_acls: () -> ::Array[Types::WebACLSummary]
      end
      # https://docs.aws.amazon.com/sdk-for-ruby/v3/api/Aws/WAFV2/Client.html#list_web_acls-instance_method
      def list_web_acls: (
                           scope: ("CLOUDFRONT" | "REGIONAL"),
                           ?next_marker: ::String,
                           ?limit: ::Integer
                         ) -> _ListWebACLsResponseSuccess
                       | (Hash[Symbol, untyped] params, ?Hash[Symbol, untyped] options) -> _ListWebACLsResponseSuccess

      interface _PutLoggingConfigurationResponseSuccess
        include ::Seahorse::Client::_ResponseSuccess[Types::PutLoggingConfigurationResponse]
        def logging_configuration: () -> Types::LoggingConfiguration
      end
      # https://docs.aws.amazon.com/sdk-for-ruby/v3/api/Aws/WAFV2/Client.html#put_logging_configuration-instance_method
      def put_logging_configuration: (
                                       logging_configuration: {
                                         resource_arn: ::String,
                                         log_destination_configs: Array[::String],
                                         redacted_fields: Array[
                                           {
                                             single_header: {
                                               name: ::String
                                             }?,
                                             single_query_argument: {
                                               name: ::String
                                             }?,
                                             all_query_arguments: {
                                             }?,
                                             uri_path: {
                                             }?,
                                             query_string: {
                                             }?,
                                             body: {
                                               oversize_handling: ("CONTINUE" | "MATCH" | "NO_MATCH")?
                                             }?,
                                             method: {
                                             }?,
                                             json_body: {
                                               match_pattern: {
                                                 all: {
                                                 }?,
                                                 included_paths: Array[::String]?
                                               },
                                               match_scope: ("ALL" | "KEY" | "VALUE"),
                                               invalid_fallback_behavior: ("MATCH" | "NO_MATCH" | "EVALUATE_AS_STRING")?,
                                               oversize_handling: ("CONTINUE" | "MATCH" | "NO_MATCH")?
                                             }?,
                                             headers: {
                                               match_pattern: {
                                                 all: {
                                                 }?,
                                                 included_headers: Array[::String]?,
                                                 excluded_headers: Array[::String]?
                                               },
                                               match_scope: ("ALL" | "KEY" | "VALUE"),
                                               oversize_handling: ("CONTINUE" | "MATCH" | "NO_MATCH")
                                             }?,
                                             cookies: {
                                               match_pattern: {
                                                 all: {
                                                 }?,
                                                 included_cookies: Array[::String]?,
                                                 excluded_cookies: Array[::String]?
                                               },
                                               match_scope: ("ALL" | "KEY" | "VALUE"),
                                               oversize_handling: ("CONTINUE" | "MATCH" | "NO_MATCH")
                                             }?,
                                             header_order: {
                                               oversize_handling: ("CONTINUE" | "MATCH" | "NO_MATCH")
                                             }?,
                                             ja3_fingerprint: {
                                               fallback_behavior: ("MATCH" | "NO_MATCH")
                                             }?
                                           },
                                         ]?,
                                         managed_by_firewall_manager: bool?,
                                         logging_filter: {
                                           filters: Array[
                                             {
                                               behavior: ("KEEP" | "DROP"),
                                               requirement: ("MEETS_ALL" | "MEETS_ANY"),
                                               conditions: Array[
                                                 {
                                                   action_condition: {
                                                     action: ("ALLOW" | "BLOCK" | "COUNT" | "CAPTCHA" | "CHALLENGE" | "EXCLUDED_AS_COUNT")
                                                   }?,
                                                   label_name_condition: {
                                                     label_name: ::String
                                                   }?
                                                 },
                                               ]
                                             },
                                           ],
                                           default_behavior: ("KEEP" | "DROP")
                                         }?,
                                         log_type: ("WAF_LOGS")?,
                                         log_scope: ("CUSTOMER" | "SECURITY_LAKE")?
                                       }
                                     ) -> _PutLoggingConfigurationResponseSuccess
                                   | (Hash[Symbol, untyped] params, ?Hash[Symbol, untyped] options) -> _PutLoggingConfigurationResponseSuccess

      interface _PutManagedRuleSetVersionsResponseSuccess
        include ::Seahorse::Client::_ResponseSuccess[Types::PutManagedRuleSetVersionsResponse]
        def next_lock_token: () -> ::String
      end
      # https://docs.aws.amazon.com/sdk-for-ruby/v3/api/Aws/WAFV2/Client.html#put_managed_rule_set_versions-instance_method
      def put_managed_rule_set_versions: (
                                           name: ::String,
                                           scope: ("CLOUDFRONT" | "REGIONAL"),
                                           id: ::String,
                                           lock_token: ::String,
                                           ?recommended_version: ::String,
                                           ?versions_to_publish: Hash[::String, {
                                               associated_rule_group_arn: ::String?,
                                               forecasted_lifetime: ::Integer?
                                             }]
                                         ) -> _PutManagedRuleSetVersionsResponseSuccess
                                       | (Hash[Symbol, untyped] params, ?Hash[Symbol, untyped] options) -> _PutManagedRuleSetVersionsResponseSuccess

      interface _PutPermissionPolicyResponseSuccess
        include ::Seahorse::Client::_ResponseSuccess[Types::PutPermissionPolicyResponse]
      end
      # https://docs.aws.amazon.com/sdk-for-ruby/v3/api/Aws/WAFV2/Client.html#put_permission_policy-instance_method
      def put_permission_policy: (
                                   resource_arn: ::String,
                                   policy: ::String
                                 ) -> _PutPermissionPolicyResponseSuccess
                               | (Hash[Symbol, untyped] params, ?Hash[Symbol, untyped] options) -> _PutPermissionPolicyResponseSuccess

      interface _TagResourceResponseSuccess
        include ::Seahorse::Client::_ResponseSuccess[Types::TagResourceResponse]
      end
      # https://docs.aws.amazon.com/sdk-for-ruby/v3/api/Aws/WAFV2/Client.html#tag_resource-instance_method
      def tag_resource: (
                          resource_arn: ::String,
                          tags: Array[
                            {
                              key: ::String,
                              value: ::String
                            },
                          ]
                        ) -> _TagResourceResponseSuccess
                      | (Hash[Symbol, untyped] params, ?Hash[Symbol, untyped] options) -> _TagResourceResponseSuccess

      interface _UntagResourceResponseSuccess
        include ::Seahorse::Client::_ResponseSuccess[Types::UntagResourceResponse]
      end
      # https://docs.aws.amazon.com/sdk-for-ruby/v3/api/Aws/WAFV2/Client.html#untag_resource-instance_method
      def untag_resource: (
                            resource_arn: ::String,
                            tag_keys: Array[::String]
                          ) -> _UntagResourceResponseSuccess
                        | (Hash[Symbol, untyped] params, ?Hash[Symbol, untyped] options) -> _UntagResourceResponseSuccess

      interface _UpdateIPSetResponseSuccess
        include ::Seahorse::Client::_ResponseSuccess[Types::UpdateIPSetResponse]
        def next_lock_token: () -> ::String
      end
      # https://docs.aws.amazon.com/sdk-for-ruby/v3/api/Aws/WAFV2/Client.html#update_ip_set-instance_method
      def update_ip_set: (
                           name: ::String,
                           scope: ("CLOUDFRONT" | "REGIONAL"),
                           id: ::String,
                           ?description: ::String,
                           addresses: Array[::String],
                           lock_token: ::String
                         ) -> _UpdateIPSetResponseSuccess
                       | (Hash[Symbol, untyped] params, ?Hash[Symbol, untyped] options) -> _UpdateIPSetResponseSuccess

      interface _UpdateManagedRuleSetVersionExpiryDateResponseSuccess
        include ::Seahorse::Client::_ResponseSuccess[Types::UpdateManagedRuleSetVersionExpiryDateResponse]
        def expiring_version: () -> ::String
        def expiry_timestamp: () -> ::Time
        def next_lock_token: () -> ::String
      end
      # https://docs.aws.amazon.com/sdk-for-ruby/v3/api/Aws/WAFV2/Client.html#update_managed_rule_set_version_expiry_date-instance_method
      def update_managed_rule_set_version_expiry_date: (
                                                         name: ::String,
                                                         scope: ("CLOUDFRONT" | "REGIONAL"),
                                                         id: ::String,
                                                         lock_token: ::String,
                                                         version_to_expire: ::String,
                                                         expiry_timestamp: ::Time
                                                       ) -> _UpdateManagedRuleSetVersionExpiryDateResponseSuccess
                                                     | (Hash[Symbol, untyped] params, ?Hash[Symbol, untyped] options) -> _UpdateManagedRuleSetVersionExpiryDateResponseSuccess

      interface _UpdateRegexPatternSetResponseSuccess
        include ::Seahorse::Client::_ResponseSuccess[Types::UpdateRegexPatternSetResponse]
        def next_lock_token: () -> ::String
      end
      # https://docs.aws.amazon.com/sdk-for-ruby/v3/api/Aws/WAFV2/Client.html#update_regex_pattern_set-instance_method
      def update_regex_pattern_set: (
                                      name: ::String,
                                      scope: ("CLOUDFRONT" | "REGIONAL"),
                                      id: ::String,
                                      ?description: ::String,
                                      regular_expression_list: Array[
                                        {
                                          regex_string: ::String?
                                        },
                                      ],
                                      lock_token: ::String
                                    ) -> _UpdateRegexPatternSetResponseSuccess
                                  | (Hash[Symbol, untyped] params, ?Hash[Symbol, untyped] options) -> _UpdateRegexPatternSetResponseSuccess

      interface _UpdateRuleGroupResponseSuccess
        include ::Seahorse::Client::_ResponseSuccess[Types::UpdateRuleGroupResponse]
        def next_lock_token: () -> ::String
      end
      # https://docs.aws.amazon.com/sdk-for-ruby/v3/api/Aws/WAFV2/Client.html#update_rule_group-instance_method
      def update_rule_group: (
                               name: ::String,
                               scope: ("CLOUDFRONT" | "REGIONAL"),
                               id: ::String,
                               ?description: ::String,
                               ?rules: Array[
                                 {
                                   name: ::String,
                                   priority: ::Integer,
                                   statement: {
                                     byte_match_statement: {
                                       search_string: ::String,
                                       field_to_match: {
                                         single_header: {
                                           name: ::String
                                         }?,
                                         single_query_argument: {
                                           name: ::String
                                         }?,
                                         all_query_arguments: {
                                         }?,
                                         uri_path: {
                                         }?,
                                         query_string: {
                                         }?,
                                         body: {
                                           oversize_handling: ("CONTINUE" | "MATCH" | "NO_MATCH")?
                                         }?,
                                         method: {
                                         }?,
                                         json_body: {
                                           match_pattern: {
                                             all: {
                                             }?,
                                             included_paths: Array[::String]?
                                           },
                                           match_scope: ("ALL" | "KEY" | "VALUE"),
                                           invalid_fallback_behavior: ("MATCH" | "NO_MATCH" | "EVALUATE_AS_STRING")?,
                                           oversize_handling: ("CONTINUE" | "MATCH" | "NO_MATCH")?
                                         }?,
                                         headers: {
                                           match_pattern: {
                                             all: {
                                             }?,
                                             included_headers: Array[::String]?,
                                             excluded_headers: Array[::String]?
                                           },
                                           match_scope: ("ALL" | "KEY" | "VALUE"),
                                           oversize_handling: ("CONTINUE" | "MATCH" | "NO_MATCH")
                                         }?,
                                         cookies: {
                                           match_pattern: {
                                             all: {
                                             }?,
                                             included_cookies: Array[::String]?,
                                             excluded_cookies: Array[::String]?
                                           },
                                           match_scope: ("ALL" | "KEY" | "VALUE"),
                                           oversize_handling: ("CONTINUE" | "MATCH" | "NO_MATCH")
                                         }?,
                                         header_order: {
                                           oversize_handling: ("CONTINUE" | "MATCH" | "NO_MATCH")
                                         }?,
                                         ja3_fingerprint: {
                                           fallback_behavior: ("MATCH" | "NO_MATCH")
                                         }?
                                       },
                                       text_transformations: Array[
                                         {
                                           priority: ::Integer,
                                           type: ("NONE" | "COMPRESS_WHITE_SPACE" | "HTML_ENTITY_DECODE" | "LOWERCASE" | "CMD_LINE" | "URL_DECODE" | "BASE64_DECODE" | "HEX_DECODE" | "MD5" | "REPLACE_COMMENTS" | "ESCAPE_SEQ_DECODE" | "SQL_HEX_DECODE" | "CSS_DECODE" | "JS_DECODE" | "NORMALIZE_PATH" | "NORMALIZE_PATH_WIN" | "REMOVE_NULLS" | "REPLACE_NULLS" | "BASE64_DECODE_EXT" | "URL_DECODE_UNI" | "UTF8_TO_UNICODE")
                                         },
                                       ],
                                       positional_constraint: ("EXACTLY" | "STARTS_WITH" | "ENDS_WITH" | "CONTAINS" | "CONTAINS_WORD")
                                     }?,
                                     sqli_match_statement: {
                                       field_to_match: {
                                         single_header: {
                                           name: ::String
                                         }?,
                                         single_query_argument: {
                                           name: ::String
                                         }?,
                                         all_query_arguments: {
                                         }?,
                                         uri_path: {
                                         }?,
                                         query_string: {
                                         }?,
                                         body: {
                                           oversize_handling: ("CONTINUE" | "MATCH" | "NO_MATCH")?
                                         }?,
                                         method: {
                                         }?,
                                         json_body: {
                                           match_pattern: {
                                             all: {
                                             }?,
                                             included_paths: Array[::String]?
                                           },
                                           match_scope: ("ALL" | "KEY" | "VALUE"),
                                           invalid_fallback_behavior: ("MATCH" | "NO_MATCH" | "EVALUATE_AS_STRING")?,
                                           oversize_handling: ("CONTINUE" | "MATCH" | "NO_MATCH")?
                                         }?,
                                         headers: {
                                           match_pattern: {
                                             all: {
                                             }?,
                                             included_headers: Array[::String]?,
                                             excluded_headers: Array[::String]?
                                           },
                                           match_scope: ("ALL" | "KEY" | "VALUE"),
                                           oversize_handling: ("CONTINUE" | "MATCH" | "NO_MATCH")
                                         }?,
                                         cookies: {
                                           match_pattern: {
                                             all: {
                                             }?,
                                             included_cookies: Array[::String]?,
                                             excluded_cookies: Array[::String]?
                                           },
                                           match_scope: ("ALL" | "KEY" | "VALUE"),
                                           oversize_handling: ("CONTINUE" | "MATCH" | "NO_MATCH")
                                         }?,
                                         header_order: {
                                           oversize_handling: ("CONTINUE" | "MATCH" | "NO_MATCH")
                                         }?,
                                         ja3_fingerprint: {
                                           fallback_behavior: ("MATCH" | "NO_MATCH")
                                         }?
                                       },
                                       text_transformations: Array[
                                         {
                                           priority: ::Integer,
                                           type: ("NONE" | "COMPRESS_WHITE_SPACE" | "HTML_ENTITY_DECODE" | "LOWERCASE" | "CMD_LINE" | "URL_DECODE" | "BASE64_DECODE" | "HEX_DECODE" | "MD5" | "REPLACE_COMMENTS" | "ESCAPE_SEQ_DECODE" | "SQL_HEX_DECODE" | "CSS_DECODE" | "JS_DECODE" | "NORMALIZE_PATH" | "NORMALIZE_PATH_WIN" | "REMOVE_NULLS" | "REPLACE_NULLS" | "BASE64_DECODE_EXT" | "URL_DECODE_UNI" | "UTF8_TO_UNICODE")
                                         },
                                       ],
                                       sensitivity_level: ("LOW" | "HIGH")?
                                     }?,
                                     xss_match_statement: {
                                       field_to_match: {
                                         single_header: {
                                           name: ::String
                                         }?,
                                         single_query_argument: {
                                           name: ::String
                                         }?,
                                         all_query_arguments: {
                                         }?,
                                         uri_path: {
                                         }?,
                                         query_string: {
                                         }?,
                                         body: {
                                           oversize_handling: ("CONTINUE" | "MATCH" | "NO_MATCH")?
                                         }?,
                                         method: {
                                         }?,
                                         json_body: {
                                           match_pattern: {
                                             all: {
                                             }?,
                                             included_paths: Array[::String]?
                                           },
                                           match_scope: ("ALL" | "KEY" | "VALUE"),
                                           invalid_fallback_behavior: ("MATCH" | "NO_MATCH" | "EVALUATE_AS_STRING")?,
                                           oversize_handling: ("CONTINUE" | "MATCH" | "NO_MATCH")?
                                         }?,
                                         headers: {
                                           match_pattern: {
                                             all: {
                                             }?,
                                             included_headers: Array[::String]?,
                                             excluded_headers: Array[::String]?
                                           },
                                           match_scope: ("ALL" | "KEY" | "VALUE"),
                                           oversize_handling: ("CONTINUE" | "MATCH" | "NO_MATCH")
                                         }?,
                                         cookies: {
                                           match_pattern: {
                                             all: {
                                             }?,
                                             included_cookies: Array[::String]?,
                                             excluded_cookies: Array[::String]?
                                           },
                                           match_scope: ("ALL" | "KEY" | "VALUE"),
                                           oversize_handling: ("CONTINUE" | "MATCH" | "NO_MATCH")
                                         }?,
                                         header_order: {
                                           oversize_handling: ("CONTINUE" | "MATCH" | "NO_MATCH")
                                         }?,
                                         ja3_fingerprint: {
                                           fallback_behavior: ("MATCH" | "NO_MATCH")
                                         }?
                                       },
                                       text_transformations: Array[
                                         {
                                           priority: ::Integer,
                                           type: ("NONE" | "COMPRESS_WHITE_SPACE" | "HTML_ENTITY_DECODE" | "LOWERCASE" | "CMD_LINE" | "URL_DECODE" | "BASE64_DECODE" | "HEX_DECODE" | "MD5" | "REPLACE_COMMENTS" | "ESCAPE_SEQ_DECODE" | "SQL_HEX_DECODE" | "CSS_DECODE" | "JS_DECODE" | "NORMALIZE_PATH" | "NORMALIZE_PATH_WIN" | "REMOVE_NULLS" | "REPLACE_NULLS" | "BASE64_DECODE_EXT" | "URL_DECODE_UNI" | "UTF8_TO_UNICODE")
                                         },
                                       ]
                                     }?,
                                     size_constraint_statement: {
                                       field_to_match: {
                                         single_header: {
                                           name: ::String
                                         }?,
                                         single_query_argument: {
                                           name: ::String
                                         }?,
                                         all_query_arguments: {
                                         }?,
                                         uri_path: {
                                         }?,
                                         query_string: {
                                         }?,
                                         body: {
                                           oversize_handling: ("CONTINUE" | "MATCH" | "NO_MATCH")?
                                         }?,
                                         method: {
                                         }?,
                                         json_body: {
                                           match_pattern: {
                                             all: {
                                             }?,
                                             included_paths: Array[::String]?
                                           },
                                           match_scope: ("ALL" | "KEY" | "VALUE"),
                                           invalid_fallback_behavior: ("MATCH" | "NO_MATCH" | "EVALUATE_AS_STRING")?,
                                           oversize_handling: ("CONTINUE" | "MATCH" | "NO_MATCH")?
                                         }?,
                                         headers: {
                                           match_pattern: {
                                             all: {
                                             }?,
                                             included_headers: Array[::String]?,
                                             excluded_headers: Array[::String]?
                                           },
                                           match_scope: ("ALL" | "KEY" | "VALUE"),
                                           oversize_handling: ("CONTINUE" | "MATCH" | "NO_MATCH")
                                         }?,
                                         cookies: {
                                           match_pattern: {
                                             all: {
                                             }?,
                                             included_cookies: Array[::String]?,
                                             excluded_cookies: Array[::String]?
                                           },
                                           match_scope: ("ALL" | "KEY" | "VALUE"),
                                           oversize_handling: ("CONTINUE" | "MATCH" | "NO_MATCH")
                                         }?,
                                         header_order: {
                                           oversize_handling: ("CONTINUE" | "MATCH" | "NO_MATCH")
                                         }?,
                                         ja3_fingerprint: {
                                           fallback_behavior: ("MATCH" | "NO_MATCH")
                                         }?
                                       },
                                       comparison_operator: ("EQ" | "NE" | "LE" | "LT" | "GE" | "GT"),
                                       size: ::Integer,
                                       text_transformations: Array[
                                         {
                                           priority: ::Integer,
                                           type: ("NONE" | "COMPRESS_WHITE_SPACE" | "HTML_ENTITY_DECODE" | "LOWERCASE" | "CMD_LINE" | "URL_DECODE" | "BASE64_DECODE" | "HEX_DECODE" | "MD5" | "REPLACE_COMMENTS" | "ESCAPE_SEQ_DECODE" | "SQL_HEX_DECODE" | "CSS_DECODE" | "JS_DECODE" | "NORMALIZE_PATH" | "NORMALIZE_PATH_WIN" | "REMOVE_NULLS" | "REPLACE_NULLS" | "BASE64_DECODE_EXT" | "URL_DECODE_UNI" | "UTF8_TO_UNICODE")
                                         },
                                       ]
                                     }?,
                                     geo_match_statement: {
                                       country_codes: Array[("AF" | "AX" | "AL" | "DZ" | "AS" | "AD" | "AO" | "AI" | "AQ" | "AG" | "AR" | "AM" | "AW" | "AU" | "AT" | "AZ" | "BS" | "BH" | "BD" | "BB" | "BY" | "BE" | "BZ" | "BJ" | "BM" | "BT" | "BO" | "BQ" | "BA" | "BW" | "BV" | "BR" | "IO" | "BN" | "BG" | "BF" | "BI" | "KH" | "CM" | "CA" | "CV" | "KY" | "CF" | "TD" | "CL" | "CN" | "CX" | "CC" | "CO" | "KM" | "CG" | "CD" | "CK" | "CR" | "CI" | "HR" | "CU" | "CW" | "CY" | "CZ" | "DK" | "DJ" | "DM" | "DO" | "EC" | "EG" | "SV" | "GQ" | "ER" | "EE" | "ET" | "FK" | "FO" | "FJ" | "FI" | "FR" | "GF" | "PF" | "TF" | "GA" | "GM" | "GE" | "DE" | "GH" | "GI" | "GR" | "GL" | "GD" | "GP" | "GU" | "GT" | "GG" | "GN" | "GW" | "GY" | "HT" | "HM" | "VA" | "HN" | "HK" | "HU" | "IS" | "IN" | "ID" | "IR" | "IQ" | "IE" | "IM" | "IL" | "IT" | "JM" | "JP" | "JE" | "JO" | "KZ" | "KE" | "KI" | "KP" | "KR" | "KW" | "KG" | "LA" | "LV" | "LB" | "LS" | "LR" | "LY" | "LI" | "LT" | "LU" | "MO" | "MK" | "MG" | "MW" | "MY" | "MV" | "ML" | "MT" | "MH" | "MQ" | "MR" | "MU" | "YT" | "MX" | "FM" | "MD" | "MC" | "MN" | "ME" | "MS" | "MA" | "MZ" | "MM" | "NA" | "NR" | "NP" | "NL" | "NC" | "NZ" | "NI" | "NE" | "NG" | "NU" | "NF" | "MP" | "NO" | "OM" | "PK" | "PW" | "PS" | "PA" | "PG" | "PY" | "PE" | "PH" | "PN" | "PL" | "PT" | "PR" | "QA" | "RE" | "RO" | "RU" | "RW" | "BL" | "SH" | "KN" | "LC" | "MF" | "PM" | "VC" | "WS" | "SM" | "ST" | "SA" | "SN" | "RS" | "SC" | "SL" | "SG" | "SX" | "SK" | "SI" | "SB" | "SO" | "ZA" | "GS" | "SS" | "ES" | "LK" | "SD" | "SR" | "SJ" | "SZ" | "SE" | "CH" | "SY" | "TW" | "TJ" | "TZ" | "TH" | "TL" | "TG" | "TK" | "TO" | "TT" | "TN" | "TR" | "TM" | "TC" | "TV" | "UG" | "UA" | "AE" | "GB" | "US" | "UM" | "UY" | "UZ" | "VU" | "VE" | "VN" | "VG" | "VI" | "WF" | "EH" | "YE" | "ZM" | "ZW" | "XK")]?,
                                       forwarded_ip_config: {
                                         header_name: ::String,
                                         fallback_behavior: ("MATCH" | "NO_MATCH")
                                       }?
                                     }?,
                                     rule_group_reference_statement: {
                                       arn: ::String,
                                       excluded_rules: Array[
                                         {
                                           name: ::String
                                         },
                                       ]?,
                                       rule_action_overrides: Array[
                                         {
                                           name: ::String,
                                           action_to_use: {
                                             block: {
                                               custom_response: {
                                                 response_code: ::Integer,
                                                 custom_response_body_key: ::String?,
                                                 response_headers: Array[
                                                   {
                                                     name: ::String,
                                                     value: ::String
                                                   },
                                                 ]?
                                               }?
                                             }?,
                                             allow: {
                                               custom_request_handling: {
                                                 insert_headers: Array[
                                                   {
                                                     name: ::String,
                                                     value: ::String
                                                   },
                                                 ]
                                               }?
                                             }?,
                                             count: {
                                               custom_request_handling: {
                                                 insert_headers: Array[
                                                   {
                                                     name: ::String,
                                                     value: ::String
                                                   },
                                                 ]
                                               }?
                                             }?,
                                             captcha: {
                                               custom_request_handling: {
                                                 insert_headers: Array[
                                                   {
                                                     name: ::String,
                                                     value: ::String
                                                   },
                                                 ]
                                               }?
                                             }?,
                                             challenge: {
                                               custom_request_handling: {
                                                 insert_headers: Array[
                                                   {
                                                     name: ::String,
                                                     value: ::String
                                                   },
                                                 ]
                                               }?
                                             }?
                                           }
                                         },
                                       ]?
                                     }?,
                                     ip_set_reference_statement: {
                                       arn: ::String,
                                       ip_set_forwarded_ip_config: {
                                         header_name: ::String,
                                         fallback_behavior: ("MATCH" | "NO_MATCH"),
                                         position: ("FIRST" | "LAST" | "ANY")
                                       }?
                                     }?,
                                     regex_pattern_set_reference_statement: {
                                       arn: ::String,
                                       field_to_match: {
                                         single_header: {
                                           name: ::String
                                         }?,
                                         single_query_argument: {
                                           name: ::String
                                         }?,
                                         all_query_arguments: {
                                         }?,
                                         uri_path: {
                                         }?,
                                         query_string: {
                                         }?,
                                         body: {
                                           oversize_handling: ("CONTINUE" | "MATCH" | "NO_MATCH")?
                                         }?,
                                         method: {
                                         }?,
                                         json_body: {
                                           match_pattern: {
                                             all: {
                                             }?,
                                             included_paths: Array[::String]?
                                           },
                                           match_scope: ("ALL" | "KEY" | "VALUE"),
                                           invalid_fallback_behavior: ("MATCH" | "NO_MATCH" | "EVALUATE_AS_STRING")?,
                                           oversize_handling: ("CONTINUE" | "MATCH" | "NO_MATCH")?
                                         }?,
                                         headers: {
                                           match_pattern: {
                                             all: {
                                             }?,
                                             included_headers: Array[::String]?,
                                             excluded_headers: Array[::String]?
                                           },
                                           match_scope: ("ALL" | "KEY" | "VALUE"),
                                           oversize_handling: ("CONTINUE" | "MATCH" | "NO_MATCH")
                                         }?,
                                         cookies: {
                                           match_pattern: {
                                             all: {
                                             }?,
                                             included_cookies: Array[::String]?,
                                             excluded_cookies: Array[::String]?
                                           },
                                           match_scope: ("ALL" | "KEY" | "VALUE"),
                                           oversize_handling: ("CONTINUE" | "MATCH" | "NO_MATCH")
                                         }?,
                                         header_order: {
                                           oversize_handling: ("CONTINUE" | "MATCH" | "NO_MATCH")
                                         }?,
                                         ja3_fingerprint: {
                                           fallback_behavior: ("MATCH" | "NO_MATCH")
                                         }?
                                       },
                                       text_transformations: Array[
                                         {
                                           priority: ::Integer,
                                           type: ("NONE" | "COMPRESS_WHITE_SPACE" | "HTML_ENTITY_DECODE" | "LOWERCASE" | "CMD_LINE" | "URL_DECODE" | "BASE64_DECODE" | "HEX_DECODE" | "MD5" | "REPLACE_COMMENTS" | "ESCAPE_SEQ_DECODE" | "SQL_HEX_DECODE" | "CSS_DECODE" | "JS_DECODE" | "NORMALIZE_PATH" | "NORMALIZE_PATH_WIN" | "REMOVE_NULLS" | "REPLACE_NULLS" | "BASE64_DECODE_EXT" | "URL_DECODE_UNI" | "UTF8_TO_UNICODE")
                                         },
                                       ]
                                     }?,
                                     rate_based_statement: {
                                       limit: ::Integer,
                                       evaluation_window_sec: ::Integer?,
                                       aggregate_key_type: ("IP" | "FORWARDED_IP" | "CUSTOM_KEYS" | "CONSTANT"),
                                       scope_down_statement: untyped?,
                                       forwarded_ip_config: {
                                         header_name: ::String,
                                         fallback_behavior: ("MATCH" | "NO_MATCH")
                                       }?,
                                       custom_keys: Array[
                                         {
                                           header: {
                                             name: ::String,
                                             text_transformations: Array[
                                               {
                                                 priority: ::Integer,
                                                 type: ("NONE" | "COMPRESS_WHITE_SPACE" | "HTML_ENTITY_DECODE" | "LOWERCASE" | "CMD_LINE" | "URL_DECODE" | "BASE64_DECODE" | "HEX_DECODE" | "MD5" | "REPLACE_COMMENTS" | "ESCAPE_SEQ_DECODE" | "SQL_HEX_DECODE" | "CSS_DECODE" | "JS_DECODE" | "NORMALIZE_PATH" | "NORMALIZE_PATH_WIN" | "REMOVE_NULLS" | "REPLACE_NULLS" | "BASE64_DECODE_EXT" | "URL_DECODE_UNI" | "UTF8_TO_UNICODE")
                                               },
                                             ]
                                           }?,
                                           cookie: {
                                             name: ::String,
                                             text_transformations: Array[
                                               {
                                                 priority: ::Integer,
                                                 type: ("NONE" | "COMPRESS_WHITE_SPACE" | "HTML_ENTITY_DECODE" | "LOWERCASE" | "CMD_LINE" | "URL_DECODE" | "BASE64_DECODE" | "HEX_DECODE" | "MD5" | "REPLACE_COMMENTS" | "ESCAPE_SEQ_DECODE" | "SQL_HEX_DECODE" | "CSS_DECODE" | "JS_DECODE" | "NORMALIZE_PATH" | "NORMALIZE_PATH_WIN" | "REMOVE_NULLS" | "REPLACE_NULLS" | "BASE64_DECODE_EXT" | "URL_DECODE_UNI" | "UTF8_TO_UNICODE")
                                               },
                                             ]
                                           }?,
                                           query_argument: {
                                             name: ::String,
                                             text_transformations: Array[
                                               {
                                                 priority: ::Integer,
                                                 type: ("NONE" | "COMPRESS_WHITE_SPACE" | "HTML_ENTITY_DECODE" | "LOWERCASE" | "CMD_LINE" | "URL_DECODE" | "BASE64_DECODE" | "HEX_DECODE" | "MD5" | "REPLACE_COMMENTS" | "ESCAPE_SEQ_DECODE" | "SQL_HEX_DECODE" | "CSS_DECODE" | "JS_DECODE" | "NORMALIZE_PATH" | "NORMALIZE_PATH_WIN" | "REMOVE_NULLS" | "REPLACE_NULLS" | "BASE64_DECODE_EXT" | "URL_DECODE_UNI" | "UTF8_TO_UNICODE")
                                               },
                                             ]
                                           }?,
                                           query_string: {
                                             text_transformations: Array[
                                               {
                                                 priority: ::Integer,
                                                 type: ("NONE" | "COMPRESS_WHITE_SPACE" | "HTML_ENTITY_DECODE" | "LOWERCASE" | "CMD_LINE" | "URL_DECODE" | "BASE64_DECODE" | "HEX_DECODE" | "MD5" | "REPLACE_COMMENTS" | "ESCAPE_SEQ_DECODE" | "SQL_HEX_DECODE" | "CSS_DECODE" | "JS_DECODE" | "NORMALIZE_PATH" | "NORMALIZE_PATH_WIN" | "REMOVE_NULLS" | "REPLACE_NULLS" | "BASE64_DECODE_EXT" | "URL_DECODE_UNI" | "UTF8_TO_UNICODE")
                                               },
                                             ]
                                           }?,
                                           http_method: {
                                           }?,
                                           forwarded_ip: {
                                           }?,
                                           ip: {
                                           }?,
                                           label_namespace: {
                                             namespace: ::String
                                           }?,
                                           uri_path: {
                                             text_transformations: Array[
                                               {
                                                 priority: ::Integer,
                                                 type: ("NONE" | "COMPRESS_WHITE_SPACE" | "HTML_ENTITY_DECODE" | "LOWERCASE" | "CMD_LINE" | "URL_DECODE" | "BASE64_DECODE" | "HEX_DECODE" | "MD5" | "REPLACE_COMMENTS" | "ESCAPE_SEQ_DECODE" | "SQL_HEX_DECODE" | "CSS_DECODE" | "JS_DECODE" | "NORMALIZE_PATH" | "NORMALIZE_PATH_WIN" | "REMOVE_NULLS" | "REPLACE_NULLS" | "BASE64_DECODE_EXT" | "URL_DECODE_UNI" | "UTF8_TO_UNICODE")
                                               },
                                             ]
                                           }?
                                         },
                                       ]?
                                     }?,
                                     and_statement: {
                                       statements: Array[
                                         untyped,
                                       ]
                                     }?,
                                     or_statement: {
                                       statements: Array[
                                         untyped,
                                       ]
                                     }?,
                                     not_statement: {
                                       statement: untyped
                                     }?,
                                     managed_rule_group_statement: {
                                       vendor_name: ::String,
                                       name: ::String,
                                       version: ::String?,
                                       excluded_rules: Array[
                                         {
                                           name: ::String
                                         },
                                       ]?,
                                       scope_down_statement: untyped?,
                                       managed_rule_group_configs: Array[
                                         {
                                           login_path: ::String?,
                                           payload_type: ("JSON" | "FORM_ENCODED")?,
                                           username_field: {
                                             identifier: ::String
                                           }?,
                                           password_field: {
                                             identifier: ::String
                                           }?,
                                           aws_managed_rules_bot_control_rule_set: {
                                             inspection_level: ("COMMON" | "TARGETED"),
                                             enable_machine_learning: bool?
                                           }?,
                                           aws_managed_rules_atp_rule_set: {
                                             login_path: ::String,
                                             request_inspection: {
                                               payload_type: ("JSON" | "FORM_ENCODED"),
                                               username_field: {
                                                 identifier: ::String
                                               },
                                               password_field: {
                                                 identifier: ::String
                                               }
                                             }?,
                                             response_inspection: {
                                               status_code: {
                                                 success_codes: Array[::Integer],
                                                 failure_codes: Array[::Integer]
                                               }?,
                                               header: {
                                                 name: ::String,
                                                 success_values: Array[::String],
                                                 failure_values: Array[::String]
                                               }?,
                                               body_contains: {
                                                 success_strings: Array[::String],
                                                 failure_strings: Array[::String]
                                               }?,
                                               json: {
                                                 identifier: ::String,
                                                 success_values: Array[::String],
                                                 failure_values: Array[::String]
                                               }?
                                             }?,
                                             enable_regex_in_path: bool?
                                           }?,
                                           aws_managed_rules_acfp_rule_set: {
                                             creation_path: ::String,
                                             registration_page_path: ::String,
                                             request_inspection: {
                                               payload_type: ("JSON" | "FORM_ENCODED"),
                                               username_field: {
                                                 identifier: ::String
                                               }?,
                                               password_field: {
                                                 identifier: ::String
                                               }?,
                                               email_field: {
                                                 identifier: ::String
                                               }?,
                                               phone_number_fields: Array[
                                                 {
                                                   identifier: ::String
                                                 },
                                               ]?,
                                               address_fields: Array[
                                                 {
                                                   identifier: ::String
                                                 },
                                               ]?
                                             },
                                             response_inspection: {
                                               status_code: {
                                                 success_codes: Array[::Integer],
                                                 failure_codes: Array[::Integer]
                                               }?,
                                               header: {
                                                 name: ::String,
                                                 success_values: Array[::String],
                                                 failure_values: Array[::String]
                                               }?,
                                               body_contains: {
                                                 success_strings: Array[::String],
                                                 failure_strings: Array[::String]
                                               }?,
                                               json: {
                                                 identifier: ::String,
                                                 success_values: Array[::String],
                                                 failure_values: Array[::String]
                                               }?
                                             }?,
                                             enable_regex_in_path: bool?
                                           }?
                                         },
                                       ]?,
                                       rule_action_overrides: Array[
                                         {
                                           name: ::String,
                                           action_to_use: {
                                             block: {
                                               custom_response: {
                                                 response_code: ::Integer,
                                                 custom_response_body_key: ::String?,
                                                 response_headers: Array[
                                                   {
                                                     name: ::String,
                                                     value: ::String
                                                   },
                                                 ]?
                                               }?
                                             }?,
                                             allow: {
                                               custom_request_handling: {
                                                 insert_headers: Array[
                                                   {
                                                     name: ::String,
                                                     value: ::String
                                                   },
                                                 ]
                                               }?
                                             }?,
                                             count: {
                                               custom_request_handling: {
                                                 insert_headers: Array[
                                                   {
                                                     name: ::String,
                                                     value: ::String
                                                   },
                                                 ]
                                               }?
                                             }?,
                                             captcha: {
                                               custom_request_handling: {
                                                 insert_headers: Array[
                                                   {
                                                     name: ::String,
                                                     value: ::String
                                                   },
                                                 ]
                                               }?
                                             }?,
                                             challenge: {
                                               custom_request_handling: {
                                                 insert_headers: Array[
                                                   {
                                                     name: ::String,
                                                     value: ::String
                                                   },
                                                 ]
                                               }?
                                             }?
                                           }
                                         },
                                       ]?
                                     }?,
                                     label_match_statement: {
                                       scope: ("LABEL" | "NAMESPACE"),
                                       key: ::String
                                     }?,
                                     regex_match_statement: {
                                       regex_string: ::String,
                                       field_to_match: {
                                         single_header: {
                                           name: ::String
                                         }?,
                                         single_query_argument: {
                                           name: ::String
                                         }?,
                                         all_query_arguments: {
                                         }?,
                                         uri_path: {
                                         }?,
                                         query_string: {
                                         }?,
                                         body: {
                                           oversize_handling: ("CONTINUE" | "MATCH" | "NO_MATCH")?
                                         }?,
                                         method: {
                                         }?,
                                         json_body: {
                                           match_pattern: {
                                             all: {
                                             }?,
                                             included_paths: Array[::String]?
                                           },
                                           match_scope: ("ALL" | "KEY" | "VALUE"),
                                           invalid_fallback_behavior: ("MATCH" | "NO_MATCH" | "EVALUATE_AS_STRING")?,
                                           oversize_handling: ("CONTINUE" | "MATCH" | "NO_MATCH")?
                                         }?,
                                         headers: {
                                           match_pattern: {
                                             all: {
                                             }?,
                                             included_headers: Array[::String]?,
                                             excluded_headers: Array[::String]?
                                           },
                                           match_scope: ("ALL" | "KEY" | "VALUE"),
                                           oversize_handling: ("CONTINUE" | "MATCH" | "NO_MATCH")
                                         }?,
                                         cookies: {
                                           match_pattern: {
                                             all: {
                                             }?,
                                             included_cookies: Array[::String]?,
                                             excluded_cookies: Array[::String]?
                                           },
                                           match_scope: ("ALL" | "KEY" | "VALUE"),
                                           oversize_handling: ("CONTINUE" | "MATCH" | "NO_MATCH")
                                         }?,
                                         header_order: {
                                           oversize_handling: ("CONTINUE" | "MATCH" | "NO_MATCH")
                                         }?,
                                         ja3_fingerprint: {
                                           fallback_behavior: ("MATCH" | "NO_MATCH")
                                         }?
                                       },
                                       text_transformations: Array[
                                         {
                                           priority: ::Integer,
                                           type: ("NONE" | "COMPRESS_WHITE_SPACE" | "HTML_ENTITY_DECODE" | "LOWERCASE" | "CMD_LINE" | "URL_DECODE" | "BASE64_DECODE" | "HEX_DECODE" | "MD5" | "REPLACE_COMMENTS" | "ESCAPE_SEQ_DECODE" | "SQL_HEX_DECODE" | "CSS_DECODE" | "JS_DECODE" | "NORMALIZE_PATH" | "NORMALIZE_PATH_WIN" | "REMOVE_NULLS" | "REPLACE_NULLS" | "BASE64_DECODE_EXT" | "URL_DECODE_UNI" | "UTF8_TO_UNICODE")
                                         },
                                       ]
                                     }?
                                   },
                                   action: {
                                     block: {
                                       custom_response: {
                                         response_code: ::Integer,
                                         custom_response_body_key: ::String?,
                                         response_headers: Array[
                                           {
                                             name: ::String,
                                             value: ::String
                                           },
                                         ]?
                                       }?
                                     }?,
                                     allow: {
                                       custom_request_handling: {
                                         insert_headers: Array[
                                           {
                                             name: ::String,
                                             value: ::String
                                           },
                                         ]
                                       }?
                                     }?,
                                     count: {
                                       custom_request_handling: {
                                         insert_headers: Array[
                                           {
                                             name: ::String,
                                             value: ::String
                                           },
                                         ]
                                       }?
                                     }?,
                                     captcha: {
                                       custom_request_handling: {
                                         insert_headers: Array[
                                           {
                                             name: ::String,
                                             value: ::String
                                           },
                                         ]
                                       }?
                                     }?,
                                     challenge: {
                                       custom_request_handling: {
                                         insert_headers: Array[
                                           {
                                             name: ::String,
                                             value: ::String
                                           },
                                         ]
                                       }?
                                     }?
                                   }?,
                                   override_action: {
                                     count: {
                                       custom_request_handling: {
                                         insert_headers: Array[
                                           {
                                             name: ::String,
                                             value: ::String
                                           },
                                         ]
                                       }?
                                     }?,
                                     none: {
                                     }?
                                   }?,
                                   rule_labels: Array[
                                     {
                                       name: ::String
                                     },
                                   ]?,
                                   visibility_config: {
                                     sampled_requests_enabled: bool,
                                     cloud_watch_metrics_enabled: bool,
                                     metric_name: ::String
                                   },
                                   captcha_config: {
                                     immunity_time_property: {
                                       immunity_time: ::Integer
                                     }?
                                   }?,
                                   challenge_config: {
                                     immunity_time_property: {
                                       immunity_time: ::Integer
                                     }?
                                   }?
                                 },
                               ],
                               visibility_config: {
                                 sampled_requests_enabled: bool,
                                 cloud_watch_metrics_enabled: bool,
                                 metric_name: ::String
                               },
                               lock_token: ::String,
                               ?custom_response_bodies: Hash[::String, {
                                   content_type: ("TEXT_PLAIN" | "TEXT_HTML" | "APPLICATION_JSON"),
                                   content: ::String
                                 }]
                             ) -> _UpdateRuleGroupResponseSuccess
                           | (Hash[Symbol, untyped] params, ?Hash[Symbol, untyped] options) -> _UpdateRuleGroupResponseSuccess

      interface _UpdateWebACLResponseSuccess
        include ::Seahorse::Client::_ResponseSuccess[Types::UpdateWebACLResponse]
        def next_lock_token: () -> ::String
      end
      # https://docs.aws.amazon.com/sdk-for-ruby/v3/api/Aws/WAFV2/Client.html#update_web_acl-instance_method
      def update_web_acl: (
                            name: ::String,
                            scope: ("CLOUDFRONT" | "REGIONAL"),
                            id: ::String,
                            default_action: {
                              block: {
                                custom_response: {
                                  response_code: ::Integer,
                                  custom_response_body_key: ::String?,
                                  response_headers: Array[
                                    {
                                      name: ::String,
                                      value: ::String
                                    },
                                  ]?
                                }?
                              }?,
                              allow: {
                                custom_request_handling: {
                                  insert_headers: Array[
                                    {
                                      name: ::String,
                                      value: ::String
                                    },
                                  ]
                                }?
                              }?
                            },
                            ?description: ::String,
                            ?rules: Array[
                              {
                                name: ::String,
                                priority: ::Integer,
                                statement: {
                                  byte_match_statement: {
                                    search_string: ::String,
                                    field_to_match: {
                                      single_header: {
                                        name: ::String
                                      }?,
                                      single_query_argument: {
                                        name: ::String
                                      }?,
                                      all_query_arguments: {
                                      }?,
                                      uri_path: {
                                      }?,
                                      query_string: {
                                      }?,
                                      body: {
                                        oversize_handling: ("CONTINUE" | "MATCH" | "NO_MATCH")?
                                      }?,
                                      method: {
                                      }?,
                                      json_body: {
                                        match_pattern: {
                                          all: {
                                          }?,
                                          included_paths: Array[::String]?
                                        },
                                        match_scope: ("ALL" | "KEY" | "VALUE"),
                                        invalid_fallback_behavior: ("MATCH" | "NO_MATCH" | "EVALUATE_AS_STRING")?,
                                        oversize_handling: ("CONTINUE" | "MATCH" | "NO_MATCH")?
                                      }?,
                                      headers: {
                                        match_pattern: {
                                          all: {
                                          }?,
                                          included_headers: Array[::String]?,
                                          excluded_headers: Array[::String]?
                                        },
                                        match_scope: ("ALL" | "KEY" | "VALUE"),
                                        oversize_handling: ("CONTINUE" | "MATCH" | "NO_MATCH")
                                      }?,
                                      cookies: {
                                        match_pattern: {
                                          all: {
                                          }?,
                                          included_cookies: Array[::String]?,
                                          excluded_cookies: Array[::String]?
                                        },
                                        match_scope: ("ALL" | "KEY" | "VALUE"),
                                        oversize_handling: ("CONTINUE" | "MATCH" | "NO_MATCH")
                                      }?,
                                      header_order: {
                                        oversize_handling: ("CONTINUE" | "MATCH" | "NO_MATCH")
                                      }?,
                                      ja3_fingerprint: {
                                        fallback_behavior: ("MATCH" | "NO_MATCH")
                                      }?
                                    },
                                    text_transformations: Array[
                                      {
                                        priority: ::Integer,
                                        type: ("NONE" | "COMPRESS_WHITE_SPACE" | "HTML_ENTITY_DECODE" | "LOWERCASE" | "CMD_LINE" | "URL_DECODE" | "BASE64_DECODE" | "HEX_DECODE" | "MD5" | "REPLACE_COMMENTS" | "ESCAPE_SEQ_DECODE" | "SQL_HEX_DECODE" | "CSS_DECODE" | "JS_DECODE" | "NORMALIZE_PATH" | "NORMALIZE_PATH_WIN" | "REMOVE_NULLS" | "REPLACE_NULLS" | "BASE64_DECODE_EXT" | "URL_DECODE_UNI" | "UTF8_TO_UNICODE")
                                      },
                                    ],
                                    positional_constraint: ("EXACTLY" | "STARTS_WITH" | "ENDS_WITH" | "CONTAINS" | "CONTAINS_WORD")
                                  }?,
                                  sqli_match_statement: {
                                    field_to_match: {
                                      single_header: {
                                        name: ::String
                                      }?,
                                      single_query_argument: {
                                        name: ::String
                                      }?,
                                      all_query_arguments: {
                                      }?,
                                      uri_path: {
                                      }?,
                                      query_string: {
                                      }?,
                                      body: {
                                        oversize_handling: ("CONTINUE" | "MATCH" | "NO_MATCH")?
                                      }?,
                                      method: {
                                      }?,
                                      json_body: {
                                        match_pattern: {
                                          all: {
                                          }?,
                                          included_paths: Array[::String]?
                                        },
                                        match_scope: ("ALL" | "KEY" | "VALUE"),
                                        invalid_fallback_behavior: ("MATCH" | "NO_MATCH" | "EVALUATE_AS_STRING")?,
                                        oversize_handling: ("CONTINUE" | "MATCH" | "NO_MATCH")?
                                      }?,
                                      headers: {
                                        match_pattern: {
                                          all: {
                                          }?,
                                          included_headers: Array[::String]?,
                                          excluded_headers: Array[::String]?
                                        },
                                        match_scope: ("ALL" | "KEY" | "VALUE"),
                                        oversize_handling: ("CONTINUE" | "MATCH" | "NO_MATCH")
                                      }?,
                                      cookies: {
                                        match_pattern: {
                                          all: {
                                          }?,
                                          included_cookies: Array[::String]?,
                                          excluded_cookies: Array[::String]?
                                        },
                                        match_scope: ("ALL" | "KEY" | "VALUE"),
                                        oversize_handling: ("CONTINUE" | "MATCH" | "NO_MATCH")
                                      }?,
                                      header_order: {
                                        oversize_handling: ("CONTINUE" | "MATCH" | "NO_MATCH")
                                      }?,
                                      ja3_fingerprint: {
                                        fallback_behavior: ("MATCH" | "NO_MATCH")
                                      }?
                                    },
                                    text_transformations: Array[
                                      {
                                        priority: ::Integer,
                                        type: ("NONE" | "COMPRESS_WHITE_SPACE" | "HTML_ENTITY_DECODE" | "LOWERCASE" | "CMD_LINE" | "URL_DECODE" | "BASE64_DECODE" | "HEX_DECODE" | "MD5" | "REPLACE_COMMENTS" | "ESCAPE_SEQ_DECODE" | "SQL_HEX_DECODE" | "CSS_DECODE" | "JS_DECODE" | "NORMALIZE_PATH" | "NORMALIZE_PATH_WIN" | "REMOVE_NULLS" | "REPLACE_NULLS" | "BASE64_DECODE_EXT" | "URL_DECODE_UNI" | "UTF8_TO_UNICODE")
                                      },
                                    ],
                                    sensitivity_level: ("LOW" | "HIGH")?
                                  }?,
                                  xss_match_statement: {
                                    field_to_match: {
                                      single_header: {
                                        name: ::String
                                      }?,
                                      single_query_argument: {
                                        name: ::String
                                      }?,
                                      all_query_arguments: {
                                      }?,
                                      uri_path: {
                                      }?,
                                      query_string: {
                                      }?,
                                      body: {
                                        oversize_handling: ("CONTINUE" | "MATCH" | "NO_MATCH")?
                                      }?,
                                      method: {
                                      }?,
                                      json_body: {
                                        match_pattern: {
                                          all: {
                                          }?,
                                          included_paths: Array[::String]?
                                        },
                                        match_scope: ("ALL" | "KEY" | "VALUE"),
                                        invalid_fallback_behavior: ("MATCH" | "NO_MATCH" | "EVALUATE_AS_STRING")?,
                                        oversize_handling: ("CONTINUE" | "MATCH" | "NO_MATCH")?
                                      }?,
                                      headers: {
                                        match_pattern: {
                                          all: {
                                          }?,
                                          included_headers: Array[::String]?,
                                          excluded_headers: Array[::String]?
                                        },
                                        match_scope: ("ALL" | "KEY" | "VALUE"),
                                        oversize_handling: ("CONTINUE" | "MATCH" | "NO_MATCH")
                                      }?,
                                      cookies: {
                                        match_pattern: {
                                          all: {
                                          }?,
                                          included_cookies: Array[::String]?,
                                          excluded_cookies: Array[::String]?
                                        },
                                        match_scope: ("ALL" | "KEY" | "VALUE"),
                                        oversize_handling: ("CONTINUE" | "MATCH" | "NO_MATCH")
                                      }?,
                                      header_order: {
                                        oversize_handling: ("CONTINUE" | "MATCH" | "NO_MATCH")
                                      }?,
                                      ja3_fingerprint: {
                                        fallback_behavior: ("MATCH" | "NO_MATCH")
                                      }?
                                    },
                                    text_transformations: Array[
                                      {
                                        priority: ::Integer,
                                        type: ("NONE" | "COMPRESS_WHITE_SPACE" | "HTML_ENTITY_DECODE" | "LOWERCASE" | "CMD_LINE" | "URL_DECODE" | "BASE64_DECODE" | "HEX_DECODE" | "MD5" | "REPLACE_COMMENTS" | "ESCAPE_SEQ_DECODE" | "SQL_HEX_DECODE" | "CSS_DECODE" | "JS_DECODE" | "NORMALIZE_PATH" | "NORMALIZE_PATH_WIN" | "REMOVE_NULLS" | "REPLACE_NULLS" | "BASE64_DECODE_EXT" | "URL_DECODE_UNI" | "UTF8_TO_UNICODE")
                                      },
                                    ]
                                  }?,
                                  size_constraint_statement: {
                                    field_to_match: {
                                      single_header: {
                                        name: ::String
                                      }?,
                                      single_query_argument: {
                                        name: ::String
                                      }?,
                                      all_query_arguments: {
                                      }?,
                                      uri_path: {
                                      }?,
                                      query_string: {
                                      }?,
                                      body: {
                                        oversize_handling: ("CONTINUE" | "MATCH" | "NO_MATCH")?
                                      }?,
                                      method: {
                                      }?,
                                      json_body: {
                                        match_pattern: {
                                          all: {
                                          }?,
                                          included_paths: Array[::String]?
                                        },
                                        match_scope: ("ALL" | "KEY" | "VALUE"),
                                        invalid_fallback_behavior: ("MATCH" | "NO_MATCH" | "EVALUATE_AS_STRING")?,
                                        oversize_handling: ("CONTINUE" | "MATCH" | "NO_MATCH")?
                                      }?,
                                      headers: {
                                        match_pattern: {
                                          all: {
                                          }?,
                                          included_headers: Array[::String]?,
                                          excluded_headers: Array[::String]?
                                        },
                                        match_scope: ("ALL" | "KEY" | "VALUE"),
                                        oversize_handling: ("CONTINUE" | "MATCH" | "NO_MATCH")
                                      }?,
                                      cookies: {
                                        match_pattern: {
                                          all: {
                                          }?,
                                          included_cookies: Array[::String]?,
                                          excluded_cookies: Array[::String]?
                                        },
                                        match_scope: ("ALL" | "KEY" | "VALUE"),
                                        oversize_handling: ("CONTINUE" | "MATCH" | "NO_MATCH")
                                      }?,
                                      header_order: {
                                        oversize_handling: ("CONTINUE" | "MATCH" | "NO_MATCH")
                                      }?,
                                      ja3_fingerprint: {
                                        fallback_behavior: ("MATCH" | "NO_MATCH")
                                      }?
                                    },
                                    comparison_operator: ("EQ" | "NE" | "LE" | "LT" | "GE" | "GT"),
                                    size: ::Integer,
                                    text_transformations: Array[
                                      {
                                        priority: ::Integer,
                                        type: ("NONE" | "COMPRESS_WHITE_SPACE" | "HTML_ENTITY_DECODE" | "LOWERCASE" | "CMD_LINE" | "URL_DECODE" | "BASE64_DECODE" | "HEX_DECODE" | "MD5" | "REPLACE_COMMENTS" | "ESCAPE_SEQ_DECODE" | "SQL_HEX_DECODE" | "CSS_DECODE" | "JS_DECODE" | "NORMALIZE_PATH" | "NORMALIZE_PATH_WIN" | "REMOVE_NULLS" | "REPLACE_NULLS" | "BASE64_DECODE_EXT" | "URL_DECODE_UNI" | "UTF8_TO_UNICODE")
                                      },
                                    ]
                                  }?,
                                  geo_match_statement: {
                                    country_codes: Array[("AF" | "AX" | "AL" | "DZ" | "AS" | "AD" | "AO" | "AI" | "AQ" | "AG" | "AR" | "AM" | "AW" | "AU" | "AT" | "AZ" | "BS" | "BH" | "BD" | "BB" | "BY" | "BE" | "BZ" | "BJ" | "BM" | "BT" | "BO" | "BQ" | "BA" | "BW" | "BV" | "BR" | "IO" | "BN" | "BG" | "BF" | "BI" | "KH" | "CM" | "CA" | "CV" | "KY" | "CF" | "TD" | "CL" | "CN" | "CX" | "CC" | "CO" | "KM" | "CG" | "CD" | "CK" | "CR" | "CI" | "HR" | "CU" | "CW" | "CY" | "CZ" | "DK" | "DJ" | "DM" | "DO" | "EC" | "EG" | "SV" | "GQ" | "ER" | "EE" | "ET" | "FK" | "FO" | "FJ" | "FI" | "FR" | "GF" | "PF" | "TF" | "GA" | "GM" | "GE" | "DE" | "GH" | "GI" | "GR" | "GL" | "GD" | "GP" | "GU" | "GT" | "GG" | "GN" | "GW" | "GY" | "HT" | "HM" | "VA" | "HN" | "HK" | "HU" | "IS" | "IN" | "ID" | "IR" | "IQ" | "IE" | "IM" | "IL" | "IT" | "JM" | "JP" | "JE" | "JO" | "KZ" | "KE" | "KI" | "KP" | "KR" | "KW" | "KG" | "LA" | "LV" | "LB" | "LS" | "LR" | "LY" | "LI" | "LT" | "LU" | "MO" | "MK" | "MG" | "MW" | "MY" | "MV" | "ML" | "MT" | "MH" | "MQ" | "MR" | "MU" | "YT" | "MX" | "FM" | "MD" | "MC" | "MN" | "ME" | "MS" | "MA" | "MZ" | "MM" | "NA" | "NR" | "NP" | "NL" | "NC" | "NZ" | "NI" | "NE" | "NG" | "NU" | "NF" | "MP" | "NO" | "OM" | "PK" | "PW" | "PS" | "PA" | "PG" | "PY" | "PE" | "PH" | "PN" | "PL" | "PT" | "PR" | "QA" | "RE" | "RO" | "RU" | "RW" | "BL" | "SH" | "KN" | "LC" | "MF" | "PM" | "VC" | "WS" | "SM" | "ST" | "SA" | "SN" | "RS" | "SC" | "SL" | "SG" | "SX" | "SK" | "SI" | "SB" | "SO" | "ZA" | "GS" | "SS" | "ES" | "LK" | "SD" | "SR" | "SJ" | "SZ" | "SE" | "CH" | "SY" | "TW" | "TJ" | "TZ" | "TH" | "TL" | "TG" | "TK" | "TO" | "TT" | "TN" | "TR" | "TM" | "TC" | "TV" | "UG" | "UA" | "AE" | "GB" | "US" | "UM" | "UY" | "UZ" | "VU" | "VE" | "VN" | "VG" | "VI" | "WF" | "EH" | "YE" | "ZM" | "ZW" | "XK")]?,
                                    forwarded_ip_config: {
                                      header_name: ::String,
                                      fallback_behavior: ("MATCH" | "NO_MATCH")
                                    }?
                                  }?,
                                  rule_group_reference_statement: {
                                    arn: ::String,
                                    excluded_rules: Array[
                                      {
                                        name: ::String
                                      },
                                    ]?,
                                    rule_action_overrides: Array[
                                      {
                                        name: ::String,
                                        action_to_use: {
                                          block: {
                                            custom_response: {
                                              response_code: ::Integer,
                                              custom_response_body_key: ::String?,
                                              response_headers: Array[
                                                {
                                                  name: ::String,
                                                  value: ::String
                                                },
                                              ]?
                                            }?
                                          }?,
                                          allow: {
                                            custom_request_handling: {
                                              insert_headers: Array[
                                                {
                                                  name: ::String,
                                                  value: ::String
                                                },
                                              ]
                                            }?
                                          }?,
                                          count: {
                                            custom_request_handling: {
                                              insert_headers: Array[
                                                {
                                                  name: ::String,
                                                  value: ::String
                                                },
                                              ]
                                            }?
                                          }?,
                                          captcha: {
                                            custom_request_handling: {
                                              insert_headers: Array[
                                                {
                                                  name: ::String,
                                                  value: ::String
                                                },
                                              ]
                                            }?
                                          }?,
                                          challenge: {
                                            custom_request_handling: {
                                              insert_headers: Array[
                                                {
                                                  name: ::String,
                                                  value: ::String
                                                },
                                              ]
                                            }?
                                          }?
                                        }
                                      },
                                    ]?
                                  }?,
                                  ip_set_reference_statement: {
                                    arn: ::String,
                                    ip_set_forwarded_ip_config: {
                                      header_name: ::String,
                                      fallback_behavior: ("MATCH" | "NO_MATCH"),
                                      position: ("FIRST" | "LAST" | "ANY")
                                    }?
                                  }?,
                                  regex_pattern_set_reference_statement: {
                                    arn: ::String,
                                    field_to_match: {
                                      single_header: {
                                        name: ::String
                                      }?,
                                      single_query_argument: {
                                        name: ::String
                                      }?,
                                      all_query_arguments: {
                                      }?,
                                      uri_path: {
                                      }?,
                                      query_string: {
                                      }?,
                                      body: {
                                        oversize_handling: ("CONTINUE" | "MATCH" | "NO_MATCH")?
                                      }?,
                                      method: {
                                      }?,
                                      json_body: {
                                        match_pattern: {
                                          all: {
                                          }?,
                                          included_paths: Array[::String]?
                                        },
                                        match_scope: ("ALL" | "KEY" | "VALUE"),
                                        invalid_fallback_behavior: ("MATCH" | "NO_MATCH" | "EVALUATE_AS_STRING")?,
                                        oversize_handling: ("CONTINUE" | "MATCH" | "NO_MATCH")?
                                      }?,
                                      headers: {
                                        match_pattern: {
                                          all: {
                                          }?,
                                          included_headers: Array[::String]?,
                                          excluded_headers: Array[::String]?
                                        },
                                        match_scope: ("ALL" | "KEY" | "VALUE"),
                                        oversize_handling: ("CONTINUE" | "MATCH" | "NO_MATCH")
                                      }?,
                                      cookies: {
                                        match_pattern: {
                                          all: {
                                          }?,
                                          included_cookies: Array[::String]?,
                                          excluded_cookies: Array[::String]?
                                        },
                                        match_scope: ("ALL" | "KEY" | "VALUE"),
                                        oversize_handling: ("CONTINUE" | "MATCH" | "NO_MATCH")
                                      }?,
                                      header_order: {
                                        oversize_handling: ("CONTINUE" | "MATCH" | "NO_MATCH")
                                      }?,
                                      ja3_fingerprint: {
                                        fallback_behavior: ("MATCH" | "NO_MATCH")
                                      }?
                                    },
                                    text_transformations: Array[
                                      {
                                        priority: ::Integer,
                                        type: ("NONE" | "COMPRESS_WHITE_SPACE" | "HTML_ENTITY_DECODE" | "LOWERCASE" | "CMD_LINE" | "URL_DECODE" | "BASE64_DECODE" | "HEX_DECODE" | "MD5" | "REPLACE_COMMENTS" | "ESCAPE_SEQ_DECODE" | "SQL_HEX_DECODE" | "CSS_DECODE" | "JS_DECODE" | "NORMALIZE_PATH" | "NORMALIZE_PATH_WIN" | "REMOVE_NULLS" | "REPLACE_NULLS" | "BASE64_DECODE_EXT" | "URL_DECODE_UNI" | "UTF8_TO_UNICODE")
                                      },
                                    ]
                                  }?,
                                  rate_based_statement: {
                                    limit: ::Integer,
                                    evaluation_window_sec: ::Integer?,
                                    aggregate_key_type: ("IP" | "FORWARDED_IP" | "CUSTOM_KEYS" | "CONSTANT"),
                                    scope_down_statement: untyped?,
                                    forwarded_ip_config: {
                                      header_name: ::String,
                                      fallback_behavior: ("MATCH" | "NO_MATCH")
                                    }?,
                                    custom_keys: Array[
                                      {
                                        header: {
                                          name: ::String,
                                          text_transformations: Array[
                                            {
                                              priority: ::Integer,
                                              type: ("NONE" | "COMPRESS_WHITE_SPACE" | "HTML_ENTITY_DECODE" | "LOWERCASE" | "CMD_LINE" | "URL_DECODE" | "BASE64_DECODE" | "HEX_DECODE" | "MD5" | "REPLACE_COMMENTS" | "ESCAPE_SEQ_DECODE" | "SQL_HEX_DECODE" | "CSS_DECODE" | "JS_DECODE" | "NORMALIZE_PATH" | "NORMALIZE_PATH_WIN" | "REMOVE_NULLS" | "REPLACE_NULLS" | "BASE64_DECODE_EXT" | "URL_DECODE_UNI" | "UTF8_TO_UNICODE")
                                            },
                                          ]
                                        }?,
                                        cookie: {
                                          name: ::String,
                                          text_transformations: Array[
                                            {
                                              priority: ::Integer,
                                              type: ("NONE" | "COMPRESS_WHITE_SPACE" | "HTML_ENTITY_DECODE" | "LOWERCASE" | "CMD_LINE" | "URL_DECODE" | "BASE64_DECODE" | "HEX_DECODE" | "MD5" | "REPLACE_COMMENTS" | "ESCAPE_SEQ_DECODE" | "SQL_HEX_DECODE" | "CSS_DECODE" | "JS_DECODE" | "NORMALIZE_PATH" | "NORMALIZE_PATH_WIN" | "REMOVE_NULLS" | "REPLACE_NULLS" | "BASE64_DECODE_EXT" | "URL_DECODE_UNI" | "UTF8_TO_UNICODE")
                                            },
                                          ]
                                        }?,
                                        query_argument: {
                                          name: ::String,
                                          text_transformations: Array[
                                            {
                                              priority: ::Integer,
                                              type: ("NONE" | "COMPRESS_WHITE_SPACE" | "HTML_ENTITY_DECODE" | "LOWERCASE" | "CMD_LINE" | "URL_DECODE" | "BASE64_DECODE" | "HEX_DECODE" | "MD5" | "REPLACE_COMMENTS" | "ESCAPE_SEQ_DECODE" | "SQL_HEX_DECODE" | "CSS_DECODE" | "JS_DECODE" | "NORMALIZE_PATH" | "NORMALIZE_PATH_WIN" | "REMOVE_NULLS" | "REPLACE_NULLS" | "BASE64_DECODE_EXT" | "URL_DECODE_UNI" | "UTF8_TO_UNICODE")
                                            },
                                          ]
                                        }?,
                                        query_string: {
                                          text_transformations: Array[
                                            {
                                              priority: ::Integer,
                                              type: ("NONE" | "COMPRESS_WHITE_SPACE" | "HTML_ENTITY_DECODE" | "LOWERCASE" | "CMD_LINE" | "URL_DECODE" | "BASE64_DECODE" | "HEX_DECODE" | "MD5" | "REPLACE_COMMENTS" | "ESCAPE_SEQ_DECODE" | "SQL_HEX_DECODE" | "CSS_DECODE" | "JS_DECODE" | "NORMALIZE_PATH" | "NORMALIZE_PATH_WIN" | "REMOVE_NULLS" | "REPLACE_NULLS" | "BASE64_DECODE_EXT" | "URL_DECODE_UNI" | "UTF8_TO_UNICODE")
                                            },
                                          ]
                                        }?,
                                        http_method: {
                                        }?,
                                        forwarded_ip: {
                                        }?,
                                        ip: {
                                        }?,
                                        label_namespace: {
                                          namespace: ::String
                                        }?,
                                        uri_path: {
                                          text_transformations: Array[
                                            {
                                              priority: ::Integer,
                                              type: ("NONE" | "COMPRESS_WHITE_SPACE" | "HTML_ENTITY_DECODE" | "LOWERCASE" | "CMD_LINE" | "URL_DECODE" | "BASE64_DECODE" | "HEX_DECODE" | "MD5" | "REPLACE_COMMENTS" | "ESCAPE_SEQ_DECODE" | "SQL_HEX_DECODE" | "CSS_DECODE" | "JS_DECODE" | "NORMALIZE_PATH" | "NORMALIZE_PATH_WIN" | "REMOVE_NULLS" | "REPLACE_NULLS" | "BASE64_DECODE_EXT" | "URL_DECODE_UNI" | "UTF8_TO_UNICODE")
                                            },
                                          ]
                                        }?
                                      },
                                    ]?
                                  }?,
                                  and_statement: {
                                    statements: Array[
                                      untyped,
                                    ]
                                  }?,
                                  or_statement: {
                                    statements: Array[
                                      untyped,
                                    ]
                                  }?,
                                  not_statement: {
                                    statement: untyped
                                  }?,
                                  managed_rule_group_statement: {
                                    vendor_name: ::String,
                                    name: ::String,
                                    version: ::String?,
                                    excluded_rules: Array[
                                      {
                                        name: ::String
                                      },
                                    ]?,
                                    scope_down_statement: untyped?,
                                    managed_rule_group_configs: Array[
                                      {
                                        login_path: ::String?,
                                        payload_type: ("JSON" | "FORM_ENCODED")?,
                                        username_field: {
                                          identifier: ::String
                                        }?,
                                        password_field: {
                                          identifier: ::String
                                        }?,
                                        aws_managed_rules_bot_control_rule_set: {
                                          inspection_level: ("COMMON" | "TARGETED"),
                                          enable_machine_learning: bool?
                                        }?,
                                        aws_managed_rules_atp_rule_set: {
                                          login_path: ::String,
                                          request_inspection: {
                                            payload_type: ("JSON" | "FORM_ENCODED"),
                                            username_field: {
                                              identifier: ::String
                                            },
                                            password_field: {
                                              identifier: ::String
                                            }
                                          }?,
                                          response_inspection: {
                                            status_code: {
                                              success_codes: Array[::Integer],
                                              failure_codes: Array[::Integer]
                                            }?,
                                            header: {
                                              name: ::String,
                                              success_values: Array[::String],
                                              failure_values: Array[::String]
                                            }?,
                                            body_contains: {
                                              success_strings: Array[::String],
                                              failure_strings: Array[::String]
                                            }?,
                                            json: {
                                              identifier: ::String,
                                              success_values: Array[::String],
                                              failure_values: Array[::String]
                                            }?
                                          }?,
                                          enable_regex_in_path: bool?
                                        }?,
                                        aws_managed_rules_acfp_rule_set: {
                                          creation_path: ::String,
                                          registration_page_path: ::String,
                                          request_inspection: {
                                            payload_type: ("JSON" | "FORM_ENCODED"),
                                            username_field: {
                                              identifier: ::String
                                            }?,
                                            password_field: {
                                              identifier: ::String
                                            }?,
                                            email_field: {
                                              identifier: ::String
                                            }?,
                                            phone_number_fields: Array[
                                              {
                                                identifier: ::String
                                              },
                                            ]?,
                                            address_fields: Array[
                                              {
                                                identifier: ::String
                                              },
                                            ]?
                                          },
                                          response_inspection: {
                                            status_code: {
                                              success_codes: Array[::Integer],
                                              failure_codes: Array[::Integer]
                                            }?,
                                            header: {
                                              name: ::String,
                                              success_values: Array[::String],
                                              failure_values: Array[::String]
                                            }?,
                                            body_contains: {
                                              success_strings: Array[::String],
                                              failure_strings: Array[::String]
                                            }?,
                                            json: {
                                              identifier: ::String,
                                              success_values: Array[::String],
                                              failure_values: Array[::String]
                                            }?
                                          }?,
                                          enable_regex_in_path: bool?
                                        }?
                                      },
                                    ]?,
                                    rule_action_overrides: Array[
                                      {
                                        name: ::String,
                                        action_to_use: {
                                          block: {
                                            custom_response: {
                                              response_code: ::Integer,
                                              custom_response_body_key: ::String?,
                                              response_headers: Array[
                                                {
                                                  name: ::String,
                                                  value: ::String
                                                },
                                              ]?
                                            }?
                                          }?,
                                          allow: {
                                            custom_request_handling: {
                                              insert_headers: Array[
                                                {
                                                  name: ::String,
                                                  value: ::String
                                                },
                                              ]
                                            }?
                                          }?,
                                          count: {
                                            custom_request_handling: {
                                              insert_headers: Array[
                                                {
                                                  name: ::String,
                                                  value: ::String
                                                },
                                              ]
                                            }?
                                          }?,
                                          captcha: {
                                            custom_request_handling: {
                                              insert_headers: Array[
                                                {
                                                  name: ::String,
                                                  value: ::String
                                                },
                                              ]
                                            }?
                                          }?,
                                          challenge: {
                                            custom_request_handling: {
                                              insert_headers: Array[
                                                {
                                                  name: ::String,
                                                  value: ::String
                                                },
                                              ]
                                            }?
                                          }?
                                        }
                                      },
                                    ]?
                                  }?,
                                  label_match_statement: {
                                    scope: ("LABEL" | "NAMESPACE"),
                                    key: ::String
                                  }?,
                                  regex_match_statement: {
                                    regex_string: ::String,
                                    field_to_match: {
                                      single_header: {
                                        name: ::String
                                      }?,
                                      single_query_argument: {
                                        name: ::String
                                      }?,
                                      all_query_arguments: {
                                      }?,
                                      uri_path: {
                                      }?,
                                      query_string: {
                                      }?,
                                      body: {
                                        oversize_handling: ("CONTINUE" | "MATCH" | "NO_MATCH")?
                                      }?,
                                      method: {
                                      }?,
                                      json_body: {
                                        match_pattern: {
                                          all: {
                                          }?,
                                          included_paths: Array[::String]?
                                        },
                                        match_scope: ("ALL" | "KEY" | "VALUE"),
                                        invalid_fallback_behavior: ("MATCH" | "NO_MATCH" | "EVALUATE_AS_STRING")?,
                                        oversize_handling: ("CONTINUE" | "MATCH" | "NO_MATCH")?
                                      }?,
                                      headers: {
                                        match_pattern: {
                                          all: {
                                          }?,
                                          included_headers: Array[::String]?,
                                          excluded_headers: Array[::String]?
                                        },
                                        match_scope: ("ALL" | "KEY" | "VALUE"),
                                        oversize_handling: ("CONTINUE" | "MATCH" | "NO_MATCH")
                                      }?,
                                      cookies: {
                                        match_pattern: {
                                          all: {
                                          }?,
                                          included_cookies: Array[::String]?,
                                          excluded_cookies: Array[::String]?
                                        },
                                        match_scope: ("ALL" | "KEY" | "VALUE"),
                                        oversize_handling: ("CONTINUE" | "MATCH" | "NO_MATCH")
                                      }?,
                                      header_order: {
                                        oversize_handling: ("CONTINUE" | "MATCH" | "NO_MATCH")
                                      }?,
                                      ja3_fingerprint: {
                                        fallback_behavior: ("MATCH" | "NO_MATCH")
                                      }?
                                    },
                                    text_transformations: Array[
                                      {
                                        priority: ::Integer,
                                        type: ("NONE" | "COMPRESS_WHITE_SPACE" | "HTML_ENTITY_DECODE" | "LOWERCASE" | "CMD_LINE" | "URL_DECODE" | "BASE64_DECODE" | "HEX_DECODE" | "MD5" | "REPLACE_COMMENTS" | "ESCAPE_SEQ_DECODE" | "SQL_HEX_DECODE" | "CSS_DECODE" | "JS_DECODE" | "NORMALIZE_PATH" | "NORMALIZE_PATH_WIN" | "REMOVE_NULLS" | "REPLACE_NULLS" | "BASE64_DECODE_EXT" | "URL_DECODE_UNI" | "UTF8_TO_UNICODE")
                                      },
                                    ]
                                  }?
                                },
                                action: {
                                  block: {
                                    custom_response: {
                                      response_code: ::Integer,
                                      custom_response_body_key: ::String?,
                                      response_headers: Array[
                                        {
                                          name: ::String,
                                          value: ::String
                                        },
                                      ]?
                                    }?
                                  }?,
                                  allow: {
                                    custom_request_handling: {
                                      insert_headers: Array[
                                        {
                                          name: ::String,
                                          value: ::String
                                        },
                                      ]
                                    }?
                                  }?,
                                  count: {
                                    custom_request_handling: {
                                      insert_headers: Array[
                                        {
                                          name: ::String,
                                          value: ::String
                                        },
                                      ]
                                    }?
                                  }?,
                                  captcha: {
                                    custom_request_handling: {
                                      insert_headers: Array[
                                        {
                                          name: ::String,
                                          value: ::String
                                        },
                                      ]
                                    }?
                                  }?,
                                  challenge: {
                                    custom_request_handling: {
                                      insert_headers: Array[
                                        {
                                          name: ::String,
                                          value: ::String
                                        },
                                      ]
                                    }?
                                  }?
                                }?,
                                override_action: {
                                  count: {
                                    custom_request_handling: {
                                      insert_headers: Array[
                                        {
                                          name: ::String,
                                          value: ::String
                                        },
                                      ]
                                    }?
                                  }?,
                                  none: {
                                  }?
                                }?,
                                rule_labels: Array[
                                  {
                                    name: ::String
                                  },
                                ]?,
                                visibility_config: {
                                  sampled_requests_enabled: bool,
                                  cloud_watch_metrics_enabled: bool,
                                  metric_name: ::String
                                },
                                captcha_config: {
                                  immunity_time_property: {
                                    immunity_time: ::Integer
                                  }?
                                }?,
                                challenge_config: {
                                  immunity_time_property: {
                                    immunity_time: ::Integer
                                  }?
                                }?
                              },
                            ],
                            visibility_config: {
                              sampled_requests_enabled: bool,
                              cloud_watch_metrics_enabled: bool,
                              metric_name: ::String
                            },
                            lock_token: ::String,
                            ?custom_response_bodies: Hash[::String, {
                                content_type: ("TEXT_PLAIN" | "TEXT_HTML" | "APPLICATION_JSON"),
                                content: ::String
                              }],
                            ?captcha_config: {
                              immunity_time_property: {
                                immunity_time: ::Integer
                              }?
                            },
                            ?challenge_config: {
                              immunity_time_property: {
                                immunity_time: ::Integer
                              }?
                            },
                            ?token_domains: Array[::String],
                            ?association_config: {
                              request_body: Hash[("CLOUDFRONT" | "API_GATEWAY" | "COGNITO_USER_POOL" | "APP_RUNNER_SERVICE" | "VERIFIED_ACCESS_INSTANCE"), {
                                  default_size_inspection_limit: ("KB_16" | "KB_32" | "KB_48" | "KB_64")
                                }]?
                            }
                          ) -> _UpdateWebACLResponseSuccess
                        | (Hash[Symbol, untyped] params, ?Hash[Symbol, untyped] options) -> _UpdateWebACLResponseSuccess
    end
  end
end