// This file was automatically generated by protocompiler
// DO NOT EDIT!
// Compiled from C2Metric.proto

#import "SECC2MPNetworkEvent.h"
#import <ProtocolBuffer/PBConstants.h>
#import <ProtocolBuffer/PBHashUtil.h>
#import <ProtocolBuffer/PBDataReader.h>

#import "SECC2MPError.h"

#if !__has_feature(objc_arc)
# error This generated file depends on ARC but it is not enabled; turn on ARC, or use 'objc_use_arc' option to generate non-ARC code.
#endif

@implementation SECC2MPNetworkEvent

@synthesize triggers = _triggers;
- (void)setTriggers:(uint64_t)v
{
    _has.triggers = YES;
    _triggers = v;
}
- (void)setHasTriggers:(BOOL)f
{
    _has.triggers = f;
}
- (BOOL)hasTriggers
{
    return _has.triggers;
}
@synthesize reportFrequency = _reportFrequency;
- (void)setReportFrequency:(uint64_t)v
{
    _has.reportFrequency = YES;
    _reportFrequency = v;
}
- (void)setHasReportFrequency:(BOOL)f
{
    _has.reportFrequency = f;
}
- (BOOL)hasReportFrequency
{
    return _has.reportFrequency;
}
@synthesize reportFrequencyBase = _reportFrequencyBase;
- (void)setReportFrequencyBase:(uint64_t)v
{
    _has.reportFrequencyBase = YES;
    _reportFrequencyBase = v;
}
- (void)setHasReportFrequencyBase:(BOOL)f
{
    _has.reportFrequencyBase = f;
}
- (BOOL)hasReportFrequencyBase
{
    return _has.reportFrequencyBase;
}
- (BOOL)hasNetworkTaskDescription
{
    return _networkTaskDescription != nil;
}
@synthesize networkTaskDescription = _networkTaskDescription;
- (BOOL)hasNetworkHostname
{
    return _networkHostname != nil;
}
@synthesize networkHostname = _networkHostname;
- (BOOL)hasNetworkRemoteAddresssAndPort
{
    return _networkRemoteAddresssAndPort != nil;
}
@synthesize networkRemoteAddresssAndPort = _networkRemoteAddresssAndPort;
- (BOOL)hasNetworkConnectionUuid
{
    return _networkConnectionUuid != nil;
}
@synthesize networkConnectionUuid = _networkConnectionUuid;
@synthesize networkConnectionReused = _networkConnectionReused;
- (void)setNetworkConnectionReused:(BOOL)v
{
    _has.networkConnectionReused = YES;
    _networkConnectionReused = v;
}
- (void)setHasNetworkConnectionReused:(BOOL)f
{
    _has.networkConnectionReused = f;
}
- (BOOL)hasNetworkConnectionReused
{
    return _has.networkConnectionReused;
}
- (BOOL)hasNetworkInterfaceIdentifier
{
    return _networkInterfaceIdentifier != nil;
}
@synthesize networkInterfaceIdentifier = _networkInterfaceIdentifier;
- (BOOL)hasNetworkProtocolName
{
    return _networkProtocolName != nil;
}
@synthesize networkProtocolName = _networkProtocolName;
@synthesize networkRequestHeaderSize = _networkRequestHeaderSize;
- (void)setNetworkRequestHeaderSize:(uint32_t)v
{
    _has.networkRequestHeaderSize = YES;
    _networkRequestHeaderSize = v;
}
- (void)setHasNetworkRequestHeaderSize:(BOOL)f
{
    _has.networkRequestHeaderSize = f;
}
- (BOOL)hasNetworkRequestHeaderSize
{
    return _has.networkRequestHeaderSize;
}
@synthesize networkRequestBodyBytesSent = _networkRequestBodyBytesSent;
- (void)setNetworkRequestBodyBytesSent:(uint64_t)v
{
    _has.networkRequestBodyBytesSent = YES;
    _networkRequestBodyBytesSent = v;
}
- (void)setHasNetworkRequestBodyBytesSent:(BOOL)f
{
    _has.networkRequestBodyBytesSent = f;
}
- (BOOL)hasNetworkRequestBodyBytesSent
{
    return _has.networkRequestBodyBytesSent;
}
@synthesize networkResponseHeaderSize = _networkResponseHeaderSize;
- (void)setNetworkResponseHeaderSize:(uint32_t)v
{
    _has.networkResponseHeaderSize = YES;
    _networkResponseHeaderSize = v;
}
- (void)setHasNetworkResponseHeaderSize:(BOOL)f
{
    _has.networkResponseHeaderSize = f;
}
- (BOOL)hasNetworkResponseHeaderSize
{
    return _has.networkResponseHeaderSize;
}
@synthesize networkResponseBodyBytesReceived = _networkResponseBodyBytesReceived;
- (void)setNetworkResponseBodyBytesReceived:(uint64_t)v
{
    _has.networkResponseBodyBytesReceived = YES;
    _networkResponseBodyBytesReceived = v;
}
- (void)setHasNetworkResponseBodyBytesReceived:(BOOL)f
{
    _has.networkResponseBodyBytesReceived = f;
}
- (BOOL)hasNetworkResponseBodyBytesReceived
{
    return _has.networkResponseBodyBytesReceived;
}
@synthesize networkPreviousAttemptCount = _networkPreviousAttemptCount;
- (void)setNetworkPreviousAttemptCount:(uint32_t)v
{
    _has.networkPreviousAttemptCount = YES;
    _networkPreviousAttemptCount = v;
}
- (void)setHasNetworkPreviousAttemptCount:(BOOL)f
{
    _has.networkPreviousAttemptCount = f;
}
- (BOOL)hasNetworkPreviousAttemptCount
{
    return _has.networkPreviousAttemptCount;
}
- (BOOL)hasNetworkFatalError
{
    return _networkFatalError != nil;
}
@synthesize networkFatalError = _networkFatalError;
@synthesize networkStatusCode = _networkStatusCode;
- (void)setNetworkStatusCode:(uint64_t)v
{
    _has.networkStatusCode = YES;
    _networkStatusCode = v;
}
- (void)setHasNetworkStatusCode:(BOOL)f
{
    _has.networkStatusCode = f;
}
- (BOOL)hasNetworkStatusCode
{
    return _has.networkStatusCode;
}
- (BOOL)hasNetworkRequestUri
{
    return _networkRequestUri != nil;
}
@synthesize networkRequestUri = _networkRequestUri;
@synthesize timestampC2Init = _timestampC2Init;
- (void)setTimestampC2Init:(uint64_t)v
{
    _has.timestampC2Init = YES;
    _timestampC2Init = v;
}
- (void)setHasTimestampC2Init:(BOOL)f
{
    _has.timestampC2Init = f;
}
- (BOOL)hasTimestampC2Init
{
    return _has.timestampC2Init;
}
@synthesize timestampC2Start = _timestampC2Start;
- (void)setTimestampC2Start:(uint64_t)v
{
    _has.timestampC2Start = YES;
    _timestampC2Start = v;
}
- (void)setHasTimestampC2Start:(BOOL)f
{
    _has.timestampC2Start = f;
}
- (BOOL)hasTimestampC2Start
{
    return _has.timestampC2Start;
}
@synthesize timestampC2Now = _timestampC2Now;
- (void)setTimestampC2Now:(uint64_t)v
{
    _has.timestampC2Now = YES;
    _timestampC2Now = v;
}
- (void)setHasTimestampC2Now:(BOOL)f
{
    _has.timestampC2Now = f;
}
- (BOOL)hasTimestampC2Now
{
    return _has.timestampC2Now;
}
@synthesize timestampDnsStart = _timestampDnsStart;
- (void)setTimestampDnsStart:(uint64_t)v
{
    _has.timestampDnsStart = YES;
    _timestampDnsStart = v;
}
- (void)setHasTimestampDnsStart:(BOOL)f
{
    _has.timestampDnsStart = f;
}
- (BOOL)hasTimestampDnsStart
{
    return _has.timestampDnsStart;
}
@synthesize timestampDnsEnd = _timestampDnsEnd;
- (void)setTimestampDnsEnd:(uint64_t)v
{
    _has.timestampDnsEnd = YES;
    _timestampDnsEnd = v;
}
- (void)setHasTimestampDnsEnd:(BOOL)f
{
    _has.timestampDnsEnd = f;
}
- (BOOL)hasTimestampDnsEnd
{
    return _has.timestampDnsEnd;
}
@synthesize timestampTcpStart = _timestampTcpStart;
- (void)setTimestampTcpStart:(uint64_t)v
{
    _has.timestampTcpStart = YES;
    _timestampTcpStart = v;
}
- (void)setHasTimestampTcpStart:(BOOL)f
{
    _has.timestampTcpStart = f;
}
- (BOOL)hasTimestampTcpStart
{
    return _has.timestampTcpStart;
}
@synthesize timestampTcpEnd = _timestampTcpEnd;
- (void)setTimestampTcpEnd:(uint64_t)v
{
    _has.timestampTcpEnd = YES;
    _timestampTcpEnd = v;
}
- (void)setHasTimestampTcpEnd:(BOOL)f
{
    _has.timestampTcpEnd = f;
}
- (BOOL)hasTimestampTcpEnd
{
    return _has.timestampTcpEnd;
}
@synthesize timestampSslStart = _timestampSslStart;
- (void)setTimestampSslStart:(uint64_t)v
{
    _has.timestampSslStart = YES;
    _timestampSslStart = v;
}
- (void)setHasTimestampSslStart:(BOOL)f
{
    _has.timestampSslStart = f;
}
- (BOOL)hasTimestampSslStart
{
    return _has.timestampSslStart;
}
@synthesize timestampRequestStart = _timestampRequestStart;
- (void)setTimestampRequestStart:(uint64_t)v
{
    _has.timestampRequestStart = YES;
    _timestampRequestStart = v;
}
- (void)setHasTimestampRequestStart:(BOOL)f
{
    _has.timestampRequestStart = f;
}
- (BOOL)hasTimestampRequestStart
{
    return _has.timestampRequestStart;
}
@synthesize timestampRequestEnd = _timestampRequestEnd;
- (void)setTimestampRequestEnd:(uint64_t)v
{
    _has.timestampRequestEnd = YES;
    _timestampRequestEnd = v;
}
- (void)setHasTimestampRequestEnd:(BOOL)f
{
    _has.timestampRequestEnd = f;
}
- (BOOL)hasTimestampRequestEnd
{
    return _has.timestampRequestEnd;
}
@synthesize timestampResponseStart = _timestampResponseStart;
- (void)setTimestampResponseStart:(uint64_t)v
{
    _has.timestampResponseStart = YES;
    _timestampResponseStart = v;
}
- (void)setHasTimestampResponseStart:(BOOL)f
{
    _has.timestampResponseStart = f;
}
- (BOOL)hasTimestampResponseStart
{
    return _has.timestampResponseStart;
}
@synthesize timestampResponseEnd = _timestampResponseEnd;
- (void)setTimestampResponseEnd:(uint64_t)v
{
    _has.timestampResponseEnd = YES;
    _timestampResponseEnd = v;
}
- (void)setHasTimestampResponseEnd:(BOOL)f
{
    _has.timestampResponseEnd = f;
}
- (BOOL)hasTimestampResponseEnd
{
    return _has.timestampResponseEnd;
}
- (BOOL)hasOptionsQualityOfService
{
    return _optionsQualityOfService != nil;
}
@synthesize optionsQualityOfService = _optionsQualityOfService;
@synthesize optionsOutOfProcess = _optionsOutOfProcess;
- (void)setOptionsOutOfProcess:(BOOL)v
{
    _has.optionsOutOfProcess = YES;
    _optionsOutOfProcess = v;
}
- (void)setHasOptionsOutOfProcess:(BOOL)f
{
    _has.optionsOutOfProcess = f;
}
- (BOOL)hasOptionsOutOfProcess
{
    return _has.optionsOutOfProcess;
}
@synthesize optionsOutOfProcessForceDiscretionary = _optionsOutOfProcessForceDiscretionary;
- (void)setOptionsOutOfProcessForceDiscretionary:(BOOL)v
{
    _has.optionsOutOfProcessForceDiscretionary = YES;
    _optionsOutOfProcessForceDiscretionary = v;
}
- (void)setHasOptionsOutOfProcessForceDiscretionary:(BOOL)f
{
    _has.optionsOutOfProcessForceDiscretionary = f;
}
- (BOOL)hasOptionsOutOfProcessForceDiscretionary
{
    return _has.optionsOutOfProcessForceDiscretionary;
}
@synthesize optionsAllowExpensiveAccess = _optionsAllowExpensiveAccess;
- (void)setOptionsAllowExpensiveAccess:(BOOL)v
{
    _has.optionsAllowExpensiveAccess = YES;
    _optionsAllowExpensiveAccess = v;
}
- (void)setHasOptionsAllowExpensiveAccess:(BOOL)f
{
    _has.optionsAllowExpensiveAccess = f;
}
- (BOOL)hasOptionsAllowExpensiveAccess
{
    return _has.optionsAllowExpensiveAccess;
}
@synthesize optionsAllowPowerNapScheduling = _optionsAllowPowerNapScheduling;
- (void)setOptionsAllowPowerNapScheduling:(BOOL)v
{
    _has.optionsAllowPowerNapScheduling = YES;
    _optionsAllowPowerNapScheduling = v;
}
- (void)setHasOptionsAllowPowerNapScheduling:(BOOL)f
{
    _has.optionsAllowPowerNapScheduling = f;
}
- (BOOL)hasOptionsAllowPowerNapScheduling
{
    return _has.optionsAllowPowerNapScheduling;
}
@synthesize optionsTimeoutIntervalForRequest = _optionsTimeoutIntervalForRequest;
- (void)setOptionsTimeoutIntervalForRequest:(uint32_t)v
{
    _has.optionsTimeoutIntervalForRequest = YES;
    _optionsTimeoutIntervalForRequest = v;
}
- (void)setHasOptionsTimeoutIntervalForRequest:(BOOL)f
{
    _has.optionsTimeoutIntervalForRequest = f;
}
- (BOOL)hasOptionsTimeoutIntervalForRequest
{
    return _has.optionsTimeoutIntervalForRequest;
}
@synthesize optionsTimeoutIntervalForResource = _optionsTimeoutIntervalForResource;
- (void)setOptionsTimeoutIntervalForResource:(uint32_t)v
{
    _has.optionsTimeoutIntervalForResource = YES;
    _optionsTimeoutIntervalForResource = v;
}
- (void)setHasOptionsTimeoutIntervalForResource:(BOOL)f
{
    _has.optionsTimeoutIntervalForResource = f;
}
- (BOOL)hasOptionsTimeoutIntervalForResource
{
    return _has.optionsTimeoutIntervalForResource;
}
- (BOOL)hasOptionsSourceApplicationBundleIdentifier
{
    return _optionsSourceApplicationBundleIdentifier != nil;
}
@synthesize optionsSourceApplicationBundleIdentifier = _optionsSourceApplicationBundleIdentifier;
- (BOOL)hasOptionsSourceApplicationSecondaryIdentifier
{
    return _optionsSourceApplicationSecondaryIdentifier != nil;
}
@synthesize optionsSourceApplicationSecondaryIdentifier = _optionsSourceApplicationSecondaryIdentifier;
@synthesize optionsAppleIdContext = _optionsAppleIdContext;
- (void)setOptionsAppleIdContext:(BOOL)v
{
    _has.optionsAppleIdContext = YES;
    _optionsAppleIdContext = v;
}
- (void)setHasOptionsAppleIdContext:(BOOL)f
{
    _has.optionsAppleIdContext = f;
}
- (BOOL)hasOptionsAppleIdContext
{
    return _has.optionsAppleIdContext;
}
@synthesize optionsTlsPinningRequired = _optionsTlsPinningRequired;
- (void)setOptionsTlsPinningRequired:(BOOL)v
{
    _has.optionsTlsPinningRequired = YES;
    _optionsTlsPinningRequired = v;
}
- (void)setHasOptionsTlsPinningRequired:(BOOL)f
{
    _has.optionsTlsPinningRequired = f;
}
- (BOOL)hasOptionsTlsPinningRequired
{
    return _has.optionsTlsPinningRequired;
}

