"use strict";
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
    if (k2 === undefined) k2 = k;
    var desc = Object.getOwnPropertyDescriptor(m, k);
    if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
      desc = { enumerable: true, get: function() { return m[k]; } };
    }
    Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
    if (k2 === undefined) k2 = k;
    o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
    Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
    o["default"] = v;
});
var __importStar = (this && this.__importStar) || (function () {
    var ownKeys = function(o) {
        ownKeys = Object.getOwnPropertyNames || function (o) {
            var ar = [];
            for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
            return ar;
        };
        return ownKeys(o);
    };
    return function (mod) {
        if (mod && mod.__esModule) return mod;
        var result = {};
        if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
        __setModuleDefault(result, mod);
        return result;
    };
})();
Object.defineProperty(exports, "__esModule", { value: true });
exports.CfnVpcEndpointAssociationPropsMixin = exports.CfnTLSInspectionConfigurationPropsMixin = exports.CfnRuleGroupPropsMixin = exports.CfnLoggingConfigurationPropsMixin = exports.CfnFirewallPolicyPropsMixin = exports.CfnFirewallPropsMixin = void 0;
const jsiiDeprecationWarnings = require("../../../.warnings.jsii.js");
const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
/* eslint-disable @stylistic/max-len, eol-last */
const cdk = __importStar(require("aws-cdk-lib/core"));
const service = __importStar(require("aws-cdk-lib/aws-networkfirewall"));
/**
 * Use the firewall to provide stateful, managed, network firewall and intrusion detection and prevention filtering for your VPCs in Amazon VPC .
 *
 * The firewall defines the configuration settings for an AWS Network Firewall firewall. The settings include the firewall policy, the subnets in your VPC to use for the firewall endpoints, and any tags that are attached to the firewall AWS resource.
 *
 * @cloudformationResource AWS::NetworkFirewall::Firewall
 * @mixin true
 * @stability external
 * @see http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-networkfirewall-firewall.html
 */
class CfnFirewallPropsMixin extends cdk.Mixin {
    static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/cfn-property-mixins.aws_networkfirewall.CfnFirewallPropsMixin", version: "2.258.1" };
    static CFN_PROPERTY_KEYS = ["availabilityZoneChangeProtection", "availabilityZoneMappings", "deleteProtection", "description", "enabledAnalysisTypes", "firewallName", "firewallPolicyArn", "firewallPolicyChangeProtection", "subnetChangeProtection", "subnetMappings", "tags", "transitGatewayId", "vpcId"];
    props;
    strategy;
    /**
     * Create a mixin to apply properties to `AWS::NetworkFirewall::Firewall`.
     *
     * @param props L1 properties to apply
     * @param options Mixin options
     */
    constructor(props, options = {}) {
        super();
        try {
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_aws_networkfirewall_CfnFirewallMixinProps(props);
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_CfnPropertyMixinOptions(options);
        }
        catch (error) {
            if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
                Error.captureStackTrace(error, CfnFirewallPropsMixin);
            }
            throw error;
        }
        this.props = {
            ...props,
            ...flattenCfnFirewallMixinProps(props)
        };
        this.strategy = (options.strategy ?? cdk.PropertyMergeStrategy.combine());
    }
    /**
     * Check if this mixin supports the given construct
     */
    supports(construct) {
        return (cdk.CfnResource.isCfnResource(construct) && service.CfnFirewall.isCfnFirewall(construct));
    }
    /**
     * Apply the mixin properties to the construct
     */
    applyTo(construct) {
        if (this.supports(construct)) {
            this.strategy.apply(construct, this.props, CfnFirewallPropsMixin.CFN_PROPERTY_KEYS);
        }
    }
}
exports.CfnFirewallPropsMixin = CfnFirewallPropsMixin;
// @ts-ignore TS6133
function flattenCfnFirewallPropsMixinSubnetMappingProperty(props) {
    if (cdk.isResolvableObject(props))
        return props;
    return {
        ipAddressType: (!props.ipAddressType ? undefined : props.ipAddressType),
        subnetId: (!props.subnetId ? undefined : cdk.getRefProperty(props.subnetId?.subnetRef, 'subnetId') ?? cdk.ensureStringOrUndefined(props.subnetId, "subnetId", "ec2.ISubnetRef | string"))
    };
}
// @ts-ignore TS6133
function flattenCfnFirewallMixinProps(props) {
    const ret = {};
    if ((props.firewallPolicyArn !== undefined))
        ret.firewallPolicyArn = cdk.getRefProperty(props.firewallPolicyArn?.firewallPolicyRef, 'firewallPolicyArn') ?? cdk.ensureStringOrUndefined(props.firewallPolicyArn, "firewallPolicyArn", "networkfirewall.IFirewallPolicyRef | string");
    if ((props.subnetMappings !== undefined))
        ret.subnetMappings = (cdk.isResolvableObject(props.subnetMappings) ? props.subnetMappings : cdk.mapArrayInPlace(props.subnetMappings, (item) => flattenCfnFirewallPropsMixinSubnetMappingProperty(item)));
    if ((props.vpcId !== undefined))
        ret.vpcId = cdk.getRefProperty(props.vpcId?.vpcRef, 'vpcId') ?? cdk.ensureStringOrUndefined(props.vpcId, "vpcId", "ec2.IVPCRef | string");
    return ret;
}
/**
 * Use the firewall policy to define the stateless and stateful network traffic filtering behavior for your firewall.
 *
 * You can use one firewall policy for multiple firewalls.
 *
 * @cloudformationResource AWS::NetworkFirewall::FirewallPolicy
 * @mixin true
 * @stability external
 * @see http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-networkfirewall-firewallpolicy.html
 */
