/// <summary>
        /// Override GetPropertyObjFromBuffer without PropertyTag list type. Instead of that the properties will be collected from response.
        /// </summary>
        /// <param name="response">RopGetPropertiesAllResponse packet</param>
        /// <returns>List of PropertyObj</returns>
        public static List<PropertyObj> GetPropertyObjFromBuffer(RopGetPropertiesAllResponse response)
        {
            List<PropertyObj> propertyList = new List<PropertyObj>();

            foreach (TaggedPropertyValue taggedPropertyValue in response.PropertyValues)
            {
                if (GetPropertyNameByID(taggedPropertyValue.PropertyTag.PropertyId, taggedPropertyValue.PropertyTag.PropertyType) == PropertyNames.UserSpecified)
                {
                    continue;
                }

                PropertyObj property = new PropertyObj(taggedPropertyValue.PropertyTag.PropertyId, taggedPropertyValue.PropertyTag.PropertyType);

                propertyList.Add(GetPropertyObjFromBuffer(property, taggedPropertyValue.Value));
            }

            return propertyList;
        }
        /// <summary>
        /// Verify the response of RopGetPropertiesAll ROP operation.
        /// </summary>
        /// <param name="response">The response of RopGetPropertiesAll operation.</param>
        private void VerifyGetFolderPropertiesAll(RopGetPropertiesAllResponse response)
        {
            foreach (TaggedPropertyValue taggedPropertyValue in response.PropertyValues)
            {
                PropertyTag tag = taggedPropertyValue.PropertyTag;
                switch (taggedPropertyValue.PropertyTag.PropertyId)
                {
                    case (ushort)FolderPropertyId.PidTagChangeKey:

                        #region PidTagChangeKey
                        // Add the debug information
                        Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXPROPS_R5687");

                        // Verify MS-OXPROPS requirement: MS-OXPROPS_R5687
                        Site.CaptureRequirementIfAreEqual<ushort>(
                            (ushort)PropertyType.PtypBinary,
                            tag.PropertyType,
                            Constants.MSOXPROPS,
                            5687,
                            "[In PidTagChangeKey] Data type: PtypBinary, 0x0102.");

                        // Add the debug information
                        Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXPROPS_R5686");

                        // Verify MS-OXPROPS requirement: MS-OXPROPS_R5686
                        // The property ID and property type match the description in [MS-OXPROPS] and the property type was verified, this requirement can be captured directly.
                        Site.CaptureRequirement(
                            Constants.MSOXPROPS,
                            5686,
                            "[In PidTagChangeKey] Property ID: 0x65E2.");

                        this.VerifyPtypBinary(taggedPropertyValue.Value);
                        break;
                        #endregion

                    case (ushort)FolderPropertyId.PidTagContentUnreadCount:

                        #region PidTagContentUnreadCount
                        if (tag.PropertyType != (ushort)PropertyType.PtypErrorCode)
                        {
                            // Add the debug information
                            Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXPROPS_R5841");

                            // Verify MS-OXPROPS requirement: MS-OXPROPS_R5841
                            Site.CaptureRequirementIfAreEqual<ushort>(
                                (ushort)PropertyType.PtypInteger32,
                                tag.PropertyType,
                                Constants.MSOXPROPS,
                                5841,
                                "[In PidTagContentUnreadCount] Data type: PtypInteger32, 0x0003.");

                            this.VerifyPtypInteger32(taggedPropertyValue.Value);
                        }

                        // Add the debug information
                        Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXCFOLD_R347");

                        // Verify MS-OXCFOLD requirement: MS-OXCFOLD_R347.
                        // The property ID and property type match the description in [MS-OXPROPS] and the property type was verified, this requirement can be captured directly.
                        Site.CaptureRequirement(
                            347,
                            "[In PidTagContentUnreadCount Property] Type: PtypInteger32 ([MS-OXCDATA] section 2.11.1)");

                        // Add the debug information
                        Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXPROPS_R5840");

                        // Verify MS-OXPROPS requirement: MS-OXPROPS_R5840
                        // The property ID and property type match the description in [MS-OXPROPS] and the property type was verified, this requirement can be captured directly.
                        Site.CaptureRequirement(
                            Constants.MSOXPROPS,
                            5840,
                            "[In PidTagContentUnreadCount] Property ID: 0x3603.");
                        break;
                        #endregion

                    case (ushort)FolderPropertyId.PidTagHierarchyChangeNumber:

                        #region PidTagHierarchyChangeNumber
                        // Add the debug information
                        Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXPROPS_R6350");

                        // Verify MS-OXPROPS requirement: MS-OXPROPS_R6350
                        Site.CaptureRequirementIfAreEqual<ushort>(
                            (ushort)PropertyType.PtypInteger32,
                            tag.PropertyType,
                            Constants.MSOXPROPS,
                            6350,
                            "[In PidTagHierarchyChangeNumber] Data type: PtypInteger32, 0x0003.");

                        // Add the debug information
                        Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXCFOLD_R1028");

                        // Verify MS-OXCFOLD requirement: MS-OXCFOLD_R1028.
                        // The property ID and property type match the description in [MS-OXPROPS] and the property type was verified, this requirement can be captured directly.
                        Site.CaptureRequirement(
                            1028,
                            "[In PidTagHierarchyChangeNumber Property] Type: PtypInteger32 ([MS-OXCDATA] section 2.11.1)");

                        // Add the debug information
                        Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXPROPS_R6349");

                        // Verify MS-OXPROPS requirement: MS-OXPROPS_R6349
                        // The property ID and property type match the description in [MS-OXPROPS] and the property type was verified, this requirement can be captured directly.
                        Site.CaptureRequirement(
                            Constants.MSOXPROPS,
                            6349,
                            "[In PidTagHierarchyChangeNumber] Property ID: 0x663E.");

                        this.VerifyPtypInteger32(taggedPropertyValue.Value);
                        break;
                        #endregion

                    case (ushort)FolderPropertyId.PidTagAccess:

                        #region PidTagAccess
                        // Add the debug information
                        Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXPROPS_R4928");

                        // Verify MS-OXPROPS requirement: MS-OXPROPS_R4928
                        Site.CaptureRequirementIfAreEqual<ushort>(
                            (ushort)PropertyType.PtypInteger32,
                            tag.PropertyType,
                            Constants.MSOXPROPS,
                            4928,
                            "[In PidTagAccess] Data type: PtypInteger32, 0x0003.");

                        // Add the debug information
                        Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXPROPS_R4927");

                        // Verify MS-OXPROPS requirement: MS-OXPROPS_R4927
                        // The property ID and property type match the description in [MS-OXPROPS] and the property type was verified, this requirement can be captured directly.
                        Site.CaptureRequirement(
                            Constants.MSOXPROPS,
                            4927,
                            "[In PidTagAccess] Property ID: 0x0FF4.");

                        this.VerifyPtypInteger32(taggedPropertyValue.Value);
                        break;
                        #endregion

                    case (ushort)FolderPropertyId.PidTagAddressBookEntryId:

                        #region PidTagAddressBookEntryId
                        // Add the debug information
                        Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXPROPS_R5024");

                        // Verify MS-OXPROPS requirement: MS-OXPROPS_R5024
                        Site.CaptureRequirementIfAreEqual<ushort>(
                            (ushort)PropertyType.PtypBinary,
                            tag.PropertyType,
                            Constants.MSOXPROPS,
                            5024,
                            "[In PidTagAddressBookEntryId] Data type: PtypBinary, 0x0102.");

                        // Add the debug information
                        Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXCFOLD_R349");

                        // Verify MS-OXCFOLD requirement: MS-OXCFOLD_R349.
                        // The property ID and property type match the description in [MS-OXPROPS] and the property type was verified, this requirement can be captured directly.
                        Site.CaptureRequirement(
                            349,
                            "[In PidTagAddressBookEntryId Property] Type: PtypBinary ([MS-OXCDATA] section 2.11.1)");

                        // Add the debug information
                        Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXPROPS_R5023");

                        // Verify MS-OXPROPS requirement: MS-OXPROPS_R5023
                        // The property ID and property type match the description in [MS-OXPROPS] and the property type was verified, this requirement can be captured directly.
                        Site.CaptureRequirement(
                            Constants.MSOXPROPS,
                            5023,
                            "[In PidTagAddressBookEntryId] Property ID: 0x663B.");

                        this.VerifyPtypBinary(taggedPropertyValue.Value);
                        break;
                        #endregion

                    case (ushort)FolderPropertyId.PidTagAttributeHidden:

                        #region PidTagAttributeHidden
                        // Add the debug information
                        Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXPROPS_R5556");

                        // Verify MS-OXPROPS requirement: MS-OXPROPS_R5556
                        Site.CaptureRequirementIfAreEqual<ushort>(
                            (ushort)PropertyType.PtypBoolean,
                            tag.PropertyType,
                            Constants.MSOXPROPS,
                            5556,
                            "[In PidTagAttributeHidden] Data type: PtypBoolean, 0x000B.");

                        // Add the debug information
                        Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXCFOLD_R356");

                        // Verify MS-OXCFOLD requirement: MS-OXCFOLD_R356.
                        // The property ID and property type match the description in [MS-OXPROPS] and the property type was verified, this requirement can be captured directly.
                        Site.CaptureRequirement(
                            356,
                            "[In PidTagAttributeHidden Property] Type: PtypBoolean ([MS-OXCDATA] section 2.11.1)");

                        // Add the debug information
                        Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXPROPS_R5555");

                        // Verify MS-OXPROPS requirement: MS-OXPROPS_R5555
                        // The property ID and property type match the description in [MS-OXPROPS] and the property type was verified, this requirement can be captured directly.
                        Site.CaptureRequirement(
                            Constants.MSOXPROPS,
                            5555,
                            "[In PidTagAttributeHidden] Property ID: 0x10F4.");

                        this.VerifyPtypBoolean(taggedPropertyValue.Value);
                        break;
                        #endregion

                    case (ushort)FolderPropertyId.PidTagComment:

                        #region PidTagComment
                        // Add the debug information
                        Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXPROPS_R5753");

                        // Verify MS-OXPROPS requirement: MS-OXPROPS_R5753
                        Site.CaptureRequirementIfAreEqual<ushort>(
                            (ushort)PropertyType.PtypString,
                            tag.PropertyType,
                            Constants.MSOXPROPS,
                            5753,
                            "[In PidTagComment] Data type: PtypString, 0x001F.");

                        // Add the debug information
                        Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXCFOLD_R359");

                        // Verify MS-OXCFOLD requirement: MS-OXCFOLD_R359.
                        // The property ID and property type match the description in [MS-OXPROPS] and the property type was verified, this requirement can be captured directly.
                        Site.CaptureRequirement(
                            359,
                            "[In PidTagComment Property] Type: PtypString ([MS-OXCDATA] section 2.11.1)");

                        // Add the debug information
                        Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXPROPS_R5752");

                        // Verify MS-OXPROPS requirement: MS-OXPROPS_R5752
                        // The property ID and property type match the description in [MS-OXPROPS] and the property type was verified, this requirement can be captured directly.
                        Site.CaptureRequirement(
                            Constants.MSOXPROPS,
                            5752,
                            "[In PidTagComment] Property ID: 0x3004.");

                        this.VerifyPtypString(taggedPropertyValue.Value);
                        break;
                        #endregion

                    case (ushort)FolderPropertyId.PidTagContentCount:

                        #region PidTagContentCount
                        // Add the debug information
                        Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXPROPS_R5821");

                        // Verify MS-OXPROPS requirement: MS-OXPROPS_R5821
                        Site.CaptureRequirementIfAreEqual<ushort>(
                            (ushort)PropertyType.PtypInteger32,
                            tag.PropertyType,
                            Constants.MSOXPROPS,
                            5821,
                            "[In PidTagContentCount] Data type: PtypInteger32, 0x0003.");

                        // Add the debug information
                        Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXCFOLD_R345");

                        // Verify MS-OXCFOLD requirement: MS-OXCFOLD_R345.
                        // The property ID and property type match the description in [MS-OXPROPS] and the property type was verified, this requirement can be captured directly.
                        Site.CaptureRequirement(
                            345,
                            "[In PidTagContentCount Property] Type: PtypInteger32 ([MS-OXCDATA] section 2.11.1)");

                        // Add the debug information
                        Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXPROPS_R5820");

                        // Verify MS-OXPROPS requirement: MS-OXPROPS_R5820.
                        // The property ID and property type match the description in [MS-OXPROPS] and the property type was verified, this requirement can be captured directly.
                        Site.CaptureRequirement(
                            Constants.MSOXPROPS,
                            5820,
                            "[In PidTagContentCount] Property ID: 0x3602.");

                        this.VerifyPtypInteger32(taggedPropertyValue.Value);
                        break;
                        #endregion

                    case (ushort)FolderPropertyId.PidTagCreationTime:

                        #region PidTagCreationTime
                        // Add the debug information
                        Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXPROPS_R5881");

                        // Verify MS-OXPROPS requirement: MS-OXPROPS_R5881
                        Site.CaptureRequirementIfAreEqual<ushort>(
                            (ushort)PropertyType.PtypTime,
                            tag.PropertyType,
                            Constants.MSOXPROPS,
                            5881,
                            "[In PidTagCreationTime] Data type: PtypTime, 0x0040.");

                        // Add the debug information
                        Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXPROPS_R5880");

                        // Verify MS-OXPROPS requirement: MS-OXPROPS_R5880
                        // The property ID and property type match the description in [MS-OXPROPS] and the property type was verified, this requirement can be captured directly.
                        Site.CaptureRequirement(
                            Constants.MSOXPROPS,
                            5880,
                            "[In PidTagCreationTime] Property ID: 0x3007.");

                        this.VerifyPtypTime(taggedPropertyValue.Value);
                        break;
                        #endregion

                    case (ushort)FolderPropertyId.PidTagDisplayName:

                        #region PidTagDisplayName
                        // Add the debug information
                        Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXPROPS_R6015");

                        // Verify MS-OXPROPS requirement: MS-OXPROPS_R6015
                        Site.CaptureRequirementIfAreEqual<ushort>(
                            (ushort)PropertyType.PtypString,
                            tag.PropertyType,
                            Constants.MSOXPROPS,
                            6015,
                            "[In PidTagDisplayName] Data type: PtypString, 0x001F.");

                        // Add the debug information
                        Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXCFOLD_R360");

                        // Verify MS-OXCFOLD requirement: MS-OXCFOLD_R360.
                        // The property ID and property type match the description in [MS-OXPROPS] and the property type was verified, this requirement can be captured directly.
                        Site.CaptureRequirement(
                            360,
                            "[In PidTagDisplayName Property] Type: PtypString ([MS-OXCDATA] section 2.11.1)");

                        // Add the debug information
                        Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXPROPS_R6014");

                        // Verify MS-OXPROPS requirement: MS-OXPROPS_R6014
                        // The property ID and property type match the description in [MS-OXPROPS] and the property type was verified, this requirement can be captured directly.
                        Site.CaptureRequirement(
                            Constants.MSOXPROPS,
                            6014,
                            "[In PidTagDisplayName] Property ID: 0x3001.");

                        this.VerifyPtypString(taggedPropertyValue.Value);
                        break;
                        #endregion

                    case (ushort)FolderPropertyId.PidTagFolderId:

                        #region PidTagFolderId
                        // Add the debug information
                        Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXPROPS_R6213");

                        // Verify MS-OXPROPS requirement: MS-OXPROPS_R6213
                        Site.CaptureRequirementIfAreEqual<ushort>(
                            (ushort)PropertyType.PtypInteger64,
                            tag.PropertyType,
                            Constants.MSOXPROPS,
                            6213,
                            "[In PidTagFolderId] Data type: PtypInteger64, 0x0014.");

                        // Add the debug information
                        Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXCFOLD_R351");

                        // Verify MS-OXCFOLD requirement: MS-OXCFOLD_R351.
                        // The property ID and property type match the description in [MS-OXPROPS] and the property type was verified, this requirement can be captured directly.
                        Site.CaptureRequirement(
                            351,
                            "[In PidTagFolderId Property] Type: PtypInteger64 ([MS-OXCDATA] section 2.11.1)");

                        // Add the debug information
                        Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXPROPS_R6212");

                        // Verify MS-OXPROPS requirement: MS-OXPROPS_R6212
                        // The property ID and property type match the description in [MS-OXPROPS] and the property type was verified, this requirement can be captured directly.
                        Site.CaptureRequirement(
                            Constants.MSOXPROPS,
                            6212,
                            "[In PidTagFolderId] Property ID: 0x6748.");

                        this.VerifyPtypInteger64(taggedPropertyValue.Value);
                        this.VerifyFolderIDStructure(taggedPropertyValue.Value);
                        break;
                        #endregion

                    case (ushort)FolderPropertyId.PidTagFolderType:

                        #region PidTagFolderType
                        // Add the debug information
                        Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXPROPS_R6220");

                        // Verify MS-OXPROPS requirement: MS-OXPROPS_R6220
                        Site.CaptureRequirementIfAreEqual<ushort>(
                            (ushort)PropertyType.PtypInteger32,
                            tag.PropertyType,
                            Constants.MSOXPROPS,
                            6220,
                            "[In PidTagFolderType] Data type: PtypInteger32, 0x0003.");

                        // Add the debug information
                        Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXCFOLD_R362");

                        // Verify MS-OXCFOLD requirement: MS-OXCFOLD_R362.
                        // The property ID and property type match the description in [MS-OXPROPS] and the property type was verified, this requirement can be captured directly.
                        Site.CaptureRequirement(
                            362,
                            "[In PidTagFolderType Property] Type: PtypInteger32 ([MS-OXCDATA] section 2.11.1)");

                        // Add the debug information
                        Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXPROPS_R6219");

                        // Verify MS-OXPROPS requirement: MS-OXPROPS_R6219
                        // The property ID and property type match the description in [MS-OXPROPS] and the property type was verified, this requirement can be captured directly.
                        Site.CaptureRequirement(
                            Constants.MSOXPROPS,
                            6219,
                            "[In PidTagFolderType] Property ID: 0x3601.");

                        this.VerifyPtypInteger32(taggedPropertyValue.Value);
                        break;
                        #endregion

                    case (ushort)FolderPropertyId.PidTagLastModificationTime:

                        #region PidTagLastModificationTime
                        // Add the debug information
                        Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXPROPS_R6784");

                        // Verify MS-OXPROPS requirement: MS-OXPROPS_R6784
                        Site.CaptureRequirementIfAreEqual<ushort>(
                            (ushort)PropertyType.PtypTime,
                            tag.PropertyType,
                            Constants.MSOXPROPS,
                            6784,
                            "[In PidTagLastModificationTime] Data type: PtypTime, 0x0040.");

                        // Add the debug information
                        Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXPROPS_R6783");

                        // Verify MS-OXPROPS requirement: MS-OXPROPS_R6783
                        // The property ID and property type match the description in [MS-OXPROPS] and the property type was verified, this requirement can be captured directly.
                        Site.CaptureRequirement(
                            Constants.MSOXPROPS,
                            6783,
                            "[In PidTagLastModificationTime] Property ID: 0x3008.");

                        this.VerifyPtypTime(taggedPropertyValue.Value);
                        break;
                        #endregion

                    case (ushort)FolderPropertyId.PidTagRights:

                        #region PidTagRights
                        // Add the debug information
                        Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXPROPS_R7982");

                        // Verify MS-OXPROPS requirement: MS-OXPROPS_R7982
                        Site.CaptureRequirementIfAreEqual<ushort>(
                            (ushort)PropertyType.PtypInteger32,
                            tag.PropertyType,
                            Constants.MSOXPROPS,
                            7982,
                            "[In PidTagRights] Data type: PtypInteger32, 0x0003.");

                        // Add the debug information
                        Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXCFOLD_R367");

                        // Verify MS-OXCFOLD requirement: MS-OXCFOLD_R367.
                        // The property ID and property type match the description in [MS-OXPROPS] and the property type was verified, this requirement can be captured directly.
                        Site.CaptureRequirement(
                            367,
                            "[In PidTagRights Property] Type: PtypInteger32 ([MS-OXCDATA] section 2.11.1)");

                        // Add the debug information
                        Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXPROPS_R7981");

                        // Verify MS-OXPROPS requirement: MS-OXPROPS_R7981
                        // The property ID and property type match the description in [MS-OXPROPS] and the property type was verified, this requirement can be captured directly.
                        Site.CaptureRequirement(
                            Constants.MSOXPROPS,
                            7981,
                            "[In PidTagRights] Property ID: 0x6639.");

                        this.VerifyPtypInteger32(taggedPropertyValue.Value);
                        break;
                        #endregion

                    case (ushort)FolderPropertyId.PidTagSubfolders:

                        #region PidTagSubfolders
                        // Add the debug information
                        Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXPROPS_R8691");

                        // Verify MS-OXPROPS requirement: MS-OXPROPS_R8691
                        Site.CaptureRequirementIfAreEqual<ushort>(
                            (ushort)PropertyType.PtypBoolean,
                            tag.PropertyType,
                            Constants.MSOXPROPS,
                            8691,
                            "[In PidTagSubfolders] Data type: PtypBoolean, 0x000B.");

                        // Add the debug information
                        Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXCFOLD_R355");

                        // Verify MS-OXCFOLD requirement: MS-OXCFOLD_R355.
                        // The property ID and property type match the description in [MS-OXPROPS] and the property type was verified, this requirement can be captured directly.
                        Site.CaptureRequirement(
                            355,
                            "[In PidTagSubfolders Property] Type: PtypBoolean ([MS-OXCDATA] section 2.11.1)");

                        // Add the debug information
                        Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXPROPS_R8690");

                        // Verify MS-OXPROPS requirement: MS-OXPROPS_R8690
                        // The property ID and property type match the description in [MS-OXPROPS] and the property type was verified, this requirement can be captured directly.
                        Site.CaptureRequirement(
                            Constants.MSOXPROPS,
                            8690,
                            "[In PidTagSubfolders] Property ID: 0x360A.");

                        this.VerifyPtypBoolean(taggedPropertyValue.Value);
                        break;
                        #endregion

                    case (ushort)FolderPropertyId.PidTagMessageSize:

                        #region PidTagMessageSize
                        if (tag.PropertyType == (ushort)PropertyType.PtypInteger32)
                        {
                            // Add the debug information
                            Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXPROPS_R7002");

                            // Verify MS-OXPROPS requirement: MS-OXPROPS_R7002
                            // The property ID and property type match the description in [MS-OXPROPS] and the property type was verified, this requirement can be captured directly.
                            Site.CaptureRequirement(
                                Constants.MSOXPROPS,
                                7002,
                                "[In PidTagMessageSize] Data type: PtypInteger32, 0x0003.");

                            // Add the debug information
                            Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXCFOLD_R353");

                            // Verify MS-OXCFOLD requirement: MS-OXCFOLD_R353.
                            // The property ID and property type match the description in [MS-OXPROPS] and the property type was verified, this requirement can be captured directly.
                            Site.CaptureRequirement(
                                353,
                                "[In PidTagMessageSize Property] Type: PtypInteger32 ([MS-OXCDATA] section 2.11.1)");

                            // Add the debug information
                            Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXPROPS_R7001");

                            // Verify MS-OXPROPS requirement: MS-OXPROPS_R7001
                            // The property ID and property type match the description in [MS-OXPROPS] and the property type was verified, this requirement can be captured directly.
                            Site.CaptureRequirement(
                                Constants.MSOXPROPS,
                                7001,
                                "[In PidTagMessageSize] Property ID: 0x0E08.");

                            this.VerifyPtypInteger32(taggedPropertyValue.Value);
                        }

                        break;
                        #endregion

                    case (ushort)FolderPropertyId.PidTagAccessControlListData:

                        #region PidTagAccessControlListData

                        // Add the debug information
                        Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXCFOLD_R1042");

                        // Verify MS-OXCFOLD requirement: MS-OXCFOLD_R1042.
                        Site.CaptureRequirementIfAreEqual<ushort>(
                            (ushort)PropertyType.PtypBinary,
                            tag.PropertyType,
                            1042,
                            "[In PidTagAccessControlListData Property] Type: PtypBinary ([MS-OXCDATA] section 2.11.1)");

                        // Add the debug information
                        Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXPROPS_R10102");

                        // Verify MS-OXPROPS requirement: MS-OXPROPS_R10102.
                        // The property ID and property type match the description in [MS-OXPROPS] and the property type was verified, this requirement can be captured directly.
                        Site.CaptureRequirement(
                            Constants.MSOXPROPS,
                            10102,
                            "[In PidTagAccessControlListData] Property ID: 0x3FE0");

                        // Add the debug information
                        Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXPROPS_R10103");

                        // Verify MS-OXPROPS requirement: MS-OXPROPS_R10103.
                        // The property ID and property type match the description in [MS-OXPROPS] and the property type was verified, this requirement can be captured directly.
                        Site.CaptureRequirement(
                            Constants.MSOXPROPS,
                            10103,
                            "[In PidTagAccessControlListData] Data type: PtypBinary, 0x0102");

                        this.VerifyPtypBinary(taggedPropertyValue.Value);
                        #endregion
                        break;

                    case (ushort)FolderPropertyId.PidTagLocalCommitTime:

                        #region PidTagLocalCommitTime

                        // Add the debug information.
                        Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXCFOLD_R3000");

                        // Verify MS-OXCFOLD requirement: MS-OXCFOLD_R3000.
                        Site.CaptureRequirementIfAreEqual<ushort>(
                            (ushort)PropertyType.PtypTime,
                            tag.PropertyType,
                            3000,
                            "[In PidTagLocalCommitTime Property] Type: PtypTime ([MS-OXCDATA] section 2.11.1).");
                        #endregion
                        break;

                    case (ushort)FolderPropertyId.PidTagLocalCommitTimeMax:

                        #region PidTagLocalCommitTimeMax

                        // Add the debug information.
                        Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXCFOLD_R3002");

                        // Verify MS-OXCFOLD requirement: MS-OXCFOLD_R3002.
                        Site.CaptureRequirementIfAreEqual<ushort>(
                            (ushort)PropertyType.PtypTime,
                            tag.PropertyType,
                            3002,
                            "[In PidTagLocalCommitTimeMax Property] Type: PtypTime ([MS-OXCDATA] section 2.11.1).");
                        #endregion
                        break;

                    case (ushort)FolderPropertyId.PidTagDeletedCountTotal:

                        #region PidTagDeletedCountTotal

                        // Add the debug information.
                        Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXCFOLD_R3005");

                        // Verify MS-OXCFOLD requirement: MS-OXCFOLD_R3005.
                        Site.CaptureRequirementIfAreEqual<ushort>(
                            (ushort)PropertyType.PtypInteger32,
                            tag.PropertyType,
                            3005,
                            "[In PidTagDeletedCountTotal Property] Type: PtypInteger32 ([MS-OXCDATA] section 2.11.1).");
                        #endregion
                        break;
                    case (ushort)FolderPropertyId.PidTagFolderFlags:

                        #region PidTagFolderFlags
                        // Add the debug information
                        Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXCFOLD_R35101");

                        // Verify MS-OXCFOLD requirement: MS-OXCFOLD_R35101
                        Site.CaptureRequirementIfAreEqual<ushort>(
                            (ushort)PropertyType.PtypInteger32,
                            tag.PropertyType,
                            35101,
                            "[In PidTagFolderFlags Property] Type: PtypInteger32 ([MS-OXCDATA] section 2.11.1)");
                        break;
                        #endregion
                    default:
                        break;
                }
            }
        }
        /// <summary>
        /// Verify the Properties in the DEM.
        /// </summary>
        /// <param name="ropGetPropertiesAllResponse">The response of the RopGetProperties call.</param>
        private void VerifyRopGetPropertiesAllForDEM(RopGetPropertiesAllResponse ropGetPropertiesAllResponse)
        {
            // Used to verify R811.
            ushort verifiedPropertiesCount = 0;

            // ropGetPropertiesAllResponse.PropertyValues contains a list of properties set on a Message.
            for (int i = 0; i < ropGetPropertiesAllResponse.PropertyValues.Length; i++)
            {
                // propertyId indicates the Id of a property.
                ushort propertyId = ropGetPropertiesAllResponse.PropertyValues[i].PropertyTag.PropertyId;

                // propertyType indicates the Type of a property.
                ushort propertyType = ropGetPropertiesAllResponse.PropertyValues[i].PropertyTag.PropertyType;

                // propertyValue indicates the value of a property.
                byte[] propertyValue = ropGetPropertiesAllResponse.PropertyValues[i].Value;

                switch (propertyId)
                {
                    // If propertyId is 0x001A, it means the property is PidTagMessageClass.
                    case 0x001A:
                        // Add the debug information. 
                        Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXORULE_R745");

                        // Verify MS-OXORULE requirement: MS-OXORULE_R745.
                        Site.CaptureRequirementIfAreEqual<ushort>(
                            (ushort)PropertyType.PtypString,
                            propertyType,
                            745,
                            @"[In PidTagMessageClass Property] Type: PtypString ([MS-OXCDATA] section 2.11.1).");

                        // Add the debug information. 
                        Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXORULE_R746");

                        // Verify MS-OXORULE requirement: MS-OXORULE_R746.
                        string messageClassValue = AdapterHelper.PropertyValueConvertToString(propertyValue);
                        Site.CaptureRequirementIfAreEqual<string>(
                            "IPC.Microsoft Exchange 4.0.Deferred Error",
                            messageClassValue,
                            746,
                            @"[In PidTagMessageClass Property] The PidTagMessageClass property ([MS-OXCMSG] section 2.2.1.3) MUST be set to ""IPC.Microsoft Exchange 4.0.Deferred Error"".");

                        if (propertyValue != null)
                        {
                            // This property value was set.
                            verifiedPropertiesCount++;
                        }

                        break;

                    // If propertyId is 0x6648, it means the property is PidTagRuleError.
                    case 0x6648:
                        {
                            // Add the debug information. 
                            Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXORULE_R747");

                            // Verify MS-OXORULE requirement: MS-OXORULE_R747.
                            Site.CaptureRequirementIfAreEqual<ushort>(
                                (ushort)PropertyType.PtypInteger32,
                                propertyType,
                                747,
                                @"[In PidTagRuleError Property] Type: PtypInteger32 ([MS-OXCDATA] section 2.11.1).");

                            uint ruleErrorValue = AdapterHelper.PropertyValueConvertToUint(propertyValue);

                            // Add the debug information. 
                            Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXORULE_R748: the value of the PidTagRuleError property is {0}", ruleErrorValue);

                            // Verify MS-OXORULE requirement: MS-OXORULE_R748.
                            // The valid error numbers are from 1 to 14, so if the ruleErrorValue is less than 15 means the ruleErrorValue is among the valid error numbers.
                            bool isVerifyR748 = ruleErrorValue > 0 && ruleErrorValue < 15;

                            Site.CaptureRequirementIfIsTrue(
                                isVerifyR748,
                                748,
                                @"[In PidTagRuleError Property] The PidTagRuleError property ([MS-OXPROPS] section 2.938) MUST be set to one of the following values [0x00000001, 0x00000002, 0x00000003, 0x00000004, 0x00000005, 0x00000006, 0x00000007, 0x00000008, 0x00000009, 0x0000000a, 0x0000000b, 0x0000000c, 0x0000000d, and 0x0000000e], indicating the cause of the error encountered during the execution of the rule (2).");

                            if (propertyValue != null)
                            {
                                // This property value was set.
                                verifiedPropertiesCount++;
                            }
                        }

                        break;

                    // If propertyId is 0x6649, it means the property is PidTagRuleActionType.
                    case 0x6649:
                        {
                            // Add the debug information. 
                            Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXORULE_R749");

                            // Verify MS-OXORULE requirement: MS-OXORULE_R749.
                            Site.CaptureRequirementIfAreEqual<ushort>(
                                (ushort)PropertyType.PtypInteger32,
                                propertyType,
                                749,
                                @"[In PidTagRuleActionType Property] Type: PtypInteger32 ([MS-OXCDATA] section 2.11.1).");

                            if (propertyValue != null)
                            {
                                // This property value was set.
                                verifiedPropertiesCount++;
                            }
                        }

                        break;

                    // If propertyId is 0x6650, it means the property is PidTagRuleActionNumber.
                    case 0x6650:
                        {
                            // Add the debug information. 
                            Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXORULE_R706");

                            // Verify MS-OXORULE requirement: MS-OXORULE_R706.
                            Site.CaptureRequirementIfAreEqual<ushort>(
                                (ushort)PropertyType.PtypInteger32,
                                propertyType,
                                706,
                                @"[In PidTagRuleActionNumber Property] Type: PtypInteger32 ([MS-OXCDATA] section 2.11.1).");

                            if (propertyValue != null)
                            {
                                // This property value was set.
                                verifiedPropertiesCount++;
                            }
                        }

                        break;

                    // If propertyId is 0x6681, it means the property is PidTagRuleProvider.
                    case 0x6681:
                        {
                            // Add the debug information. 
                            Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXORULE_R710");

                            // Verify MS-OXORULE requirement: MS-OXORULE_R710.
                            Site.CaptureRequirementIfAreEqual<ushort>(
                                (ushort)PropertyType.PtypString,
                                propertyType,
                                710,
                                @"[In PidTagRuleProvider Property] Type: PtypString ([MS-OXCDATA] section 2.11.1).");

                            if (propertyValue != null)
                            {
                                // This property value was set.
                                verifiedPropertiesCount++;
                            }
                        }

                        break;

                    // If propertyId is 0x6674, it means the property is PidTagRuleId.
                    case 0x6674:
                        {
                            // Add the debug information. 
                            Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXORULE_R716");

                            // Verify MS-OXORULE requirement: MS-OXORULE_R716.
                            Site.CaptureRequirementIfAreEqual<ushort>(
                                (ushort)PropertyType.PtypInteger64,
                                propertyType,
                                716,
                                @"[In PidTagRuleId Property] Type: PtypInteger64 ([MS-OXCDATA] section 2.11.1).");

                            if (propertyValue != null)
                            {
                                // This property value was set.
                                verifiedPropertiesCount++;
                            }
                        }

                        break;
                }
            }

            // Add the debug information. 
            Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXORULE_R811");

            // Verify MS-OXORULE requirement: MS-OXORULE_R811.
            // There are 8 properties specified in section 2.2.7,
            // but the PidTagDamOriginalEntryId property and the PidTagRuleFolderEntryId property cannot get in RopGetProperteisAll ROP,
            // so currently there are 6 properties verified in this ROP, others will be verified in VerifyPropertiesInTable function.
            Site.CaptureRequirementIfAreEqual<ushort>(
                6,
                verifiedPropertiesCount,
                811,
                @"[In Handling Errors During Rule Processing] The server MUST generate the DEM in the following manner: 2. Set the property values on the DEM as specified in section 2.2.7.");
        }
        /// <summary>
        /// Verify the RopGetPropertiesAll operation performed on extended rules.
        /// </summary>
        /// <param name="ropGetPropertiesAllResponse">RopGetPropertiesAll response buffer.</param>
        private void VerifyRopGetPropertiesAllForExtendedRules(RopGetPropertiesAllResponse ropGetPropertiesAllResponse)
        {
            // isFAIMessage indicates whether the current message is an FAI Message.
            bool isFAIMessage = false;

            // PidTagRuleMessageNameValue indicates the property value of PidTagRuleMessageName.
            string pidTagRuleMessageNameValue = null;

            // PidTagMessageClassValue indicates the property value of PidTagMessageClass.
            string pidTagMessageClassValue = null;

            // PidTagRuleMessageSequenceValue indicates the property value of PidTagRuleMessageSequence.
            byte[] pidTagRuleMessageSequenceValue = null;

            // PidTagRuleMessageStateValue indicates the property value of PidTagRuleMessageState.
            byte[] pidTagRuleMessageStateValue = null;

            // PidTagRuleMessageUserFlagsValue indicates the property value of PidTagRuleMessageUserFlags.
            byte[] pidTagRuleMessageUserFlagsValue = null;

            // PidTagRuleMessageLevelValue indicates the property value of PidTagRuleMessageLevel.
            byte[] pidTagRuleMessageLevelValue = null;

            // PidTagRuleMessageProviderValue indicates the property value of PidTagRuleMessageProvider.
            string pidTagRuleMessageProviderValue = null;

            // PidTagRuleMessageProviderDataValue indicates the property value of PidTagRuleMessageProviderData.
            byte[] pidTagRuleMessageProviderDataValue = null;

            // PidTagExtendedRuleMessageActionsValue indicates the property value of PidTagExtendedRuleMessageActions.
            ExtendedRuleActions pidTagExtendedRuleMessageActionsValue = null;

            // PidTagExtendedRuleMessageConditionValue indicates the property value of PidTagExtendedRuleMessageCondition.
            ExtendedRuleCondition pidTagExtendedRuleMessageConditionValue = null;

            // ropGetPropertiesAllResponse.PropertyValues contains a list of properties set on a Message.
            for (int i = 0; i < ropGetPropertiesAllResponse.PropertyValues.Length; i++)
            {
                // propertyId indicates the Id of a property.
                ushort propertyId = ropGetPropertiesAllResponse.PropertyValues[i].PropertyTag.PropertyId;

                // propertyType indicates the Type of a property.
                ushort propertyType = ropGetPropertiesAllResponse.PropertyValues[i].PropertyTag.PropertyType;

                // propertyValue indicates the value of a property.
                byte[] propertyValue = ropGetPropertiesAllResponse.PropertyValues[i].Value;

                switch (propertyId)
                {
                    // If propertyId is 0x001A, it means the property is PidTagMessageClass.
                    case 0x001A:
                        {
                            // Save the property value of PidTagMessageClass.
                            pidTagMessageClassValue = AdapterHelper.PropertyValueConvertToString(propertyValue);

                            // Add the debug information.
                            Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXORULE_R167");

                            // Verify MS-OXORULE requirement: MS-OXORULE_R167.
                            Site.CaptureRequirementIfAreEqual<string>(
                                "IPM.ExtendedRule.Message",
                                pidTagMessageClassValue,
                                167,
                                @"[In PidTagMessageClass Property] The PidTagMessageClass property ([MS-OXCMSG] section 2.2.1.3) MUST have a value of ""IPM.ExtendedRule.Message"".");

                            // Add the debug information.
                            Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXORULE_R165");

                            // Verify MS-OXORULE requirement: MS-OXORULE_R165.
                            Site.CaptureRequirementIfAreEqual<ushort>(
                                (ushort)PropertyType.PtypString,
                                propertyType,
                                165,
                                @"[In PidTagMessageClass Property] Type: PtypString ([MS-OXCDATA] section 2.11.1).");
                        }

                        break;

                    // If propertyId is 0x65EC, it means the property is PidTagRuleMessageName.
                    case 0x65EC:
                        {
                            // Save the property value of PidTagRuleMessageName.
                            pidTagRuleMessageNameValue = AdapterHelper.PropertyValueConvertToString(propertyValue);

                            // Add the debug information.
                            Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXORULE_R161");

                            // Verify MS-OXORULE requirement: MS-OXORULE_R161.
                            Site.CaptureRequirementIfAreEqual<ushort>(
                                (ushort)PropertyType.PtypString,
                                propertyType,
                                161,
                                @"[In PidTagRuleMessageName Property] Type: PtypString ([MS-OXCDATA] section 2.11.1).");

                            // Add the debug information.
                            Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXCDATA_R2700.");

                            // Verify MS-OXCDATA requirement: MS-OXCDATA_R2700.
                            bool isVerifyR2700 = Common.IsUtf16LEString(propertyValue) && propertyType == 0x001F;

                            Site.CaptureRequirementIfIsTrue(
                                isVerifyR2700,
                                "MS-OXCDATA",
                                2700,
                                @"[In Property Data Types] PtypString (PT_UNICODE, string) is that Variable size; a string of Unicode characters in UTF-16LE format encoding with terminating null character (0x0000). with Property Type Value  0x001F,%x1F.00.");
                        }

                        break;

                    // If propertyId is 0x65F3, it means the property is PidTagRuleMessageSequence.
                    case 0x65F3:
                        {
                            // Save the property value of PidTagRuleMessageSequence.
                            pidTagRuleMessageSequenceValue = propertyValue;

                            // Add the debug information.
                            Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXCDATA_R2691, the propertyValue.Length should be 4 and the actual value is {0}, the propertyType of this property should be 0x0003 and the actual value is {1}.", propertyValue.Length, propertyType);

                            // Verify MS-OXCDATA requirement: MS-OXCDATA_R2691.
                            bool isVerifyR2691 = propertyValue.Length == 4 && propertyType == 0x0003;

                            Site.CaptureRequirementIfIsTrue(
                                isVerifyR2691,
                                "MS-OXCDATA",
                                2691,
                                @"[In Property Data Types] PtypInteger32 (PT_LONG, PT_I4, int, ui4) is that 4 bytes; a 32-bit integer [MS-DTYP]: INT32 with Property Type Value 0x0003,%x03.00.");

                            // Add the debug information.
                            Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXORULE_R168");

                            // Verify MS-OXORULE requirement: MS-OXORULE_R168.
                            Site.CaptureRequirementIfAreEqual<ushort>(
                                (ushort)PropertyType.PtypInteger32,
                                propertyType,
                                168,
                                @"[In PidTagRuleMessageSequence Property] Type: PtypInteger32 ([MS-OXCDATA] section 2.11.1).");
                        }

                        break;

                    // If propertyId is 0x65E9, it means the property is PidTagRuleMessageState.
                    case 0x65E9:
                        {
                            // Save the property value of PidTagRuleMessageState.
                            pidTagRuleMessageStateValue = propertyValue;

                            // Add the debug information.
                            Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXORULE_R171");

                            // Verify MS-OXORULE requirement: MS-OXORULE_R171.
                            Site.CaptureRequirementIfAreEqual<ushort>(
                                (ushort)PropertyType.PtypInteger32,
                                propertyType,
                                171,
                                @"[In PidTagRuleMessageState Property] Type: PtypInteger32 ([MS-OXCDATA] section 2.11.1).");
                        }

                        break;

                    // If propertyId is 0x65ED, it means the property is PidTagRuleMessageLevel.
                    case 0x65ED:
                        {
                            // Save the property value of PidTagRuleMessageLevel.
                            pidTagRuleMessageLevelValue = propertyValue;

                            // Add the debug information.
                            Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXORULE_R178");

                            // Verify MS-OXORULE requirement: MS-OXORULE_R178.
                            Site.CaptureRequirementIfAreEqual<ushort>(
                                (ushort)PropertyType.PtypInteger32,
                                propertyType,
                                178,
                                @"[In PidTagRuleMessageLevel Property] Type: PtypInteger32 ([MS-OXCDATA] section 2.11.1).");
                        }

                        break;

                    // If propertyId is 0x65EB, it means the property is PidTagRuleMessageProvider.
                    case 0x65EB:
                        {
                            // Save the property value of PidTagRuleMessageProvider.
                            pidTagRuleMessageProviderValue = AdapterHelper.PropertyValueConvertToString(propertyValue);

                            // Add the debug information.
                            Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXORULE_R182");

                            // Verify MS-OXORULE requirement: MS-OXORULE_R182.
                            Site.CaptureRequirementIfAreEqual<ushort>(
                                (ushort)PropertyType.PtypString,
                                propertyType,
                                182,
                                @"[In PidTagRuleMessageProvider Property] Type: PtypString ([MS-OXCDATA] section 2.11.1).");
                        }

                        break;

                    // If propertyId is 0x0E99, it means the property is PidTagExtendedRuleMessageActions.
                    case 0x0E99:
                        {
                            // Save the property value of PidTagExtendedRuleMessageActions.
                            pidTagExtendedRuleMessageActionsValue = AdapterHelper.PropertyValueConvertToExtendedRuleActions(propertyValue);

                            // Add the debug information.
                            Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXCDATA_R2707, the COUNT value({0}) of the propertyValue should equal to the propertyValue.Length({1}) - 2, and the propertyType({2}) of the property should be 0x0102.", BitConverter.ToInt16(propertyValue, 0), propertyValue.Length, propertyType);

                            // Verify MS-OXCDATA requirement: MS-OXCDATA_R2707.
                            bool isVerifyR2707 = BitConverter.ToInt16(propertyValue, 0) == propertyValue.Length - 2 && propertyType == 0x0102;

                            Site.CaptureRequirementIfIsTrue(
                                isVerifyR2707,
                                "MS-OXCDATA",
                                2707,
                                @"[In Property Data Types] PtypBinary (PT_BINARY) is that variable size; a COUNT field followed by that many bytes with Property Type Value 0x0102,%x02.01.");

                            // Add the debug information.
                            Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXORULE_R189");

                            // Verify MS-OXORULE requirement: MS-OXORULE_R189.
                            Site.CaptureRequirementIfAreEqual<ushort>(
                                (ushort)PropertyType.PtypBinary,
                                propertyType,
                                189,
                                @"[In PidTagExtendedRuleMessageActions Property] Type: PtypBinary ([MS-OXCDATA] section 2.11.1).");

                            // Verify the ExtendedRuleActions structure related requirements.
                            this.VerifyExtendedRuleMessageActions(pidTagExtendedRuleMessageActionsValue);
                        }

                        break;

                    // If propertyId is 0x0E9A, it means the property is PidTagExtendedRuleMessageCondition.
                    case 0x0E9A:
                        {
                            // Save the property value of PidTagExtendedRuleMessageCondition.
                            pidTagExtendedRuleMessageConditionValue = AdapterHelper.PropertyValueConvertToExtendedRuleCondition(propertyValue);

                            // Add the debug information.
                            Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXORULE_R195");

                            // Verify MS-OXORULE requirement: MS-OXORULE_R195.
                            Site.CaptureRequirementIfAreEqual<ushort>(
                                (ushort)PropertyType.PtypBinary,
                                propertyType,
                                195,
                                @"[In PidTagExtendedRuleMessageCondition Property] Type: PtypBinary ([MS-OXCDATA] section 2.11.1).");

                            // Verify the ExtendedRuleCondition structure related requirements.
                            this.VerifyExtendedRuleMessageCondition(pidTagExtendedRuleMessageConditionValue);
                        }

                        break;

                    // If propertyId is 0x0E07, it means the property is PidTagMessageFlags.
                    case 0x0E07:
                        {
                            // If mfFAI flag is set on the property value of PidTagMessageFlags, it means this message is an FAI message.
                            if ((AdapterHelper.PropertyValueConvertToInt(propertyValue) & (uint)PidTagMessageFlag.mfFAI) == (uint)PidTagMessageFlag.mfFAI)
                            {
                                isFAIMessage = true;
                            }
                        }

                        break;
                }
            }

            // isFAIMessage indicates whether the current message is an FAI message.
            if (isFAIMessage)
            {
                if (Common.IsRequirementEnabled(894, this.Site))
                {
                    // Add the debug information.
                    Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXORULE_R894.");

                    // Verify MS-OXORULE requirement: MS-OXORULE_R894.
                    // The current message is an FAI message. If the property value of PidTagRuleMessageName is not null, it means this property is set on FAI message.
                    Site.CaptureRequirementIfIsNotNull(
                        pidTagRuleMessageNameValue,
                        894,
                        @"[In PidTagRuleMessageName Property] The implementation does set the PidTagRuleMessageName property ([MS-OXPROPS] section 2.942)  on the FAI message. (Exchange 2003 and above follow this behavior.)");
                }

                // Add the debug information.
                Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXORULE_R166.");

                // Verify MS-OXORULE requirement: MS-OXORULE_R166.
                // The current message is an FAI message. If the property value of PidTagMessageClass is not null, it means this property is set on FAI message.
                Site.CaptureRequirementIfIsNotNull(
                    pidTagMessageClassValue,
                    166,
                    @"[In PidTagMessageClass Property] The PidTagMessageClass property ([MS-OXCMSG] section 2.2.1.3) MUST be set on the FAI message.");

                // Add the debug information.
                Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXORULE_R169");

                // Verify MS-OXORULE requirement: MS-OXORULE_R169.
                // The current message is an FAI message. If the property value of PidTagRuleMessageSequence is not null, it means this property is set on FAI message.
                Site.CaptureRequirementIfIsNotNull(
                    pidTagRuleMessageSequenceValue,
                    169,
                    @"[In PidTagRuleMessageSequence Property] The PidTagRuleMessageSequence property ([MS-OXPROPS] section 2.947) MUST be set on the FAI message.");

                // Add the debug information.
                Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXORULE_R172.");

                // Verify MS-OXORULE requirement: MS-OXORULE_R172.
                // The current message is an FAI message. If the property value of PidTagRuleMessageState is not null, it means this property is set on FAI message.
                Site.CaptureRequirementIfIsNotNull(
                    pidTagRuleMessageStateValue,
                    172,
                    @"[In PidTagRuleMessageState Property] The PidTagRuleMessageState property ([MS-OXPROPS] section 2.948) MUST be set on the FAI message.");

                if (Common.IsRequirementEnabled(891, this.Site))
                {
                    // Add the debug information.
                    Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXORULE_R891, the property value of the PidTagRuleMessageUserFlags is {0}.", pidTagRuleMessageUserFlagsValue);

                    // Verify MS-OXORULE requirement: MS-OXORULE_R891.
                    Site.CaptureRequirementIfIsNull(
                        pidTagRuleMessageUserFlagsValue,
                        891,
                        @"[In PidTagRuleMessageUserFlags Property] The implementation does not set the PidTagRuleMessageUserFlags property ([MS-OXPROPS] section 2.947) on the FAI message. (Exchange 2003 and above follow this behavior.)");
                }

                if (Common.IsRequirementEnabled(892, this.Site))
                {
                    // Add the debug information.
                    Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXORULE_R892");

                    // Verify MS-OXORULE requirement: MS-OXORULE_R892.
                    // The current message is an FAI message. If the property value of PidTagRuleMessageLevel is not null, it means this property is not set on FAI message.
                    Site.CaptureRequirementIfIsNotNull(
                        pidTagRuleMessageLevelValue,
                        892,
                        @"[In PidTagRuleMessageLevel Property] The implementation does set the PidTagRuleMessageLevel property ([MS-OXPROPS] section 2.941) on the FAI message. (Exchange 2003 and above follow this behavior.)");
                }

                // Add the debug information.
                Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXORULE_R183.");

                // Verify MS-OXORULE requirement: MS-OXORULE_R183.
                // The current message is an FAI message. If the property value of PidTagRuleMessageProvider is not null, it means this property is set on FAI message.
                Site.CaptureRequirementIfIsNotNull(
                    pidTagRuleMessageProviderValue,
                    183,
                    @"[In PidTagRuleMessageProvider Property] The PidTagRuleMessageProvider property ([MS-OXPROPS] section 2.945) MUST be set on the FAI message.");

                if (Common.IsRequirementEnabled(893, this.Site))
                {
                    // Add the debug information.
                    Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXORULE_R893");

                    // Verify MS-OXORULE requirement: MS-OXORULE_R893.
                    // The current message is an FAI message. If the property value of PidTagRuleMessageProviderData is null, it means this property is not set on FAI message.
                    Site.CaptureRequirementIfIsNull(
                        pidTagRuleMessageProviderDataValue,
                        893,
                        @"[In PidTagRuleMessageProviderData Property] The implementation does not set the PidTagRuleMessageProviderData property ([MS-OXPROPS] section 2.943) on the FAI message. (Exchange 2003 and above follow this behavior.)");
                }

                // Add the debug information.
                Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXORULE_R190.");

                // Verify MS-OXORULE requirement: MS-OXORULE_R190.
                // The current message is an FAI message. If the property value of PidTagExtendedRuleMessageActions is not null, it means this property is set on FAI message.
                Site.CaptureRequirementIfIsNotNull(
                    pidTagExtendedRuleMessageActionsValue,
                    190,
                    @"[In PidTagExtendedRuleMessageActions Property] The PidTagExtendedRuleMessageActions property ([MS-OXPROPS] section 2.683) MUST be set on the FAI message.");

                // Add the debug information.
                Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXORULE_R196");

                // Verify MS-OXORULE requirement: MS-OXORULE_R196.
                // The current message is an FAI message. If the property value of PidTagExtendedRuleMessageCondition is not null, it means this property is set on FAI message.
                Site.CaptureRequirementIfIsNotNull(
                    pidTagExtendedRuleMessageConditionValue,
                    196,
                    @"[In PidTagExtendedRuleMessageCondition Property] The PidTagExtendedRuleMessageCondition property ([MS-OXPROPS] section 2.684) MUST be set on the FAI message.");
            }
        }
        /// <summary>
        /// Verify the RopGetPropertiesAll operation related requirements.
        /// </summary>
        /// <param name="ropGetPropertiesAllResponse">The RopGetPropertiesAll response buffer structure.</param>
        /// <param name="objectType">Indicates which object type the RopGetPropertiesAll operation is acting on.</param>
        /// <param name="isPropertySizeLimitZero">Indicates if the PropertySizeLimit is set to 0.</param>
        /// <param name="isPropertyLagerThanLimit">Indicates if the property size is larger than the limit.</param>
        /// <param name="isUnicode">Indicates if string properties are to be encoded in the Unicode format in the ROP response buffer.</param>
        /// <param name="isValueContainsNotEnoughMemory">Indicates if returned property is larger than the limit or not.</param>
        private void VerifyRopGetPropertiesAll(RopGetPropertiesAllResponse ropGetPropertiesAllResponse, ServerObjectType objectType, bool isPropertySizeLimitZero, bool isPropertyLagerThanLimit, bool isUnicode, bool isValueContainsNotEnoughMemory)
        {
            // Since the RopGetPropertiesAll ROP response was parsed successfully, MS-OXCPRPT_R90703 can be captured directly.
            Site.CaptureRequirement(
                 90703,
                 @"[In Processing RopGetPropertiesAll] The server responds with a RopGetPropertiesAll ROP response buffer");

            if (ropGetPropertiesAllResponse.ReturnValue.Equals((uint)CPRPTErrorCode.None))
            {
                bool containString8 = false;
                bool containString = false;
                bool hasString = false;
                foreach (TaggedPropertyValue value in ropGetPropertiesAllResponse.PropertyValues)
                {
                    if (value.PropertyTag.PropertyType == (uint)0x001e)
                    {
                        containString8 = true;
                        hasString = true;
                    }
                    else if (value.PropertyTag.PropertyType == (uint)0x001f)
                    {
                        containString = true;
                        hasString = true;
                    }
                }

                if (hasString)
                {
                    if (isUnicode)
                    {
                        Site.CaptureRequirementIfIsTrue(
                           !containString8 && containString,
                           8502,
                           @"[In RopGetPropertiesAll ROP Request Buffer] WantUnicode: A Boolean value that is nonzero if string properties that are requested with PtypUnspecified ([MS-OXCDATA] section 2.11.1) as the property type are to be encoded in the Unicode format in the ROP response buffer. ");  
                    }
                    else
                    {
                        Site.CaptureRequirementIfIsFalse(
                           containString,
                           8702,
                           @"[In RopGetPropertiesAll ROP Request Buffer] WantUnicode: If WantUnicode is set to zero, the string properties that are requested with PtypUnspecified as the property type are to be encoded in MBCS format.");
                    }
                }

                bool isReturnPropertyTypeNotPtypUnspecified = true;
                foreach (TaggedPropertyValue value in ropGetPropertiesAllResponse.PropertyValues)
                {
                    if (value.PropertyTag.PropertyType == 0x0000)
                    {
                        isReturnPropertyTypeNotPtypUnspecified = false;
                        break;
                    }
                }

                Site.CaptureRequirementIfIsTrue(
                    isReturnPropertyTypeNotPtypUnspecified,
                    "MS-OXCDATA",
                    2720,
                    @"[In Property Value Types] PtypUnspecified(PT_UNSPECIFIED) is 
                Any: this property type value matches any type; a server MUST return the actual type in its response. Servers MUST NOT return this type in response to a client request other than NspiGetIDsFromNames or the RopGetPropertyIdsFromNames ROP request ([MS-OXCROPS] section 2.2.8.1). with Property Type Value 0x0000,%x00.00.");

                if (isPropertySizeLimitZero)
                {
                    bool isPropertyLimitedByBufferSize = true;
                    foreach (TaggedPropertyValue value in ropGetPropertiesAllResponse.PropertyValues)
                    {
                        if (value.Value != null && value.Size() > 0xBABE)
                        {
                            isPropertyLimitedByBufferSize = false;
                            break;
                        }
                    }

                    Site.CaptureRequirementIfIsTrue(
                        isPropertyLimitedByBufferSize,
                        84,
                        @"[In RopGetPropertiesAll ROP Request Buffer] PropertySizeLimit: If this value[PropertySizeLimit] is zero, the property values are only limited by the size of the ROP[RopGetPropertiesAll] response buffer.");
                }

                // Verify MS-OXCPRPT requirement: MS-OXCPRPT_R9201
                // numberOfPropertyValues indicates the number of elements in PropertyValues.
                ushort numberOfPropertyValues = 0;
                if (ropGetPropertiesAllResponse.PropertyValues != null)
                {
                    numberOfPropertyValues = (ushort)ropGetPropertiesAllResponse.PropertyValues.Length;
                }

                Site.CaptureRequirementIfAreEqual<ushort>(
                    numberOfPropertyValues,
                    ropGetPropertiesAllResponse.PropertyValueCount,
                    9201,
                    @"[In RopGetPropertiesAll ROP Response Buffer] PropertyValueCount: An integer that specifies the number of elements in the PropertyValues field.");

                // The parser has ensured the field satisfied the format, otherwise the response cannot be received.
                Site.CaptureRequirement(
                        92,
                        @"[In RopGetPropertiesAll ROP Response Buffer] PropertyValueCount: 2 bytes integer.");

                if (objectType == ServerObjectType.Message)
                {
                    // If the object type this operation acting on is Message object and this operation is performed successfully, then the following requirement can be captured.
                    Site.CaptureRequirement(
                        8001,
                        @"[In RopGetPropertiesAll ROP] This operation [RopGetPropertiesAll ROP] is valid on Message objects.");
                }

                if (objectType == ServerObjectType.Folder)
                {
                    // If the object type this operation acting on is Folder object and this operation is performed successfully, then the following requirement can be captured.
                    Site.CaptureRequirement(
                        8002,
                        @"[In RopGetPropertiesAll ROP] This operation [RopGetPropertiesAll ROP] is valid on Folder objects.");
                }

                if (objectType == ServerObjectType.Attachment)
                {
                    // If the object type this operation acting on is Attachment object and this operation is performed successfully, then the following requirement can be captured.
                    Site.CaptureRequirement(
                        8003,
                        @"[In RopGetPropertiesAll ROP] This operation [RopGetPropertiesAll ROP] is valid on Attachment objects.");
                }

                if (objectType == ServerObjectType.Logon)
                {
                    // If the object type this operation acting on is Logon object and this operation is performed successfully, then the following requirement can be captured.
                    Site.CaptureRequirement(
                        8004,
                        @"[In RopGetPropertiesAll ROP] This operation [RopGetPropertiesAll ROP] is valid on Logon objects.");
                }
            }

            if (Common.IsRequirementEnabled(86703, this.Site))
            {
                if (this.cprptCurrentType == ServerObjectType.Message || this.cprptCurrentType == ServerObjectType.Attachment)
                {
                    if (isPropertyLagerThanLimit)
                    {
                        // If MS-OXCPRPT_R86703 is enabled, when the property is a PtypBinary type, a PtypObject type, or a string property, 
                        // the NotEnoughMemory (0x8007000E) will be returned, if the value is larger than either the available space in the ROP response buffer or the size specified in the PropertySizeLimit field of the ROP request buffer.
                        // MS-OXCPRPT_R86703 is captured in model. This requirement is captured here since the requirements from other protocols cannot be handled in model.
                        Site.CaptureRequirementIfIsTrue(
                            isValueContainsNotEnoughMemory,
                            "MS-OXCDATA",
                            2052,
                            @"[In Additional Error Codes] NotEnoughMemory (E_NOMEMORY, MAPI_E_NOT_ENOUGH_MEMORY) will be returned, On get, indicates that the property or column value is too large to be retrieved by the request, and the property value needs to be accessed with the RopOpenStream ROP ([MS-OXCROPS] section 2.2.9.1).");
                    }
                }
            }

            if (ropGetPropertiesAllResponse.PropertyValueCount != 0x00)
            {
                foreach (TaggedPropertyValue propertyValue in ropGetPropertiesAllResponse.PropertyValues)
                {
                    this.VerifyPropertyTagInCDATA(propertyValue.PropertyTag);
                }
            }
        }
        /// <summary>
        /// Verify RopGetPropertiesAll Failure Response
        /// </summary>
        /// <param name="ropGetPropertiesAllResponse">The failure response of RopGetPropertiesAll request</param>
        /// <param name="inputHandleIndex">The field of InputHandleIndex in RopGetPropertiesAll request</param>
        private void VerifyRopGetPropertiesAllFailureResponse(RopGetPropertiesAllResponse ropGetPropertiesAllResponse, byte inputHandleIndex)
        {
            // Add the debug information
            Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXCROPS_R2743");

            // Verify MS-OXCROPS requirement: MS-OXCROPS_R2743
            Site.CaptureRequirementIfAreEqual<Type>(
                typeof(byte),
                ropGetPropertiesAllResponse.RopId.GetType(),
                2743,
                @"[In RopGetPropertiesAll ROP Failure Response Buffer]RopId (1 byte): An unsigned integer.");

            // Add the debug information
            Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXCROPS_R2745");

            // Verify MS-OXCROPS requirement: MS-OXCROPS_R2745
            Site.CaptureRequirementIfAreEqual<byte>(
                (byte)RopId.RopGetPropertiesAll,
                ropGetPropertiesAllResponse.RopId,
                2745,
                @"[In RopGetPropertiesAll ROP Failure Response Buffer,RopId (1 byte)]For this operation[RopGetPropertiesAll], this field is set to 0x08.");

            // Add the debug information
            Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXCROPS_R2746");

            // Verify MS-OXCROPS requirement: MS-OXCROPS_R2746
            Site.CaptureRequirementIfAreEqual<Type>(
                typeof(byte),
                ropGetPropertiesAllResponse.InputHandleIndex.GetType(),
                2746,
                @"[In RopGetPropertiesAll ROP Failure Response Buffer]InputHandleIndex (1 byte): An unsigned integer.");

            // Add the debug information
            Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXCROPS_R2747");

            // Verify MS-OXCROPS requirement: MS-OXCROPS_R2747
            Site.CaptureRequirementIfAreEqual<byte>(
                inputHandleIndex,
                ropGetPropertiesAllResponse.InputHandleIndex,
                2747,
                @"[In RopGetPropertiesAll ROP Failure Response Buffer,InputHandleIndex (1 byte)]This index MUST be set to the value specified in the InputHandleIndex field in the request.");

            // Add the debug information
            Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXCROPS_R2749");

            // Verify MS-OXCROPS requirement: MS-OXCROPS_R2749
            Site.CaptureRequirementIfAreEqual<Type>(
                typeof(uint),
                ropGetPropertiesAllResponse.ReturnValue.GetType(),
                2749,
                @"[In RopGetPropertiesAll ROP Failure Response Buffer]ReturnValue (4 bytes): An unsigned integer.");

            // Add the debug information
            Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXCROPS_R2751");

            // Verify MS-OXCROPS requirement: MS-OXCROPS_R2751
            Site.CaptureRequirementIfAreNotEqual<uint>(
                SuccessReturnValue,
                ropGetPropertiesAllResponse.ReturnValue,
                2751,
                @"[In RopGetPropertiesAll ROP Failure Response Buffer,ReturnValue (4 bytes)]For this response[Failure Response ], this field is set to a value other than 0x00000000.");
        }
        /// <summary>
        /// Verify RopGetPropertiesAll Success Response
        /// </summary>
        /// <param name="ropGetPropertiesAllResponse">The success response of RopGetPropertiesAll request</param>
        /// <param name="inputHandleIndex">The field of InputHandleIndex in RopGetPropertiesAll request</param>
        private void VerifyRopGetPropertiesAllSuccessResponse(RopGetPropertiesAllResponse ropGetPropertiesAllResponse, byte inputHandleIndex)
        {
            // Add the debug information
            Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXCROPS_R2728");

            // Verify MS-OXCROPS requirement: MS-OXCROPS_R2728
            Site.CaptureRequirementIfAreEqual<Type>(
                typeof(byte),
                ropGetPropertiesAllResponse.RopId.GetType(),
                2728,
                @"[In RopGetPropertiesAll ROP Success Response Buffer]RopId (1 byte): An unsigned integer.");

            // Add the debug information
            Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXCROPS_R2730");

            // Verify MS-OXCROPS requirement: MS-OXCROPS_R2730
            Site.CaptureRequirementIfAreEqual<byte>(
                (byte)RopId.RopGetPropertiesAll,
                ropGetPropertiesAllResponse.RopId,
                2730,
                @"[In RopGetPropertiesAll ROP Success Response Buffer,RopId (1 byte)]For this operation[RopGetPropertiesAll], this field is set to 0x08.");

            // Add the debug information
            Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXCROPS_R2731");

            // Verify MS-OXCROPS requirement: MS-OXCROPS_R2731
            Site.CaptureRequirementIfAreEqual<Type>(
                typeof(byte),
                ropGetPropertiesAllResponse.InputHandleIndex.GetType(),
                2731,
                @"[In RopGetPropertiesAll ROP Success Response Buffer]InputHandleIndex (1 byte): An unsigned integer.");

            // Add the debug information
            Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXCROPS_R2732");

            // Verify MS-OXCROPS requirement: MS-OXCROPS_R2732
            Site.CaptureRequirementIfAreEqual<byte>(
                inputHandleIndex,
                ropGetPropertiesAllResponse.InputHandleIndex,
                2732,
                @"[In RopGetPropertiesAll ROP Success Response Buffer,InputHandleIndex (1 byte)]This index MUST be set to the value specified in the InputHandleIndex field in the request.");

            // Add the debug information
            Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXCROPS_R2734");

            // Verify MS-OXCROPS requirement: MS-OXCROPS_R2734
            Site.CaptureRequirementIfAreEqual<Type>(
                typeof(uint),
                ropGetPropertiesAllResponse.ReturnValue.GetType(),
                2734,
                @"[In RopGetPropertiesAll ROP Success Response Buffer]ReturnValue (4 bytes): An unsigned integer.");

            // Add the debug information
            Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXCROPS_R2736");

            // Verify MS-OXCROPS requirement: MS-OXCROPS_R2736
            Site.CaptureRequirementIfAreEqual<uint>(
                SuccessReturnValue,
                ropGetPropertiesAllResponse.ReturnValue,
                2736,
                @"[In RopGetPropertiesAll ROP Success Response Buffer,ReturnValue (4 bytes)]For this response[Success Response ], this field is set to 0x00000000.");

            // Add the debug information
            Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXCROPS_R2737");

            // Verify MS-OXCROPS requirement: MS-OXCROPS_R2737
            Site.CaptureRequirementIfAreEqual<Type>(
                typeof(ushort),
                ropGetPropertiesAllResponse.PropertyValueCount.GetType(),
                2737,
                @"[In RopGetPropertiesAll ROP Success Response Buffer]PropertyValueCount (2 bytes): An unsigned integer.");

            // Add the debug information
            Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXCROPS_R2739");

            // Verify MS-OXCROPS requirement: MS-OXCROPS_R2739
            Site.CaptureRequirementIfAreEqual<Type>(
                typeof(TaggedPropertyValue[]),
                ropGetPropertiesAllResponse.PropertyValues.GetType(),
                2739,
                @"[In RopGetPropertiesAll ROP Success Response Buffer]PropertyValues (variable): An array of TaggedPropertyValue structures.");

            // Add the debug information
            Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXCROPS_R2740");

            // Verify MS-OXCROPS requirement: MS-OXCROPS_R2740
            Site.CaptureRequirementIfAreEqual<int>(
                ropGetPropertiesAllResponse.PropertyValueCount,
                ropGetPropertiesAllResponse.PropertyValues.Length,
                2740,
                @"[In RopGetPropertiesAll ROP Success Response Buffer,PropertyValues (variable)]The number of structures contained in this field is specified by the PropertyValueCount field.");
        }