public override CalendarItemBase PreProcess(bool createNewItem, bool processExternal, int defaultReminderMinutes)
        {
            this.CheckDisposed("PreProcess");
            base.LocationIdentifierHelperInstance.SetLocationIdentifier(44661U, LastChangeAction.PreProcessMeetingMessage);
            bool             canUpdatePrincipalCalendar = true;
            CalendarItemBase calendarItemBase           = null;
            bool             flag = false;

            if (base.GetValueOrDefault <MeetingMessageType>(InternalSchema.MeetingRequestType) == MeetingMessageType.Outdated)
            {
                return(null);
            }
            try
            {
                calendarItemBase = this.GetCorrelatedItem();
                if (base.IsOutOfDate(calendarItemBase))
                {
                    base.MarkAsOutOfDate();
                    base.LocationIdentifierHelperInstance.SetLocationIdentifier(59381U, LastChangeAction.MeetingMessageOutdated);
                    return(null);
                }
                if (base.SkipMessage(processExternal, calendarItemBase))
                {
                    ExTraceGlobals.MeetingMessageTracer.Information <GlobalObjectId, bool, bool>((long)this.GetHashCode(), "Storage.MeetingMessage.PreProcess: GOID={0}. Skipping meeting message processing. (ProcessExternal: {1}; IsRepairUpdateMessage: {2})", this.GlobalObjectId, processExternal, base.IsRepairUpdateMessage);
                    return(null);
                }
                CalendarProcessingSteps valueOrDefault = base.GetValueOrDefault <CalendarProcessingSteps>(InternalSchema.CalendarProcessingSteps);
                bool flag2 = (valueOrDefault & CalendarProcessingSteps.CreatedOnPrincipal) == CalendarProcessingSteps.CreatedOnPrincipal;
                bool flag3 = (valueOrDefault & CalendarProcessingSteps.UpdatedCalItem) == CalendarProcessingSteps.UpdatedCalItem;
                flag = (flag2 || flag3);
                if (flag)
                {
                    ExTraceGlobals.MeetingMessageTracer.Information <GlobalObjectId>((long)this.GetHashCode(), "Storage.MeetingMessage.PreProcess: GOID={0}. Skipping meeting message processing because it was already created.", this.GlobalObjectId);
                }
                else if (createNewItem || calendarItemBase != null)
                {
                    MeetingRequest meetingRequest = this as MeetingRequest;
                    if (meetingRequest != null)
                    {
                        flag = meetingRequest.TryUpdateCalendarItem(ref calendarItemBase, defaultReminderMinutes, canUpdatePrincipalCalendar);
                    }
                    else
                    {
                        MeetingCancellation meetingCancellation = this as MeetingCancellation;
                        if (meetingCancellation != null)
                        {
                            flag = meetingCancellation.TryUpdateCalendarItem(ref calendarItemBase, canUpdatePrincipalCalendar);
                        }
                    }
                }
                else
                {
                    ExTraceGlobals.MeetingMessageTracer.Information <GlobalObjectId>((long)this.GetHashCode(), "Storage.MeetingMessage.PreProcess: GOID={0}. Skipping new meeting request.", this.GlobalObjectId);
                }
            }
            finally
            {
                if (!flag && calendarItemBase != null)
                {
                    ExTraceGlobals.MeetingMessageTracer.Information <GlobalObjectId>((long)this.GetHashCode(), "Storage.MeetingMessage.PreProcess: GOID={0}. Disposing calendar item; preconditions failed.", this.GlobalObjectId);
                    calendarItemBase.Dispose();
                    calendarItemBase = null;
                }
            }
            return(calendarItemBase);
        }