class CfnFirewallPolicyPropsMixin extends cdk.Mixin {
    static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/cfn-property-mixins.aws_networkfirewall.CfnFirewallPolicyPropsMixin", version: "2.258.1" };
    static CFN_PROPERTY_KEYS = ["description", "firewallPolicy", "firewallPolicyName", "tags"];
    props;
    strategy;
    /**
     * Create a mixin to apply properties to `AWS::NetworkFirewall::FirewallPolicy`.
     *
     * @param props L1 properties to apply
     * @param options Mixin options
     */
    constructor(props, options = {}) {
        super();
        try {
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_aws_networkfirewall_CfnFirewallPolicyMixinProps(props);
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_CfnPropertyMixinOptions(options);
        }
        catch (error) {
            if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
                Error.captureStackTrace(error, CfnFirewallPolicyPropsMixin);
            }
            throw error;
        }
        this.props = {
            ...props,
            ...flattenCfnFirewallPolicyMixinProps(props)
        };
        this.strategy = (options.strategy ?? cdk.PropertyMergeStrategy.combine());
    }
    /**
     * Check if this mixin supports the given construct
     */
    supports(construct) {
        return (cdk.CfnResource.isCfnResource(construct) && service.CfnFirewallPolicy.isCfnFirewallPolicy(construct));
    }
    /**
     * Apply the mixin properties to the construct
     */
    applyTo(construct) {
        if (this.supports(construct)) {
            this.strategy.apply(construct, this.props, CfnFirewallPolicyPropsMixin.CFN_PROPERTY_KEYS);
        }
    }
}
exports.CfnFirewallPolicyPropsMixin = CfnFirewallPolicyPropsMixin;
// @ts-ignore TS6133
function flattenCfnFirewallPolicyPropsMixinStatelessRuleGroupReferenceProperty(props) {
    if (cdk.isResolvableObject(props))
        return props;
    return {
        priority: (!props.priority ? undefined : props.priority),
        resourceArn: (!props.resourceArn ? undefined : cdk.getRefProperty(props.resourceArn?.ruleGroupRef, 'ruleGroupArn') ?? cdk.ensureStringOrUndefined(props.resourceArn, "resourceArn", "networkfirewall.IRuleGroupRef | string"))
    };
}
// @ts-ignore TS6133
function flattenCfnFirewallPolicyPropsMixinStatefulRuleGroupReferenceProperty(props) {
    if (cdk.isResolvableObject(props))
        return props;
    return {
        deepThreatInspection: (!props.deepThreatInspection ? undefined : props.deepThreatInspection),
        override: (!props.override ? undefined : props.override),
        priority: (!props.priority ? undefined : props.priority),
        resourceArn: (!props.resourceArn ? undefined : cdk.getRefProperty(props.resourceArn?.ruleGroupRef, 'ruleGroupArn') ?? cdk.ensureStringOrUndefined(props.resourceArn, "resourceArn", "networkfirewall.IRuleGroupRef | string"))
    };
}
// @ts-ignore TS6133
function flattenCfnFirewallPolicyPropsMixinFirewallPolicyProperty(props) {
    if (cdk.isResolvableObject(props))
        return props;
    return {
        enableTlsSessionHolding: (!props.enableTlsSessionHolding ? undefined : props.enableTlsSessionHolding),
        policyVariables: (!props.policyVariables ? undefined : props.policyVariables),
        statefulDefaultActions: (!props.statefulDefaultActions ? undefined : props.statefulDefaultActions),
        statefulEngineOptions: (!props.statefulEngineOptions ? undefined : props.statefulEngineOptions),
        statefulRuleGroupReferences: (!props.statefulRuleGroupReferences ? undefined : (cdk.isResolvableObject(props.statefulRuleGroupReferences) ? props.statefulRuleGroupReferences : (!props.statefulRuleGroupReferences ? undefined : cdk.mapArrayInPlace(props.statefulRuleGroupReferences, (item) => flattenCfnFirewallPolicyPropsMixinStatefulRuleGroupReferenceProperty(item))))),
        statelessCustomActions: (!props.statelessCustomActions ? undefined : props.statelessCustomActions),
        statelessDefaultActions: (!props.statelessDefaultActions ? undefined : props.statelessDefaultActions),
        statelessFragmentDefaultActions: (!props.statelessFragmentDefaultActions ? undefined : props.statelessFragmentDefaultActions),
        statelessRuleGroupReferences: (!props.statelessRuleGroupReferences ? undefined : (cdk.isResolvableObject(props.statelessRuleGroupReferences) ? props.statelessRuleGroupReferences : (!props.statelessRuleGroupReferences ? undefined : cdk.mapArrayInPlace(props.statelessRuleGroupReferences, (item) => flattenCfnFirewallPolicyPropsMixinStatelessRuleGroupReferenceProperty(item))))),
        tlsInspectionConfigurationArn: (!props.tlsInspectionConfigurationArn ? undefined : props.tlsInspectionConfigurationArn)
    };
}
// @ts-ignore TS6133
function flattenCfnFirewallPolicyMixinProps(props) {
    const ret = {};
    if ((props.firewallPolicy !== undefined))
        ret.firewallPolicy = flattenCfnFirewallPolicyPropsMixinFirewallPolicyProperty(props.firewallPolicy);
    return ret;
}
/**
 * Use the logging configuration to define the destinations and logging options for an firewall.
 *
 * You must change the logging configuration by changing one `LogDestinationConfig` setting at a time in your `LogDestinationConfigs` .
 *
 * You can make only one of the following changes to your logging configuration resource:
 *
 * - Create a new log destination object by adding a single `LogDestinationConfig` array element to `LogDestinationConfigs` .
 * - Delete a log destination object by removing a single `LogDestinationConfig` array element from `LogDestinationConfigs` .
 * - Change the `LogDestination` setting in a single `LogDestinationConfig` array element.
 *
 * You can't change the `LogDestinationType` or `LogType` in a `LogDestinationConfig` . To change these settings, delete the existing `LogDestinationConfig` object and create a new one, in two separate modifications.
 *
 * @cloudformationResource AWS::NetworkFirewall::LoggingConfiguration
 * @mixin true
 * @stability external
 * @see http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-networkfirewall-loggingconfiguration.html
 */
