/sdk/dotnet/WafV2/RuleGroup.cs
https://github.com/pulumi/pulumi-aws · C# · 621 lines · 132 code · 41 blank · 448 comment · 0 complexity · 116d64a44c7ab79cf9d15d47e1e53e31 MD5 · raw file
- // *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. ***
- // *** Do not edit by hand unless you're certain you know what you are doing! ***
- using System;
- using System.Collections.Generic;
- using System.Collections.Immutable;
- using System.Threading.Tasks;
- using Pulumi.Serialization;
- namespace Pulumi.Aws.WafV2
- {
- /// <summary>
- /// Creates a WAFv2 Rule Group resource.
- ///
- /// ## Example Usage
- /// ### Simple
- ///
- /// ```csharp
- /// using Pulumi;
- /// using Aws = Pulumi.Aws;
- ///
- /// class MyStack : Stack
- /// {
- /// public MyStack()
- /// {
- /// var example = new Aws.WafV2.RuleGroup("example", new Aws.WafV2.RuleGroupArgs
- /// {
- /// Capacity = 2,
- /// Rules =
- /// {
- /// new Aws.WafV2.Inputs.RuleGroupRuleArgs
- /// {
- /// Action = new Aws.WafV2.Inputs.RuleGroupRuleActionArgs
- /// {
- /// Allow = ,
- /// },
- /// Name = "rule-1",
- /// Priority = 1,
- /// Statement = new Aws.WafV2.Inputs.RuleGroupRuleStatementArgs
- /// {
- /// GeoMatchStatement = new Aws.WafV2.Inputs.RuleGroupRuleStatementGeoMatchStatementArgs
- /// {
- /// CountryCodes =
- /// {
- /// "US",
- /// "NL",
- /// },
- /// },
- /// },
- /// VisibilityConfig = new Aws.WafV2.Inputs.RuleGroupRuleVisibilityConfigArgs
- /// {
- /// CloudwatchMetricsEnabled = false,
- /// MetricName = "friendly-rule-metric-name",
- /// SampledRequestsEnabled = false,
- /// },
- /// },
- /// },
- /// Scope = "REGIONAL",
- /// VisibilityConfig = new Aws.WafV2.Inputs.RuleGroupVisibilityConfigArgs
- /// {
- /// CloudwatchMetricsEnabled = false,
- /// MetricName = "friendly-metric-name",
- /// SampledRequestsEnabled = false,
- /// },
- /// });
- /// }
- ///
- /// }
- /// ```
- /// ### Complex
- ///
- /// ```csharp
- /// using Pulumi;
- /// using Aws = Pulumi.Aws;
- ///
- /// class MyStack : Stack
- /// {
- /// public MyStack()
- /// {
- /// var testIpSet = new Aws.WafV2.IpSet("testIpSet", new Aws.WafV2.IpSetArgs
- /// {
- /// Scope = "REGIONAL",
- /// IpAddressVersion = "IPV4",
- /// Addresses =
- /// {
- /// "1.1.1.1/32",
- /// "2.2.2.2/32",
- /// },
- /// });
- /// var testRegexPatternSet = new Aws.WafV2.RegexPatternSet("testRegexPatternSet", new Aws.WafV2.RegexPatternSetArgs
- /// {
- /// Scope = "REGIONAL",
- /// RegularExpressions =
- /// {
- /// new Aws.WafV2.Inputs.RegexPatternSetRegularExpressionArgs
- /// {
- /// RegexString = "one",
- /// },
- /// },
- /// });
- /// var example = new Aws.WafV2.RuleGroup("example", new Aws.WafV2.RuleGroupArgs
- /// {
- /// Description = "An rule group containing all statements",
- /// Scope = "REGIONAL",
- /// Capacity = 500,
- /// Rules =
- /// {
- /// new Aws.WafV2.Inputs.RuleGroupRuleArgs
- /// {
- /// Name = "rule-1",
- /// Priority = 1,
- /// Action = new Aws.WafV2.Inputs.RuleGroupRuleActionArgs
- /// {
- /// Block = ,
- /// },
- /// Statement = new Aws.WafV2.Inputs.RuleGroupRuleStatementArgs
- /// {
- /// NotStatement = new Aws.WafV2.Inputs.RuleGroupRuleStatementNotStatementArgs
- /// {
- /// Statements =
- /// {
- /// new Aws.WafV2.Inputs.RuleGroupRuleStatementNotStatementStatementArgs
- /// {
- /// AndStatement = new Aws.WafV2.Inputs.RuleGroupRuleStatementNotStatementStatementAndStatementArgs
- /// {
- /// Statements =
- /// {
- /// new Aws.WafV2.Inputs.RuleGroupRuleStatementNotStatementStatementAndStatementStatementArgs
- /// {
- /// GeoMatchStatement = new Aws.WafV2.Inputs.RuleGroupRuleStatementNotStatementStatementAndStatementStatementGeoMatchStatementArgs
- /// {
- /// CountryCodes =
- /// {
- /// "US",
- /// },
- /// },
- /// },
- /// new Aws.WafV2.Inputs.RuleGroupRuleStatementNotStatementStatementAndStatementStatementArgs
- /// {
- /// ByteMatchStatement = new Aws.WafV2.Inputs.RuleGroupRuleStatementNotStatementStatementAndStatementStatementByteMatchStatementArgs
- /// {
- /// PositionalConstraint = "CONTAINS",
- /// SearchString = "word",
- /// FieldToMatch = new Aws.WafV2.Inputs.RuleGroupRuleStatementNotStatementStatementAndStatementStatementByteMatchStatementFieldToMatchArgs
- /// {
- /// AllQueryArguments = ,
- /// },
- /// TextTransformations =
- /// {
- /// new Aws.WafV2.Inputs.RuleGroupRuleStatementNotStatementStatementAndStatementStatementByteMatchStatementTextTransformationArgs
- /// {
- /// Priority = 5,
- /// Type = "CMD_LINE",
- /// },
- /// new Aws.WafV2.Inputs.RuleGroupRuleStatementNotStatementStatementAndStatementStatementByteMatchStatementTextTransformationArgs
- /// {
- /// Priority = 2,
- /// Type = "LOWERCASE",
- /// },
- /// },
- /// },
- /// },
- /// },
- /// },
- /// },
- /// },
- /// },
- /// },
- /// VisibilityConfig = new Aws.WafV2.Inputs.RuleGroupRuleVisibilityConfigArgs
- /// {
- /// CloudwatchMetricsEnabled = false,
- /// MetricName = "rule-1",
- /// SampledRequestsEnabled = false,
- /// },
- /// },
- /// new Aws.WafV2.Inputs.RuleGroupRuleArgs
- /// {
- /// Name = "rule-2",
- /// Priority = 2,
- /// Action = new Aws.WafV2.Inputs.RuleGroupRuleActionArgs
- /// {
- /// Count = ,
- /// },
- /// Statement = new Aws.WafV2.Inputs.RuleGroupRuleStatementArgs
- /// {
- /// OrStatement = new Aws.WafV2.Inputs.RuleGroupRuleStatementOrStatementArgs
- /// {
- /// Statements =
- /// {
- /// new Aws.WafV2.Inputs.RuleGroupRuleStatementOrStatementStatementArgs
- /// {
- /// SqliMatchStatement = new Aws.WafV2.Inputs.RuleGroupRuleStatementOrStatementStatementSqliMatchStatementArgs
- /// {
- /// FieldToMatch = new Aws.WafV2.Inputs.RuleGroupRuleStatementOrStatementStatementSqliMatchStatementFieldToMatchArgs
- /// {
- /// Body = ,
- /// },
- /// TextTransformations =
- /// {
- /// new Aws.WafV2.Inputs.RuleGroupRuleStatementOrStatementStatementSqliMatchStatementTextTransformationArgs
- /// {
- /// Priority = 5,
- /// Type = "URL_DECODE",
- /// },
- /// new Aws.WafV2.Inputs.RuleGroupRuleStatementOrStatementStatementSqliMatchStatementTextTransformationArgs
- /// {
- /// Priority = 4,
- /// Type = "HTML_ENTITY_DECODE",
- /// },
- /// new Aws.WafV2.Inputs.RuleGroupRuleStatementOrStatementStatementSqliMatchStatementTextTransformationArgs
- /// {
- /// Priority = 3,
- /// Type = "COMPRESS_WHITE_SPACE",
- /// },
- /// },
- /// },
- /// },
- /// new Aws.WafV2.Inputs.RuleGroupRuleStatementOrStatementStatementArgs
- /// {
- /// XssMatchStatement = new Aws.WafV2.Inputs.RuleGroupRuleStatementOrStatementStatementXssMatchStatementArgs
- /// {
- /// FieldToMatch = new Aws.WafV2.Inputs.RuleGroupRuleStatementOrStatementStatementXssMatchStatementFieldToMatchArgs
- /// {
- /// Method = ,
- /// },
- /// TextTransformations =
- /// {
- /// new Aws.WafV2.Inputs.RuleGroupRuleStatementOrStatementStatementXssMatchStatementTextTransformationArgs
- /// {
- /// Priority = 2,
- /// Type = "NONE",
- /// },
- /// },
- /// },
- /// },
- /// },
- /// },
- /// },
- /// VisibilityConfig = new Aws.WafV2.Inputs.RuleGroupRuleVisibilityConfigArgs
- /// {
- /// CloudwatchMetricsEnabled = false,
- /// MetricName = "rule-2",
- /// SampledRequestsEnabled = false,
- /// },
- /// },
- /// new Aws.WafV2.Inputs.RuleGroupRuleArgs
- /// {
- /// Name = "rule-3",
- /// Priority = 3,
- /// Action = new Aws.WafV2.Inputs.RuleGroupRuleActionArgs
- /// {
- /// Block = ,
- /// },
- /// Statement = new Aws.WafV2.Inputs.RuleGroupRuleStatementArgs
- /// {
- /// SizeConstraintStatement = new Aws.WafV2.Inputs.RuleGroupRuleStatementSizeConstraintStatementArgs
- /// {
- /// ComparisonOperator = "GT",
- /// Size = 100,
- /// FieldToMatch = new Aws.WafV2.Inputs.RuleGroupRuleStatementSizeConstraintStatementFieldToMatchArgs
- /// {
- /// SingleQueryArgument = new Aws.WafV2.Inputs.RuleGroupRuleStatementSizeConstraintStatementFieldToMatchSingleQueryArgumentArgs
- /// {
- /// Name = "username",
- /// },
- /// },
- /// TextTransformations =
- /// {
- /// new Aws.WafV2.Inputs.RuleGroupRuleStatementSizeConstraintStatementTextTransformationArgs
- /// {
- /// Priority = 5,
- /// Type = "NONE",
- /// },
- /// },
- /// },
- /// },
- /// VisibilityConfig = new Aws.WafV2.Inputs.RuleGroupRuleVisibilityConfigArgs
- /// {
- /// CloudwatchMetricsEnabled = false,
- /// MetricName = "rule-3",
- /// SampledRequestsEnabled = false,
- /// },
- /// },
- /// new Aws.WafV2.Inputs.RuleGroupRuleArgs
- /// {
- /// Name = "rule-4",
- /// Priority = 4,
- /// Action = new Aws.WafV2.Inputs.RuleGroupRuleActionArgs
- /// {
- /// Block = ,
- /// },
- /// Statement = new Aws.WafV2.Inputs.RuleGroupRuleStatementArgs
- /// {
- /// OrStatement = new Aws.WafV2.Inputs.RuleGroupRuleStatementOrStatementArgs
- /// {
- /// Statements =
- /// {
- /// new Aws.WafV2.Inputs.RuleGroupRuleStatementOrStatementStatementArgs
- /// {
- /// IpSetReferenceStatement = new Aws.WafV2.Inputs.RuleGroupRuleStatementOrStatementStatementIpSetReferenceStatementArgs
- /// {
- /// Arn = testIpSet.Arn,
- /// },
- /// },
- /// new Aws.WafV2.Inputs.RuleGroupRuleStatementOrStatementStatementArgs
- /// {
- /// RegexPatternSetReferenceStatement = new Aws.WafV2.Inputs.RuleGroupRuleStatementOrStatementStatementRegexPatternSetReferenceStatementArgs
- /// {
- /// Arn = testRegexPatternSet.Arn,
- /// FieldToMatch = new Aws.WafV2.Inputs.RuleGroupRuleStatementOrStatementStatementRegexPatternSetReferenceStatementFieldToMatchArgs
- /// {
- /// SingleHeader = new Aws.WafV2.Inputs.RuleGroupRuleStatementOrStatementStatementRegexPatternSetReferenceStatementFieldToMatchSingleHeaderArgs
- /// {
- /// Name = "referer",
- /// },
- /// },
- /// TextTransformations =
- /// {
- /// new Aws.WafV2.Inputs.RuleGroupRuleStatementOrStatementStatementRegexPatternSetReferenceStatementTextTransformationArgs
- /// {
- /// Priority = 2,
- /// Type = "NONE",
- /// },
- /// },
- /// },
- /// },
- /// },
- /// },
- /// },
- /// VisibilityConfig = new Aws.WafV2.Inputs.RuleGroupRuleVisibilityConfigArgs
- /// {
- /// CloudwatchMetricsEnabled = false,
- /// MetricName = "rule-4",
- /// SampledRequestsEnabled = false,
- /// },
- /// },
- /// },
- /// VisibilityConfig = new Aws.WafV2.Inputs.RuleGroupVisibilityConfigArgs
- /// {
- /// CloudwatchMetricsEnabled = false,
- /// MetricName = "friendly-metric-name",
- /// SampledRequestsEnabled = false,
- /// },
- /// Tags =
- /// {
- /// { "Name", "example-and-statement" },
- /// { "Code", "123456" },
- /// },
- /// });
- /// }
- ///
- /// }
- /// ```
- ///
- /// ## Import
- ///
- /// WAFv2 Rule Group can be imported using `ID/name/scope` e.g.
- ///
- /// ```sh
- /// $ pulumi import aws:wafv2/ruleGroup:RuleGroup example a1b2c3d4-d5f6-7777-8888-9999aaaabbbbcccc/example/REGIONAL
- /// ```
- /// </summary>
- [AwsResourceType("aws:wafv2/ruleGroup:RuleGroup")]
- public partial class RuleGroup : Pulumi.CustomResource
- {
- /// <summary>
- /// The Amazon Resource Name (ARN) of the IP Set that this statement references.
- /// </summary>
- [Output("arn")]
- public Output<string> Arn { get; private set; } = null!;
- /// <summary>
- /// The web ACL capacity units (WCUs) required for this rule group. See [here](https://docs.aws.amazon.com/waf/latest/APIReference/API_CreateRuleGroup.html#API_CreateRuleGroup_RequestSyntax) for general information and [here](https://docs.aws.amazon.com/waf/latest/developerguide/waf-rule-statements-list.html) for capacity specific information.
- /// </summary>
- [Output("capacity")]
- public Output<int> Capacity { get; private set; } = null!;
- /// <summary>
- /// A friendly description of the rule group.
- /// </summary>
- [Output("description")]
- public Output<string?> Description { get; private set; } = null!;
- [Output("lockToken")]
- public Output<string> LockToken { get; private set; } = null!;
- /// <summary>
- /// The name of the custom header. For custom request header insertion, when AWS WAF inserts the header into the request, it prefixes this name `x-amzn-waf-`, to avoid confusion with the headers that are already in the request. For example, for the header name `sample`, AWS WAF inserts the header `x-amzn-waf-sample`.
- /// </summary>
- [Output("name")]
- public Output<string> Name { get; private set; } = null!;
- /// <summary>
- /// The rule blocks used to identify the web requests that you want to `allow`, `block`, or `count`. See Rules below for details.
- /// </summary>
- [Output("rules")]
- public Output<ImmutableArray<Outputs.RuleGroupRule>> Rules { get; private set; } = null!;
- /// <summary>
- /// Specifies whether this is for an AWS CloudFront distribution or for a regional application. Valid values are `CLOUDFRONT` or `REGIONAL`. To work with CloudFront, you must also specify the region `us-east-1` (N. Virginia) on the AWS provider.
- /// </summary>
- [Output("scope")]
- public Output<string> Scope { get; private set; } = null!;
- /// <summary>
- /// An array of key:value pairs to associate with the resource. .If configured with a provider `default_tags` configuration block present, tags with matching keys will overwrite those defined at the provider-level.
- /// </summary>
- [Output("tags")]
- public Output<ImmutableDictionary<string, string>?> Tags { get; private set; } = null!;
- /// <summary>
- /// A map of tags assigned to the resource, including those inherited from the provider .
- /// </summary>
- [Output("tagsAll")]
- public Output<ImmutableDictionary<string, string>> TagsAll { get; private set; } = null!;
- /// <summary>
- /// Defines and enables Amazon CloudWatch metrics and web request sample collection. See Visibility Configuration below for details.
- /// </summary>
- [Output("visibilityConfig")]
- public Output<Outputs.RuleGroupVisibilityConfig> VisibilityConfig { get; private set; } = null!;
- /// <summary>
- /// Create a RuleGroup resource with the given unique name, arguments, and options.
- /// </summary>
- ///
- /// <param name="name">The unique name of the resource</param>
- /// <param name="args">The arguments used to populate this resource's properties</param>
- /// <param name="options">A bag of options that control this resource's behavior</param>
- public RuleGroup(string name, RuleGroupArgs args, CustomResourceOptions? options = null)
- : base("aws:wafv2/ruleGroup:RuleGroup", name, args ?? new RuleGroupArgs(), MakeResourceOptions(options, ""))
- {
- }
- private RuleGroup(string name, Input<string> id, RuleGroupState? state = null, CustomResourceOptions? options = null)
- : base("aws:wafv2/ruleGroup:RuleGroup", name, state, MakeResourceOptions(options, id))
- {
- }
- private static CustomResourceOptions MakeResourceOptions(CustomResourceOptions? options, Input<string>? id)
- {
- var defaultOptions = new CustomResourceOptions
- {
- Version = Utilities.Version,
- };
- var merged = CustomResourceOptions.Merge(defaultOptions, options);
- // Override the ID if one was specified for consistency with other language SDKs.
- merged.Id = id ?? merged.Id;
- return merged;
- }
- /// <summary>
- /// Get an existing RuleGroup resource's state with the given name, ID, and optional extra
- /// properties used to qualify the lookup.
- /// </summary>
- ///
- /// <param name="name">The unique name of the resulting resource.</param>
- /// <param name="id">The unique provider ID of the resource to lookup.</param>
- /// <param name="state">Any extra arguments used during the lookup.</param>
- /// <param name="options">A bag of options that control this resource's behavior</param>
- public static RuleGroup Get(string name, Input<string> id, RuleGroupState? state = null, CustomResourceOptions? options = null)
- {
- return new RuleGroup(name, id, state, options);
- }
- }
- public sealed class RuleGroupArgs : Pulumi.ResourceArgs
- {
- /// <summary>
- /// The web ACL capacity units (WCUs) required for this rule group. See [here](https://docs.aws.amazon.com/waf/latest/APIReference/API_CreateRuleGroup.html#API_CreateRuleGroup_RequestSyntax) for general information and [here](https://docs.aws.amazon.com/waf/latest/developerguide/waf-rule-statements-list.html) for capacity specific information.
- /// </summary>
- [Input("capacity", required: true)]
- public Input<int> Capacity { get; set; } = null!;
- /// <summary>
- /// A friendly description of the rule group.
- /// </summary>
- [Input("description")]
- public Input<string>? Description { get; set; }
- /// <summary>
- /// The name of the custom header. For custom request header insertion, when AWS WAF inserts the header into the request, it prefixes this name `x-amzn-waf-`, to avoid confusion with the headers that are already in the request. For example, for the header name `sample`, AWS WAF inserts the header `x-amzn-waf-sample`.
- /// </summary>
- [Input("name")]
- public Input<string>? Name { get; set; }
- [Input("rules")]
- private InputList<Inputs.RuleGroupRuleArgs>? _rules;
- /// <summary>
- /// The rule blocks used to identify the web requests that you want to `allow`, `block`, or `count`. See Rules below for details.
- /// </summary>
- public InputList<Inputs.RuleGroupRuleArgs> Rules
- {
- get => _rules ?? (_rules = new InputList<Inputs.RuleGroupRuleArgs>());
- set => _rules = value;
- }
- /// <summary>
- /// Specifies whether this is for an AWS CloudFront distribution or for a regional application. Valid values are `CLOUDFRONT` or `REGIONAL`. To work with CloudFront, you must also specify the region `us-east-1` (N. Virginia) on the AWS provider.
- /// </summary>
- [Input("scope", required: true)]
- public Input<string> Scope { get; set; } = null!;
- [Input("tags")]
- private InputMap<string>? _tags;
- /// <summary>
- /// An array of key:value pairs to associate with the resource. .If configured with a provider `default_tags` configuration block present, tags with matching keys will overwrite those defined at the provider-level.
- /// </summary>
- public InputMap<string> Tags
- {
- get => _tags ?? (_tags = new InputMap<string>());
- set => _tags = value;
- }
- [Input("tagsAll")]
- private InputMap<string>? _tagsAll;
- /// <summary>
- /// A map of tags assigned to the resource, including those inherited from the provider .
- /// </summary>
- public InputMap<string> TagsAll
- {
- get => _tagsAll ?? (_tagsAll = new InputMap<string>());
- set => _tagsAll = value;
- }
- /// <summary>
- /// Defines and enables Amazon CloudWatch metrics and web request sample collection. See Visibility Configuration below for details.
- /// </summary>
- [Input("visibilityConfig", required: true)]
- public Input<Inputs.RuleGroupVisibilityConfigArgs> VisibilityConfig { get; set; } = null!;
- public RuleGroupArgs()
- {
- }
- }
- public sealed class RuleGroupState : Pulumi.ResourceArgs
- {
- /// <summary>
- /// The Amazon Resource Name (ARN) of the IP Set that this statement references.
- /// </summary>
- [Input("arn")]
- public Input<string>? Arn { get; set; }
- /// <summary>
- /// The web ACL capacity units (WCUs) required for this rule group. See [here](https://docs.aws.amazon.com/waf/latest/APIReference/API_CreateRuleGroup.html#API_CreateRuleGroup_RequestSyntax) for general information and [here](https://docs.aws.amazon.com/waf/latest/developerguide/waf-rule-statements-list.html) for capacity specific information.
- /// </summary>
- [Input("capacity")]
- public Input<int>? Capacity { get; set; }
- /// <summary>
- /// A friendly description of the rule group.
- /// </summary>
- [Input("description")]
- public Input<string>? Description { get; set; }
- [Input("lockToken")]
- public Input<string>? LockToken { get; set; }
- /// <summary>
- /// The name of the custom header. For custom request header insertion, when AWS WAF inserts the header into the request, it prefixes this name `x-amzn-waf-`, to avoid confusion with the headers that are already in the request. For example, for the header name `sample`, AWS WAF inserts the header `x-amzn-waf-sample`.
- /// </summary>
- [Input("name")]
- public Input<string>? Name { get; set; }
- [Input("rules")]
- private InputList<Inputs.RuleGroupRuleGetArgs>? _rules;
- /// <summary>
- /// The rule blocks used to identify the web requests that you want to `allow`, `block`, or `count`. See Rules below for details.
- /// </summary>
- public InputList<Inputs.RuleGroupRuleGetArgs> Rules
- {
- get => _rules ?? (_rules = new InputList<Inputs.RuleGroupRuleGetArgs>());
- set => _rules = value;
- }
- /// <summary>
- /// Specifies whether this is for an AWS CloudFront distribution or for a regional application. Valid values are `CLOUDFRONT` or `REGIONAL`. To work with CloudFront, you must also specify the region `us-east-1` (N. Virginia) on the AWS provider.
- /// </summary>
- [Input("scope")]
- public Input<string>? Scope { get; set; }
- [Input("tags")]
- private InputMap<string>? _tags;
- /// <summary>
- /// An array of key:value pairs to associate with the resource. .If configured with a provider `default_tags` configuration block present, tags with matching keys will overwrite those defined at the provider-level.
- /// </summary>
- public InputMap<string> Tags
- {
- get => _tags ?? (_tags = new InputMap<string>());
- set => _tags = value;
- }
- [Input("tagsAll")]
- private InputMap<string>? _tagsAll;
- /// <summary>
- /// A map of tags assigned to the resource, including those inherited from the provider .
- /// </summary>
- public InputMap<string> TagsAll
- {
- get => _tagsAll ?? (_tagsAll = new InputMap<string>());
- set => _tagsAll = value;
- }
- /// <summary>
- /// Defines and enables Amazon CloudWatch metrics and web request sample collection. See Visibility Configuration below for details.
- /// </summary>
- [Input("visibilityConfig")]
- public Input<Inputs.RuleGroupVisibilityConfigGetArgs>? VisibilityConfig { get; set; }
- public RuleGroupState()
- {
- }
- }
- }