- (NSString *)description
{
    return [NSString stringWithFormat:@"%@ %@", [super description], [self dictionaryRepresentation]];
}

- (NSDictionary *)dictionaryRepresentation
{
    NSMutableDictionary *dict = [NSMutableDictionary dictionary];
    if (self->_has.triggers)
    {
        [dict setObject:[NSNumber numberWithUnsignedLongLong:self->_triggers] forKey:@"triggers"];
    }
    if (self->_has.reportFrequency)
    {
        [dict setObject:[NSNumber numberWithUnsignedLongLong:self->_reportFrequency] forKey:@"report_frequency"];
    }
    if (self->_has.reportFrequencyBase)
    {
        [dict setObject:[NSNumber numberWithUnsignedLongLong:self->_reportFrequencyBase] forKey:@"report_frequency_base"];
    }
    if (self->_networkTaskDescription)
    {
        [dict setObject:self->_networkTaskDescription forKey:@"network_task_description"];
    }
    if (self->_networkHostname)
    {
        [dict setObject:self->_networkHostname forKey:@"network_hostname"];
    }
    if (self->_networkRemoteAddresssAndPort)
    {
        [dict setObject:self->_networkRemoteAddresssAndPort forKey:@"network_remote_addresss_and_port"];
    }
    if (self->_networkConnectionUuid)
    {
        [dict setObject:self->_networkConnectionUuid forKey:@"network_connection_uuid"];
    }
    if (self->_has.networkConnectionReused)
    {
        [dict setObject:[NSNumber numberWithBool:self->_networkConnectionReused] forKey:@"network_connection_reused"];
    }
    if (self->_networkInterfaceIdentifier)
    {
        [dict setObject:self->_networkInterfaceIdentifier forKey:@"network_interface_identifier"];
    }
    if (self->_networkProtocolName)
    {
        [dict setObject:self->_networkProtocolName forKey:@"network_protocol_name"];
    }
    if (self->_has.networkRequestHeaderSize)
    {
        [dict setObject:[NSNumber numberWithUnsignedInt:self->_networkRequestHeaderSize] forKey:@"network_request_header_size"];
    }
    if (self->_has.networkRequestBodyBytesSent)
    {
        [dict setObject:[NSNumber numberWithUnsignedLongLong:self->_networkRequestBodyBytesSent] forKey:@"network_request_body_bytes_sent"];
    }
    if (self->_has.networkResponseHeaderSize)
    {
        [dict setObject:[NSNumber numberWithUnsignedInt:self->_networkResponseHeaderSize] forKey:@"network_response_header_size"];
    }
    if (self->_has.networkResponseBodyBytesReceived)
    {
        [dict setObject:[NSNumber numberWithUnsignedLongLong:self->_networkResponseBodyBytesReceived] forKey:@"network_response_body_bytes_received"];
    }
    if (self->_has.networkPreviousAttemptCount)
    {
        [dict setObject:[NSNumber numberWithUnsignedInt:self->_networkPreviousAttemptCount] forKey:@"network_previous_attempt_count"];
    }
    if (self->_networkFatalError)
    {
        [dict setObject:[_networkFatalError dictionaryRepresentation] forKey:@"network_fatal_error"];
    }
    if (self->_has.networkStatusCode)
    {
        [dict setObject:[NSNumber numberWithUnsignedLongLong:self->_networkStatusCode] forKey:@"network_status_code"];
    }
    if (self->_networkRequestUri)
    {
        [dict setObject:self->_networkRequestUri forKey:@"network_request_uri"];
    }
    if (self->_has.timestampC2Init)
    {
        [dict setObject:[NSNumber numberWithUnsignedLongLong:self->_timestampC2Init] forKey:@"timestamp_c2_init"];
    }
    if (self->_has.timestampC2Start)
    {
        [dict setObject:[NSNumber numberWithUnsignedLongLong:self->_timestampC2Start] forKey:@"timestamp_c2_start"];
    }
    if (self->_has.timestampC2Now)
    {
        [dict setObject:[NSNumber numberWithUnsignedLongLong:self->_timestampC2Now] forKey:@"timestamp_c2_now"];
    }
    if (self->_has.timestampDnsStart)
    {
        [dict setObject:[NSNumber numberWithUnsignedLongLong:self->_timestampDnsStart] forKey:@"timestamp_dns_start"];
    }
    if (self->_has.timestampDnsEnd)
    {
        [dict setObject:[NSNumber numberWithUnsignedLongLong:self->_timestampDnsEnd] forKey:@"timestamp_dns_end"];
    }
    if (self->_has.timestampTcpStart)
    {
        [dict setObject:[NSNumber numberWithUnsignedLongLong:self->_timestampTcpStart] forKey:@"timestamp_tcp_start"];
    }
    if (self->_has.timestampTcpEnd)
    {
        [dict setObject:[NSNumber numberWithUnsignedLongLong:self->_timestampTcpEnd] forKey:@"timestamp_tcp_end"];
    }
    if (self->_has.timestampSslStart)
    {
        [dict setObject:[NSNumber numberWithUnsignedLongLong:self->_timestampSslStart] forKey:@"timestamp_ssl_start"];
    }
    if (self->_has.timestampRequestStart)
    {
        [dict setObject:[NSNumber numberWithUnsignedLongLong:self->_timestampRequestStart] forKey:@"timestamp_request_start"];
    }
    if (self->_has.timestampRequestEnd)
    {
        [dict setObject:[NSNumber numberWithUnsignedLongLong:self->_timestampRequestEnd] forKey:@"timestamp_request_end"];
    }
    if (self->_has.timestampResponseStart)
    {
        [dict setObject:[NSNumber numberWithUnsignedLongLong:self->_timestampResponseStart] forKey:@"timestamp_response_start"];
    }
    if (self->_has.timestampResponseEnd)
    {
        [dict setObject:[NSNumber numberWithUnsignedLongLong:self->_timestampResponseEnd] forKey:@"timestamp_response_end"];
    }
    if (self->_optionsQualityOfService)
    {
        [dict setObject:self->_optionsQualityOfService forKey:@"options_quality_of_service"];
    }
    if (self->_has.optionsOutOfProcess)
    {
        [dict setObject:[NSNumber numberWithBool:self->_optionsOutOfProcess] forKey:@"options_out_of_process"];
    }
    if (self->_has.optionsOutOfProcessForceDiscretionary)
    {
        [dict setObject:[NSNumber numberWithBool:self->_optionsOutOfProcessForceDiscretionary] forKey:@"options_out_of_process_force_discretionary"];
    }
    if (self->_has.optionsAllowExpensiveAccess)
    {
        [dict setObject:[NSNumber numberWithBool:self->_optionsAllowExpensiveAccess] forKey:@"options_allow_expensive_access"];
    }
    if (self->_has.optionsAllowPowerNapScheduling)
    {
        [dict setObject:[NSNumber numberWithBool:self->_optionsAllowPowerNapScheduling] forKey:@"options_allow_power_nap_scheduling"];
    }
    if (self->_has.optionsTimeoutIntervalForRequest)
    {
        [dict setObject:[NSNumber numberWithUnsignedInt:self->_optionsTimeoutIntervalForRequest] forKey:@"options_timeout_interval_for_request"];
    }
    if (self->_has.optionsTimeoutIntervalForResource)
    {
        [dict setObject:[NSNumber numberWithUnsignedInt:self->_optionsTimeoutIntervalForResource] forKey:@"options_timeout_interval_for_resource"];
    }
    if (self->_optionsSourceApplicationBundleIdentifier)
    {
        [dict setObject:self->_optionsSourceApplicationBundleIdentifier forKey:@"options_source_application_bundle_identifier"];
    }
    if (self->_optionsSourceApplicationSecondaryIdentifier)
    {
        [dict setObject:self->_optionsSourceApplicationSecondaryIdentifier forKey:@"options_source_application_secondary_identifier"];
    }
    if (self->_has.optionsAppleIdContext)
    {
        [dict setObject:[NSNumber numberWithBool:self->_optionsAppleIdContext] forKey:@"options_apple_id_context"];
    }
    if (self->_has.optionsTlsPinningRequired)
    {
        [dict setObject:[NSNumber numberWithBool:self->_optionsTlsPinningRequired] forKey:@"options_tls_pinning_required"];
    }
    return dict;
}