class CfnLoggingConfigurationPropsMixin extends cdk.Mixin {
    static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/cfn-property-mixins.aws_networkfirewall.CfnLoggingConfigurationPropsMixin", version: "2.258.1" };
    static CFN_PROPERTY_KEYS = ["enableMonitoringDashboard", "firewallArn", "firewallName", "loggingConfiguration"];
    props;
    strategy;
    /**
     * Create a mixin to apply properties to `AWS::NetworkFirewall::LoggingConfiguration`.
     *
     * @param props L1 properties to apply
     * @param options Mixin options
     */
    constructor(props, options = {}) {
        super();
        try {
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_aws_networkfirewall_CfnLoggingConfigurationMixinProps(props);
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_CfnPropertyMixinOptions(options);
        }
        catch (error) {
            if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
                Error.captureStackTrace(error, CfnLoggingConfigurationPropsMixin);
            }
            throw error;
        }
        this.props = {
            ...props,
            ...flattenCfnLoggingConfigurationMixinProps(props)
        };
        this.strategy = (options.strategy ?? cdk.PropertyMergeStrategy.combine());
    }
    /**
     * Check if this mixin supports the given construct
     */
    supports(construct) {
        return (cdk.CfnResource.isCfnResource(construct) && service.CfnLoggingConfiguration.isCfnLoggingConfiguration(construct));
    }
    /**
     * Apply the mixin properties to the construct
     */
    applyTo(construct) {
        if (this.supports(construct)) {
            this.strategy.apply(construct, this.props, CfnLoggingConfigurationPropsMixin.CFN_PROPERTY_KEYS);
        }
    }
}
exports.CfnLoggingConfigurationPropsMixin = CfnLoggingConfigurationPropsMixin;
// @ts-ignore TS6133
function flattenCfnLoggingConfigurationMixinProps(props) {
    const ret = {};
    if ((props.firewallArn !== undefined))
        ret.firewallArn = cdk.getRefProperty(props.firewallArn?.firewallRef, 'firewallArn') ?? cdk.ensureStringOrUndefined(props.firewallArn, "firewallArn", "networkfirewall.IFirewallRef | string");
    return ret;
}
/**
 * Use the [](https://docs.aws.amazon.com/RuleGroup) to define a reusable collection of stateless or stateful network traffic filtering rules. You use rule groups in an firewall policy to specify the filtering behavior of an firewall.
 *
 * @cloudformationResource AWS::NetworkFirewall::RuleGroup
 * @mixin true
 * @stability external
 * @see http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-networkfirewall-rulegroup.html
 */
