<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<model type="com.apple.IDECoreDataModeler.DataModel" documentVersion="1.0" lastSavedToolsVersion="23507" systemVersion="24B83" minimumToolsVersion="Automatic" sourceLanguage="Swift" userDefinedModelVersionIdentifier="">
    <entity name="AttachmentDTO" representedClassName="AttachmentDTO" syncable="YES">
        <attribute name="data" attributeType="Binary"/>
        <attribute name="id" attributeType="String"/>
        <attribute name="localDownloadStateRaw" optional="YES" attributeType="String"/>
        <attribute name="localProgress" attributeType="Double" minValueString="0" maxValueString="1" defaultValueString="0.0" usesScalarValueType="YES"/>
        <attribute name="localRelativePath" optional="YES" attributeType="String"/>
        <attribute name="localStateRaw" optional="YES" attributeType="String"/>
        <attribute name="localURL" optional="YES" attributeType="URI"/>
        <attribute name="type" optional="YES" attributeType="String"/>
        <relationship name="message" optional="YES" maxCount="1" deletionRule="Nullify" destinationEntity="MessageDTO" inverseName="attachments" inverseEntity="MessageDTO"/>
        <uniquenessConstraints>
            <uniquenessConstraint>
                <constraint value="id"/>
            </uniquenessConstraint>
        </uniquenessConstraints>
    </entity>
    <entity name="ChannelConfigDTO" representedClassName="ChannelConfigDTO" syncable="YES">
        <attribute name="connectEventsEnabled" attributeType="Boolean" defaultValueString="NO" usesScalarValueType="YES"/>
        <attribute name="createdAt" attributeType="Date" usesScalarValueType="NO"/>
        <attribute name="maxMessageLength" attributeType="Integer 32" defaultValueString="0" usesScalarValueType="YES"/>
        <attribute name="messageRetention" attributeType="String" defaultValueString=""/>
        <attribute name="mutesEnabled" attributeType="Boolean" defaultValueString="NO" usesScalarValueType="YES"/>
        <attribute name="pollsEnabled" optional="YES" attributeType="Boolean" defaultValueString="NO" usesScalarValueType="YES"/>
        <attribute name="quotesEnabled" attributeType="Boolean" defaultValueString="NO" usesScalarValueType="YES"/>
        <attribute name="reactionsEnabled" attributeType="Boolean" defaultValueString="NO" usesScalarValueType="YES"/>
        <attribute name="readEventsEnabled" attributeType="Boolean" defaultValueString="NO" usesScalarValueType="YES"/>
        <attribute name="repliesEnabled" attributeType="Boolean" defaultValueString="NO" usesScalarValueType="YES"/>
        <attribute name="searchEnabled" attributeType="Boolean" defaultValueString="NO" usesScalarValueType="YES"/>
        <attribute name="skipLastMsgAtUpdateForSystemMsg" attributeType="Boolean" defaultValueString="NO" usesScalarValueType="YES"/>
        <attribute name="typingEventsEnabled" attributeType="Boolean" defaultValueString="NO" usesScalarValueType="YES"/>
        <attribute name="updatedAt" attributeType="Date" usesScalarValueType="NO"/>
        <attribute name="uploadsEnabled" attributeType="Boolean" defaultValueString="NO" usesScalarValueType="YES"/>
        <attribute name="urlEnrichmentEnabled" attributeType="Boolean" defaultValueString="NO" usesScalarValueType="YES"/>
        <relationship name="channel" optional="YES" maxCount="1" deletionRule="Cascade" destinationEntity="ChannelDTO" inverseName="config" inverseEntity="ChannelDTO"/>
        <relationship name="commands" optional="YES" toMany="YES" deletionRule="Cascade" ordered="YES" destinationEntity="CommandDTO" inverseName="channelConfig" inverseEntity="CommandDTO"/>
    </entity>
    <entity name="ChannelDTO" representedClassName="ChannelDTO" syncable="YES">
        <attribute name="cid" attributeType="String"/>
        <attribute name="cooldownDuration" attributeType="Integer 64" defaultValueString="0" usesScalarValueType="YES"/>
        <attribute name="createdAt" attributeType="Date" usesScalarValueType="NO"/>
        <attribute name="currentUserUnreadMessagesCount" attributeType="Integer 32" defaultValueString="0" usesScalarValueType="YES"/>
        <attribute name="defaultSortingAt" attributeType="Date" usesScalarValueType="NO" spotlightIndexingEnabled="YES"/>
        <attribute name="deletedAt" optional="YES" attributeType="Date" usesScalarValueType="NO"/>
        <attribute name="extraData" attributeType="Binary"/>
        <attribute name="hasUnreadSorting" attributeType="Integer 16" defaultValueString="0" usesScalarValueType="YES"/>
        <attribute name="id" optional="YES" attributeType="String"/>
        <attribute name="imageURL" optional="YES" attributeType="URI"/>
        <attribute name="isBlocked" optional="YES" attributeType="Boolean" usesScalarValueType="YES"/>
        <attribute name="isDisabled" attributeType="Boolean" defaultValueString="NO" usesScalarValueType="YES"/>
        <attribute name="isFrozen" attributeType="Boolean" usesScalarValueType="YES"/>
        <attribute name="isHidden" attributeType="Boolean" defaultValueString="NO" usesScalarValueType="YES"/>
        <attribute name="lastMessageAt" optional="YES" attributeType="Date" usesScalarValueType="NO"/>
        <attribute name="memberCount" attributeType="Integer 64" defaultValueString="0" usesScalarValueType="YES"/>
        <attribute name="name" optional="YES" attributeType="String"/>
        <attribute name="newestMessageAt" optional="YES" attributeType="Date" usesScalarValueType="NO"/>
        <attribute name="oldestMessageAt" optional="YES" attributeType="Date" usesScalarValueType="NO"/>
        <attribute name="ownCapabilities" optional="YES" attributeType="Transformable" valueTransformerName="NSSecureUnarchiveFromDataTransformer"/>
        <attribute name="team" optional="YES" attributeType="String"/>
        <attribute name="truncatedAt" optional="YES" attributeType="Date" usesScalarValueType="NO"/>
        <attribute name="typeRawValue" attributeType="String" defaultValueString=""/>
        <attribute name="updatedAt" attributeType="Date" usesScalarValueType="NO"/>
        <attribute name="watcherCount" attributeType="Integer 64" defaultValueString="0" usesScalarValueType="YES"/>
        <relationship name="config" maxCount="1" deletionRule="Cascade" destinationEntity="ChannelConfigDTO" inverseName="channel" inverseEntity="ChannelConfigDTO"/>
        <relationship name="createdBy" optional="YES" maxCount="1" deletionRule="Nullify" destinationEntity="UserDTO" inverseName="createdChannels" inverseEntity="UserDTO"/>
        <relationship name="currentlyTypingUsers" toMany="YES" deletionRule="Nullify" destinationEntity="UserDTO" inverseName="typingIn" inverseEntity="UserDTO"/>
        <relationship name="draftMessage" optional="YES" maxCount="1" deletionRule="Nullify" destinationEntity="MessageDTO" inverseName="draftOfChannel" inverseEntity="MessageDTO"/>
        <relationship name="memberListQueries" optional="YES" toMany="YES" deletionRule="Nullify" destinationEntity="ChannelMemberListQueryDTO" inverseName="channel" inverseEntity="ChannelMemberListQueryDTO"/>
        <relationship name="members" toMany="YES" deletionRule="Nullify" destinationEntity="MemberDTO" inverseName="channel" inverseEntity="MemberDTO"/>
        <relationship name="membership" optional="YES" maxCount="1" deletionRule="Nullify" destinationEntity="MemberDTO" inverseName="membershipChannel" inverseEntity="MemberDTO"/>
        <relationship name="messages" optional="YES" toMany="YES" deletionRule="Nullify" destinationEntity="MessageDTO" inverseName="channel" inverseEntity="MessageDTO"/>
        <relationship name="mute" optional="YES" maxCount="1" deletionRule="Nullify" destinationEntity="ChannelMuteDTO" inverseName="channel" inverseEntity="ChannelMuteDTO"/>
        <relationship name="pinnedMessages" optional="YES" toMany="YES" deletionRule="Nullify" destinationEntity="MessageDTO" inverseName="pinnedChannel" inverseEntity="MessageDTO"/>
        <relationship name="previewMessage" optional="YES" maxCount="1" deletionRule="Nullify" destinationEntity="MessageDTO" inverseName="previewOfChannel" inverseEntity="MessageDTO"/>
        <relationship name="queries" toMany="YES" deletionRule="Nullify" destinationEntity="ChannelListQueryDTO" inverseName="channels" inverseEntity="ChannelListQueryDTO"/>
        <relationship name="reads" optional="YES" toMany="YES" deletionRule="Nullify" destinationEntity="ChannelReadDTO" inverseName="channel" inverseEntity="ChannelReadDTO"/>
        <relationship name="threads" optional="YES" toMany="YES" deletionRule="Nullify" destinationEntity="ThreadDTO" inverseName="channel" inverseEntity="ThreadDTO"/>
        <relationship name="watchers" optional="YES" toMany="YES" deletionRule="Nullify" destinationEntity="UserDTO" inverseName="watchedChannels" inverseEntity="UserDTO"/>
        <fetchIndex name="defaultSortingIndex">
            <fetchIndexElement property="defaultSortingAt" type="Binary" order="ascending"/>
        </fetchIndex>
        <fetchIndex name="cid">
            <fetchIndexElement property="cid" type="Binary" order="ascending"/>
        </fetchIndex>
        <fetchIndex name="lastMessageAt">
            <fetchIndexElement property="lastMessageAt" type="Binary" order="ascending"/>
        </fetchIndex>
        <fetchIndex name="createdAt">
            <fetchIndexElement property="createdAt" type="Binary" order="ascending"/>
        </fetchIndex>
        <uniquenessConstraints>
            <uniquenessConstraint>
                <constraint value="cid"/>
            </uniquenessConstraint>
        </uniquenessConstraints>
    </entity>
    <entity name="ChannelListQueryDTO" representedClassName="ChannelListQueryDTO" syncable="YES">
        <attribute name="filterHash" attributeType="String"/>
        <attribute name="filterJSONData" attributeType="Binary"/>
        <relationship name="channels" optional="YES" toMany="YES" deletionRule="Nullify" destinationEntity="ChannelDTO" inverseName="queries" inverseEntity="ChannelDTO"/>
        <fetchIndex name="filterHash">
            <fetchIndexElement property="filterHash" type="Binary" order="ascending"/>
        </fetchIndex>
        <uniquenessConstraints>
            <uniquenessConstraint>
                <constraint value="filterHash"/>
            </uniquenessConstraint>
        </uniquenessConstraints>
    </entity>
    <entity name="ChannelMemberListQueryDTO" representedClassName="ChannelMemberListQueryDTO" syncable="YES">
        <attribute name="filterJSONData" optional="YES" attributeType="Binary"/>
        <attribute name="queryHash" attributeType="String"/>
        <relationship name="channel" optional="YES" maxCount="1" deletionRule="Nullify" destinationEntity="ChannelDTO" inverseName="memberListQueries" inverseEntity="ChannelDTO"/>
        <relationship name="members" optional="YES" toMany="YES" deletionRule="Nullify" destinationEntity="MemberDTO" inverseName="queries" inverseEntity="MemberDTO"/>
        <uniquenessConstraints>
            <uniquenessConstraint>
                <constraint value="queryHash"/>
            </uniquenessConstraint>
        </uniquenessConstraints>
    </entity>
    <entity name="ChannelMuteDTO" representedClassName="ChannelMuteDTO" syncable="YES">
        <attribute name="createdAt" attributeType="Date" defaultDateTimeInterval="0" usesScalarValueType="NO"/>
        <attribute name="expiresAt" optional="YES" attributeType="Date" usesScalarValueType="NO"/>
        <attribute name="updatedAt" attributeType="Date" defaultDateTimeInterval="0" usesScalarValueType="NO"/>
        <relationship name="channel" optional="YES" maxCount="1" deletionRule="Nullify" destinationEntity="ChannelDTO" inverseName="mute" inverseEntity="ChannelDTO"/>
        <relationship name="currentUser" optional="YES" maxCount="1" deletionRule="Nullify" destinationEntity="CurrentUserDTO" inverseName="channelMutes" inverseEntity="CurrentUserDTO"/>
    </entity>
    <entity name="ChannelReadDTO" representedClassName="ChannelReadDTO" syncable="YES">
        <attribute name="lastReadAt" attributeType="Date" defaultDateTimeInterval="0" usesScalarValueType="NO"/>
        <attribute name="lastReadMessageId" optional="YES" attributeType="String"/>
        <attribute name="unreadMessageCount" attributeType="Integer 32" defaultValueString="0" usesScalarValueType="YES"/>
        <relationship name="channel" optional="YES" maxCount="1" deletionRule="Nullify" destinationEntity="ChannelDTO" inverseName="reads" inverseEntity="ChannelDTO"/>
        <relationship name="readMessagesFromCurrentUser" optional="YES" toMany="YES" deletionRule="Nullify" destinationEntity="MessageDTO" inverseName="reads" inverseEntity="MessageDTO"/>
        <relationship name="user" optional="YES" maxCount="1" deletionRule="Nullify" destinationEntity="UserDTO" inverseName="channelReads" inverseEntity="UserDTO"/>
    </entity>
    <entity name="CommandDTO" representedClassName="CommandDTO" syncable="YES">
        <attribute name="args" attributeType="String" defaultValueString=""/>
        <attribute name="desc" attributeType="String" defaultValueString=""/>
        <attribute name="name" attributeType="String" defaultValueString=""/>
        <attribute name="set" attributeType="String" defaultValueString=""/>
        <relationship name="channelConfig" optional="YES" maxCount="1" deletionRule="Nullify" destinationEntity="ChannelConfigDTO" inverseName="commands" inverseEntity="ChannelConfigDTO"/>
    </entity>
    <entity name="CurrentUserDTO" representedClassName="CurrentUserDTO" syncable="YES">
        <attribute name="blockedUserIds" optional="YES" attributeType="Transformable" valueTransformerName="NSSecureUnarchiveFromDataTransformer"/>
        <attribute name="isInvisible" attributeType="Boolean" defaultValueString="NO" usesScalarValueType="YES"/>
        <attribute name="isReadReceiptsEnabled" attributeType="Boolean" defaultValueString="YES" usesScalarValueType="YES"/>
        <attribute name="isTypingIndicatorsEnabled" attributeType="Boolean" defaultValueString="YES" usesScalarValueType="YES"/>
        <attribute name="lastSynchedEventDate" optional="YES" attributeType="Date" usesScalarValueType="NO"/>
        <attribute name="uniquenessKey" attributeType="String" defaultValueString="this is an immmutable arbitrary key which makes sure we have only once instance of CurrentUserDTO in the db"/>
        <attribute name="unreadChannelsCount" attributeType="Integer 64" defaultValueString="0" usesScalarValueType="YES"/>
        <attribute name="unreadMessagesCount" attributeType="Integer 64" defaultValueString="0" usesScalarValueType="YES"/>
        <attribute name="unreadThreadsCount" attributeType="Integer 64" defaultValueString="0" usesScalarValueType="YES"/>
        <relationship name="channelMutes" optional="YES" toMany="YES" deletionRule="Cascade" destinationEntity="ChannelMuteDTO" inverseName="currentUser" inverseEntity="ChannelMuteDTO"/>
        <relationship name="currentDevice" optional="YES" maxCount="1" deletionRule="Nullify" destinationEntity="DeviceDTO" inverseName="relationship" inverseEntity="DeviceDTO"/>
        <relationship name="devices" optional="YES" toMany="YES" deletionRule="Nullify" destinationEntity="DeviceDTO" inverseName="user" inverseEntity="DeviceDTO"/>
        <relationship name="flaggedMessages" optional="YES" toMany="YES" deletionRule="Nullify" destinationEntity="MessageDTO" inverseName="flaggedBy" inverseEntity="MessageDTO"/>
        <relationship name="flaggedUsers" optional="YES" toMany="YES" deletionRule="Nullify" destinationEntity="UserDTO" inverseName="flaggedBy" inverseEntity="UserDTO"/>
        <relationship name="mutedUsers" optional="YES" toMany="YES" deletionRule="Nullify" destinationEntity="UserDTO" inverseName="mutedBy" inverseEntity="UserDTO"/>
        <relationship name="user" optional="YES" maxCount="1" deletionRule="Nullify" destinationEntity="UserDTO" inverseName="currentUser" inverseEntity="UserDTO"/>
        <uniquenessConstraints>
            <uniquenessConstraint>
                <constraint value="uniquenessKey"/>
            </uniquenessConstraint>
        </uniquenessConstraints>
    </entity>
    <entity name="DeviceDTO" representedClassName="DeviceDTO" syncable="YES">
        <attribute name="createdAt" optional="YES" attributeType="Date" usesScalarValueType="NO"/>
        <attribute name="id" attributeType="String"/>
        <relationship name="relationship" optional="YES" maxCount="1" deletionRule="Nullify" destinationEntity="CurrentUserDTO" inverseName="currentDevice" inverseEntity="CurrentUserDTO"/>
        <relationship name="user" optional="YES" maxCount="1" deletionRule="Nullify" destinationEntity="CurrentUserDTO" inverseName="devices" inverseEntity="CurrentUserDTO"/>
        <uniquenessConstraints>
            <uniquenessConstraint>
                <constraint value="id"/>
            </uniquenessConstraint>
        </uniquenessConstraints>
    </entity>
    <entity name="MemberDTO" representedClassName="MemberDTO" syncable="YES">
        <attribute name="archivedAt" optional="YES" attributeType="Date" usesScalarValueType="NO"/>
        <attribute name="banExpiresAt" optional="YES" attributeType="Date" usesScalarValueType="NO"/>
        <attribute name="channelRoleRaw" optional="YES" attributeType="String"/>
        <attribute name="extraData" optional="YES" attributeType="Binary"/>
        <attribute name="id" attributeType="String"/>
        <attribute name="inviteAcceptedAt" optional="YES" attributeType="Date" usesScalarValueType="NO"/>
        <attribute name="inviteRejectedAt" optional="YES" attributeType="Date" usesScalarValueType="NO"/>
        <attribute name="isBanned" attributeType="Boolean" defaultValueString="NO" usesScalarValueType="YES"/>
        <attribute name="isInvited" attributeType="Boolean" defaultValueString="NO" usesScalarValueType="YES"/>
        <attribute name="isShadowBanned" attributeType="Boolean" defaultValueString="NO" usesScalarValueType="YES"/>
        <attribute name="memberCreatedAt" attributeType="Date" usesScalarValueType="NO"/>
        <attribute name="memberUpdatedAt" attributeType="Date" usesScalarValueType="NO"/>
        <attribute name="notificationsMuted" optional="YES" attributeType="Boolean" defaultValueString="NO" usesScalarValueType="YES"/>
        <attribute name="pinnedAt" optional="YES" attributeType="Date" usesScalarValueType="NO"/>
        <relationship name="channel" optional="YES" maxCount="1" deletionRule="Nullify" destinationEntity="ChannelDTO" inverseName="members" inverseEntity="ChannelDTO"/>
        <relationship name="membershipChannel" optional="YES" maxCount="1" deletionRule="Nullify" destinationEntity="ChannelDTO" inverseName="membership" inverseEntity="ChannelDTO"/>
        <relationship name="queries" optional="YES" toMany="YES" deletionRule="Nullify" destinationEntity="ChannelMemberListQueryDTO" inverseName="members" inverseEntity="ChannelMemberListQueryDTO"/>
        <relationship name="user" optional="YES" maxCount="1" deletionRule="Nullify" destinationEntity="UserDTO" inverseName="members" inverseEntity="UserDTO"/>
        <fetchIndex name="id">
            <fetchIndexElement property="id" type="Binary" order="ascending"/>
        </fetchIndex>
        <uniquenessConstraints>
            <uniquenessConstraint>
                <constraint value="id"/>
            </uniquenessConstraint>
        </uniquenessConstraints>
    </entity>
    <entity name="MessageDTO" representedClassName="MessageDTO" syncable="YES">
        <attribute name="args" optional="YES" attributeType="String"/>
        <attribute name="cid" optional="YES" attributeType="String"/>
        <attribute name="command" optional="YES" attributeType="String"/>
        <attribute name="createdAt" attributeType="Date" usesScalarValueType="NO"/>
        <attribute name="defaultSortingKey" optional="YES" attributeType="Date" usesScalarValueType="NO"/>
        <attribute name="deletedAt" optional="YES" attributeType="Date" usesScalarValueType="NO"/>
        <attribute name="extraData" optional="YES" attributeType="Binary"/>
        <attribute name="id" attributeType="String"/>
        <attribute name="isDraft" attributeType="Boolean" defaultValueString="NO" usesScalarValueType="YES"/>
        <attribute name="isHardDeleted" attributeType="Boolean" defaultValueString="NO" usesScalarValueType="YES"/>
        <attribute name="isShadowed" attributeType="Boolean" defaultValueString="NO" usesScalarValueType="YES"/>
        <attribute name="isSilent" attributeType="Boolean" usesScalarValueType="YES"/>
        <attribute name="latestReactions" attributeType="Transformable" valueTransformerName="NSSecureUnarchiveFromDataTransformer"/>
        <attribute name="locallyCreatedAt" optional="YES" attributeType="Date" usesScalarValueType="NO"/>
        <attribute name="localMessageStateRaw" optional="YES" attributeType="String"/>
        <attribute name="mentionedUserIds" optional="YES" attributeType="Transformable" valueTransformerName="NSSecureUnarchiveFromDataTransformer"/>
        <attribute name="newestReplyAt" optional="YES" attributeType="Date" usesScalarValueType="NO"/>
        <attribute name="originalLanguage" optional="YES" attributeType="String"/>
        <attribute name="ownReactions" attributeType="Transformable" valueTransformerName="NSSecureUnarchiveFromDataTransformer"/>
        <attribute name="parentMessageId" optional="YES" attributeType="String"/>
        <attribute name="pinExpires" optional="YES" attributeType="Date" usesScalarValueType="NO"/>
        <attribute name="pinned" attributeType="Boolean" defaultValueString="NO" usesScalarValueType="YES"/>
        <attribute name="pinnedAt" optional="YES" attributeType="Date" usesScalarValueType="NO"/>
        <attribute name="quotedMessageId" optional="YES" attributeType="String"/>
        <attribute name="reactionCounts" attributeType="Transformable" valueTransformerName="NSSecureUnarchiveFromData"/>
        <attribute name="reactionScores" attributeType="Transformable" valueTransformerName="NSSecureUnarchiveFromData"/>
        <attribute name="replyCount" attributeType="Integer 32" defaultValueString="0" usesScalarValueType="YES"/>
        <attribute name="restrictedVisibility" optional="YES" attributeType="Transformable" valueTransformerName="NSSecureUnarchiveFromDataTransformer"/>
        <attribute name="showInsideThread" attributeType="Boolean" defaultValueString="NO" usesScalarValueType="YES"/>
        <attribute name="showReplyInChannel" attributeType="Boolean" usesScalarValueType="YES"/>
        <attribute name="skipEnrichUrl" attributeType="Boolean" defaultValueString="NO" usesScalarValueType="YES"/>
        <attribute name="skipPush" attributeType="Boolean" defaultValueString="NO" usesScalarValueType="YES"/>
        <attribute name="text" attributeType="String"/>
        <attribute name="textUpdatedAt" optional="YES" attributeType="Date" usesScalarValueType="NO"/>
        <attribute name="translations" optional="YES" attributeType="Transformable" valueTransformerName="NSSecureUnarchiveFromDataTransformer"/>
        <attribute name="type" attributeType="String"/>
        <attribute name="updatedAt" attributeType="Date" usesScalarValueType="NO"/>
        <relationship name="attachments" optional="YES" toMany="YES" deletionRule="Cascade" destinationEntity="AttachmentDTO" inverseName="message" inverseEntity="AttachmentDTO"/>
        <relationship name="channel" optional="YES" maxCount="1" deletionRule="Nullify" destinationEntity="ChannelDTO" inverseName="messages" inverseEntity="ChannelDTO"/>
        <relationship name="childOfThread" optional="YES" maxCount="1" deletionRule="Nullify" destinationEntity="ThreadDTO" inverseName="latestReplies" inverseEntity="ThreadDTO"/>
        <relationship name="draftOfChannel" optional="YES" maxCount="1" deletionRule="Nullify" destinationEntity="ChannelDTO" inverseName="draftMessage" inverseEntity="ChannelDTO"/>
        <relationship name="draftOfThread" optional="YES" maxCount="1" deletionRule="Nullify" destinationEntity="MessageDTO" inverseName="draftReply" inverseEntity="MessageDTO"/>
        <relationship name="draftReply" optional="YES" maxCount="1" deletionRule="Nullify" destinationEntity="MessageDTO" inverseName="draftOfThread" inverseEntity="MessageDTO"/>
        <relationship name="flaggedBy" optional="YES" maxCount="1" deletionRule="Nullify" destinationEntity="CurrentUserDTO" inverseName="flaggedMessages" inverseEntity="CurrentUserDTO"/>
        <relationship name="mentionedUsers" optional="YES" toMany="YES" deletionRule="Nullify" destinationEntity="UserDTO" inverseName="mentionedMessages" inverseEntity="UserDTO"/>
        <relationship name="moderationDetails" optional="YES" maxCount="1" deletionRule="Nullify" destinationEntity="MessageModerationDetailsDTO" inverseName="message" inverseEntity="MessageModerationDetailsDTO"/>
        <relationship name="parentMessage" optional="YES" maxCount="1" deletionRule="Nullify" destinationEntity="MessageDTO" inverseName="replies" inverseEntity="MessageDTO"/>
        <relationship name="parentOfThread" optional="YES" maxCount="1" deletionRule="Nullify" destinationEntity="ThreadDTO" inverseName="parentMessage" inverseEntity="ThreadDTO"/>
        <relationship name="pinnedBy" optional="YES" maxCount="1" deletionRule="Nullify" destinationEntity="UserDTO" inverseName="pinnedMessages" inverseEntity="UserDTO"/>
        <relationship name="pinnedChannel" optional="YES" maxCount="1" deletionRule="Nullify" destinationEntity="ChannelDTO" inverseName="pinnedMessages" inverseEntity="ChannelDTO"/>
        <relationship name="poll" optional="YES" maxCount="1" deletionRule="Nullify" destinationEntity="PollDTO" inverseName="message" inverseEntity="PollDTO"/>
        <relationship name="previewOfChannel" optional="YES" maxCount="1" deletionRule="Nullify" destinationEntity="ChannelDTO" inverseName="previewMessage" inverseEntity="ChannelDTO"/>
        <relationship name="quotedBy" optional="YES" toMany="YES" deletionRule="Nullify" destinationEntity="MessageDTO" inverseName="quotedMessage" inverseEntity="MessageDTO"/>
        <relationship name="quotedMessage" optional="YES" maxCount="1" deletionRule="Nullify" destinationEntity="MessageDTO" inverseName="quotedBy" inverseEntity="MessageDTO"/>
        <relationship name="reactionGroups" optional="YES" toMany="YES" deletionRule="Nullify" destinationEntity="MessageReactionGroupDTO" inverseName="message" inverseEntity="MessageReactionGroupDTO"/>
        <relationship name="reactions" optional="YES" toMany="YES" deletionRule="Nullify" destinationEntity="MessageReactionDTO" inverseName="message" inverseEntity="MessageReactionDTO"/>
        <relationship name="reads" optional="YES" toMany="YES" deletionRule="Nullify" destinationEntity="ChannelReadDTO" inverseName="readMessagesFromCurrentUser" inverseEntity="ChannelReadDTO"/>
        <relationship name="replies" optional="YES" toMany="YES" deletionRule="Nullify" destinationEntity="MessageDTO" inverseName="parentMessage" inverseEntity="MessageDTO"/>
        <relationship name="searches" optional="YES" toMany="YES" deletionRule="Nullify" destinationEntity="MessageSearchQueryDTO" inverseName="messages" inverseEntity="MessageSearchQueryDTO"/>
        <relationship name="threadParticipants" optional="YES" toMany="YES" deletionRule="Nullify" ordered="YES" destinationEntity="UserDTO" inverseName="participatedThreads" inverseEntity="UserDTO"/>
        <relationship name="user" optional="YES" maxCount="1" deletionRule="Nullify" destinationEntity="UserDTO" inverseName="messages" inverseEntity="UserDTO"/>
        <fetchIndex name="id">
            <fetchIndexElement property="id" type="Binary" order="ascending"/>
        </fetchIndex>
        <fetchIndex name="defaultSortingAt">
            <fetchIndexElement property="defaultSortingKey" type="Binary" order="ascending"/>
        </fetchIndex>
        <uniquenessConstraints>
            <uniquenessConstraint>
                <constraint value="id"/>
            </uniquenessConstraint>
        </uniquenessConstraints>
    </entity>
    <entity name="MessageModerationDetailsDTO" representedClassName="MessageModerationDetailsDTO" syncable="YES">
        <attribute name="action" attributeType="String" defaultValueString=""/>
        <attribute name="blocklistMatched" optional="YES" attributeType="String" valueTransformerName="NSSecureUnarchiveFromDataTransformer"/>
        <attribute name="imageHarms" optional="YES" attributeType="Transformable" valueTransformerName="NSSecureUnarchiveFromDataTransformer"/>
        <attribute name="originalText" attributeType="String" defaultValueString=""/>
        <attribute name="platformCircumvented" optional="YES" attributeType="Boolean" defaultValueString="NO" usesScalarValueType="YES"/>
        <attribute name="semanticFilterMatched" optional="YES" attributeType="String" valueTransformerName="NSSecureUnarchiveFromDataTransformer"/>
        <attribute name="textHarms" optional="YES" attributeType="Transformable" valueTransformerName="NSSecureUnarchiveFromDataTransformer"/>
        <relationship name="message" optional="YES" maxCount="1" deletionRule="Nullify" destinationEntity="MessageDTO" inverseName="moderationDetails" inverseEntity="MessageDTO"/>
    </entity>
    <entity name="MessageReactionDTO" representedClassName="MessageReactionDTO" syncable="YES">
        <attribute name="createdAt" optional="YES" attributeType="Date" usesScalarValueType="NO"/>
        <attribute name="extraData" optional="YES" attributeType="Binary"/>
        <attribute name="id" attributeType="String"/>
        <attribute name="localStateRaw" attributeType="String" defaultValueString=""/>
        <attribute name="score" attributeType="Integer 64" defaultValueString="1" usesScalarValueType="YES"/>
        <attribute name="type" attributeType="String"/>
        <attribute name="updatedAt" optional="YES" attributeType="Date" usesScalarValueType="NO"/>
        <attribute name="version" optional="YES" attributeType="String"/>
        <relationship name="message" optional="YES" maxCount="1" deletionRule="Nullify" destinationEntity="MessageDTO" inverseName="reactions" inverseEntity="MessageDTO"/>
        <relationship name="queries" optional="YES" toMany="YES" deletionRule="Nullify" destinationEntity="ReactionListQueryDTO" inverseName="reactions" inverseEntity="ReactionListQueryDTO"/>
        <relationship name="user" optional="YES" maxCount="1" deletionRule="Nullify" destinationEntity="UserDTO" inverseName="reactions" inverseEntity="UserDTO"/>
        <fetchIndex name="id">
            <fetchIndexElement property="id" type="Binary" order="ascending"/>
        </fetchIndex>
        <uniquenessConstraints>
            <uniquenessConstraint>
                <constraint value="id"/>
            </uniquenessConstraint>
        </uniquenessConstraints>
    </entity>
    <entity name="MessageReactionGroupDTO" representedClassName="MessageReactionGroupDTO" syncable="YES">
        <attribute name="count" attributeType="Integer 64" defaultValueString="0" usesScalarValueType="YES"/>
        <attribute name="firstReactionAt" optional="YES" attributeType="Date" usesScalarValueType="NO"/>
        <attribute name="lastReactionAt" optional="YES" attributeType="Date" usesScalarValueType="NO"/>
        <attribute name="sumScores" attributeType="Integer 64" defaultValueString="0" usesScalarValueType="YES"/>
        <attribute name="type" attributeType="String"/>
        <relationship name="message" optional="YES" maxCount="1" deletionRule="Nullify" destinationEntity="MessageDTO" inverseName="reactionGroups" inverseEntity="MessageDTO"/>
        <fetchIndex name="type">
            <fetchIndexElement property="type" type="Binary" order="ascending"/>
        </fetchIndex>
    </entity>
    <entity name="MessageSearchQueryDTO" representedClassName="MessageSearchQueryDTO" syncable="YES">
        <attribute name="filterHash" optional="YES" attributeType="String"/>
        <relationship name="messages" optional="YES" toMany="YES" deletionRule="Nullify" destinationEntity="MessageDTO" inverseName="searches" inverseEntity="MessageDTO"/>
        <fetchIndex name="filterHash">
            <fetchIndexElement property="filterHash" type="Binary" order="ascending"/>
        </fetchIndex>
        <uniquenessConstraints>
            <uniquenessConstraint>
                <constraint value="filterHash"/>
            </uniquenessConstraint>
        </uniquenessConstraints>
    </entity>
    <entity name="PollDTO" representedClassName="PollDTO" syncable="YES">
        <attribute name="allowAnswers" attributeType="Boolean" usesScalarValueType="YES"/>
        <attribute name="allowUserSuggestedOptions" attributeType="Boolean" usesScalarValueType="YES"/>
        <attribute name="answersCount" attributeType="Integer 64" defaultValueString="0" usesScalarValueType="YES"/>
        <attribute name="createdAt" attributeType="Date" usesScalarValueType="NO"/>
        <attribute name="custom" optional="YES" attributeType="Binary"/>
        <attribute name="enforceUniqueVote" attributeType="Boolean" defaultValueString="NO" usesScalarValueType="YES"/>
        <attribute name="id" attributeType="String"/>
        <attribute name="isClosed" attributeType="Boolean" defaultValueString="NO" usesScalarValueType="YES"/>
        <attribute name="maxVotesAllowed" optional="YES" attributeType="Integer 64" usesScalarValueType="YES"/>
        <attribute name="name" attributeType="String"/>
        <attribute name="pollDescription" optional="YES" attributeType="String"/>
        <attribute name="updatedAt" optional="YES" attributeType="Date" usesScalarValueType="NO"/>
        <attribute name="voteCount" optional="YES" attributeType="Integer 64" defaultValueString="0" usesScalarValueType="YES"/>
        <attribute name="voteCountsByOption" optional="YES" attributeType="Transformable" valueTransformerName="NSSecureUnarchiveFromData"/>
        <attribute name="votingVisibility" optional="YES" attributeType="String"/>
        <relationship name="createdBy" optional="YES" maxCount="1" deletionRule="Nullify" destinationEntity="UserDTO" inverseName="pollCreatedBy" inverseEntity="UserDTO"/>
        <relationship name="latestVotes" optional="YES" toMany="YES" deletionRule="Nullify" destinationEntity="PollVoteDTO" inverseName="poll" inverseEntity="PollVoteDTO"/>
        <relationship name="latestVotesByOption" optional="YES" toMany="YES" deletionRule="Nullify" destinationEntity="PollOptionDTO" inverseName="pollLatestVotes" inverseEntity="PollOptionDTO"/>
        <relationship name="message" optional="YES" maxCount="1" deletionRule="Nullify" destinationEntity="MessageDTO" inverseName="poll" inverseEntity="MessageDTO"/>
        <relationship name="options" optional="YES" toMany="YES" deletionRule="Nullify" ordered="YES" destinationEntity="PollOptionDTO" inverseName="poll" inverseEntity="PollOptionDTO"/>
        <uniquenessConstraints>
            <uniquenessConstraint>
                <constraint value="id"/>
            </uniquenessConstraint>
        </uniquenessConstraints>
    </entity>
    <entity name="PollOptionDTO" representedClassName="PollOptionDTO" syncable="YES">
        <attribute name="custom" optional="YES" attributeType="Binary"/>
        <attribute name="id" attributeType="String"/>
        <attribute name="text" attributeType="String"/>
        <relationship name="latestVotes" optional="YES" toMany="YES" deletionRule="Nullify" destinationEntity="PollVoteDTO" inverseName="option" inverseEntity="PollVoteDTO"/>
        <relationship name="poll" optional="YES" maxCount="1" deletionRule="Nullify" destinationEntity="PollDTO" inverseName="options" inverseEntity="PollDTO"/>
        <relationship name="pollLatestVotes" optional="YES" maxCount="1" deletionRule="Nullify" destinationEntity="PollDTO" inverseName="latestVotesByOption" inverseEntity="PollDTO"/>
        <uniquenessConstraints>
            <uniquenessConstraint>
                <constraint value="id"/>
            </uniquenessConstraint>
        </uniquenessConstraints>
    </entity>
    <entity name="PollVoteDTO" representedClassName="PollVoteDTO" syncable="YES">
        <attribute name="answerText" optional="YES" attributeType="String"/>
        <attribute name="createdAt" attributeType="Date" usesScalarValueType="NO"/>
        <attribute name="id" attributeType="String"/>
        <attribute name="isAnswer" attributeType="Boolean" usesScalarValueType="YES"/>
        <attribute name="optionId" optional="YES" attributeType="String"/>
        <attribute name="pollId" attributeType="String"/>
        <attribute name="updatedAt" attributeType="Date" usesScalarValueType="NO"/>
        <relationship name="option" optional="YES" maxCount="1" deletionRule="Nullify" destinationEntity="PollOptionDTO" inverseName="latestVotes" inverseEntity="PollOptionDTO"/>
        <relationship name="poll" optional="YES" maxCount="1" deletionRule="Nullify" destinationEntity="PollDTO" inverseName="latestVotes" inverseEntity="PollDTO"/>
        <relationship name="queries" optional="YES" toMany="YES" deletionRule="Nullify" destinationEntity="PollVoteListQueryDTO" inverseName="votes" inverseEntity="PollVoteListQueryDTO"/>
        <relationship name="user" optional="YES" maxCount="1" deletionRule="Nullify" destinationEntity="UserDTO" inverseName="votes" inverseEntity="UserDTO"/>
        <uniquenessConstraints>
            <uniquenessConstraint>
                <constraint value="id"/>
            </uniquenessConstraint>
        </uniquenessConstraints>
    </entity>
    <entity name="PollVoteListQueryDTO" representedClassName="PollVoteListQueryDTO" syncable="YES">
        <attribute name="filterHash" optional="YES" attributeType="String"/>
        <attribute name="filterJSONData" optional="YES" attributeType="Binary"/>
        <relationship name="votes" optional="YES" toMany="YES" deletionRule="Nullify" destinationEntity="PollVoteDTO" inverseName="queries" inverseEntity="PollVoteDTO"/>
        <uniquenessConstraints>
            <uniquenessConstraint>
                <constraint value="filterHash"/>
            </uniquenessConstraint>
        </uniquenessConstraints>
    </entity>
    <entity name="QueuedRequestDTO" representedClassName="QueuedRequestDTO" syncable="YES">
        <attribute name="date" attributeType="Date" usesScalarValueType="NO"/>
        <attribute name="endpoint" attributeType="Binary"/>
        <attribute name="id" attributeType="String"/>
        <fetchIndex name="date">
            <fetchIndexElement property="date" type="Binary" order="ascending"/>
        </fetchIndex>
        <fetchIndex name="id">
            <fetchIndexElement property="id" type="Binary" order="ascending"/>
        </fetchIndex>
    </entity>
    <entity name="ReactionListQueryDTO" representedClassName="ReactionListQueryDTO" syncable="YES">
        <attribute name="filterHash" optional="YES" attributeType="String"/>
        <attribute name="filterJSONData" optional="YES" attributeType="Binary"/>
        <relationship name="reactions" optional="YES" toMany="YES" deletionRule="Nullify" destinationEntity="MessageReactionDTO" inverseName="queries" inverseEntity="MessageReactionDTO"/>
        <fetchIndex name="filterHash">
            <fetchIndexElement property="filterHash" type="Binary" order="ascending"/>
        </fetchIndex>
        <uniquenessConstraints>
            <uniquenessConstraint>
                <constraint value="filterHash"/>
            </uniquenessConstraint>
        </uniquenessConstraints>
    </entity>
    <entity name="ThreadDTO" representedClassName="ThreadDTO" syncable="YES">
        <attribute name="createdAt" optional="YES" attributeType="Date" usesScalarValueType="NO"/>
        <attribute name="currentUserUnreadCount" optional="YES" attributeType="Integer 64" defaultValueString="0" usesScalarValueType="YES"/>
        <attribute name="extraData" optional="YES" attributeType="Binary"/>
        <attribute name="lastMessageAt" optional="YES" attributeType="Date" usesScalarValueType="NO"/>
        <attribute name="parentMessageId" optional="YES" attributeType="String"/>
        <attribute name="participantCount" attributeType="Integer 64" defaultValueString="0" usesScalarValueType="YES"/>
        <attribute name="replyCount" attributeType="Integer 64" defaultValueString="0" usesScalarValueType="YES"/>
        <attribute name="title" optional="YES" attributeType="String"/>
        <attribute name="updatedAt" optional="YES" attributeType="Date" usesScalarValueType="NO"/>
        <relationship name="channel" optional="YES" maxCount="1" deletionRule="Nullify" destinationEntity="ChannelDTO" inverseName="threads" inverseEntity="ChannelDTO"/>
        <relationship name="createdBy" optional="YES" maxCount="1" deletionRule="Nullify" destinationEntity="UserDTO" inverseName="createdThreads" inverseEntity="UserDTO"/>
        <relationship name="latestReplies" optional="YES" toMany="YES" deletionRule="Nullify" destinationEntity="MessageDTO" inverseName="childOfThread" inverseEntity="MessageDTO"/>
        <relationship name="parentMessage" optional="YES" maxCount="1" deletionRule="Nullify" destinationEntity="MessageDTO" inverseName="parentOfThread" inverseEntity="MessageDTO"/>
        <relationship name="read" optional="YES" toMany="YES" deletionRule="Nullify" destinationEntity="ThreadReadDTO" inverseName="thread" inverseEntity="ThreadReadDTO"/>
        <relationship name="threadParticipants" optional="YES" toMany="YES" deletionRule="Nullify" destinationEntity="ThreadParticipantDTO" inverseName="thread" inverseEntity="ThreadParticipantDTO"/>
        <fetchIndex name="parentMessageId">
            <fetchIndexElement property="parentMessageId" type="Binary" order="ascending"/>
        </fetchIndex>
        <uniquenessConstraints>
            <uniquenessConstraint>
                <constraint value="parentMessageId"/>
            </uniquenessConstraint>
        </uniquenessConstraints>
    </entity>
    <entity name="ThreadParticipantDTO" representedClassName="ThreadParticipantDTO" syncable="YES">
        <attribute name="createdAt" optional="YES" attributeType="Date" usesScalarValueType="NO"/>
        <attribute name="lastReadAt" optional="YES" attributeType="Date" usesScalarValueType="NO"/>
        <attribute name="threadId" optional="YES" attributeType="String"/>
        <relationship name="thread" optional="YES" maxCount="1" deletionRule="Nullify" destinationEntity="ThreadDTO" inverseName="threadParticipants" inverseEntity="ThreadDTO"/>
        <relationship name="user" optional="YES" maxCount="1" deletionRule="Nullify" destinationEntity="UserDTO" inverseName="threads" inverseEntity="UserDTO"/>
    </entity>
    <entity name="ThreadReadDTO" representedClassName="ThreadReadDTO" syncable="YES">
        <attribute name="lastReadAt" optional="YES" attributeType="Date" usesScalarValueType="NO"/>
        <attribute name="unreadMessagesCount" optional="YES" attributeType="Integer 64" defaultValueString="0" usesScalarValueType="YES"/>
        <relationship name="thread" optional="YES" maxCount="1" deletionRule="Nullify" destinationEntity="ThreadDTO" inverseName="read" inverseEntity="ThreadDTO"/>
        <relationship name="user" optional="YES" maxCount="1" deletionRule="Nullify" destinationEntity="UserDTO" inverseName="threadReads" inverseEntity="UserDTO"/>
    </entity>
    <entity name="UserDTO" representedClassName="UserDTO" syncable="YES">
        <attribute name="extraData" attributeType="Binary"/>
        <attribute name="id" attributeType="String"/>
        <attribute name="imageURL" optional="YES" attributeType="URI"/>
        <attribute name="isBanned" attributeType="Boolean" defaultValueString="NO" usesScalarValueType="YES"/>
        <attribute name="isOnline" attributeType="Boolean" usesScalarValueType="YES"/>
        <attribute name="language" optional="YES" attributeType="String"/>
        <attribute name="lastActivityAt" optional="YES" attributeType="Date" usesScalarValueType="NO"/>
        <attribute name="name" optional="YES" attributeType="String"/>
        <attribute name="teams" attributeType="Transformable" valueTransformerName="NSSecureUnarchiveFromDataTransformer"/>
        <attribute name="teamsRole" optional="YES" attributeType="Transformable" valueTransformerName="NSSecureUnarchiveFromDataTransformer"/>
        <attribute name="userCreatedAt" attributeType="Date" usesScalarValueType="NO"/>
        <attribute name="userDeactivatedAt" optional="YES" attributeType="Date" usesScalarValueType="NO"/>
        <attribute name="userRoleRaw" attributeType="String"/>
        <attribute name="userUpdatedAt" attributeType="Date" usesScalarValueType="NO"/>
        <relationship name="channelReads" optional="YES" toMany="YES" deletionRule="Nullify" destinationEntity="ChannelReadDTO" inverseName="user" inverseEntity="ChannelReadDTO"/>
        <relationship name="createdChannels" optional="YES" toMany="YES" deletionRule="Nullify" destinationEntity="ChannelDTO" inverseName="createdBy" inverseEntity="ChannelDTO"/>
        <relationship name="createdThreads" optional="YES" toMany="YES" deletionRule="Nullify" destinationEntity="ThreadDTO" inverseName="createdBy" inverseEntity="ThreadDTO"/>
        <relationship name="currentUser" optional="YES" maxCount="1" deletionRule="Nullify" destinationEntity="CurrentUserDTO" inverseName="user" inverseEntity="CurrentUserDTO"/>
        <relationship name="flaggedBy" optional="YES" maxCount="1" deletionRule="Nullify" destinationEntity="CurrentUserDTO" inverseName="flaggedUsers" inverseEntity="CurrentUserDTO"/>
        <relationship name="members" optional="YES" toMany="YES" deletionRule="Nullify" destinationEntity="MemberDTO" inverseName="user" inverseEntity="MemberDTO"/>
        <relationship name="mentionedMessages" optional="YES" toMany="YES" deletionRule="Nullify" destinationEntity="MessageDTO" inverseName="mentionedUsers" inverseEntity="MessageDTO"/>
        <relationship name="messages" optional="YES" toMany="YES" deletionRule="Nullify" destinationEntity="MessageDTO" inverseName="user" inverseEntity="MessageDTO"/>
        <relationship name="mutedBy" optional="YES" toMany="YES" deletionRule="Nullify" destinationEntity="CurrentUserDTO" inverseName="mutedUsers" inverseEntity="CurrentUserDTO"/>
        <relationship name="participatedThreads" optional="YES" toMany="YES" deletionRule="Nullify" destinationEntity="MessageDTO" inverseName="threadParticipants" inverseEntity="MessageDTO"/>
        <relationship name="pinnedMessages" optional="YES" toMany="YES" deletionRule="Nullify" destinationEntity="MessageDTO" inverseName="pinnedBy" inverseEntity="MessageDTO"/>
        <relationship name="pollCreatedBy" optional="YES" toMany="YES" deletionRule="Nullify" destinationEntity="PollDTO" inverseName="createdBy" inverseEntity="PollDTO"/>
        <relationship name="queries" optional="YES" toMany="YES" deletionRule="Nullify" destinationEntity="UserListQueryDTO" inverseName="users" inverseEntity="UserListQueryDTO"/>
        <relationship name="reactions" optional="YES" toMany="YES" deletionRule="Nullify" destinationEntity="MessageReactionDTO" inverseName="user" inverseEntity="MessageReactionDTO"/>
        <relationship name="threadReads" optional="YES" toMany="YES" deletionRule="Nullify" destinationEntity="ThreadReadDTO" inverseName="user" inverseEntity="ThreadReadDTO"/>
        <relationship name="threads" optional="YES" toMany="YES" deletionRule="Nullify" destinationEntity="ThreadParticipantDTO" inverseName="user" inverseEntity="ThreadParticipantDTO"/>
        <relationship name="typingIn" optional="YES" maxCount="1" deletionRule="Nullify" destinationEntity="ChannelDTO" inverseName="currentlyTypingUsers" inverseEntity="ChannelDTO"/>
        <relationship name="votes" optional="YES" toMany="YES" deletionRule="Nullify" destinationEntity="PollVoteDTO" inverseName="user" inverseEntity="PollVoteDTO"/>
        <relationship name="watchedChannels" optional="YES" toMany="YES" deletionRule="Nullify" destinationEntity="ChannelDTO" inverseName="watchers" inverseEntity="ChannelDTO"/>
        <fetchIndex name="id">
            <fetchIndexElement property="id" type="Binary" order="ascending"/>
        </fetchIndex>
        <uniquenessConstraints>
            <uniquenessConstraint>
                <constraint value="id"/>
            </uniquenessConstraint>
        </uniquenessConstraints>
    </entity>
    <entity name="UserListQueryDTO" representedClassName="UserListQueryDTO" syncable="YES">
        <attribute name="filterHash" attributeType="String"/>
        <attribute name="filterJSONData" attributeType="Binary"/>
        <attribute name="shouldBeUpdatedInBackground" attributeType="Boolean" defaultValueString="YES" usesScalarValueType="YES"/>
        <relationship name="users" optional="YES" toMany="YES" deletionRule="Nullify" destinationEntity="UserDTO" inverseName="queries" inverseEntity="UserDTO"/>
        <fetchIndex name="filterHash">
            <fetchIndexElement property="filterHash" type="Binary" order="ascending"/>
        </fetchIndex>
        <uniquenessConstraints>
            <uniquenessConstraint>
                <constraint value="filterHash"/>
            </uniquenessConstraint>
        </uniquenessConstraints>
    </entity>
</model>