BOOL SECC2MPNetworkEventReadFrom(__unsafe_unretained SECC2MPNetworkEvent *self, __unsafe_unretained PBDataReader *reader) {
    while (PBReaderHasMoreData(reader)) {
        uint32_t tag = 0;
        uint8_t aType = 0;

        PBReaderReadTag32AndType(reader, &tag, &aType);

        if (PBReaderHasError(reader))
            break;

        if (aType == TYPE_END_GROUP) {
            break;
        }

        switch (tag) {

            case 1 /* triggers */:
            {
                self->_has.triggers = YES;
                self->_triggers = PBReaderReadUint64(reader);
            }
            break;
            case 2 /* reportFrequency */:
            {
                self->_has.reportFrequency = YES;
                self->_reportFrequency = PBReaderReadUint64(reader);
            }
            break;
            case 3 /* reportFrequencyBase */:
            {
                self->_has.reportFrequencyBase = YES;
                self->_reportFrequencyBase = PBReaderReadUint64(reader);
            }
            break;
            case 101 /* networkTaskDescription */:
            {
                NSString *new_networkTaskDescription = PBReaderReadString(reader);
                self->_networkTaskDescription = new_networkTaskDescription;
            }
            break;
            case 102 /* networkHostname */:
            {
                NSString *new_networkHostname = PBReaderReadString(reader);
                self->_networkHostname = new_networkHostname;
            }
            break;
            case 103 /* networkRemoteAddresssAndPort */:
            {
                NSString *new_networkRemoteAddresssAndPort = PBReaderReadString(reader);
                self->_networkRemoteAddresssAndPort = new_networkRemoteAddresssAndPort;
            }
            break;
            case 104 /* networkConnectionUuid */:
            {
                NSString *new_networkConnectionUuid = PBReaderReadString(reader);
                self->_networkConnectionUuid = new_networkConnectionUuid;
            }
            break;
            case 105 /* networkConnectionReused */:
            {
                self->_has.networkConnectionReused = YES;
                self->_networkConnectionReused = PBReaderReadBOOL(reader);
            }
            break;
            case 106 /* networkInterfaceIdentifier */:
            {
                NSString *new_networkInterfaceIdentifier = PBReaderReadString(reader);
                self->_networkInterfaceIdentifier = new_networkInterfaceIdentifier;
            }
            break;
            case 107 /* networkProtocolName */:
            {
                NSString *new_networkProtocolName = PBReaderReadString(reader);
                self->_networkProtocolName = new_networkProtocolName;
            }
            break;
            case 108 /* networkRequestHeaderSize */:
            {
                self->_has.networkRequestHeaderSize = YES;
                self->_networkRequestHeaderSize = PBReaderReadUint32(reader);
            }
            break;
            case 109 /* networkRequestBodyBytesSent */:
            {
                self->_has.networkRequestBodyBytesSent = YES;
                self->_networkRequestBodyBytesSent = PBReaderReadUint64(reader);
            }
            break;
            case 110 /* networkResponseHeaderSize */:
            {
                self->_has.networkResponseHeaderSize = YES;
                self->_networkResponseHeaderSize = PBReaderReadUint32(reader);
            }
            break;
            case 111 /* networkResponseBodyBytesReceived */:
            {
                self->_has.networkResponseBodyBytesReceived = YES;
                self->_networkResponseBodyBytesReceived = PBReaderReadUint64(reader);
            }
            break;
            case 112 /* networkPreviousAttemptCount */:
            {
                self->_has.networkPreviousAttemptCount = YES;
                self->_networkPreviousAttemptCount = PBReaderReadUint32(reader);
            }
            break;
            case 113 /* networkFatalError */:
            {
                SECC2MPError *new_networkFatalError = [[SECC2MPError alloc] init];
                self->_networkFatalError = new_networkFatalError;
                PBDataReaderMark mark_networkFatalError;
                BOOL markError = !PBReaderPlaceMark(reader, &mark_networkFatalError);
                if (markError)
                {
                    return NO;
                }
                BOOL inError = !SECC2MPErrorReadFrom(new_networkFatalError, reader);
                if (inError)
                {
                    return NO;
                }
                PBReaderRecallMark(reader, &mark_networkFatalError);
            }
            break;
            case 114 /* networkStatusCode */:
            {
                self->_has.networkStatusCode = YES;
                self->_networkStatusCode = PBReaderReadUint64(reader);
            }
            break;
            case 115 /* networkRequestUri */:
            {
                NSString *new_networkRequestUri = PBReaderReadString(reader);
                self->_networkRequestUri = new_networkRequestUri;
            }
            break;
            case 201 /* timestampC2Init */:
            {
                self->_has.timestampC2Init = YES;
                self->_timestampC2Init = PBReaderReadUint64(reader);
            }
            break;
            case 202 /* timestampC2Start */:
            {
                self->_has.timestampC2Start = YES;
                self->_timestampC2Start = PBReaderReadUint64(reader);
            }
            break;
            case 203 /* timestampC2Now */:
            {
                self->_has.timestampC2Now = YES;
                self->_timestampC2Now = PBReaderReadUint64(reader);
            }
            break;
            case 204 /* timestampDnsStart */:
            {
                self->_has.timestampDnsStart = YES;
                self->_timestampDnsStart = PBReaderReadUint64(reader);
            }
            break;
            case 205 /* timestampDnsEnd */:
            {
                self->_has.timestampDnsEnd = YES;
                self->_timestampDnsEnd = PBReaderReadUint64(reader);
            }
            break;
            case 206 /* timestampTcpStart */:
            {
                self->_has.timestampTcpStart = YES;
                self->_timestampTcpStart = PBReaderReadUint64(reader);
            }
            break;
            case 207 /* timestampTcpEnd */:
            {
                self->_has.timestampTcpEnd = YES;
                self->_timestampTcpEnd = PBReaderReadUint64(reader);
            }
            break;
            case 208 /* timestampSslStart */:
            {
                self->_has.timestampSslStart = YES;
                self->_timestampSslStart = PBReaderReadUint64(reader);
            }
            break;
            case 209 /* timestampRequestStart */:
            {
                self->_has.timestampRequestStart = YES;
                self->_timestampRequestStart = PBReaderReadUint64(reader);
            }
            break;
            case 210 /* timestampRequestEnd */:
            {
                self->_has.timestampRequestEnd = YES;
                self->_timestampRequestEnd = PBReaderReadUint64(reader);
            }
            break;
            case 211 /* timestampResponseStart */:
            {
                self->_has.timestampResponseStart = YES;
                self->_timestampResponseStart = PBReaderReadUint64(reader);
            }
            break;
            case 212 /* timestampResponseEnd */:
            {
                self->_has.timestampResponseEnd = YES;
                self->_timestampResponseEnd = PBReaderReadUint64(reader);
            }
            break;
            case 301 /* optionsQualityOfService */:
            {
                NSString *new_optionsQualityOfService = PBReaderReadString(reader);
                self->_optionsQualityOfService = new_optionsQualityOfService;
            }
            break;
            case 302 /* optionsOutOfProcess */:
            {
                self->_has.optionsOutOfProcess = YES;
                self->_optionsOutOfProcess = PBReaderReadBOOL(reader);
            }
            break;
            case 303 /* optionsOutOfProcessForceDiscretionary */:
            {
                self->_has.optionsOutOfProcessForceDiscretionary = YES;
                self->_optionsOutOfProcessForceDiscretionary = PBReaderReadBOOL(reader);
            }
            break;
            case 304 /* optionsAllowExpensiveAccess */:
            {
                self->_has.optionsAllowExpensiveAccess = YES;
                self->_optionsAllowExpensiveAccess = PBReaderReadBOOL(reader);
            }
            break;
            case 305 /* optionsAllowPowerNapScheduling */:
            {
                self->_has.optionsAllowPowerNapScheduling = YES;
                self->_optionsAllowPowerNapScheduling = PBReaderReadBOOL(reader);
            }
            break;
            case 306 /* optionsTimeoutIntervalForRequest */:
            {
                self->_has.optionsTimeoutIntervalForRequest = YES;
                self->_optionsTimeoutIntervalForRequest = PBReaderReadUint32(reader);
            }
            break;
            case 307 /* optionsTimeoutIntervalForResource */:
            {
                self->_has.optionsTimeoutIntervalForResource = YES;
                self->_optionsTimeoutIntervalForResource = PBReaderReadUint32(reader);
            }
            break;
            case 308 /* optionsSourceApplicationBundleIdentifier */:
            {
                NSString *new_optionsSourceApplicationBundleIdentifier = PBReaderReadString(reader);
                self->_optionsSourceApplicationBundleIdentifier = new_optionsSourceApplicationBundleIdentifier;
            }
            break;
            case 309 /* optionsSourceApplicationSecondaryIdentifier */:
            {
                NSString *new_optionsSourceApplicationSecondaryIdentifier = PBReaderReadString(reader);
                self->_optionsSourceApplicationSecondaryIdentifier = new_optionsSourceApplicationSecondaryIdentifier;
            }
            break;
            case 310 /* optionsAppleIdContext */:
            {
                self->_has.optionsAppleIdContext = YES;
                self->_optionsAppleIdContext = PBReaderReadBOOL(reader);
            }
            break;
            case 311 /* optionsTlsPinningRequired */:
            {
                self->_has.optionsTlsPinningRequired = YES;
                self->_optionsTlsPinningRequired = PBReaderReadBOOL(reader);
            }
            break;
            default:
                if (!PBReaderSkipValueWithTag(reader, tag, aType))
                    return NO;
                break;
        }
    }
    return !PBReaderHasError(reader);
}