class CfnRuleGroupPropsMixin extends cdk.Mixin {
    static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/cfn-property-mixins.aws_networkfirewall.CfnRuleGroupPropsMixin", version: "2.258.1" };
    static CFN_PROPERTY_KEYS = ["capacity", "description", "ruleGroup", "ruleGroupName", "summaryConfiguration", "tags", "type"];
    props;
    strategy;
    /**
     * Create a mixin to apply properties to `AWS::NetworkFirewall::RuleGroup`.
     *
     * @param props L1 properties to apply
     * @param options Mixin options
     */
    constructor(props, options = {}) {
        super();
        try {
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_aws_networkfirewall_CfnRuleGroupMixinProps(props);
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_CfnPropertyMixinOptions(options);
        }
        catch (error) {
            if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
                Error.captureStackTrace(error, CfnRuleGroupPropsMixin);
            }
            throw error;
        }
        this.props = props;
        this.strategy = (options.strategy ?? cdk.PropertyMergeStrategy.combine());
    }
    /**
     * Check if this mixin supports the given construct
     */
    supports(construct) {
        return (cdk.CfnResource.isCfnResource(construct) && service.CfnRuleGroup.isCfnRuleGroup(construct));
    }
    /**
     * Apply the mixin properties to the construct
     */
    applyTo(construct) {
        if (this.supports(construct)) {
            this.strategy.apply(construct, this.props, CfnRuleGroupPropsMixin.CFN_PROPERTY_KEYS);
        }
    }
}
exports.CfnRuleGroupPropsMixin = CfnRuleGroupPropsMixin;
/**
 * The object that defines a TLS inspection configuration.
 *
 * AWS Network Firewall uses a TLS inspection configuration to decrypt traffic. Network Firewall re-encrypts the traffic before sending it to its destination.
 *
 * To use a TLS inspection configuration, you add it to a new Network Firewall firewall policy, then you apply the firewall policy to a firewall. Network Firewall acts as a proxy service to decrypt and inspect the traffic traveling through your firewalls. You can reference a TLS inspection configuration from more than one firewall policy, and you can use a firewall policy in more than one firewall. For more information about using TLS inspection configurations, see [Inspecting SSL/TLS traffic with TLS inspection configurations](https://docs.aws.amazon.com/network-firewall/latest/developerguide/tls-inspection.html) in the *AWS Network Firewall Developer Guide* .
 *
 * @cloudformationResource AWS::NetworkFirewall::TLSInspectionConfiguration
 * @mixin true
 * @stability external
 * @see http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-networkfirewall-tlsinspectionconfiguration.html
 */
