public Result HeardSelfSayResponse(bool saveResultsAsIfRealtime, bool useConversationDataAsIfRealtime, User theFactSpeaker, User toWhom, string message, Result resultOfToWhomSpeakingToFactSpeaker, ThreadControl control)
        {
            if (this.TurnOffSelfListening)
            {
                return(null);
            }
            Result LR = null;

            if (message == null)
            {
                return(null);
            }
            bool lts    = ListeningToSelf;
            bool prochp = ProcessHeardPreds;

            if (!lts && !prochp)
            {
                return(null);
            }
            message = ToHeard(message);
            if (string.IsNullOrEmpty(message))
            {
                return(null);
            }

            Result result = null;
            var    v      = new SplitIntoSentences(null, message);

            bool stopProcessing = false;

            if (control != null)
            {
                control.AbortOrInteruptedRaised += (ctl, ex) => { stopProcessing = true; }
            }
            ;
            var sentences = v.TransformU();

            for (int i = 0; i < sentences.Length; i++)
            {
                Unifiable sentence = sentences[i];
                if (stopProcessing)
                {
                    Unifiable unifiableJoin = Unifiable.Join(" <br> ", sentences, i, sentences.Length - 1);
                    return(AbortedResult(unifiableJoin, result, control));
                }
                result = HeardSomeoneSay1Sentence(saveResultsAsIfRealtime, useConversationDataAsIfRealtime, theFactSpeaker, toWhom, sentence, result, control);
            }
            return(result);
        }