- (BOOL)readFrom:(PBDataReader *)reader
{
    return SECC2MPNetworkEventReadFrom(self, reader);
}
- (void)writeTo:(PBDataWriter *)writer
{
    /* triggers */
    {
        if (self->_has.triggers)
        {
            PBDataWriterWriteUint64Field(writer, self->_triggers, 1);
        }
    }
    /* reportFrequency */
    {
        if (self->_has.reportFrequency)
        {
            PBDataWriterWriteUint64Field(writer, self->_reportFrequency, 2);
        }
    }
    /* reportFrequencyBase */
    {
        if (self->_has.reportFrequencyBase)
        {
            PBDataWriterWriteUint64Field(writer, self->_reportFrequencyBase, 3);
        }
    }
    /* networkTaskDescription */
    {
        if (self->_networkTaskDescription)
        {
            PBDataWriterWriteStringField(writer, self->_networkTaskDescription, 101);
        }
    }
    /* networkHostname */
    {
        if (self->_networkHostname)
        {
            PBDataWriterWriteStringField(writer, self->_networkHostname, 102);
        }
    }
    /* networkRemoteAddresssAndPort */
    {
        if (self->_networkRemoteAddresssAndPort)
        {
            PBDataWriterWriteStringField(writer, self->_networkRemoteAddresssAndPort, 103);
        }
    }
    /* networkConnectionUuid */
    {
        if (self->_networkConnectionUuid)
        {
            PBDataWriterWriteStringField(writer, self->_networkConnectionUuid, 104);
        }
    }
    /* networkConnectionReused */
    {
        if (self->_has.networkConnectionReused)
        {
            PBDataWriterWriteBOOLField(writer, self->_networkConnectionReused, 105);
        }
    }
    /* networkInterfaceIdentifier */
    {
        if (self->_networkInterfaceIdentifier)
        {
            PBDataWriterWriteStringField(writer, self->_networkInterfaceIdentifier, 106);
        }
    }
    /* networkProtocolName */
    {
        if (self->_networkProtocolName)
        {
            PBDataWriterWriteStringField(writer, self->_networkProtocolName, 107);
        }
    }
    /* networkRequestHeaderSize */
    {
        if (self->_has.networkRequestHeaderSize)
        {
            PBDataWriterWriteUint32Field(writer, self->_networkRequestHeaderSize, 108);
        }
    }
    /* networkRequestBodyBytesSent */
    {
        if (self->_has.networkRequestBodyBytesSent)
        {
            PBDataWriterWriteUint64Field(writer, self->_networkRequestBodyBytesSent, 109);
        }
    }
    /* networkResponseHeaderSize */
    {
        if (self->_has.networkResponseHeaderSize)
        {
            PBDataWriterWriteUint32Field(writer, self->_networkResponseHeaderSize, 110);
        }
    }
    /* networkResponseBodyBytesReceived */
    {
        if (self->_has.networkResponseBodyBytesReceived)
        {
            PBDataWriterWriteUint64Field(writer, self->_networkResponseBodyBytesReceived, 111);
        }
    }
    /* networkPreviousAttemptCount */
    {
        if (self->_has.networkPreviousAttemptCount)
        {
            PBDataWriterWriteUint32Field(writer, self->_networkPreviousAttemptCount, 112);
        }
    }
    /* networkFatalError */
    {
        if (self->_networkFatalError != nil)
        {
            PBDataWriterWriteSubmessage(writer, self->_networkFatalError, 113);
        }
    }
    /* networkStatusCode */
    {
        if (self->_has.networkStatusCode)
        {
            PBDataWriterWriteUint64Field(writer, self->_networkStatusCode, 114);
        }
    }
    /* networkRequestUri */
    {
        if (self->_networkRequestUri)
        {
            PBDataWriterWriteStringField(writer, self->_networkRequestUri, 115);
        }
    }
    /* timestampC2Init */
    {
        if (self->_has.timestampC2Init)
        {
            PBDataWriterWriteUint64Field(writer, self->_timestampC2Init, 201);
        }
    }
    /* timestampC2Start */
    {
        if (self->_has.timestampC2Start)
        {
            PBDataWriterWriteUint64Field(writer, self->_timestampC2Start, 202);
        }
    }
    /* timestampC2Now */
    {
        if (self->_has.timestampC2Now)
        {
            PBDataWriterWriteUint64Field(writer, self->_timestampC2Now, 203);
        }
    }
    /* timestampDnsStart */
    {
        if (self->_has.timestampDnsStart)
        {
            PBDataWriterWriteUint64Field(writer, self->_timestampDnsStart, 204);
        }
    }
    /* timestampDnsEnd */
    {
        if (self->_has.timestampDnsEnd)
        {
            PBDataWriterWriteUint64Field(writer, self->_timestampDnsEnd, 205);
        }
    }
    /* timestampTcpStart */
    {
        if (self->_has.timestampTcpStart)
        {
            PBDataWriterWriteUint64Field(writer, self->_timestampTcpStart, 206);
        }
    }
    /* timestampTcpEnd */
    {
        if (self->_has.timestampTcpEnd)
        {
            PBDataWriterWriteUint64Field(writer, self->_timestampTcpEnd, 207);
        }
    }
    /* timestampSslStart */
    {
        if (self->_has.timestampSslStart)
        {
            PBDataWriterWriteUint64Field(writer, self->_timestampSslStart, 208);
        }
    }
    /* timestampRequestStart */
    {
        if (self->_has.timestampRequestStart)
        {
            PBDataWriterWriteUint64Field(writer, self->_timestampRequestStart, 209);
        }
    }
    /* timestampRequestEnd */
    {
        if (self->_has.timestampRequestEnd)
        {
            PBDataWriterWriteUint64Field(writer, self->_timestampRequestEnd, 210);
        }
    }
    /* timestampResponseStart */
    {
        if (self->_has.timestampResponseStart)
        {
            PBDataWriterWriteUint64Field(writer, self->_timestampResponseStart, 211);
        }
    }
    /* timestampResponseEnd */
    {
        if (self->_has.timestampResponseEnd)
        {
            PBDataWriterWriteUint64Field(writer, self->_timestampResponseEnd, 212);
        }
    }
    /* optionsQualityOfService */
    {
        if (self->_optionsQualityOfService)
        {
            PBDataWriterWriteStringField(writer, self->_optionsQualityOfService, 301);
        }
    }
    /* optionsOutOfProcess */
    {
        if (self->_has.optionsOutOfProcess)
        {
            PBDataWriterWriteBOOLField(writer, self->_optionsOutOfProcess, 302);
        }
    }
    /* optionsOutOfProcessForceDiscretionary */
    {
        if (self->_has.optionsOutOfProcessForceDiscretionary)
        {
            PBDataWriterWriteBOOLField(writer, self->_optionsOutOfProcessForceDiscretionary, 303);
        }
    }
    /* optionsAllowExpensiveAccess */
    {
        if (self->_has.optionsAllowExpensiveAccess)
        {
            PBDataWriterWriteBOOLField(writer, self->_optionsAllowExpensiveAccess, 304);
        }
    }
    /* optionsAllowPowerNapScheduling */
    {
        if (self->_has.optionsAllowPowerNapScheduling)
        {
            PBDataWriterWriteBOOLField(writer, self->_optionsAllowPowerNapScheduling, 305);
        }
    }
    /* optionsTimeoutIntervalForRequest */
    {
        if (self->_has.optionsTimeoutIntervalForRequest)
        {
            PBDataWriterWriteUint32Field(writer, self->_optionsTimeoutIntervalForRequest, 306);
        }
    }
    /* optionsTimeoutIntervalForResource */
    {
        if (self->_has.optionsTimeoutIntervalForResource)
        {
            PBDataWriterWriteUint32Field(writer, self->_optionsTimeoutIntervalForResource, 307);
        }
    }
    /* optionsSourceApplicationBundleIdentifier */
    {
        if (self->_optionsSourceApplicationBundleIdentifier)
        {
            PBDataWriterWriteStringField(writer, self->_optionsSourceApplicationBundleIdentifier, 308);
        }
    }
    /* optionsSourceApplicationSecondaryIdentifier */
    {
        if (self->_optionsSourceApplicationSecondaryIdentifier)
        {
            PBDataWriterWriteStringField(writer, self->_optionsSourceApplicationSecondaryIdentifier, 309);
        }
    }
    /* optionsAppleIdContext */
    {
        if (self->_has.optionsAppleIdContext)
        {
            PBDataWriterWriteBOOLField(writer, self->_optionsAppleIdContext, 310);
        }
    }
    /* optionsTlsPinningRequired */
    {
        if (self->_has.optionsTlsPinningRequired)
        {
            PBDataWriterWriteBOOLField(writer, self->_optionsTlsPinningRequired, 311);
        }
    }
}