class CfnTLSInspectionConfigurationPropsMixin extends cdk.Mixin {
    static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/cfn-property-mixins.aws_networkfirewall.CfnTLSInspectionConfigurationPropsMixin", version: "2.258.1" };
    static CFN_PROPERTY_KEYS = ["description", "tags", "tlsInspectionConfiguration", "tlsInspectionConfigurationName"];
    props;
    strategy;
    /**
     * Create a mixin to apply properties to `AWS::NetworkFirewall::TLSInspectionConfiguration`.
     *
     * @param props L1 properties to apply
     * @param options Mixin options
     */
    constructor(props, options = {}) {
        super();
        try {
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_aws_networkfirewall_CfnTLSInspectionConfigurationMixinProps(props);
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_CfnPropertyMixinOptions(options);
        }
        catch (error) {
            if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
                Error.captureStackTrace(error, CfnTLSInspectionConfigurationPropsMixin);
            }
            throw error;
        }
        this.props = props;
        this.strategy = (options.strategy ?? cdk.PropertyMergeStrategy.combine());
    }
    /**
     * Check if this mixin supports the given construct
     */
    supports(construct) {
        return (cdk.CfnResource.isCfnResource(construct) && service.CfnTLSInspectionConfiguration.isCfnTLSInspectionConfiguration(construct));
    }
    /**
     * Apply the mixin properties to the construct
     */
    applyTo(construct) {
        if (this.supports(construct)) {
            this.strategy.apply(construct, this.props, CfnTLSInspectionConfigurationPropsMixin.CFN_PROPERTY_KEYS);
        }
    }
}
exports.CfnTLSInspectionConfigurationPropsMixin = CfnTLSInspectionConfigurationPropsMixin;
/**
 * A VPC endpoint association defines a single subnet to use for a firewall endpoint for a `Firewall` .
 *
 * You can define VPC endpoint associations only in the Availability Zones that already have a subnet mapping defined in the `Firewall` resource.
 *
 * > You can retrieve the list of Availability Zones that are available for use by calling `DescribeFirewallMetadata` .
 *
 * To manage firewall endpoints, first, in the `Firewall` specification, you specify a single VPC and one subnet for each of the Availability Zones where you want to use the firewall. Then you can define additional endpoints as VPC endpoint associations.
 *
 * You can use VPC endpoint associations to expand the protections of the firewall as follows:
 *
 * - *Protect multiple VPCs with a single firewall* - You can use the firewall to protect other VPCs, either in your account or in accounts where the firewall is shared. You can only specify Availability Zones that already have a firewall endpoint defined in the `Firewall` subnet mappings.
 * - *Define multiple firewall endpoints for a VPC in an Availability Zone* - You can create additional firewall endpoints for the VPC that you have defined in the firewall, in any Availability Zone that already has an endpoint defined in the `Firewall` subnet mappings. You can create multiple VPC endpoint associations for any other VPC where you use the firewall.
 *
 * You can use AWS Resource Access Manager to share a `Firewall` that you own with other accounts, which gives them the ability to use the firewall to create VPC endpoint associations. For information about sharing a firewall, see `PutResourcePolicy` in this guide and see [Sharing Network Firewall resources](https://docs.aws.amazon.com/network-firewall/latest/developerguide/sharing.html) in the *AWS Network Firewall Developer Guide* .
 *
 * The status of the VPC endpoint association, which indicates whether it's ready to filter network traffic, is provided in the corresponding VPC endpoint association status. You can retrieve both the association and its status by calling `DescribeVpcEndpointAssociation` .
 *
 * @cloudformationResource AWS::NetworkFirewall::VpcEndpointAssociation
 * @mixin true
 * @stability external
 * @see http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-networkfirewall-vpcendpointassociation.html
 */
class CfnVpcEndpointAssociationPropsMixin extends cdk.Mixin {
    static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/cfn-property-mixins.aws_networkfirewall.CfnVpcEndpointAssociationPropsMixin", version: "2.258.1" };
    static CFN_PROPERTY_KEYS = ["description", "firewallArn", "subnetMapping", "tags", "vpcId"];
    props;
    strategy;
    /**
     * Create a mixin to apply properties to `AWS::NetworkFirewall::VpcEndpointAssociation`.
     *
     * @param props L1 properties to apply
     * @param options Mixin options
     */
    constructor(props, options = {}) {
        super();
        try {
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_aws_networkfirewall_CfnVpcEndpointAssociationMixinProps(props);
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_CfnPropertyMixinOptions(options);
        }
        catch (error) {
            if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
                Error.captureStackTrace(error, CfnVpcEndpointAssociationPropsMixin);
            }
            throw error;
        }
        this.props = props;
        this.strategy = (options.strategy ?? cdk.PropertyMergeStrategy.combine());
    }
    /**
     * Check if this mixin supports the given construct
     */
    supports(construct) {
        return (cdk.CfnResource.isCfnResource(construct) && service.CfnVpcEndpointAssociation.isCfnVpcEndpointAssociation(construct));
    }
    /**
     * Apply the mixin properties to the construct
     */
    applyTo(construct) {
        if (this.supports(construct)) {
            this.strategy.apply(construct, this.props, CfnVpcEndpointAssociationPropsMixin.CFN_PROPERTY_KEYS);
        }
    }
}
exports.CfnVpcEndpointAssociationPropsMixin = CfnVpcEndpointAssociationPropsMixin;
