<?xml version="1.0"?>
<!--
/**
 * Copyright 2013 Adobe
 * All Rights Reserved.
 */
-->
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">
    <preference for="Magento\Customer\Api\AddressRepositoryInterface"
                type="Magento\Customer\Model\ResourceModel\AddressRepository" />
    <preference for="Magento\Customer\Api\CustomerRepositoryInterface"
                type="Magento\Customer\Model\ResourceModel\CustomerRepository" />
    <preference for="Magento\Customer\Api\GroupManagementInterface"
                type="Magento\Customer\Model\GroupManagement" />
    <preference for="Magento\Customer\Api\CustomerGroupConfigInterface"
                type="Magento\Customer\Model\CustomerGroupConfig" />
    <preference for="Magento\Customer\Api\GroupRepositoryInterface"
                type="Magento\Customer\Model\ResourceModel\GroupRepository" />
    <preference for="Magento\Customer\Api\Data\CustomerInterface" type="Magento\Customer\Model\Data\Customer" />
    <preference for="Magento\Customer\Api\Data\AddressInterface" type="Magento\Customer\Model\Data\Address" />
    <preference for="Magento\Customer\Api\Data\RegionInterface" type="Magento\Customer\Model\Data\Region" />
    <preference for="Magento\Customer\Api\Data\AttributeMetadataInterface"
                type="Magento\Customer\Model\Data\AttributeMetadata" />
    <preference for="Magento\Customer\Api\Data\GroupInterface" type="Magento\Customer\Model\Data\Group" />
    <preference for="Magento\Customer\Api\Data\GroupExcludedWebsiteInterface" type="Magento\Customer\Model\Data\GroupExcludedWebsite" />
    <preference for="Magento\Customer\Api\Data\OptionInterface" type="Magento\Customer\Model\Data\Option" />
    <preference for="Magento\Customer\Api\Data\ValidationRuleInterface"
                type="Magento\Customer\Model\Data\ValidationRule" />
    <preference for="Magento\Customer\Api\Data\ValidationResultsInterface"
                type="Magento\Customer\Model\Data\ValidationResults" />
    <preference for="Magento\Customer\Api\Data\GroupSearchResultsInterface"
                type="Magento\Customer\Model\GroupSearchResults" />
    <preference for="Magento\Customer\Api\Data\CustomerSearchResultsInterface"
                type="Magento\Customer\Model\CustomerSearchResults" />
    <preference for="Magento\Customer\Api\Data\AddressSearchResultsInterface"
                type="Magento\Customer\Model\AddressSearchResults" />
    <preference for="Magento\Customer\Api\AccountManagementInterface"
                type="Magento\Customer\Model\AccountManagement" />
    <preference for="Magento\Customer\Api\CustomerMetadataInterface"
                type="Magento\Customer\Model\Metadata\CustomerCachedMetadata" />
    <preference for="Magento\Customer\Api\AddressMetadataInterface"
                type="Magento\Customer\Model\Metadata\AddressCachedMetadata" />
    <preference for="Magento\Customer\Api\CustomerMetadataManagementInterface"
                type="Magento\Customer\Model\Metadata\CustomerMetadataManagement" />
    <preference for="Magento\Customer\Api\AddressMetadataManagementInterface"
                type="Magento\Customer\Model\Metadata\AddressMetadataManagement" />
    <preference for="Magento\Customer\Api\CustomerManagementInterface"
                type="Magento\Customer\Model\CustomerManagement" />
    <preference for="Magento\Customer\Model\AuthenticationInterface"
                type="Magento\Customer\Model\Authentication" />
    <preference for="Magento\Customer\Model\EmailNotificationInterface"
                type="Magento\Customer\Model\EmailNotification" />
    <preference for="Magento\Customer\Api\CustomerNameGenerationInterface"
                type="Magento\Customer\Helper\View" />
    <preference for="Magento\Customer\Model\Address\CustomAttributeListInterface"
                type="Magento\Customer\Model\Address\CustomAttributeList" />
    <preference for="Magento\Customer\Model\Customer\Source\GroupSourceInterface"
                type="Magento\Customer\Model\Customer\Source\Group" />
    <preference for="Magento\Customer\Model\Customer\Attribute\Source\GroupSourceLoggedInOnlyInterface"
                type="Magento\Customer\Model\Customer\Attribute\Source\Group"/>
    <preference for="Magento\Customer\Block\Account\SortLinkInterface"
                type="Magento\Customer\Block\Account\SortLink"/>
    <preference for="Magento\Customer\Model\Group\RetrieverInterface"
                type="Magento\Customer\Model\Group\Retriever"/>
    <preference for="Magento\Customer\Api\SessionCleanerInterface" type="Magento\Customer\Model\Session\SessionCleaner"/>
    <preference for="Magento\Customer\Api\GroupExcludedWebsiteRepositoryInterface"
                type="Magento\Customer\Model\ResourceModel\GroupExcludedWebsiteRepository" />
    <virtualType name="SessionValidator" type="Magento\Framework\Session\CompositeValidator">
        <arguments>
            <argument name="validators" xsi:type="array">
                <item name="validator" xsi:type="object">Magento\Framework\Session\Validator</item>
                <item name="cutoff_validator" xsi:type="object">
                    Magento\Customer\Model\Session\Validators\CutoffValidator
                </item>
            </argument>
        </arguments>
    </virtualType>
    <type name="Magento\Customer\Model\Session">
        <arguments>
            <argument name="configShare" xsi:type="object">Magento\Customer\Model\Config\Share\Proxy</argument>
            <argument name="customerUrl" xsi:type="object">Magento\Customer\Model\Url\Proxy</argument>
            <argument name="customerResource" xsi:type="object">Magento\Customer\Model\ResourceModel\Customer\Proxy</argument>
            <argument name="storage" xsi:type="object">Magento\Customer\Model\Session\Storage</argument>
            <argument name="customerRepository" xsi:type="object">Magento\Customer\Api\CustomerRepositoryInterface\Proxy</argument>
            <argument name="validator" xsi:type="object">SessionValidator</argument>
        </arguments>
    </type>
    <type name="Magento\Customer\Helper\Address">
        <arguments>
            <argument name="addressConfig" xsi:type="object">Magento\Customer\Model\Address\Config\Proxy</argument>
        </arguments>
    </type>
    <type name="Magento\Framework\App\Http\Context">
        <arguments>
            <argument name="default" xsi:type="array">
                <item name="customer_group" xsi:type="const">Magento\Customer\Api\Data\GroupInterface::NOT_LOGGED_IN_ID</item>
            </argument>
        </arguments>
    </type>
    <type name="Magento\Customer\Model\Config\Share">
        <arguments>
            <argument name="customerResource" xsi:type="object">Magento\Customer\Model\ResourceModel\Customer\Proxy</argument>
        </arguments>
    </type>
    <type name="Magento\Eav\Model\Entity\Setup\PropertyMapper\Composite">
        <arguments>
            <argument name="propertyMappers" xsi:type="array">
                <item name="customer" xsi:type="string">Magento\Customer\Model\ResourceModel\Setup\PropertyMapper</item>
            </argument>
        </arguments>
    </type>
    <type name="Magento\Framework\Model\ActionValidator\RemoveAction">
        <arguments>
            <argument name="protectedModels" xsi:type="array">
                <item name="customer" xsi:type="string">Magento\Customer\Model\Customer</item>
            </argument>
        </arguments>
    </type>
    <type name="Magento\Customer\Model\ResourceModel\Address">
        <arguments>
            <argument name="customerRepository" xsi:type="object">Magento\Customer\Api\CustomerRepositoryInterface\Proxy</argument>
            <argument name="entitySnapshot" xsi:type="object">CustomerAddressSnapshot</argument>
            <argument name="entityRelationComposite" xsi:type="object">CustomerAddressRelationsComposite</argument>
        </arguments>
    </type>
    <type name="Magento\Customer\Model\Address\Config">
        <arguments>
            <argument name="reader" xsi:type="object">Magento\Customer\Model\Address\Config\Reader\Proxy</argument>
        </arguments>
    </type>
    <type name="Magento\Customer\Model\Visitor">
        <arguments>
            <argument name="ignoredUserAgents" xsi:type="array">
                <item name="google1" xsi:type="string">Googlebot/1.0 (googlebot@googlebot.com http://googlebot.com/)</item>
                <item name="google2" xsi:type="string">Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)</item>
                <item name="google3" xsi:type="string">Googlebot/2.1 (+http://www.googlebot.com/bot.html)</item>
            </argument>
        </arguments>
    </type>
    <type name="Magento\Customer\Model\ResourceModel\Group" shared="false">
        <arguments>
            <argument name="groupManagement" xsi:type="object">Magento\Customer\Api\GroupManagementInterface\Proxy</argument>
        </arguments>
    </type>
    <type name="Magento\Customer\Model\Metadata\CustomerMetadata">
        <arguments>
            <argument name="systemAttributes" xsi:type="array">
                <item name="disable_auto_group_change" xsi:type="string">disable_auto_group_change</item>
            </argument>
        </arguments>
    </type>
    <virtualType name="SectionInvalidationConfigReader" type="Magento\Framework\Config\Reader\Filesystem">
        <arguments>
            <argument name="idAttributes" xsi:type="array">
                <item name="/config/action" xsi:type="string">name</item>
                <item name="/config/action/section" xsi:type="string">name</item>
            </argument>
            <argument name="fileName" xsi:type="string">sections.xml</argument>
            <argument name="converter" xsi:type="object">\Magento\Customer\CustomerData\SectionConfigConverter</argument>
            <argument name="schemaLocator" xsi:type="object">Magento\Customer\CustomerData\SchemaLocator</argument>
            <argument name="defaultScope" xsi:type="string">frontend</argument>
        </arguments>
    </virtualType>
    <virtualType name="SectionInvalidationConfigData" type="Magento\Framework\Config\Data">
        <arguments>
            <argument name="reader" xsi:type="object">SectionInvalidationConfigReader</argument>
            <argument name="cacheId" xsi:type="string">sections_invalidation_config</argument>
        </arguments>
    </virtualType>
    <type name="Magento\Customer\Block\SectionConfig">
        <arguments>
            <argument name="sectionConfig" xsi:type="object">SectionInvalidationConfigData</argument>
        </arguments>
    </type>
    <type name="Magento\Customer\Block\SectionNamesProvider">
        <arguments>
            <argument name="sectionConfig" xsi:type="object">SectionInvalidationConfigData</argument>
        </arguments>
    </type>
    <preference for="Magento\Customer\CustomerData\JsLayoutDataProviderPoolInterface"
                type="Magento\Customer\CustomerData\JsLayoutDataProviderPool"/>
    <type name="Magento\Framework\Webapi\ServiceTypeToEntityTypeMap">
        <arguments>
            <argument name="serviceTypeToEntityTypeMap" xsi:type="array">
                <item name="Magento\Customer\Api\Data\CustomerInterface" xsi:type="const">Magento\Customer\Api\CustomerMetadataInterface::ENTITY_TYPE_CUSTOMER</item>
                <item name="Magento\Customer\Api\Data\AddressInterface" xsi:type="const">Magento\Customer\Api\AddressMetadataInterface::ENTITY_TYPE_ADDRESS</item>
            </argument>
        </arguments>
    </type>
    <type name="Magento\Eav\Model\TypeLocator\ComplexType">
        <arguments>
            <argument name="backendModelToAttributeTypeMap" xsi:type="array">
                <item name="Magento\Customer\Api\Data\CustomerInterface" xsi:type="array">
                    <item name="Magento\Eav\Model\Attribute\Data\Image" xsi:type="string">Magento\Framework\Api\Data\ImageContentInterface</item>
                </item>
                <item name="Magento\Customer\Model\Customer\Attribute\Backend\Website" xsi:type="string">int</item>
                <item name="Magento\Customer\Model\Customer\Attribute\Backend\Store" xsi:type="string">int</item>
                <item name="Magento\Customer\Model\Attribute\Backend\Data\Boolean" xsi:type="string">boolean</item>
                <item name="Magento\Customer\Model\Customer\Attribute\Backend\Password" xsi:type="string">string</item>
                <item name="Magento\Customer\Model\Customer\Attribute\Backend\Billing" xsi:type="string">Magento\Customer\Api\Data\AddressInterface</item>
                <item name="Magento\Customer\Model\Customer\Attribute\Backend\Shipping" xsi:type="string">Magento\Customer\Api\Data\AddressInterface</item>
                <item name="Magento\Eav\Model\Entity\Attribute\Backend\Datetime" xsi:type="string">string</item>
                <item name="Magento\Customer\Model\ResourceModel\Address\Attribute\Backend\Region" xsi:type="string">Magento\Customer\Api\Data\RegionInterface</item>
            </argument>
        </arguments>
    </type>
    <virtualType name="EavVersionControlSnapshot" type="Magento\Framework\Model\ResourceModel\Db\VersionControl\Snapshot">
        <arguments>
            <argument name="metadata" xsi:type="object">Magento\Eav\Model\Entity\VersionControl\Metadata</argument>
        </arguments>
    </virtualType>
    <virtualType name="CustomerAddressSnapshot" type="Magento\Customer\Model\ResourceModel\Db\VersionControl\AddressSnapshot">
        <arguments>
            <argument name="metadata" xsi:type="object">Magento\Eav\Model\Entity\VersionControl\Metadata</argument>
        </arguments>
    </virtualType>
    <virtualType name="CustomerRelationsComposite" type="Magento\Framework\Model\ResourceModel\Db\VersionControl\RelationComposite">
        <arguments>
            <argument name="relationProcessors" xsi:type="array">
                <item name="default" xsi:type="object">Magento\Customer\Model\ResourceModel\Customer\Relation</item>
            </argument>
        </arguments>
    </virtualType>
    <virtualType name="CustomerAddressRelationsComposite" type="Magento\Framework\Model\ResourceModel\Db\VersionControl\RelationComposite">
        <arguments>
            <argument name="relationProcessors" xsi:type="array">
                <item name="default" xsi:type="object">Magento\Customer\Model\ResourceModel\Address\Relation</item>
            </argument>
        </arguments>
    </virtualType>
    <type name="Magento\Customer\Model\ResourceModel\Customer">
        <arguments>
            <argument name="entitySnapshot" xsi:type="object">EavVersionControlSnapshot</argument>
            <argument name="entityRelationComposite" xsi:type="object">CustomerRelationsComposite</argument>
        </arguments>
    </type>
    <type name="Magento\Customer\Model\ResourceModel\Customer\Collection">
        <arguments>
            <argument name="entitySnapshot" xsi:type="object">EavVersionControlSnapshot</argument>
        </arguments>
    </type>
    <type name="Magento\Customer\Model\ResourceModel\Address\Collection">
        <arguments>
            <argument name="entitySnapshot" xsi:type="object">EavVersionControlSnapshot</argument>
        </arguments>
    </type>
    <type name="Magento\Framework\View\Element\UiComponent\DataProvider\CollectionFactory">
        <arguments>
            <argument name="collections" xsi:type="array">
                <item name="customer_listing_data_source" xsi:type="string">Magento\Customer\Model\ResourceModel\Grid\Collection</item>
                <item name="customer_online_grid_data_source" xsi:type="string">Magento\Customer\Model\ResourceModel\Online\Grid\Collection</item>
                <item name="customer_group_listing_data_source" xsi:type="string">Magento\Customer\Model\ResourceModel\Group\Grid\Collection</item>
                <item name="customer_address_listing_data_source" xsi:type="string">Magento\Customer\Model\ResourceModel\Address\Grid\Collection</item>
            </argument>
        </arguments>
    </type>
    <virtualType name="CustomerNameHandler" type="Magento\Framework\Indexer\Handler\ConcatHandler">
        <arguments>
            <argument name="concatExpression" xsi:type="object">CustomerNameExpression</argument>
        </arguments>
    </virtualType>
    <virtualType name="ShippingAddressHandler" type="Magento\Framework\Indexer\Handler\ConcatHandler">
        <arguments>
            <argument name="concatExpression" xsi:type="object">ShippingAddressExpression</argument>
        </arguments>
    </virtualType>
    <virtualType name="BillingAddressHandler" type="Magento\Framework\Indexer\Handler\ConcatHandler">
        <arguments>
            <argument name="concatExpression" xsi:type="object">BillingAddressExpression</argument>
        </arguments>
    </virtualType>
    <virtualType name="CustomerNameExpression" type="Magento\Framework\DB\Sql\ConcatExpression">
        <arguments>
            <argument name="tableName" xsi:type="string">e</argument>
            <argument name="columns" xsi:type="array">
                <item name="prefix" xsi:type="array">
                    <item name="tableAlias" xsi:type="string">e</item>
                    <item name="columnName" xsi:type="string">prefix</item>
                </item>
                <item name="firstname" xsi:type="array">
                    <item name="tableAlias" xsi:type="string">e</item>
                    <item name="columnName" xsi:type="string">firstname</item>
                </item>
                <item name="middlename" xsi:type="array">
                    <item name="tableAlias" xsi:type="string">e</item>
                    <item name="columnName" xsi:type="string">middlename</item>
                </item>
                <item name="lastname" xsi:type="array">
                    <item name="tableAlias" xsi:type="string">e</item>
                    <item name="columnName" xsi:type="string">lastname</item>
                </item>
                <item name="suffix" xsi:type="array">
                    <item name="tableAlias" xsi:type="string">e</item>
                    <item name="columnName" xsi:type="string">suffix</item>
                </item>
            </argument>
        </arguments>
    </virtualType>
    <virtualType name="ShippingAddressExpression" type="Magento\Framework\DB\Sql\ConcatExpression">
        <arguments>
            <argument name="columns" xsi:type="array">
                <item name="prefix" xsi:type="array">
                    <item name="tableAlias" xsi:type="string">shipping</item>
                    <item name="columnName" xsi:type="string">street</item>
                </item>
                <item name="firstname" xsi:type="array">
                    <item name="tableAlias" xsi:type="string">shipping</item>
                    <item name="columnName" xsi:type="string">city</item>
                </item>
                <item name="middlename" xsi:type="array">
                    <item name="tableAlias" xsi:type="string">shipping</item>
                    <item name="columnName" xsi:type="string">region</item>
                </item>
                <item name="lastname" xsi:type="array">
                    <item name="tableAlias" xsi:type="string">shipping</item>
                    <item name="columnName" xsi:type="string">postcode</item>
                </item>
            </argument>
        </arguments>
    </virtualType>
    <virtualType name="BillingAddressExpression" type="Magento\Framework\DB\Sql\ConcatExpression">
        <arguments>
            <argument name="columns" xsi:type="array">
                <item name="prefix" xsi:type="array">
                    <item name="tableAlias" xsi:type="string">billing</item>
                    <item name="columnName" xsi:type="string">street</item>
                </item>
                <item name="firstname" xsi:type="array">
                    <item name="tableAlias" xsi:type="string">billing</item>
                    <item name="columnName" xsi:type="string">city</item>
                </item>
                <item name="middlename" xsi:type="array">
                    <item name="tableAlias" xsi:type="string">billing</item>
                    <item name="columnName" xsi:type="string">region</item>
                </item>
                <item name="lastname" xsi:type="array">
                    <item name="tableAlias" xsi:type="string">billing</item>
                    <item name="columnName" xsi:type="string">postcode</item>
                </item>
            </argument>
        </arguments>
    </virtualType>
    <type name="Magento\Customer\Model\Indexer\AttributeProvider">
        <arguments>
            <argument name="collection" xsi:type="object" shared="false">Magento\Customer\Model\ResourceModel\Attribute\Collection</argument>
        </arguments>
    </type>
    <type name="Magento\Customer\Model\Indexer\Address\AttributeProvider">
        <arguments>
            <argument name="collection" xsi:type="object" shared="false">Magento\Customer\Model\ResourceModel\Address\Attribute\Collection</argument>
        </arguments>
    </type>
    <type name="Magento\Customer\Model\ResourceModel\Online\Grid\Collection">
        <arguments>
            <argument name="mainTable" xsi:type="string">customer_visitor</argument>
            <argument name="resourceModel" xsi:type="string">Magento\Customer\Model\ResourceModel\Visitor</argument>
        </arguments>
    </type>
    <type name="Magento\Framework\Console\CommandListInterface">
        <arguments>
            <argument name="commands" xsi:type="array">
                <item name="upgradeHashAlgorithmCommand" xsi:type="object">Magento\Customer\Console\Command\UpgradeHashAlgorithmCommand</item>
            </argument>
        </arguments>
    </type>
    <type name="Magento\Customer\Api\CustomerRepositoryInterface">
        <plugin name="transactionWrapper" type="Magento\Customer\Model\Plugin\CustomerRepository\TransactionWrapper" sortOrder="-1"/>
    </type>
    <type name="Magento\Framework\App\ActionInterface">
        <plugin name="customerNotification" type="Magento\Customer\Model\Plugin\CustomerNotification"/>
    </type>
    <type name="Magento\Customer\Model\Authorization\CustomerSessionUserContext">
        <arguments>
            <argument name="customerSession" xsi:type="object">Magento\Customer\Model\Session\Proxy</argument>
        </arguments>
    </type>
    <type name="Magento\PageCache\Observer\FlushFormKey">
        <plugin name="customerFlushFormKey" type="Magento\Customer\Model\Plugin\CustomerFlushFormKey"/>
    </type>
    <type name="Magento\Customer\Model\Customer\NotificationStorage">
        <arguments>
            <argument name="cache" xsi:type="object">Magento\Customer\Model\Cache\Type\Notification</argument>
        </arguments>
    </type>
    <type name="Magento\Customer\Model\ResourceModel\CustomerRepository">
        <arguments>
            <argument name="collectionProcessor" xsi:type="object">Magento\Eav\Model\Api\SearchCriteria\CollectionProcessor</argument>
        </arguments>
    </type>
    <!-- @api -->
    <virtualType name="Magento\Customer\Model\Api\SearchCriteria\CollectionProcessor\GroupFilterProcessor" type="Magento\Framework\Api\SearchCriteria\CollectionProcessor\FilterProcessor">
        <arguments>
            <argument name="fieldMapping" xsi:type="array">
                <item name="code" xsi:type="string">main_table.customer_group_code</item>
                <item name="id" xsi:type="string">main_table.customer_group_id</item>
                <item name="tax_class_name" xsi:type="string">tax_class_table.class_name</item>
            </argument>
        </arguments>
    </virtualType>
    <!-- @api -->
    <virtualType name="Magento\Customer\Model\Api\SearchCriteria\CollectionProcessor\GroupSortingProcessor" type="Magento\Framework\Api\SearchCriteria\CollectionProcessor\SortingProcessor">
        <arguments>
            <argument name="fieldMapping" xsi:type="array">
                <item name="code" xsi:type="string">main_table.customer_group_code</item>
                <item name="id" xsi:type="string">main_table.customer_group_id</item>
                <item name="tax_class_name" xsi:type="string">tax_class_table.class_name</item>
            </argument>
            <argument name="defaultOrders" xsi:type="array">
                <item name="id" xsi:type="string">ASC</item>
            </argument>
        </arguments>
    </virtualType>
    <!-- @api -->
    <virtualType name="Magento\Customer\Model\Api\SearchCriteria\GroupCollectionProcessor" type="Magento\Framework\Api\SearchCriteria\CollectionProcessor">
        <arguments>
            <argument name="processors" xsi:type="array">
                <item name="filters" xsi:type="object">Magento\Customer\Model\Api\SearchCriteria\CollectionProcessor\GroupFilterProcessor</item>
                <item name="sorting" xsi:type="object">Magento\Customer\Model\Api\SearchCriteria\CollectionProcessor\GroupSortingProcessor</item>
                <item name="pagination" xsi:type="object">Magento\Framework\Api\SearchCriteria\CollectionProcessor\PaginationProcessor</item>
            </argument>
        </arguments>
    </virtualType>
    <type name="Magento\Customer\Model\ResourceModel\GroupRepository">
        <arguments>
            <argument name="collectionProcessor" xsi:type="object">Magento\Customer\Model\Api\SearchCriteria\GroupCollectionProcessor</argument>
        </arguments>
    </type>
    <type name="Magento\Customer\Model\ResourceModel\AddressRepository">
        <arguments>
            <argument name="collectionProcessor" xsi:type="object">Magento\Eav\Model\Api\SearchCriteria\CollectionProcessor</argument>
        </arguments>
    </type>
    <type name="Magento\Customer\Model\Attribute">
        <arguments>
            <argument name="attributeMetadataCache" xsi:type="object">Magento\Customer\Model\Metadata\AttributeMetadataCache\Proxy</argument>
        </arguments>
    </type>
    <type name="Magento\Framework\EntityManager\MetadataPool">
        <arguments>
            <argument name="metadata" xsi:type="array">
                <item name="Magento\Customer\Api\Data\CustomerInterface" xsi:type="array">
                    <item name="entityTableName" xsi:type="string">customer_entity</item>
                    <item name="eavEntityType" xsi:type="string">customer</item>
                    <item name="identifierField" xsi:type="string">entity_id</item>
                </item>
            </argument>
        </arguments>
    </type>
    <type name="Magento\Customer\Ui\Component\MassAction\Group\Options">
        <arguments>
            <argument name="data" xsi:type="array">
                <item name="urlPath" xsi:type="string">customer/index/massAssignGroup</item>
                <item name="paramName" xsi:type="string">group</item>
                <item name="confirm" xsi:type="array">
                    <item name="title" xsi:type="string" translatable="true">Assign a Customer Group</item>
                    <item name="message" xsi:type="string" translatable="true">Are you sure to assign selected customers to new group?</item>
                </item>
            </argument>
        </arguments>
    </type>
    <type name="Magento\Customer\Model\AccountManagement">
        <arguments>
            <argument name="sessionManager" xsi:type="object">Magento\Framework\Session\SessionManagerInterface\Proxy</argument>
        </arguments>
    </type>
    <type name="Magento\Customer\Model\Address\CompositeValidator">
        <arguments>
            <argument name="validators" xsi:type="array">
                <item name="general" xsi:type="object">Magento\Customer\Model\Address\Validator\General</item>
                <item name="country" xsi:type="object">Magento\Customer\Model\Address\Validator\Country</item>
                <item name="customer" xsi:type="object">Magento\Customer\Model\Address\Validator\Customer</item>
            </argument>
        </arguments>
    </type>
    <type name="Magento\Customer\Model\ResourceModel\Group\Grid\Collection">
        <arguments>
            <argument name="mainTable" xsi:type="string">customer_group</argument>
            <argument name="eventPrefix" xsi:type="string">customer_group_grid_collection</argument>
            <argument name="eventObject" xsi:type="string">customer_group_collection</argument>
            <argument name="resourceModel" xsi:type="string">Magento\Customer\Model\ResourceModel\Group</argument>
        </arguments>
    </type>
    <type name="Magento\Customer\Model\ResourceModel\Address\Grid\Collection">
        <arguments>
            <argument name="mainTable" xsi:type="string">customer_address_entity</argument>
            <argument name="eventPrefix" xsi:type="string">customer_address_entity_grid_collection</argument>
            <argument name="eventObject" xsi:type="string">customer_address_entity_grid_collection</argument>
            <argument name="resourceModel" xsi:type="string">Magento\Customer\Model\ResourceModel\Address</argument>
        </arguments>
    </type>
    <type name="Magento\Webapi\Controller\Rest\ParamsOverrider">
        <arguments>
            <argument name="paramOverriders" xsi:type="array">
                <item name="%customer_group_id%" xsi:type="object">Magento\Customer\Model\Webapi\ParamOverriderCustomerGroupId</item>
                <item name="%customer_website_id%" xsi:type="object">Magento\Customer\Model\Webapi\ParamOverriderCustomerWebsiteId</item>
                <item name="%customer_store_id%" xsi:type="object">Magento\Customer\Model\Webapi\ParamOverriderCustomerStoreId</item>
            </argument>
        </arguments>
    </type>
    <preference
            for="Magento\Customer\Api\AccountDelegationInterface"
            type="Magento\Customer\Model\Delegation\AccountDelegation" />
    <type name="Magento\Eav\Model\Config">
        <arguments>
            <argument name="attributesForPreload" xsi:type="array">
                <item name="customer" xsi:type="array">
                    <item name="confirmation" xsi:type="string">customer</item>
                    <item name="created_at" xsi:type="string">customer</item>
                    <item name="created_in" xsi:type="string">customer</item>
                    <item name="default_billing" xsi:type="string">customer</item>
                    <item name="default_shipping" xsi:type="string">customer</item>
                    <item name="disable_auto_group_change" xsi:type="string">customer</item>
                    <item name="dob" xsi:type="string">customer</item>
                    <item name="email" xsi:type="string">customer</item>
                    <item name="failures_num" xsi:type="string">customer</item>
                    <item name="firstname" xsi:type="string">customer</item>
                    <item name="first_failure" xsi:type="string">customer</item>
                    <item name="gender" xsi:type="string">customer</item>
                    <item name="group_id" xsi:type="string">customer</item>
                    <item name="lastname" xsi:type="string">customer</item>
                    <item name="lock_expires" xsi:type="string">customer</item>
                    <item name="middlename" xsi:type="string">customer</item>
                    <item name="password_hash" xsi:type="string">customer</item>
                    <item name="prefix" xsi:type="string">customer</item>
                    <item name="rp_token" xsi:type="string">customer</item>
                    <item name="rp_token_created_at" xsi:type="string">customer</item>
                    <item name="store_id" xsi:type="string">customer</item>
                    <item name="suffix" xsi:type="string">customer</item>
                    <item name="taxvat" xsi:type="string">customer</item>
                    <item name="updated_at" xsi:type="string">customer</item>
                    <item name="website_id" xsi:type="string">customer</item>
                </item>
                <item name="customer_address" xsi:type="array">
                    <item name="city" xsi:type="string">customer_address</item>
                    <item name="company" xsi:type="string">customer_address</item>
                    <item name="country_id" xsi:type="string">customer_address</item>
                    <item name="fax" xsi:type="string">customer_address</item>
                    <item name="firstname" xsi:type="string">customer_address</item>
                    <item name="lastname" xsi:type="string">customer_address</item>
                    <item name="middlename" xsi:type="string">customer_address</item>
                    <item name="postcode" xsi:type="string">customer_address</item>
                    <item name="prefix" xsi:type="string">customer_address</item>
                    <item name="region" xsi:type="string">customer_address</item>
                    <item name="region_id" xsi:type="string">customer_address</item>
                    <item name="street" xsi:type="string">customer_address</item>
                    <item name="suffix" xsi:type="string">customer_address</item>
                    <item name="telephone" xsi:type="string">customer_address</item>
                    <item name="vat_id" xsi:type="string">customer_address</item>
                    <item name="vat_is_valid" xsi:type="string">customer_address</item>
                    <item name="vat_request_date" xsi:type="string">customer_address</item>
                    <item name="vat_request_id" xsi:type="string">customer_address</item>
                    <item name="vat_request_success" xsi:type="string">customer_address</item>
                </item>
            </argument>
        </arguments>
    </type>
    <type name="Magento\Customer\Api\GroupRepositoryInterface">
        <plugin name="saveCustomerGroupExcludedWebsite" type="Magento\Customer\Model\Plugin\SaveCustomerGroupExcludedWebsite"/>
        <plugin name="deleteCustomerGroupExcludedWebsite" type="Magento\Customer\Model\Plugin\DeleteCustomerGroupExcludedWebsite"/>
        <plugin name="getByIdCustomerGroupExcludedWebsite" type="Magento\Customer\Model\Plugin\GetByIdCustomerGroupExcludedWebsite"/>
        <plugin name="getListCustomerGroupExcludedWebsite" type="Magento\Customer\Model\Plugin\GetListCustomerGroupExcludedWebsite"/>
    </type>
    <type name="Magento\Customer\Ui\Component\Listing\Columns">
        <arguments>
            <argument name="filterConfigProviders" xsi:type="array">
                <item name="text" xsi:type="object">Magento\Customer\Ui\Component\Listing\Filter\TextFilterConfigProvider</item>
            </argument>
        </arguments>
    </type>
    <type name="Magento\Customer\Model\EmailNotificationInterface">
        <plugin name="saveWishlistDataAndAddReferenceKeyToBackUrl" type="Magento\Wishlist\Plugin\SaveWishlistDataAndAddReferenceKeyToBackUrl"/>
    </type>
    <type name="Magento\Eav\Model\Validator\Attribute\Data">
        <arguments>
            <argument name="ignoredAttributesByTypesList" xsi:type="array">
                <item name="customer" xsi:type="array">
                    <item name="website_id" xsi:type="string">website_id</item>
                    <item name="store_id" xsi:type="string">store_id</item>
                    <item name="group_id" xsi:type="string">group_id</item>
                    <item name="dob" xsi:type="string">dob</item>
                    <item name="rp_token" xsi:type="string">rp_token</item>
                    <item name="rp_token_created_at" xsi:type="string">rp_token_created_at</item>
                    <item name="password_hash" xsi:type="string">password_hash</item>
                </item>
                <item name="customer_address" xsi:type="array">
                    <item name="country_id" xsi:type="string">country_id</item>
                </item>
            </argument>
        </arguments>
    </type>
    <type name="Magento\AsynchronousOperations\Model\MassSchedule">
        <plugin name="anonymousAsyncCustomerRequest"
                type="Magento\Customer\Plugin\AsyncRequestCustomerGroupAuthorization"
        />
    </type>
    <virtualType name="Magento\Customer\Model\MviewAction" type="\Magento\Framework\Mview\View\BaseAction">
        <arguments>
            <argument name="indexerId" xsi:type="string">customer_grid</argument>
        </arguments>
    </virtualType>
</config>