- (void)copyTo:(SECC2MPNetworkEvent *)other
{
    if (self->_has.triggers)
    {
        other->_triggers = _triggers;
        other->_has.triggers = YES;
    }
    if (self->_has.reportFrequency)
    {
        other->_reportFrequency = _reportFrequency;
        other->_has.reportFrequency = YES;
    }
    if (self->_has.reportFrequencyBase)
    {
        other->_reportFrequencyBase = _reportFrequencyBase;
        other->_has.reportFrequencyBase = YES;
    }
    if (_networkTaskDescription)
    {
        other.networkTaskDescription = _networkTaskDescription;
    }
    if (_networkHostname)
    {
        other.networkHostname = _networkHostname;
    }
    if (_networkRemoteAddresssAndPort)
    {
        other.networkRemoteAddresssAndPort = _networkRemoteAddresssAndPort;
    }
    if (_networkConnectionUuid)
    {
        other.networkConnectionUuid = _networkConnectionUuid;
    }
    if (self->_has.networkConnectionReused)
    {
        other->_networkConnectionReused = _networkConnectionReused;
        other->_has.networkConnectionReused = YES;
    }
    if (_networkInterfaceIdentifier)
    {
        other.networkInterfaceIdentifier = _networkInterfaceIdentifier;
    }
    if (_networkProtocolName)
    {
        other.networkProtocolName = _networkProtocolName;
    }
    if (self->_has.networkRequestHeaderSize)
    {
        other->_networkRequestHeaderSize = _networkRequestHeaderSize;
        other->_has.networkRequestHeaderSize = YES;
    }
    if (self->_has.networkRequestBodyBytesSent)
    {
        other->_networkRequestBodyBytesSent = _networkRequestBodyBytesSent;
        other->_has.networkRequestBodyBytesSent = YES;
    }
    if (self->_has.networkResponseHeaderSize)
    {
        other->_networkResponseHeaderSize = _networkResponseHeaderSize;
        other->_has.networkResponseHeaderSize = YES;
    }
    if (self->_has.networkResponseBodyBytesReceived)
    {
        other->_networkResponseBodyBytesReceived = _networkResponseBodyBytesReceived;
        other->_has.networkResponseBodyBytesReceived = YES;
    }
    if (self->_has.networkPreviousAttemptCount)
    {
        other->_networkPreviousAttemptCount = _networkPreviousAttemptCount;
        other->_has.networkPreviousAttemptCount = YES;
    }
    if (_networkFatalError)
    {
        other.networkFatalError = _networkFatalError;
    }
    if (self->_has.networkStatusCode)
    {
        other->_networkStatusCode = _networkStatusCode;
        other->_has.networkStatusCode = YES;
    }
    if (_networkRequestUri)
    {
        other.networkRequestUri = _networkRequestUri;
    }
    if (self->_has.timestampC2Init)
    {
        other->_timestampC2Init = _timestampC2Init;
        other->_has.timestampC2Init = YES;
    }
    if (self->_has.timestampC2Start)
    {
        other->_timestampC2Start = _timestampC2Start;
        other->_has.timestampC2Start = YES;
    }
    if (self->_has.timestampC2Now)
    {
        other->_timestampC2Now = _timestampC2Now;
        other->_has.timestampC2Now = YES;
    }
    if (self->_has.timestampDnsStart)
    {
        other->_timestampDnsStart = _timestampDnsStart;
        other->_has.timestampDnsStart = YES;
    }
    if (self->_has.timestampDnsEnd)
    {
        other->_timestampDnsEnd = _timestampDnsEnd;
        other->_has.timestampDnsEnd = YES;
    }
    if (self->_has.timestampTcpStart)
    {
        other->_timestampTcpStart = _timestampTcpStart;
        other->_has.timestampTcpStart = YES;
    }
    if (self->_has.timestampTcpEnd)
    {
        other->_timestampTcpEnd = _timestampTcpEnd;
        other->_has.timestampTcpEnd = YES;
    }
    if (self->_has.timestampSslStart)
    {
        other->_timestampSslStart = _timestampSslStart;
        other->_has.timestampSslStart = YES;
    }
    if (self->_has.timestampRequestStart)
    {
        other->_timestampRequestStart = _timestampRequestStart;
        other->_has.timestampRequestStart = YES;
    }
    if (self->_has.timestampRequestEnd)
    {
        other->_timestampRequestEnd = _timestampRequestEnd;
        other->_has.timestampRequestEnd = YES;
    }
    if (self->_has.timestampResponseStart)
    {
        other->_timestampResponseStart = _timestampResponseStart;
        other->_has.timestampResponseStart = YES;
    }
    if (self->_has.timestampResponseEnd)
    {
        other->_timestampResponseEnd = _timestampResponseEnd;
        other->_has.timestampResponseEnd = YES;
    }
    if (_optionsQualityOfService)
    {
        other.optionsQualityOfService = _optionsQualityOfService;
    }
    if (self->_has.optionsOutOfProcess)
    {
        other->_optionsOutOfProcess = _optionsOutOfProcess;
        other->_has.optionsOutOfProcess = YES;
    }
    if (self->_has.optionsOutOfProcessForceDiscretionary)
    {
        other->_optionsOutOfProcessForceDiscretionary = _optionsOutOfProcessForceDiscretionary;
        other->_has.optionsOutOfProcessForceDiscretionary = YES;
    }
    if (self->_has.optionsAllowExpensiveAccess)
    {
        other->_optionsAllowExpensiveAccess = _optionsAllowExpensiveAccess;
        other->_has.optionsAllowExpensiveAccess = YES;
    }
    if (self->_has.optionsAllowPowerNapScheduling)
    {
        other->_optionsAllowPowerNapScheduling = _optionsAllowPowerNapScheduling;
        other->_has.optionsAllowPowerNapScheduling = YES;
    }
    if (self->_has.optionsTimeoutIntervalForRequest)
    {
        other->_optionsTimeoutIntervalForRequest = _optionsTimeoutIntervalForRequest;
        other->_has.optionsTimeoutIntervalForRequest = YES;
    }
    if (self->_has.optionsTimeoutIntervalForResource)
    {
        other->_optionsTimeoutIntervalForResource = _optionsTimeoutIntervalForResource;
        other->_has.optionsTimeoutIntervalForResource = YES;
    }
    if (_optionsSourceApplicationBundleIdentifier)
    {
        other.optionsSourceApplicationBundleIdentifier = _optionsSourceApplicationBundleIdentifier;
    }
    if (_optionsSourceApplicationSecondaryIdentifier)
    {
        other.optionsSourceApplicationSecondaryIdentifier = _optionsSourceApplicationSecondaryIdentifier;
    }
    if (self->_has.optionsAppleIdContext)
    {
        other->_optionsAppleIdContext = _optionsAppleIdContext;
        other->_has.optionsAppleIdContext = YES;
    }
    if (self->_has.optionsTlsPinningRequired)
    {
        other->_optionsTlsPinningRequired = _optionsTlsPinningRequired;
        other->_has.optionsTlsPinningRequired = YES;
    }
}

