/// <summary>
        /// Compares two authorize remote reservation start requests for equality.
        /// </summary>
        /// <param name="AuthorizeRemoteReservationStartRequest">An authorize remote reservation start request to compare with.</param>
        /// <returns>True if both match; False otherwise.</returns>
        public override Boolean Equals(AuthorizeRemoteReservationStartRequest AuthorizeRemoteReservationStartRequest)
        {
            if (AuthorizeRemoteReservationStartRequest is null)
            {
                return(false);
            }

            return(ProviderId.Equals(AuthorizeRemoteReservationStartRequest.ProviderId) &&
                   EVSEId.Equals(AuthorizeRemoteReservationStartRequest.EVSEId) &&
                   Identification.Equals(AuthorizeRemoteReservationStartRequest.Identification) &&

                   ((!SessionId.HasValue && !AuthorizeRemoteReservationStartRequest.SessionId.HasValue) ||
                    (SessionId.HasValue && AuthorizeRemoteReservationStartRequest.SessionId.HasValue && SessionId.Value.Equals(AuthorizeRemoteReservationStartRequest.SessionId.Value))) &&

                   ((!CPOPartnerSessionId.HasValue && !AuthorizeRemoteReservationStartRequest.CPOPartnerSessionId.HasValue) ||
                    (CPOPartnerSessionId.HasValue && AuthorizeRemoteReservationStartRequest.CPOPartnerSessionId.HasValue && CPOPartnerSessionId.Value.Equals(AuthorizeRemoteReservationStartRequest.CPOPartnerSessionId.Value))) &&

                   ((!EMPPartnerSessionId.HasValue && !AuthorizeRemoteReservationStartRequest.EMPPartnerSessionId.HasValue) ||
                    (EMPPartnerSessionId.HasValue && AuthorizeRemoteReservationStartRequest.EMPPartnerSessionId.HasValue && EMPPartnerSessionId.Value.Equals(AuthorizeRemoteReservationStartRequest.EMPPartnerSessionId.Value))) &&

                   ((!PartnerProductId.HasValue && !AuthorizeRemoteReservationStartRequest.PartnerProductId.HasValue) ||
                    (PartnerProductId.HasValue && AuthorizeRemoteReservationStartRequest.PartnerProductId.HasValue && PartnerProductId.Value.Equals(AuthorizeRemoteReservationStartRequest.PartnerProductId.Value))) &&

                   ((!Duration.HasValue && !AuthorizeRemoteReservationStartRequest.Duration.HasValue) ||
                    (Duration.HasValue && AuthorizeRemoteReservationStartRequest.Duration.HasValue && Duration.Value.Equals(AuthorizeRemoteReservationStartRequest.Duration.Value))));
        }
        /// <summary>
        /// Compares two authorize start requests for equality.
        /// </summary>
        /// <param name="AuthorizeStart">An authorize start request to compare with.</param>
        /// <returns>True if both match; False otherwise.</returns>
        public override Boolean Equals(AuthorizeStartRequest AuthorizeStart)
        {
            if (AuthorizeStart is null)
            {
                return(false);
            }

            return(OperatorId.Equals(AuthorizeStart.OperatorId) &&
                   Identification.Equals(AuthorizeStart.Identification) &&

                   ((!EVSEId.HasValue && !AuthorizeStart.EVSEId.HasValue) ||
                    (EVSEId.HasValue && AuthorizeStart.EVSEId.HasValue && EVSEId.Value.Equals(AuthorizeStart.EVSEId.Value))) &&

                   ((!PartnerProductId.HasValue && !AuthorizeStart.PartnerProductId.HasValue) ||
                    (PartnerProductId.HasValue && AuthorizeStart.PartnerProductId.HasValue && PartnerProductId.Value.Equals(AuthorizeStart.PartnerProductId.Value))) &&

                   ((!SessionId.HasValue && !AuthorizeStart.SessionId.HasValue) ||
                    (SessionId.HasValue && AuthorizeStart.SessionId.HasValue && SessionId.Value.Equals(AuthorizeStart.SessionId.Value))) &&

                   ((!CPOPartnerSessionId.HasValue && !AuthorizeStart.CPOPartnerSessionId.HasValue) ||
                    (CPOPartnerSessionId.HasValue && AuthorizeStart.CPOPartnerSessionId.HasValue && CPOPartnerSessionId.Value.Equals(AuthorizeStart.CPOPartnerSessionId.Value))) &&

                   ((!EMPPartnerSessionId.HasValue && !AuthorizeStart.EMPPartnerSessionId.HasValue) ||
                    (EMPPartnerSessionId.HasValue && AuthorizeStart.EMPPartnerSessionId.HasValue && EMPPartnerSessionId.Value.Equals(AuthorizeStart.EMPPartnerSessionId.Value))));
        }
        /// <summary>
        /// Compares two authorize stop requests for equality.
        /// </summary>
        /// <param name="AuthorizeStop">An authorize stop request to compare with.</param>
        /// <returns>True if both match; False otherwise.</returns>
        public override Boolean Equals(AuthorizeStopRequest AuthorizeStop)
        {
            if (AuthorizeStop is null)
            {
                return(false);
            }

            return(OperatorId.Equals(AuthorizeStop.OperatorId) &&
                   SessionId.Equals(AuthorizeStop.SessionId) &&
                   Identification.Equals(AuthorizeStop.Identification) &&

                   ((!EVSEId.HasValue && !AuthorizeStop.EVSEId.HasValue) ||
                    (EVSEId.HasValue && AuthorizeStop.EVSEId.HasValue && EVSEId.Value.Equals(AuthorizeStop.EVSEId.Value))) &&

                   ((!CPOPartnerSessionId.HasValue && !AuthorizeStop.CPOPartnerSessionId.HasValue) ||
                    (CPOPartnerSessionId.HasValue && AuthorizeStop.CPOPartnerSessionId.HasValue && CPOPartnerSessionId.Value.Equals(AuthorizeStop.CPOPartnerSessionId.Value))) &&

                   ((!EMPPartnerSessionId.HasValue && !AuthorizeStop.EMPPartnerSessionId.HasValue) ||
                    (EMPPartnerSessionId.HasValue && AuthorizeStop.EMPPartnerSessionId.HasValue && EMPPartnerSessionId.Value.Equals(AuthorizeStop.EMPPartnerSessionId.Value))));
        }