- (id)copyWithZone:(NSZone *)zone
{
    SECC2MPNetworkEvent *copy = [[[self class] allocWithZone:zone] init];
    if (self->_has.triggers)
    {
        copy->_triggers = _triggers;
        copy->_has.triggers = YES;
    }
    if (self->_has.reportFrequency)
    {
        copy->_reportFrequency = _reportFrequency;
        copy->_has.reportFrequency = YES;
    }
    if (self->_has.reportFrequencyBase)
    {
        copy->_reportFrequencyBase = _reportFrequencyBase;
        copy->_has.reportFrequencyBase = YES;
    }
    copy->_networkTaskDescription = [_networkTaskDescription copyWithZone:zone];
    copy->_networkHostname = [_networkHostname copyWithZone:zone];
    copy->_networkRemoteAddresssAndPort = [_networkRemoteAddresssAndPort copyWithZone:zone];
    copy->_networkConnectionUuid = [_networkConnectionUuid copyWithZone:zone];
    if (self->_has.networkConnectionReused)
    {
        copy->_networkConnectionReused = _networkConnectionReused;
        copy->_has.networkConnectionReused = YES;
    }
    copy->_networkInterfaceIdentifier = [_networkInterfaceIdentifier copyWithZone:zone];
    copy->_networkProtocolName = [_networkProtocolName copyWithZone:zone];
    if (self->_has.networkRequestHeaderSize)
    {
        copy->_networkRequestHeaderSize = _networkRequestHeaderSize;
        copy->_has.networkRequestHeaderSize = YES;
    }
    if (self->_has.networkRequestBodyBytesSent)
    {
        copy->_networkRequestBodyBytesSent = _networkRequestBodyBytesSent;
        copy->_has.networkRequestBodyBytesSent = YES;
    }
    if (self->_has.networkResponseHeaderSize)
    {
        copy->_networkResponseHeaderSize = _networkResponseHeaderSize;
        copy->_has.networkResponseHeaderSize = YES;
    }
    if (self->_has.networkResponseBodyBytesReceived)
    {
        copy->_networkResponseBodyBytesReceived = _networkResponseBodyBytesReceived;
        copy->_has.networkResponseBodyBytesReceived = YES;
    }
    if (self->_has.networkPreviousAttemptCount)
    {
        copy->_networkPreviousAttemptCount = _networkPreviousAttemptCount;
        copy->_has.networkPreviousAttemptCount = YES;
    }
    copy->_networkFatalError = [_networkFatalError copyWithZone:zone];
    if (self->_has.networkStatusCode)
    {
        copy->_networkStatusCode = _networkStatusCode;
        copy->_has.networkStatusCode = YES;
    }
    copy->_networkRequestUri = [_networkRequestUri copyWithZone:zone];
    if (self->_has.timestampC2Init)
    {
        copy->_timestampC2Init = _timestampC2Init;
        copy->_has.timestampC2Init = YES;
    }
    if (self->_has.timestampC2Start)
    {
        copy->_timestampC2Start = _timestampC2Start;
        copy->_has.timestampC2Start = YES;
    }
    if (self->_has.timestampC2Now)
    {
        copy->_timestampC2Now = _timestampC2Now;
        copy->_has.timestampC2Now = YES;
    }
    if (self->_has.timestampDnsStart)
    {
        copy->_timestampDnsStart = _timestampDnsStart;
        copy->_has.timestampDnsStart = YES;
    }
    if (self->_has.timestampDnsEnd)
    {
        copy->_timestampDnsEnd = _timestampDnsEnd;
        copy->_has.timestampDnsEnd = YES;
    }
    if (self->_has.timestampTcpStart)
    {
        copy->_timestampTcpStart = _timestampTcpStart;
        copy->_has.timestampTcpStart = YES;
    }
    if (self->_has.timestampTcpEnd)
    {
        copy->_timestampTcpEnd = _timestampTcpEnd;
        copy->_has.timestampTcpEnd = YES;
    }
    if (self->_has.timestampSslStart)
    {
        copy->_timestampSslStart = _timestampSslStart;
        copy->_has.timestampSslStart = YES;
    }
    if (self->_has.timestampRequestStart)
    {
        copy->_timestampRequestStart = _timestampRequestStart;
        copy->_has.timestampRequestStart = YES;
    }
    if (self->_has.timestampRequestEnd)
    {
        copy->_timestampRequestEnd = _timestampRequestEnd;
        copy->_has.timestampRequestEnd = YES;
    }
    if (self->_has.timestampResponseStart)
    {
        copy->_timestampResponseStart = _timestampResponseStart;
        copy->_has.timestampResponseStart = YES;
    }
    if (self->_has.timestampResponseEnd)
    {
        copy->_timestampResponseEnd = _timestampResponseEnd;
        copy->_has.timestampResponseEnd = YES;
    }
    copy->_optionsQualityOfService = [_optionsQualityOfService copyWithZone:zone];
    if (self->_has.optionsOutOfProcess)
    {
        copy->_optionsOutOfProcess = _optionsOutOfProcess;
        copy->_has.optionsOutOfProcess = YES;
    }
    if (self->_has.optionsOutOfProcessForceDiscretionary)
    {
        copy->_optionsOutOfProcessForceDiscretionary = _optionsOutOfProcessForceDiscretionary;
        copy->_has.optionsOutOfProcessForceDiscretionary = YES;
    }
    if (self->_has.optionsAllowExpensiveAccess)
    {
        copy->_optionsAllowExpensiveAccess = _optionsAllowExpensiveAccess;
        copy->_has.optionsAllowExpensiveAccess = YES;
    }
    if (self->_has.optionsAllowPowerNapScheduling)
    {
        copy->_optionsAllowPowerNapScheduling = _optionsAllowPowerNapScheduling;
        copy->_has.optionsAllowPowerNapScheduling = YES;
    }
    if (self->_has.optionsTimeoutIntervalForRequest)
    {
        copy->_optionsTimeoutIntervalForRequest = _optionsTimeoutIntervalForRequest;
        copy->_has.optionsTimeoutIntervalForRequest = YES;
    }
    if (self->_has.optionsTimeoutIntervalForResource)
    {
        copy->_optionsTimeoutIntervalForResource = _optionsTimeoutIntervalForResource;
        copy->_has.optionsTimeoutIntervalForResource = YES;
    }
    copy->_optionsSourceApplicationBundleIdentifier = [_optionsSourceApplicationBundleIdentifier copyWithZone:zone];
    copy->_optionsSourceApplicationSecondaryIdentifier = [_optionsSourceApplicationSecondaryIdentifier copyWithZone:zone];
    if (self->_has.optionsAppleIdContext)
    {
        copy->_optionsAppleIdContext = _optionsAppleIdContext;
        copy->_has.optionsAppleIdContext = YES;
    }
    if (self->_has.optionsTlsPinningRequired)
    {
        copy->_optionsTlsPinningRequired = _optionsTlsPinningRequired;
        copy->_has.optionsTlsPinningRequired = YES;
    }
    return copy;
}

- (BOOL)isEqual:(id)object
{
    SECC2MPNetworkEvent *other = (SECC2MPNetworkEvent *)object;
    return [other isMemberOfClass:[self class]]
    &&
    ((self->_has.triggers && other->_has.triggers && self->_triggers == other->_triggers) || (!self->_has.triggers && !other->_has.triggers))
    &&
    ((self->_has.reportFrequency && other->_has.reportFrequency && self->_reportFrequency == other->_reportFrequency) || (!self->_has.reportFrequency && !other->_has.reportFrequency))
    &&
    ((self->_has.reportFrequencyBase && other->_has.reportFrequencyBase && self->_reportFrequencyBase == other->_reportFrequencyBase) || (!self->_has.reportFrequencyBase && !other->_has.reportFrequencyBase))
    &&
    ((!self->_networkTaskDescription && !other->_networkTaskDescription) || [self->_networkTaskDescription isEqual:other->_networkTaskDescription])
    &&
    ((!self->_networkHostname && !other->_networkHostname) || [self->_networkHostname isEqual:other->_networkHostname])
    &&
    ((!self->_networkRemoteAddresssAndPort && !other->_networkRemoteAddresssAndPort) || [self->_networkRemoteAddresssAndPort isEqual:other->_networkRemoteAddresssAndPort])
    &&
    ((!self->_networkConnectionUuid && !other->_networkConnectionUuid) || [self->_networkConnectionUuid isEqual:other->_networkConnectionUuid])
    &&
    ((self->_has.networkConnectionReused && other->_has.networkConnectionReused && ((self->_networkConnectionReused && other->_networkConnectionReused) || (!self->_networkConnectionReused && !other->_networkConnectionReused))) || (!self->_has.networkConnectionReused && !other->_has.networkConnectionReused))
    &&
    ((!self->_networkInterfaceIdentifier && !other->_networkInterfaceIdentifier) || [self->_networkInterfaceIdentifier isEqual:other->_networkInterfaceIdentifier])
    &&
    ((!self->_networkProtocolName && !other->_networkProtocolName) || [self->_networkProtocolName isEqual:other->_networkProtocolName])
    &&
    ((self->_has.networkRequestHeaderSize && other->_has.networkRequestHeaderSize && self->_networkRequestHeaderSize == other->_networkRequestHeaderSize) || (!self->_has.networkRequestHeaderSize && !other->_has.networkRequestHeaderSize))
    &&
    ((self->_has.networkRequestBodyBytesSent && other->_has.networkRequestBodyBytesSent && self->_networkRequestBodyBytesSent == other->_networkRequestBodyBytesSent) || (!self->_has.networkRequestBodyBytesSent && !other->_has.networkRequestBodyBytesSent))
    &&
    ((self->_has.networkResponseHeaderSize && other->_has.networkResponseHeaderSize && self->_networkResponseHeaderSize == other->_networkResponseHeaderSize) || (!self->_has.networkResponseHeaderSize && !other->_has.networkResponseHeaderSize))
    &&
    ((self->_has.networkResponseBodyBytesReceived && other->_has.networkResponseBodyBytesReceived && self->_networkResponseBodyBytesReceived == other->_networkResponseBodyBytesReceived) || (!self->_has.networkResponseBodyBytesReceived && !other->_has.networkResponseBodyBytesReceived))
    &&
    ((self->_has.networkPreviousAttemptCount && other->_has.networkPreviousAttemptCount && self->_networkPreviousAttemptCount == other->_networkPreviousAttemptCount) || (!self->_has.networkPreviousAttemptCount && !other->_has.networkPreviousAttemptCount))
    &&
    ((!self->_networkFatalError && !other->_networkFatalError) || [self->_networkFatalError isEqual:other->_networkFatalError])
    &&
    ((self->_has.networkStatusCode && other->_has.networkStatusCode && self->_networkStatusCode == other->_networkStatusCode) || (!self->_has.networkStatusCode && !other->_has.networkStatusCode))
    &&
    ((!self->_networkRequestUri && !other->_networkRequestUri) || [self->_networkRequestUri isEqual:other->_networkRequestUri])
    &&
    ((self->_has.timestampC2Init && other->_has.timestampC2Init && self->_timestampC2Init == other->_timestampC2Init) || (!self->_has.timestampC2Init && !other->_has.timestampC2Init))
    &&
    ((self->_has.timestampC2Start && other->_has.timestampC2Start && self->_timestampC2Start == other->_timestampC2Start) || (!self->_has.timestampC2Start && !other->_has.timestampC2Start))
    &&
    ((self->_has.timestampC2Now && other->_has.timestampC2Now && self->_timestampC2Now == other->_timestampC2Now) || (!self->_has.timestampC2Now && !other->_has.timestampC2Now))
    &&
    ((self->_has.timestampDnsStart && other->_has.timestampDnsStart && self->_timestampDnsStart == other->_timestampDnsStart) || (!self->_has.timestampDnsStart && !other->_has.timestampDnsStart))
    &&
    ((self->_has.timestampDnsEnd && other->_has.timestampDnsEnd && self->_timestampDnsEnd == other->_timestampDnsEnd) || (!self->_has.timestampDnsEnd && !other->_has.timestampDnsEnd))
    &&
    ((self->_has.timestampTcpStart && other->_has.timestampTcpStart && self->_timestampTcpStart == other->_timestampTcpStart) || (!self->_has.timestampTcpStart && !other->_has.timestampTcpStart))
    &&
    ((self->_has.timestampTcpEnd && other->_has.timestampTcpEnd && self->_timestampTcpEnd == other->_timestampTcpEnd) || (!self->_has.timestampTcpEnd && !other->_has.timestampTcpEnd))
    &&
    ((self->_has.timestampSslStart && other->_has.timestampSslStart && self->_timestampSslStart == other->_timestampSslStart) || (!self->_has.timestampSslStart && !other->_has.timestampSslStart))
    &&
    ((self->_has.timestampRequestStart && other->_has.timestampRequestStart && self->_timestampRequestStart == other->_timestampRequestStart) || (!self->_has.timestampRequestStart && !other->_has.timestampRequestStart))
    &&
    ((self->_has.timestampRequestEnd && other->_has.timestampRequestEnd && self->_timestampRequestEnd == other->_timestampRequestEnd) || (!self->_has.timestampRequestEnd && !other->_has.timestampRequestEnd))
    &&
    ((self->_has.timestampResponseStart && other->_has.timestampResponseStart && self->_timestampResponseStart == other->_timestampResponseStart) || (!self->_has.timestampResponseStart && !other->_has.timestampResponseStart))
    &&
    ((self->_has.timestampResponseEnd && other->_has.timestampResponseEnd && self->_timestampResponseEnd == other->_timestampResponseEnd) || (!self->_has.timestampResponseEnd && !other->_has.timestampResponseEnd))
    &&
    ((!self->_optionsQualityOfService && !other->_optionsQualityOfService) || [self->_optionsQualityOfService isEqual:other->_optionsQualityOfService])
    &&
    ((self->_has.optionsOutOfProcess && other->_has.optionsOutOfProcess && ((self->_optionsOutOfProcess && other->_optionsOutOfProcess) || (!self->_optionsOutOfProcess && !other->_optionsOutOfProcess))) || (!self->_has.optionsOutOfProcess && !other->_has.optionsOutOfProcess))
    &&
    ((self->_has.optionsOutOfProcessForceDiscretionary && other->_has.optionsOutOfProcessForceDiscretionary && ((self->_optionsOutOfProcessForceDiscretionary && other->_optionsOutOfProcessForceDiscretionary) || (!self->_optionsOutOfProcessForceDiscretionary && !other->_optionsOutOfProcessForceDiscretionary))) || (!self->_has.optionsOutOfProcessForceDiscretionary && !other->_has.optionsOutOfProcessForceDiscretionary))
    &&
    ((self->_has.optionsAllowExpensiveAccess && other->_has.optionsAllowExpensiveAccess && ((self->_optionsAllowExpensiveAccess && other->_optionsAllowExpensiveAccess) || (!self->_optionsAllowExpensiveAccess && !other->_optionsAllowExpensiveAccess))) || (!self->_has.optionsAllowExpensiveAccess && !other->_has.optionsAllowExpensiveAccess))
    &&
    ((self->_has.optionsAllowPowerNapScheduling && other->_has.optionsAllowPowerNapScheduling && ((self->_optionsAllowPowerNapScheduling && other->_optionsAllowPowerNapScheduling) || (!self->_optionsAllowPowerNapScheduling && !other->_optionsAllowPowerNapScheduling))) || (!self->_has.optionsAllowPowerNapScheduling && !other->_has.optionsAllowPowerNapScheduling))
    &&
    ((self->_has.optionsTimeoutIntervalForRequest && other->_has.optionsTimeoutIntervalForRequest && self->_optionsTimeoutIntervalForRequest == other->_optionsTimeoutIntervalForRequest) || (!self->_has.optionsTimeoutIntervalForRequest && !other->_has.optionsTimeoutIntervalForRequest))
    &&
    ((self->_has.optionsTimeoutIntervalForResource && other->_has.optionsTimeoutIntervalForResource && self->_optionsTimeoutIntervalForResource == other->_optionsTimeoutIntervalForResource) || (!self->_has.optionsTimeoutIntervalForResource && !other->_has.optionsTimeoutIntervalForResource))
    &&
    ((!self->_optionsSourceApplicationBundleIdentifier && !other->_optionsSourceApplicationBundleIdentifier) || [self->_optionsSourceApplicationBundleIdentifier isEqual:other->_optionsSourceApplicationBundleIdentifier])
    &&
    ((!self->_optionsSourceApplicationSecondaryIdentifier && !other->_optionsSourceApplicationSecondaryIdentifier) || [self->_optionsSourceApplicationSecondaryIdentifier isEqual:other->_optionsSourceApplicationSecondaryIdentifier])
    &&
    ((self->_has.optionsAppleIdContext && other->_has.optionsAppleIdContext && ((self->_optionsAppleIdContext && other->_optionsAppleIdContext) || (!self->_optionsAppleIdContext && !other->_optionsAppleIdContext))) || (!self->_has.optionsAppleIdContext && !other->_has.optionsAppleIdContext))
    &&
    ((self->_has.optionsTlsPinningRequired && other->_has.optionsTlsPinningRequired && ((self->_optionsTlsPinningRequired && other->_optionsTlsPinningRequired) || (!self->_optionsTlsPinningRequired && !other->_optionsTlsPinningRequired))) || (!self->_has.optionsTlsPinningRequired && !other->_has.optionsTlsPinningRequired))
    ;
}

- (NSUInteger)hash
{
    return 0
    ^
    (self->_has.triggers ? PBHashInt((NSUInteger)self->_triggers) : 0)
    ^
    (self->_has.reportFrequency ? PBHashInt((NSUInteger)self->_reportFrequency) : 0)
    ^
    (self->_has.reportFrequencyBase ? PBHashInt((NSUInteger)self->_reportFrequencyBase) : 0)
    ^
    [self->_networkTaskDescription hash]
    ^
    [self->_networkHostname hash]
    ^
    [self->_networkRemoteAddresssAndPort hash]
    ^
    [self->_networkConnectionUuid hash]
    ^
    (self->_has.networkConnectionReused ? PBHashInt((NSUInteger)self->_networkConnectionReused) : 0)
    ^
    [self->_networkInterfaceIdentifier hash]
    ^
    [self->_networkProtocolName hash]
    ^
    (self->_has.networkRequestHeaderSize ? PBHashInt((NSUInteger)self->_networkRequestHeaderSize) : 0)
    ^
    (self->_has.networkRequestBodyBytesSent ? PBHashInt((NSUInteger)self->_networkRequestBodyBytesSent) : 0)
    ^
    (self->_has.networkResponseHeaderSize ? PBHashInt((NSUInteger)self->_networkResponseHeaderSize) : 0)
    ^
    (self->_has.networkResponseBodyBytesReceived ? PBHashInt((NSUInteger)self->_networkResponseBodyBytesReceived) : 0)
    ^
    (self->_has.networkPreviousAttemptCount ? PBHashInt((NSUInteger)self->_networkPreviousAttemptCount) : 0)
    ^
    [self->_networkFatalError hash]
    ^
    (self->_has.networkStatusCode ? PBHashInt((NSUInteger)self->_networkStatusCode) : 0)
    ^
    [self->_networkRequestUri hash]
    ^
    (self->_has.timestampC2Init ? PBHashInt((NSUInteger)self->_timestampC2Init) : 0)
    ^
    (self->_has.timestampC2Start ? PBHashInt((NSUInteger)self->_timestampC2Start) : 0)
    ^
    (self->_has.timestampC2Now ? PBHashInt((NSUInteger)self->_timestampC2Now) : 0)
    ^
    (self->_has.timestampDnsStart ? PBHashInt((NSUInteger)self->_timestampDnsStart) : 0)
    ^
    (self->_has.timestampDnsEnd ? PBHashInt((NSUInteger)self->_timestampDnsEnd) : 0)
    ^
    (self->_has.timestampTcpStart ? PBHashInt((NSUInteger)self->_timestampTcpStart) : 0)
    ^
    (self->_has.timestampTcpEnd ? PBHashInt((NSUInteger)self->_timestampTcpEnd) : 0)
    ^
    (self->_has.timestampSslStart ? PBHashInt((NSUInteger)self->_timestampSslStart) : 0)
    ^
    (self->_has.timestampRequestStart ? PBHashInt((NSUInteger)self->_timestampRequestStart) : 0)
    ^
    (self->_has.timestampRequestEnd ? PBHashInt((NSUInteger)self->_timestampRequestEnd) : 0)
    ^
    (self->_has.timestampResponseStart ? PBHashInt((NSUInteger)self->_timestampResponseStart) : 0)
    ^
    (self->_has.timestampResponseEnd ? PBHashInt((NSUInteger)self->_timestampResponseEnd) : 0)
    ^
    [self->_optionsQualityOfService hash]
    ^
    (self->_has.optionsOutOfProcess ? PBHashInt((NSUInteger)self->_optionsOutOfProcess) : 0)
    ^
    (self->_has.optionsOutOfProcessForceDiscretionary ? PBHashInt((NSUInteger)self->_optionsOutOfProcessForceDiscretionary) : 0)
    ^
    (self->_has.optionsAllowExpensiveAccess ? PBHashInt((NSUInteger)self->_optionsAllowExpensiveAccess) : 0)
    ^
    (self->_has.optionsAllowPowerNapScheduling ? PBHashInt((NSUInteger)self->_optionsAllowPowerNapScheduling) : 0)
    ^
    (self->_has.optionsTimeoutIntervalForRequest ? PBHashInt((NSUInteger)self->_optionsTimeoutIntervalForRequest) : 0)
    ^
    (self->_has.optionsTimeoutIntervalForResource ? PBHashInt((NSUInteger)self->_optionsTimeoutIntervalForResource) : 0)
    ^
    [self->_optionsSourceApplicationBundleIdentifier hash]
    ^
    [self->_optionsSourceApplicationSecondaryIdentifier hash]
    ^
    (self->_has.optionsAppleIdContext ? PBHashInt((NSUInteger)self->_optionsAppleIdContext) : 0)
    ^
    (self->_has.optionsTlsPinningRequired ? PBHashInt((NSUInteger)self->_optionsTlsPinningRequired) : 0)
    ;
}

- (void)mergeFrom:(SECC2MPNetworkEvent *)other
{
    if (other->_has.triggers)
    {
        self->_triggers = other->_triggers;
        self->_has.triggers = YES;
    }
    if (other->_has.reportFrequency)
    {
        self->_reportFrequency = other->_reportFrequency;
        self->_has.reportFrequency = YES;
    }
    if (other->_has.reportFrequencyBase)
    {
        self->_reportFrequencyBase = other->_reportFrequencyBase;
        self->_has.reportFrequencyBase = YES;
    }
    if (other->_networkTaskDescription)
    {
        [self setNetworkTaskDescription:other->_networkTaskDescription];
    }
    if (other->_networkHostname)
    {
        [self setNetworkHostname:other->_networkHostname];
    }
    if (other->_networkRemoteAddresssAndPort)
    {
        [self setNetworkRemoteAddresssAndPort:other->_networkRemoteAddresssAndPort];
    }
    if (other->_networkConnectionUuid)
    {
        [self setNetworkConnectionUuid:other->_networkConnectionUuid];
    }
    if (other->_has.networkConnectionReused)
    {
        self->_networkConnectionReused = other->_networkConnectionReused;
        self->_has.networkConnectionReused = YES;
    }
    if (other->_networkInterfaceIdentifier)
    {
        [self setNetworkInterfaceIdentifier:other->_networkInterfaceIdentifier];
    }
    if (other->_networkProtocolName)
    {
        [self setNetworkProtocolName:other->_networkProtocolName];
    }
    if (other->_has.networkRequestHeaderSize)
    {
        self->_networkRequestHeaderSize = other->_networkRequestHeaderSize;
        self->_has.networkRequestHeaderSize = YES;
    }
    if (other->_has.networkRequestBodyBytesSent)
    {
        self->_networkRequestBodyBytesSent = other->_networkRequestBodyBytesSent;
        self->_has.networkRequestBodyBytesSent = YES;
    }
    if (other->_has.networkResponseHeaderSize)
    {
        self->_networkResponseHeaderSize = other->_networkResponseHeaderSize;
        self->_has.networkResponseHeaderSize = YES;
    }
    if (other->_has.networkResponseBodyBytesReceived)
    {
        self->_networkResponseBodyBytesReceived = other->_networkResponseBodyBytesReceived;
        self->_has.networkResponseBodyBytesReceived = YES;
    }
    if (other->_has.networkPreviousAttemptCount)
    {
        self->_networkPreviousAttemptCount = other->_networkPreviousAttemptCount;
        self->_has.networkPreviousAttemptCount = YES;
    }
    if (self->_networkFatalError && other->_networkFatalError)
    {
        [self->_networkFatalError mergeFrom:other->_networkFatalError];
    }
    else if (!self->_networkFatalError && other->_networkFatalError)
    {
        [self setNetworkFatalError:other->_networkFatalError];
    }
    if (other->_has.networkStatusCode)
    {
        self->_networkStatusCode = other->_networkStatusCode;
        self->_has.networkStatusCode = YES;
    }
    if (other->_networkRequestUri)
    {
        [self setNetworkRequestUri:other->_networkRequestUri];
    }
    if (other->_has.timestampC2Init)
    {
        self->_timestampC2Init = other->_timestampC2Init;
        self->_has.timestampC2Init = YES;
    }
    if (other->_has.timestampC2Start)
    {
        self->_timestampC2Start = other->_timestampC2Start;
        self->_has.timestampC2Start = YES;
    }
    if (other->_has.timestampC2Now)
    {
        self->_timestampC2Now = other->_timestampC2Now;
        self->_has.timestampC2Now = YES;
    }
    if (other->_has.timestampDnsStart)
    {
        self->_timestampDnsStart = other->_timestampDnsStart;
        self->_has.timestampDnsStart = YES;
    }
    if (other->_has.timestampDnsEnd)
    {
        self->_timestampDnsEnd = other->_timestampDnsEnd;
        self->_has.timestampDnsEnd = YES;
    }
    if (other->_has.timestampTcpStart)
    {
        self->_timestampTcpStart = other->_timestampTcpStart;
        self->_has.timestampTcpStart = YES;
    }
    if (other->_has.timestampTcpEnd)
    {
        self->_timestampTcpEnd = other->_timestampTcpEnd;
        self->_has.timestampTcpEnd = YES;
    }
    if (other->_has.timestampSslStart)
    {
        self->_timestampSslStart = other->_timestampSslStart;
        self->_has.timestampSslStart = YES;
    }
    if (other->_has.timestampRequestStart)
    {
        self->_timestampRequestStart = other->_timestampRequestStart;
        self->_has.timestampRequestStart = YES;
    }
    if (other->_has.timestampRequestEnd)
    {
        self->_timestampRequestEnd = other->_timestampRequestEnd;
        self->_has.timestampRequestEnd = YES;
    }
    if (other->_has.timestampResponseStart)
    {
        self->_timestampResponseStart = other->_timestampResponseStart;
        self->_has.timestampResponseStart = YES;
    }
    if (other->_has.timestampResponseEnd)
    {
        self->_timestampResponseEnd = other->_timestampResponseEnd;
        self->_has.timestampResponseEnd = YES;
    }
    if (other->_optionsQualityOfService)
    {
        [self setOptionsQualityOfService:other->_optionsQualityOfService];
    }
    if (other->_has.optionsOutOfProcess)
    {
        self->_optionsOutOfProcess = other->_optionsOutOfProcess;
        self->_has.optionsOutOfProcess = YES;
    }
    if (other->_has.optionsOutOfProcessForceDiscretionary)
    {
        self->_optionsOutOfProcessForceDiscretionary = other->_optionsOutOfProcessForceDiscretionary;
        self->_has.optionsOutOfProcessForceDiscretionary = YES;
    }
    if (other->_has.optionsAllowExpensiveAccess)
    {
        self->_optionsAllowExpensiveAccess = other->_optionsAllowExpensiveAccess;
        self->_has.optionsAllowExpensiveAccess = YES;
    }
    if (other->_has.optionsAllowPowerNapScheduling)
    {
        self->_optionsAllowPowerNapScheduling = other->_optionsAllowPowerNapScheduling;
        self->_has.optionsAllowPowerNapScheduling = YES;
    }
    if (other->_has.optionsTimeoutIntervalForRequest)
    {
        self->_optionsTimeoutIntervalForRequest = other->_optionsTimeoutIntervalForRequest;
        self->_has.optionsTimeoutIntervalForRequest = YES;
    }
    if (other->_has.optionsTimeoutIntervalForResource)
    {
        self->_optionsTimeoutIntervalForResource = other->_optionsTimeoutIntervalForResource;
        self->_has.optionsTimeoutIntervalForResource = YES;
    }
    if (other->_optionsSourceApplicationBundleIdentifier)
    {
        [self setOptionsSourceApplicationBundleIdentifier:other->_optionsSourceApplicationBundleIdentifier];
    }
    if (other->_optionsSourceApplicationSecondaryIdentifier)
    {
        [self setOptionsSourceApplicationSecondaryIdentifier:other->_optionsSourceApplicationSecondaryIdentifier];
    }
    if (other->_has.optionsAppleIdContext)
    {
        self->_optionsAppleIdContext = other->_optionsAppleIdContext;
        self->_has.optionsAppleIdContext = YES;
    }
    if (other->_has.optionsTlsPinningRequired)
    {
        self->_optionsTlsPinningRequired = other->_optionsTlsPinningRequired;
        self->_has.optionsTlsPinningRequired = YES;
    }
}

@end

