// Generated by the protocol buffer compiler.  DO NOT EDIT!
// NO CHECKED-IN PROTOBUF GENCODE
// source: lib/decoders/decoders.proto
// Protobuf C++ Version: 7.36.0

#include "lib/decoders/decoders.pb.h"

#include <algorithm>
#include <type_traits>
#include "google/protobuf/io/coded_stream.h"
#include "google/protobuf/generated_message_tctable_impl.h"
#include "google/protobuf/internal_visibility.h"
#include "google/protobuf/extension_set.h"
#include "google/protobuf/generated_message_util.h"
#include "google/protobuf/wire_format_lite.h"
#include "google/protobuf/descriptor.h"
#include "google/protobuf/generated_message_reflection.h"
#include "google/protobuf/reflection_ops.h"
#include "google/protobuf/wire_format.h"
// @@protoc_insertion_point(includes)

// Must be included last.
#include "google/protobuf/port_def.inc"
PROTOBUF_PRAGMA_INIT_SEG
namespace _pb = ::google::protobuf;
namespace _pbi = ::google::protobuf::internal;
namespace _fl = ::google::protobuf::internal::field_layout;
#ifdef PROTOBUF_MESSAGE_GLOBALS
namespace {
PROTOBUF_CONSTINIT ::google::protobuf::internal::ReflectionData
    file_reflection_data[] = {
        // ::DecoderProto
        {&::_pbi::kDescriptorMethods, &::descriptor_table_lib_2fdecoders_2fdecoders_2eproto, /* tracker*/ nullptr,},
};
}  // namespace
#endif
class DecoderProto::_Internal {
 public:
  using HasBits = decltype(::std::declval<DecoderProto>()._impl_._has_bits_);
  static constexpr ::int32_t kHasBitsOffset =
      8 * PROTOBUF_FIELD_OFFSET(DecoderProto, _impl_._has_bits_);
  static constexpr ::int32_t kOneofCaseOffset =
      PROTOBUF_FIELD_OFFSET(::DecoderProto, _impl_._oneof_case_);
};

constexpr DecoderProto::ParseTableT_ DecoderProto::InternalGenerateParseTable_(const ::_pbi::ClassData* class_data) {
  return ParseTableT_{
    {
      PROTOBUF_FIELD_OFFSET(DecoderProto, _impl_._has_bits_),
      0, // no _extensions_
      32, 248,  // max_field_number, fast_idx_mask
      offsetof(ParseTableT_, field_lookup_table),
      4,  // skipmap
      offsetof(ParseTableT_, field_entries),
      31,  // num_field_entries
      20,  // num_aux_entries
      offsetof(ParseTableT_, aux_entries),
      class_data,
      nullptr,  // post_loop_handler
      ::_pbi::TcParser::MpUnknownFields,  // fallback
      #ifdef PROTOBUF_PREFETCH_PARSE_TABLE
      ::_pbi::TcParser::GetTable<::DecoderProto>(),  // to_prefetch
      #endif  // PROTOBUF_PREFETCH_PARSE_TABLE
    }, {{
      {::_pbi::TcParser::MiniParse, {}},
      // optional double pulse_debounce_threshold = 1 [default = 0.3, json_name = "pulseDebounceThreshold", (.help) = "ignore pulses with intervals shorter than this, in fractions of a clock"];
      {::_pbi::TcParser::FastF64S1,
       {9, 4, 0,
        PROTOBUF_FIELD_OFFSET(DecoderProto, _impl_.pulse_debounce_threshold_)}},
      // optional double bit_error_threshold = 2 [default = 0.4, json_name = "bitErrorThreshold", (.help) = "amount of error to tolerate in pulse timing, in fractions of a clock"];
      {::_pbi::TcParser::FastF64S1,
       {17, 5, 0,
        PROTOBUF_FIELD_OFFSET(DecoderProto, _impl_.bit_error_threshold_)}},
      {::_pbi::TcParser::MiniParse, {}},
      // optional double minimum_clock_us = 4 [default = 0.75, json_name = "minimumClockUs", (.help) = "refuse to detect clocks shorter than this, to avoid false positives"];
      {::_pbi::TcParser::FastF64S1,
       {33, 6, 0,
        PROTOBUF_FIELD_OFFSET(DecoderProto, _impl_.minimum_clock_us_)}},
      // .IbmDecoderProto ibm = 5 [json_name = "ibm"];
      {::_pbi::TcParser::FastMiniParse1,
       {42, ::uint8_t{6},
        ::uint32_t{
            PROTOBUF_FIELD_OFFSET(ParseTableT_, field_entries) +
            sizeof(_pbi::TcParseTableBase::FieldEntry) * 3}}},
      // .BrotherDecoderProto brother = 6 [json_name = "brother"];
      {::_pbi::TcParser::FastMiniParse1,
       {50, ::uint8_t{6},
        ::uint32_t{
            PROTOBUF_FIELD_OFFSET(ParseTableT_, field_entries) +
            sizeof(_pbi::TcParseTableBase::FieldEntry) * 4}}},
      // .AesLanierDecoderProto aeslanier = 7 [json_name = "aeslanier"];
      {::_pbi::TcParser::FastMiniParse1,
       {58, ::uint8_t{6},
        ::uint32_t{
            PROTOBUF_FIELD_OFFSET(ParseTableT_, field_entries) +
            sizeof(_pbi::TcParseTableBase::FieldEntry) * 5}}},
      // .AmigaDecoderProto amiga = 8 [json_name = "amiga"];
      {::_pbi::TcParser::FastMiniParse1,
       {66, ::uint8_t{6},
        ::uint32_t{
            PROTOBUF_FIELD_OFFSET(ParseTableT_, field_entries) +
            sizeof(_pbi::TcParseTableBase::FieldEntry) * 6}}},
      // .Commodore64DecoderProto c64 = 9 [json_name = "c64"];
      {::_pbi::TcParser::FastMiniParse1,
       {74, ::uint8_t{6},
        ::uint32_t{
            PROTOBUF_FIELD_OFFSET(ParseTableT_, field_entries) +
            sizeof(_pbi::TcParseTableBase::FieldEntry) * 7}}},
      // .F85DecoderProto f85 = 10 [json_name = "f85"];
      {::_pbi::TcParser::FastMiniParse1,
       {82, ::uint8_t{6},
        ::uint32_t{
            PROTOBUF_FIELD_OFFSET(ParseTableT_, field_entries) +
            sizeof(_pbi::TcParseTableBase::FieldEntry) * 8}}},
      // .Fb100DecoderProto fb100 = 11 [json_name = "fb100"];
      {::_pbi::TcParser::FastMiniParse1,
       {90, ::uint8_t{6},
        ::uint32_t{
            PROTOBUF_FIELD_OFFSET(ParseTableT_, field_entries) +
            sizeof(_pbi::TcParseTableBase::FieldEntry) * 9}}},
      // .MacintoshDecoderProto macintosh = 12 [json_name = "macintosh"];
      {::_pbi::TcParser::FastMiniParse1,
       {98, ::uint8_t{6},
        ::uint32_t{
            PROTOBUF_FIELD_OFFSET(ParseTableT_, field_entries) +
            sizeof(_pbi::TcParseTableBase::FieldEntry) * 10}}},
      // .Apple2DecoderProto apple2 = 13 [json_name = "apple2"];
      {::_pbi::TcParser::FastMiniParse1,
       {106, ::uint8_t{6},
        ::uint32_t{
            PROTOBUF_FIELD_OFFSET(ParseTableT_, field_entries) +
            sizeof(_pbi::TcParseTableBase::FieldEntry) * 11}}},
      // .MicropolisDecoderProto micropolis = 14 [json_name = "micropolis"];
      {::_pbi::TcParser::FastMiniParse1,
       {114, ::uint8_t{6},
        ::uint32_t{
            PROTOBUF_FIELD_OFFSET(ParseTableT_, field_entries) +
            sizeof(_pbi::TcParseTableBase::FieldEntry) * 12}}},
      // .MxDecoderProto mx = 15 [json_name = "mx"];
      {::_pbi::TcParser::FastMiniParse1,
       {122, ::uint8_t{6},
        ::uint32_t{
            PROTOBUF_FIELD_OFFSET(ParseTableT_, field_entries) +
            sizeof(_pbi::TcParseTableBase::FieldEntry) * 13}}},
      // .Tids990DecoderProto tids990 = 16 [json_name = "tids990"];
      {::_pbi::TcParser::FastMiniParse2,
       {386, ::uint8_t{6},
        ::uint32_t{
            PROTOBUF_FIELD_OFFSET(ParseTableT_, field_entries) +
            sizeof(_pbi::TcParseTableBase::FieldEntry) * 14}}},
      // .Victor9kDecoderProto victor9k = 17 [json_name = "victor9k"];
      {::_pbi::TcParser::FastMiniParse2,
       {394, ::uint8_t{6},
        ::uint32_t{
            PROTOBUF_FIELD_OFFSET(ParseTableT_, field_entries) +
            sizeof(_pbi::TcParseTableBase::FieldEntry) * 15}}},
      // .ZilogMczDecoderProto zilogmcz = 18 [json_name = "zilogmcz"];
      {::_pbi::TcParser::FastMiniParse2,
       {402, ::uint8_t{6},
        ::uint32_t{
            PROTOBUF_FIELD_OFFSET(ParseTableT_, field_entries) +
            sizeof(_pbi::TcParseTableBase::FieldEntry) * 16}}},
      // optional .FluxSinkProto copy_flux_to = 19 [json_name = "copyFluxTo", (.help) = "while decoding, write a copy of the flux here"];
      {::_pbi::TcParser::FastMtS2,
       {410, 1, 14,
        PROTOBUF_FIELD_OFFSET(DecoderProto, _impl_.copy_flux_to_)}},
      // optional bool dump_records = 20 [default = false, json_name = "dumpRecords", (.help) = "if set, then dump the parsed but undecoded disk records"];
      {::_pbi::TcParser::FastV8S2,
       {416, 3, 0,
        PROTOBUF_FIELD_OFFSET(DecoderProto, _impl_.dump_records_)}},
      // optional bool dump_sectors = 21 [default = false, json_name = "dumpSectors", (.help) = "if set, then dump the decoded sectors to this file"];
      {::_pbi::TcParser::FastV8S2,
       {424, 2, 0,
        PROTOBUF_FIELD_OFFSET(DecoderProto, _impl_.dump_sectors_)}},
      // optional int32 retries = 22 [default = 5, json_name = "retries", (.help) = "how many times to retry each track in the event of a read failure"];
      {::_pbi::TcParser::FastV32S2,
       {432, 8, 0,
        PROTOBUF_FIELD_OFFSET(DecoderProto, _impl_.retries_)}},
      // optional string write_csv_to = 23 [json_name = "writeCsvTo", (.help) = "if set, write a CSV report of the disk state"];
      {::_pbi::TcParser::FastBS2,
       {442, 0, 0,
        PROTOBUF_FIELD_OFFSET(DecoderProto, _impl_.write_csv_to_)}},
      // .NorthstarDecoderProto northstar = 24 [json_name = "northstar"];
      {::_pbi::TcParser::FastMiniParse2,
       {450, ::uint8_t{6},
        ::uint32_t{
            PROTOBUF_FIELD_OFFSET(ParseTableT_, field_entries) +
            sizeof(_pbi::TcParseTableBase::FieldEntry) * 22}}},
      // optional double pll_adjust = 25 [default = 0.04, json_name = "pllAdjust"];
      {::_pbi::TcParser::FastF64S2,
       {457, 7, 0,
        PROTOBUF_FIELD_OFFSET(DecoderProto, _impl_.pll_adjust_)}},
      // optional double pll_phase = 26 [default = 0.6, json_name = "pllPhase"];
      {::_pbi::TcParser::FastF64S2,
       {465, 10, 0,
        PROTOBUF_FIELD_OFFSET(DecoderProto, _impl_.pll_phase_)}},
      // optional double flux_scale = 27 [default = 1, json_name = "fluxScale"];
      {::_pbi::TcParser::FastF64S2,
       {473, 11, 0,
        PROTOBUF_FIELD_OFFSET(DecoderProto, _impl_.flux_scale_)}},
      // .AgatDecoderProto agat = 28 [json_name = "agat"];
      {::_pbi::TcParser::FastMiniParse2,
       {482, ::uint8_t{6},
        ::uint32_t{
            PROTOBUF_FIELD_OFFSET(ParseTableT_, field_entries) +
            sizeof(_pbi::TcParseTableBase::FieldEntry) * 26}}},
      // optional bool skip_unnecessary_tracks = 29 [default = true, json_name = "skipUnnecessaryTracks", (.help) = "don\'t read tracks if we already have all necessary sectors"];
      {::_pbi::TcParser::FastV8S2,
       {488, 9, 0,
        PROTOBUF_FIELD_OFFSET(DecoderProto, _impl_.skip_unnecessary_tracks_)}},
      // .Smaky6DecoderProto smaky6 = 30 [json_name = "smaky6"];
      {::_pbi::TcParser::FastMiniParse2,
       {498, ::uint8_t{6},
        ::uint32_t{
            PROTOBUF_FIELD_OFFSET(ParseTableT_, field_entries) +
            sizeof(_pbi::TcParseTableBase::FieldEntry) * 28}}},
      // .RolandD20DecoderProto rolandd20 = 31 [json_name = "rolandd20"];
      {::_pbi::TcParser::FastMiniParse2,
       {506, ::uint8_t{6},
        ::uint32_t{
            PROTOBUF_FIELD_OFFSET(ParseTableT_, field_entries) +
            sizeof(_pbi::TcParseTableBase::FieldEntry) * 29}}},
    }}, {{
      65535, 65535
    }}, {{
      // optional double pulse_debounce_threshold = 1 [default = 0.3, json_name = "pulseDebounceThreshold", (.help) = "ignore pulses with intervals shorter than this, in fractions of a clock"];
      {PROTOBUF_FIELD_OFFSET(DecoderProto, _impl_.pulse_debounce_threshold_), _Internal::kHasBitsOffset + 4, 0, (0 | ::_fl::kFcOptional | ::_fl::kDouble)},
      // optional double bit_error_threshold = 2 [default = 0.4, json_name = "bitErrorThreshold", (.help) = "amount of error to tolerate in pulse timing, in fractions of a clock"];
      {PROTOBUF_FIELD_OFFSET(DecoderProto, _impl_.bit_error_threshold_), _Internal::kHasBitsOffset + 5, 0, (0 | ::_fl::kFcOptional | ::_fl::kDouble)},
      // optional double minimum_clock_us = 4 [default = 0.75, json_name = "minimumClockUs", (.help) = "refuse to detect clocks shorter than this, to avoid false positives"];
      {PROTOBUF_FIELD_OFFSET(DecoderProto, _impl_.minimum_clock_us_), _Internal::kHasBitsOffset + 6, 0, (0 | ::_fl::kFcOptional | ::_fl::kDouble)},
      // .IbmDecoderProto ibm = 5 [json_name = "ibm"];
      {PROTOBUF_FIELD_OFFSET(DecoderProto, _impl_.format_.ibm_), _Internal::kOneofCaseOffset + 0, 0, (0 | ::_fl::kFcOneof | ::_fl::kMessage | ::_fl::kTvTable)},
      // .BrotherDecoderProto brother = 6 [json_name = "brother"];
      {PROTOBUF_FIELD_OFFSET(DecoderProto, _impl_.format_.brother_), _Internal::kOneofCaseOffset + 0, 1, (0 | ::_fl::kFcOneof | ::_fl::kMessage | ::_fl::kTvTable)},
      // .AesLanierDecoderProto aeslanier = 7 [json_name = "aeslanier"];
      {PROTOBUF_FIELD_OFFSET(DecoderProto, _impl_.format_.aeslanier_), _Internal::kOneofCaseOffset + 0, 2, (0 | ::_fl::kFcOneof | ::_fl::kMessage | ::_fl::kTvTable)},
      // .AmigaDecoderProto amiga = 8 [json_name = "amiga"];
      {PROTOBUF_FIELD_OFFSET(DecoderProto, _impl_.format_.amiga_), _Internal::kOneofCaseOffset + 0, 3, (0 | ::_fl::kFcOneof | ::_fl::kMessage | ::_fl::kTvTable)},
      // .Commodore64DecoderProto c64 = 9 [json_name = "c64"];
      {PROTOBUF_FIELD_OFFSET(DecoderProto, _impl_.format_.c64_), _Internal::kOneofCaseOffset + 0, 4, (0 | ::_fl::kFcOneof | ::_fl::kMessage | ::_fl::kTvTable)},
      // .F85DecoderProto f85 = 10 [json_name = "f85"];
      {PROTOBUF_FIELD_OFFSET(DecoderProto, _impl_.format_.f85_), _Internal::kOneofCaseOffset + 0, 5, (0 | ::_fl::kFcOneof | ::_fl::kMessage | ::_fl::kTvTable)},
      // .Fb100DecoderProto fb100 = 11 [json_name = "fb100"];
      {PROTOBUF_FIELD_OFFSET(DecoderProto, _impl_.format_.fb100_), _Internal::kOneofCaseOffset + 0, 6, (0 | ::_fl::kFcOneof | ::_fl::kMessage | ::_fl::kTvTable)},
      // .MacintoshDecoderProto macintosh = 12 [json_name = "macintosh"];
      {PROTOBUF_FIELD_OFFSET(DecoderProto, _impl_.format_.macintosh_), _Internal::kOneofCaseOffset + 0, 7, (0 | ::_fl::kFcOneof | ::_fl::kMessage | ::_fl::kTvTable)},
      // .Apple2DecoderProto apple2 = 13 [json_name = "apple2"];
      {PROTOBUF_FIELD_OFFSET(DecoderProto, _impl_.format_.apple2_), _Internal::kOneofCaseOffset + 0, 8, (0 | ::_fl::kFcOneof | ::_fl::kMessage | ::_fl::kTvTable)},
      // .MicropolisDecoderProto micropolis = 14 [json_name = "micropolis"];
      {PROTOBUF_FIELD_OFFSET(DecoderProto, _impl_.format_.micropolis_), _Internal::kOneofCaseOffset + 0, 9, (0 | ::_fl::kFcOneof | ::_fl::kMessage | ::_fl::kTvTable)},
      // .MxDecoderProto mx = 15 [json_name = "mx"];
      {PROTOBUF_FIELD_OFFSET(DecoderProto, _impl_.format_.mx_), _Internal::kOneofCaseOffset + 0, 10, (0 | ::_fl::kFcOneof | ::_fl::kMessage | ::_fl::kTvTable)},
      // .Tids990DecoderProto tids990 = 16 [json_name = "tids990"];
      {PROTOBUF_FIELD_OFFSET(DecoderProto, _impl_.format_.tids990_), _Internal::kOneofCaseOffset + 0, 11, (0 | ::_fl::kFcOneof | ::_fl::kMessage | ::_fl::kTvTable)},
      // .Victor9kDecoderProto victor9k = 17 [json_name = "victor9k"];
      {PROTOBUF_FIELD_OFFSET(DecoderProto, _impl_.format_.victor9k_), _Internal::kOneofCaseOffset + 0, 12, (0 | ::_fl::kFcOneof | ::_fl::kMessage | ::_fl::kTvTable)},
      // .ZilogMczDecoderProto zilogmcz = 18 [json_name = "zilogmcz"];
      {PROTOBUF_FIELD_OFFSET(DecoderProto, _impl_.format_.zilogmcz_), _Internal::kOneofCaseOffset + 0, 13, (0 | ::_fl::kFcOneof | ::_fl::kMessage | ::_fl::kTvTable)},
      // optional .FluxSinkProto copy_flux_to = 19 [json_name = "copyFluxTo", (.help) = "while decoding, write a copy of the flux here"];
      {PROTOBUF_FIELD_OFFSET(DecoderProto, _impl_.copy_flux_to_), _Internal::kHasBitsOffset + 1, 14, (0 | ::_fl::kFcOptional | ::_fl::kMessage | ::_fl::kTvTable)},
      // optional bool dump_records = 20 [default = false, json_name = "dumpRecords", (.help) = "if set, then dump the parsed but undecoded disk records"];
      {PROTOBUF_FIELD_OFFSET(DecoderProto, _impl_.dump_records_), _Internal::kHasBitsOffset + 3, 0, (0 | ::_fl::kFcOptional | ::_fl::kBool)},
      // optional bool dump_sectors = 21 [default = false, json_name = "dumpSectors", (.help) = "if set, then dump the decoded sectors to this file"];
      {PROTOBUF_FIELD_OFFSET(DecoderProto, _impl_.dump_sectors_), _Internal::kHasBitsOffset + 2, 0, (0 | ::_fl::kFcOptional | ::_fl::kBool)},
      // optional int32 retries = 22 [default = 5, json_name = "retries", (.help) = "how many times to retry each track in the event of a read failure"];
      {PROTOBUF_FIELD_OFFSET(DecoderProto, _impl_.retries_), _Internal::kHasBitsOffset + 8, 0, (0 | ::_fl::kFcOptional | ::_fl::kInt32)},
      // optional string write_csv_to = 23 [json_name = "writeCsvTo", (.help) = "if set, write a CSV report of the disk state"];
      {PROTOBUF_FIELD_OFFSET(DecoderProto, _impl_.write_csv_to_), _Internal::kHasBitsOffset + 0, 0, (0 | ::_fl::kFcOptional | ::_fl::kBytes | ::_fl::kRepAString)},
      // .NorthstarDecoderProto northstar = 24 [json_name = "northstar"];
      {PROTOBUF_FIELD_OFFSET(DecoderProto, _impl_.format_.northstar_), _Internal::kOneofCaseOffset + 0, 15, (0 | ::_fl::kFcOneof | ::_fl::kMessage | ::_fl::kTvTable)},
      // optional double pll_adjust = 25 [default = 0.04, json_name = "pllAdjust"];
      {PROTOBUF_FIELD_OFFSET(DecoderProto, _impl_.pll_adjust_), _Internal::kHasBitsOffset + 7, 0, (0 | ::_fl::kFcOptional | ::_fl::kDouble)},
      // optional double pll_phase = 26 [default = 0.6, json_name = "pllPhase"];
      {PROTOBUF_FIELD_OFFSET(DecoderProto, _impl_.pll_phase_), _Internal::kHasBitsOffset + 10, 0, (0 | ::_fl::kFcOptional | ::_fl::kDouble)},
      // optional double flux_scale = 27 [default = 1, json_name = "fluxScale"];
      {PROTOBUF_FIELD_OFFSET(DecoderProto, _impl_.flux_scale_), _Internal::kHasBitsOffset + 11, 0, (0 | ::_fl::kFcOptional | ::_fl::kDouble)},
      // .AgatDecoderProto agat = 28 [json_name = "agat"];
      {PROTOBUF_FIELD_OFFSET(DecoderProto, _impl_.format_.agat_), _Internal::kOneofCaseOffset + 0, 16, (0 | ::_fl::kFcOneof | ::_fl::kMessage | ::_fl::kTvTable)},
      // optional bool skip_unnecessary_tracks = 29 [default = true, json_name = "skipUnnecessaryTracks", (.help) = "don\'t read tracks if we already have all necessary sectors"];
      {PROTOBUF_FIELD_OFFSET(DecoderProto, _impl_.skip_unnecessary_tracks_), _Internal::kHasBitsOffset + 9, 0, (0 | ::_fl::kFcOptional | ::_fl::kBool)},
      // .Smaky6DecoderProto smaky6 = 30 [json_name = "smaky6"];
      {PROTOBUF_FIELD_OFFSET(DecoderProto, _impl_.format_.smaky6_), _Internal::kOneofCaseOffset + 0, 17, (0 | ::_fl::kFcOneof | ::_fl::kMessage | ::_fl::kTvTable)},
      // .RolandD20DecoderProto rolandd20 = 31 [json_name = "rolandd20"];
      {PROTOBUF_FIELD_OFFSET(DecoderProto, _impl_.format_.rolandd20_), _Internal::kOneofCaseOffset + 0, 18, (0 | ::_fl::kFcOneof | ::_fl::kMessage | ::_fl::kTvTable)},
      // .TartuDecoderProto tartu = 32 [json_name = "tartu"];
      {PROTOBUF_FIELD_OFFSET(DecoderProto, _impl_.format_.tartu_), _Internal::kOneofCaseOffset + 0, 19, (0 | ::_fl::kFcOneof | ::_fl::kMessage | ::_fl::kTvTable)},
    }},
    {{
        #ifndef PROTOBUF_MESSAGE_GLOBALS
        {::_pbi::TcParser::GetTable<::IbmDecoderProto>()},
        #else
        {::_pbi::FieldAuxMessageGlobals(), &::IbmDecoderProto_globals_},
        #endif
        #ifndef PROTOBUF_MESSAGE_GLOBALS
        {::_pbi::TcParser::GetTable<::BrotherDecoderProto>()},
        #else
        {::_pbi::FieldAuxMessageGlobals(), &::BrotherDecoderProto_globals_},
        #endif
        #ifndef PROTOBUF_MESSAGE_GLOBALS
        {::_pbi::TcParser::GetTable<::AesLanierDecoderProto>()},
        #else
        {::_pbi::FieldAuxMessageGlobals(), &::AesLanierDecoderProto_globals_},
        #endif
        #ifndef PROTOBUF_MESSAGE_GLOBALS
        {::_pbi::TcParser::GetTable<::AmigaDecoderProto>()},
        #else
        {::_pbi::FieldAuxMessageGlobals(), &::AmigaDecoderProto_globals_},
        #endif
        #ifndef PROTOBUF_MESSAGE_GLOBALS
        {::_pbi::TcParser::GetTable<::Commodore64DecoderProto>()},
        #else
        {::_pbi::FieldAuxMessageGlobals(), &::Commodore64DecoderProto_globals_},
        #endif
        #ifndef PROTOBUF_MESSAGE_GLOBALS
        {::_pbi::TcParser::GetTable<::F85DecoderProto>()},
        #else
        {::_pbi::FieldAuxMessageGlobals(), &::F85DecoderProto_globals_},
        #endif
        #ifndef PROTOBUF_MESSAGE_GLOBALS
        {::_pbi::TcParser::GetTable<::Fb100DecoderProto>()},
        #else
        {::_pbi::FieldAuxMessageGlobals(), &::Fb100DecoderProto_globals_},
        #endif
        #ifndef PROTOBUF_MESSAGE_GLOBALS
        {::_pbi::TcParser::GetTable<::MacintoshDecoderProto>()},
        #else
        {::_pbi::FieldAuxMessageGlobals(), &::MacintoshDecoderProto_globals_},
        #endif
        #ifndef PROTOBUF_MESSAGE_GLOBALS
        {::_pbi::TcParser::GetTable<::Apple2DecoderProto>()},
        #else
        {::_pbi::FieldAuxMessageGlobals(), &::Apple2DecoderProto_globals_},
        #endif
        #ifndef PROTOBUF_MESSAGE_GLOBALS
        {::_pbi::TcParser::GetTable<::MicropolisDecoderProto>()},
        #else
        {::_pbi::FieldAuxMessageGlobals(), &::MicropolisDecoderProto_globals_},
        #endif
        #ifndef PROTOBUF_MESSAGE_GLOBALS
        {::_pbi::TcParser::GetTable<::MxDecoderProto>()},
        #else
        {::_pbi::FieldAuxMessageGlobals(), &::MxDecoderProto_globals_},
        #endif
        #ifndef PROTOBUF_MESSAGE_GLOBALS
        {::_pbi::TcParser::GetTable<::Tids990DecoderProto>()},
        #else
        {::_pbi::FieldAuxMessageGlobals(), &::Tids990DecoderProto_globals_},
        #endif
        #ifndef PROTOBUF_MESSAGE_GLOBALS
        {::_pbi::TcParser::GetTable<::Victor9kDecoderProto>()},
        #else
        {::_pbi::FieldAuxMessageGlobals(), &::Victor9kDecoderProto_globals_},
        #endif
        #ifndef PROTOBUF_MESSAGE_GLOBALS
        {::_pbi::TcParser::GetTable<::ZilogMczDecoderProto>()},
        #else
        {::_pbi::FieldAuxMessageGlobals(), &::ZilogMczDecoderProto_globals_},
        #endif
        #ifndef PROTOBUF_MESSAGE_GLOBALS
        {::_pbi::TcParser::GetTable<::FluxSinkProto>()},
        #else
        {::_pbi::FieldAuxMessageGlobals(), &::FluxSinkProto_globals_},
        #endif
        #ifndef PROTOBUF_MESSAGE_GLOBALS
        {::_pbi::TcParser::GetTable<::NorthstarDecoderProto>()},
        #else
        {::_pbi::FieldAuxMessageGlobals(), &::NorthstarDecoderProto_globals_},
        #endif
        #ifndef PROTOBUF_MESSAGE_GLOBALS
        {::_pbi::TcParser::GetTable<::AgatDecoderProto>()},
        #else
        {::_pbi::FieldAuxMessageGlobals(), &::AgatDecoderProto_globals_},
        #endif
        #ifndef PROTOBUF_MESSAGE_GLOBALS
        {::_pbi::TcParser::GetTable<::Smaky6DecoderProto>()},
        #else
        {::_pbi::FieldAuxMessageGlobals(), &::Smaky6DecoderProto_globals_},
        #endif
        #ifndef PROTOBUF_MESSAGE_GLOBALS
        {::_pbi::TcParser::GetTable<::RolandD20DecoderProto>()},
        #else
        {::_pbi::FieldAuxMessageGlobals(), &::RolandD20DecoderProto_globals_},
        #endif
        #ifndef PROTOBUF_MESSAGE_GLOBALS
        {::_pbi::TcParser::GetTable<::TartuDecoderProto>()},
        #else
        {::_pbi::FieldAuxMessageGlobals(), &::TartuDecoderProto_globals_},
        #endif
    }},
    {{
    }},
  };
}


inline constexpr DecoderProto::Impl_::Impl_(
    [[maybe_unused]] ::google::protobuf::internal::InternalVisibility visibility,
    ::_pbi::ConstantInitialized) noexcept
      : write_csv_to_(
            &::google::protobuf::internal::fixed_address_empty_string,
            ::_pbi::ConstantInitialized()),
        copy_flux_to_{nullptr},
        dump_sectors_{false},
        dump_records_{false},
        pulse_debounce_threshold_{0.3},
        bit_error_threshold_{0.4},
        minimum_clock_us_{0.75},
        pll_adjust_{0.04},
        retries_{5},
        skip_unnecessary_tracks_{true},
        pll_phase_{0.6},
        flux_scale_{1},
        format_{},
        _oneof_case_{} {}

template <typename>
constexpr DecoderProto::DecoderProto(::_pbi::ConstantInitialized,
                       const ::_pbi::ClassData* PROTOBUF_NONNULL class_data)
    : Super_(
#if defined(PROTOBUF_CUSTOM_VTABLE)
          class_data
#endif  // PROTOBUF_CUSTOM_VTABLE
          ),
      _impl_(internal_visibility(), ::_pbi::ConstantInitialized()) {
}
inline void* PROTOBUF_NONNULL DecoderProto::PlacementNew_(
    const void* PROTOBUF_NONNULL, void* PROTOBUF_NONNULL mem,
    ::google::protobuf::Arena* PROTOBUF_NULLABLE arena) {
  return ::new (mem) DecoderProto(arena);
}
constexpr auto DecoderProto::InternalNewImpl_() {
  return ::google::protobuf::internal::MessageCreator::CopyInit(sizeof(DecoderProto), alignof(DecoderProto));
}
constexpr auto DecoderProto::InternalGenerateClassData_(
    const MessageLite& prototype,
    const ::google::protobuf::internal::TcParseTableBase* tc_table) {
  return ::google::protobuf::internal::ClassDataFull{
      ::google::protobuf::internal::ClassData{
          &prototype,
#ifndef PROTOBUF_MESSAGE_GLOBALS
          &_table_.header,
#else
          tc_table,
#endif
          nullptr,  // IsInitialized
          &DecoderProto::MergeImpl,
          Super_::GetNewImpl<DecoderProto>(),
#if defined(PROTOBUF_CUSTOM_VTABLE)
          &DecoderProto::SharedDtor,
          Super_::GetClearImpl<DecoderProto>(), &DecoderProto::ByteSizeLong,
              &DecoderProto::_InternalSerialize,
#endif  // PROTOBUF_CUSTOM_VTABLE
          PROTOBUF_FIELD_OFFSET(DecoderProto, _impl_._cached_size_),
          false,
      },
#ifdef PROTOBUF_MESSAGE_GLOBALS
      &file_reflection_data[0],
#else   // !PROTOBUF_MESSAGE_GLOBALS
      &::_pbi::kDescriptorMethods,
      &descriptor_table_lib_2fdecoders_2fdecoders_2eproto,
      nullptr,  // tracker
#endif  // PROTOBUF_MESSAGE_GLOBALS
  };
}
struct DecoderProtoGlobalsTypeInternal : ::_pbi::MessageGlobalsBase {
  constexpr DecoderProtoGlobalsTypeInternal()
      :
#ifndef PROTOBUF_MESSAGE_GLOBALS
        _default(::_pbi::ConstantInitialized{},
                 DecoderProto_class_data_.base())
#else   // !PROTOBUF_MESSAGE_GLOBALS
        MessageGlobalsBase(DecoderProto::InternalGenerateClassData_(
            _default, &DecoderProto_globals_._table.header)),
        _default(::_pbi::ConstantInitialized{}, GetClassData()),
        _table(::_pbi::PrivateAccess::GenerateParseTable<DecoderProto>(
            GetClassData()))
#endif  // PROTOBUF_MESSAGE_GLOBALS
  {
  }
  ~DecoderProtoGlobalsTypeInternal() {}
  union {
    alignas(::_pbi::kMaxMessageAlignment) DecoderProto _default;
  };
#ifdef PROTOBUF_MESSAGE_GLOBALS
  decltype(::_pbi::PrivateAccess::GenerateParseTable<DecoderProto>(
      ::std::declval<const ::_pbi::ClassData*>())) _table;
#endif
};
#ifdef PROTOBUF_MESSAGE_GLOBALS
static_assert(PROTOBUF_FIELD_OFFSET(DecoderProtoGlobalsTypeInternal, _default) ==
              ::_pbi::MessageGlobalsBase::OffsetToDefault());
#endif  // PROTOBUF_MESSAGE_GLOBALS

PROTOBUF_ATTRIBUTE_NO_DESTROY PROTOBUF_CONSTINIT
    PROTOBUF_ATTRIBUTE_INIT_PRIORITY1 PROTOBUF_MESSAGE_GLOBALS_CONST DecoderProtoGlobalsTypeInternal DecoderProto_globals_
        PROTOBUF_MESSAGE_GLOBALS_SECTION(.data.rel.ro);
#if defined(PROTOBUF_CUSTOM_VTABLE)
namespace {
const ::_pbi::ClassData* DecoderProto_get_class_data() {
#ifdef PROTOBUF_MESSAGE_GLOBALS
  return DecoderProto_globals_.GetClassData();
#else
  return DecoderProto_class_data_.base();
#endif  // PROTOBUF_MESSAGE_GLOBALS
}
}  // namespace
#endif  // PROTOBUF_CUSTOM_VTABLE
static constexpr const ::_pb::EnumDescriptor* PROTOBUF_NONNULL* PROTOBUF_NULLABLE
    file_level_enum_descriptors_lib_2fdecoders_2fdecoders_2eproto = nullptr;
static constexpr const ::_pb::ServiceDescriptor* PROTOBUF_NONNULL* PROTOBUF_NULLABLE
    file_level_service_descriptors_lib_2fdecoders_2fdecoders_2eproto = nullptr;
const ::uint32_t
    TableStruct_lib_2fdecoders_2fdecoders_2eproto::offsets[] ABSL_ATTRIBUTE_SECTION_VARIABLE(
        protodesc_cold) = {
        0x085, // bitmap
        PROTOBUF_FIELD_OFFSET(::DecoderProto, _impl_._has_bits_),
        PROTOBUF_FIELD_OFFSET(::DecoderProto, _impl_._oneof_case_[0]),
        36, // hasbit index offset
        PROTOBUF_FIELD_OFFSET(::DecoderProto, _impl_.pulse_debounce_threshold_),
        PROTOBUF_FIELD_OFFSET(::DecoderProto, _impl_.bit_error_threshold_),
        PROTOBUF_FIELD_OFFSET(::DecoderProto, _impl_.minimum_clock_us_),
        PROTOBUF_FIELD_OFFSET(::DecoderProto, _impl_.pll_adjust_),
        PROTOBUF_FIELD_OFFSET(::DecoderProto, _impl_.pll_phase_),
        PROTOBUF_FIELD_OFFSET(::DecoderProto, _impl_.flux_scale_),
        PROTOBUF_FIELD_OFFSET(::DecoderProto, _impl_.format_),
        PROTOBUF_FIELD_OFFSET(::DecoderProto, _impl_.format_),
        PROTOBUF_FIELD_OFFSET(::DecoderProto, _impl_.format_),
        PROTOBUF_FIELD_OFFSET(::DecoderProto, _impl_.format_),
        PROTOBUF_FIELD_OFFSET(::DecoderProto, _impl_.format_),
        PROTOBUF_FIELD_OFFSET(::DecoderProto, _impl_.format_),
        PROTOBUF_FIELD_OFFSET(::DecoderProto, _impl_.format_),
        PROTOBUF_FIELD_OFFSET(::DecoderProto, _impl_.format_),
        PROTOBUF_FIELD_OFFSET(::DecoderProto, _impl_.format_),
        PROTOBUF_FIELD_OFFSET(::DecoderProto, _impl_.format_),
        PROTOBUF_FIELD_OFFSET(::DecoderProto, _impl_.format_),
        PROTOBUF_FIELD_OFFSET(::DecoderProto, _impl_.format_),
        PROTOBUF_FIELD_OFFSET(::DecoderProto, _impl_.format_),
        PROTOBUF_FIELD_OFFSET(::DecoderProto, _impl_.format_),
        PROTOBUF_FIELD_OFFSET(::DecoderProto, _impl_.format_),
        PROTOBUF_FIELD_OFFSET(::DecoderProto, _impl_.format_),
        PROTOBUF_FIELD_OFFSET(::DecoderProto, _impl_.format_),
        PROTOBUF_FIELD_OFFSET(::DecoderProto, _impl_.format_),
        PROTOBUF_FIELD_OFFSET(::DecoderProto, _impl_.format_),
        PROTOBUF_FIELD_OFFSET(::DecoderProto, _impl_.copy_flux_to_),
        PROTOBUF_FIELD_OFFSET(::DecoderProto, _impl_.dump_records_),
        PROTOBUF_FIELD_OFFSET(::DecoderProto, _impl_.dump_sectors_),
        PROTOBUF_FIELD_OFFSET(::DecoderProto, _impl_.retries_),
        PROTOBUF_FIELD_OFFSET(::DecoderProto, _impl_.write_csv_to_),
        PROTOBUF_FIELD_OFFSET(::DecoderProto, _impl_.skip_unnecessary_tracks_),
        PROTOBUF_FIELD_OFFSET(::DecoderProto, _impl_.format_),
        4,
        5,
        6,
        7,
        10,
        11,
        ~0u,
        ~0u,
        ~0u,
        ~0u,
        ~0u,
        ~0u,
        ~0u,
        ~0u,
        ~0u,
        ~0u,
        ~0u,
        ~0u,
        ~0u,
        ~0u,
        ~0u,
        ~0u,
        ~0u,
        ~0u,
        ~0u,
        1,
        3,
        2,
        8,
        0,
        9,
};

static const ::_pbi::MigrationSchema
    schemas[] ABSL_ATTRIBUTE_SECTION_VARIABLE(protodesc_cold) = {
        {0, sizeof(::DecoderProto)},
};
static const ::_pbi::MessageGlobalsBase* PROTOBUF_NONNULL const
    file_message_globals[] = {
        &::DecoderProto_globals_,
};
const char descriptor_table_protodef_lib_2fdecoders_2fdecoders_2eproto[] ABSL_ATTRIBUTE_SECTION_VARIABLE(
    protodesc_cold) = {
    "\n\033lib/decoders/decoders.proto\032\024arch/agat"
    "/agat.proto\032\036arch/aeslanier/aeslanier.pr"
    "oto\032\026arch/amiga/amiga.proto\032\030arch/apple2"
    "/apple2.proto\032\032arch/brother/brother.prot"
    "o\032\022arch/c64/c64.proto\032\022arch/f85/f85.prot"
    "o\032\026arch/fb100/fb100.proto\032\022arch/ibm/ibm."
    "proto\032\036arch/macintosh/macintosh.proto\032 a"
    "rch/micropolis/micropolis.proto\032\020arch/mx"
    "/mx.proto\032\036arch/northstar/northstar.prot"
    "o\032\036arch/rolandd20/rolandd20.proto\032\030arch/"
    "smaky6/smaky6.proto\032\026arch/tartu/tartu.pr"
    "oto\032\032arch/tids990/tids990.proto\032\034arch/vi"
    "ctor9k/victor9k.proto\032\034arch/zilogmcz/zil"
    "ogmcz.proto\032\033lib/fluxsink/fluxsink.proto"
    "\032\027lib/config/common.proto\"\373\017\n\014DecoderPro"
    "to\022\212\001\n\030pulse_debounce_threshold\030\001 \001(\001:\0030"
    ".3BK\202\265\030Gignore pulses with intervals sho"
    "rter than this, in fractions of a clockR"
    "\026pulseDebounceThreshold\022}\n\023bit_error_thr"
    "eshold\030\002 \001(\001:\0030.4BH\202\265\030Damount of error t"
    "o tolerate in pulse timing, in fractions"
    " of a clockR\021bitErrorThreshold\022w\n\020minimu"
    "m_clock_us\030\004 \001(\001:\0040.75BG\202\265\030Crefuse to de"
    "tect clocks shorter than this, to avoid "
    "false positivesR\016minimumClockUs\022#\n\npll_a"
    "djust\030\031 \001(\001:\0040.04R\tpllAdjust\022 \n\tpll_phas"
    "e\030\032 \001(\001:\0030.6R\010pllPhase\022 \n\nflux_scale\030\033 \001"
    "(\001:\0011R\tfluxScale\0226\n\taeslanier\030\007 \001(\0132\026.Ae"
    "sLanierDecoderProtoH\000R\taeslanier\022\'\n\004agat"
    "\030\034 \001(\0132\021.AgatDecoderProtoH\000R\004agat\022*\n\005ami"
    "ga\030\010 \001(\0132\022.AmigaDecoderProtoH\000R\005amiga\022-\n"
    "\006apple2\030\r \001(\0132\023.Apple2DecoderProtoH\000R\006ap"
    "ple2\0220\n\007brother\030\006 \001(\0132\024.BrotherDecoderPr"
    "otoH\000R\007brother\022,\n\003c64\030\t \001(\0132\030.Commodore6"
    "4DecoderProtoH\000R\003c64\022$\n\003f85\030\n \001(\0132\020.F85D"
    "ecoderProtoH\000R\003f85\022*\n\005fb100\030\013 \001(\0132\022.Fb10"
    "0DecoderProtoH\000R\005fb100\022$\n\003ibm\030\005 \001(\0132\020.Ib"
    "mDecoderProtoH\000R\003ibm\0226\n\tmacintosh\030\014 \001(\0132"
    "\026.MacintoshDecoderProtoH\000R\tmacintosh\0229\n\n"
    "micropolis\030\016 \001(\0132\027.MicropolisDecoderProt"
    "oH\000R\nmicropolis\022!\n\002mx\030\017 \001(\0132\017.MxDecoderP"
    "rotoH\000R\002mx\0226\n\tnorthstar\030\030 \001(\0132\026.Northsta"
    "rDecoderProtoH\000R\tnorthstar\0226\n\trolandd20\030"
    "\037 \001(\0132\026.RolandD20DecoderProtoH\000R\trolandd"
    "20\022-\n\006smaky6\030\036 \001(\0132\023.Smaky6DecoderProtoH"
    "\000R\006smaky6\022*\n\005tartu\030  \001(\0132\022.TartuDecoderP"
    "rotoH\000R\005tartu\0220\n\007tids990\030\020 \001(\0132\024.Tids990"
    "DecoderProtoH\000R\007tids990\0223\n\010victor9k\030\021 \001("
    "\0132\025.Victor9kDecoderProtoH\000R\010victor9k\0223\n\010"
    "zilogmcz\030\022 \001(\0132\025.ZilogMczDecoderProtoH\000R"
    "\010zilogmcz\022c\n\014copy_flux_to\030\023 \001(\0132\016.FluxSi"
    "nkProtoB1\202\265\030-while decoding, write a cop"
    "y of the flux hereR\ncopyFluxTo\022e\n\014dump_r"
    "ecords\030\024 \001(\010:\005falseB;\202\265\0307if set, then du"
    "mp the parsed but undecoded disk records"
    "R\013dumpRecords\022`\n\014dump_sectors\030\025 \001(\010:\005fal"
    "seB6\202\265\0302if set, then dump the decoded se"
    "ctors to this fileR\013dumpSectors\022b\n\007retri"
    "es\030\026 \001(\005:\0015BE\202\265\030Ahow many times to retry"
    " each track in the event of a read failu"
    "reR\007retries\022R\n\014write_csv_to\030\027 \001(\tB0\202\265\030,i"
    "f set, write a CSV report of the disk st"
    "ateR\nwriteCsvTo\022|\n\027skip_unnecessary_trac"
    "ks\030\035 \001(\010:\004trueB>\202\265\030:don\'t read tracks if"
    " we already have all necessary sectorsR\025"
    "skipUnnecessaryTracksB\010\n\006format"
};
static const ::_pbi::DescriptorTable* PROTOBUF_NONNULL const
    descriptor_table_lib_2fdecoders_2fdecoders_2eproto_deps[21] = {
        &::descriptor_table_arch_2faeslanier_2faeslanier_2eproto,
        &::descriptor_table_arch_2fagat_2fagat_2eproto,
        &::descriptor_table_arch_2famiga_2famiga_2eproto,
        &::descriptor_table_arch_2fapple2_2fapple2_2eproto,
        &::descriptor_table_arch_2fbrother_2fbrother_2eproto,
        &::descriptor_table_arch_2fc64_2fc64_2eproto,
        &::descriptor_table_arch_2ff85_2ff85_2eproto,
        &::descriptor_table_arch_2ffb100_2ffb100_2eproto,
        &::descriptor_table_arch_2fibm_2fibm_2eproto,
        &::descriptor_table_arch_2fmacintosh_2fmacintosh_2eproto,
        &::descriptor_table_arch_2fmicropolis_2fmicropolis_2eproto,
        &::descriptor_table_arch_2fmx_2fmx_2eproto,
        &::descriptor_table_arch_2fnorthstar_2fnorthstar_2eproto,
        &::descriptor_table_arch_2frolandd20_2frolandd20_2eproto,
        &::descriptor_table_arch_2fsmaky6_2fsmaky6_2eproto,
        &::descriptor_table_arch_2ftartu_2ftartu_2eproto,
        &::descriptor_table_arch_2ftids990_2ftids990_2eproto,
        &::descriptor_table_arch_2fvictor9k_2fvictor9k_2eproto,
        &::descriptor_table_arch_2fzilogmcz_2fzilogmcz_2eproto,
        &::descriptor_table_lib_2fconfig_2fcommon_2eproto,
        &::descriptor_table_lib_2ffluxsink_2ffluxsink_2eproto,
};
static ::absl::once_flag descriptor_table_lib_2fdecoders_2fdecoders_2eproto_once;
PROTOBUF_CONSTINIT const ::_pbi::DescriptorTable descriptor_table_lib_2fdecoders_2fdecoders_2eproto = {
    false,
    false,
    2631,
    descriptor_table_protodef_lib_2fdecoders_2fdecoders_2eproto,
    "lib/decoders/decoders.proto",
    &descriptor_table_lib_2fdecoders_2fdecoders_2eproto_once,
    descriptor_table_lib_2fdecoders_2fdecoders_2eproto_deps,
    21,
    1,
    schemas,
    file_message_globals,
    TableStruct_lib_2fdecoders_2fdecoders_2eproto::offsets,
    file_level_enum_descriptors_lib_2fdecoders_2fdecoders_2eproto,
    file_level_service_descriptors_lib_2fdecoders_2fdecoders_2eproto,
};
// ===================================================================

void DecoderProto::set_allocated_aeslanier(::AesLanierDecoderProto* PROTOBUF_NULLABLE aeslanier) {
  ::google::protobuf::Arena* message_arena = GetArena();
  clear_format();
  if (aeslanier) {
    ::google::protobuf::Arena* submessage_arena = reinterpret_cast<::google::protobuf::Message*>(aeslanier)->GetArena();
    if (message_arena != submessage_arena) {
      aeslanier = ::google::protobuf::internal::GetOwnedMessage(message_arena, aeslanier, submessage_arena);
    }
    set_has_aeslanier();
    _impl_.format_.aeslanier_ = aeslanier;
  }
  // @@protoc_insertion_point(field_set_allocated:DecoderProto.aeslanier)
}
void DecoderProto::clear_aeslanier() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (format_case() == kAeslanier) {
    if (GetArena() == nullptr) {
      delete _impl_.format_.aeslanier_;
    } else if (::google::protobuf::internal::DebugHardenClearOneofMessageOnArena()) {
      ::google::protobuf::internal::MaybePoisonAfterClear(_impl_.format_.aeslanier_);
    }
    clear_has_format();
  }
}
void DecoderProto::set_allocated_agat(::AgatDecoderProto* PROTOBUF_NULLABLE agat) {
  ::google::protobuf::Arena* message_arena = GetArena();
  clear_format();
  if (agat) {
    ::google::protobuf::Arena* submessage_arena = reinterpret_cast<::google::protobuf::Message*>(agat)->GetArena();
    if (message_arena != submessage_arena) {
      agat = ::google::protobuf::internal::GetOwnedMessage(message_arena, agat, submessage_arena);
    }
    set_has_agat();
    _impl_.format_.agat_ = agat;
  }
  // @@protoc_insertion_point(field_set_allocated:DecoderProto.agat)
}
void DecoderProto::clear_agat() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (format_case() == kAgat) {
    if (GetArena() == nullptr) {
      delete _impl_.format_.agat_;
    } else if (::google::protobuf::internal::DebugHardenClearOneofMessageOnArena()) {
      ::google::protobuf::internal::MaybePoisonAfterClear(_impl_.format_.agat_);
    }
    clear_has_format();
  }
}
void DecoderProto::set_allocated_amiga(::AmigaDecoderProto* PROTOBUF_NULLABLE amiga) {
  ::google::protobuf::Arena* message_arena = GetArena();
  clear_format();
  if (amiga) {
    ::google::protobuf::Arena* submessage_arena = reinterpret_cast<::google::protobuf::Message*>(amiga)->GetArena();
    if (message_arena != submessage_arena) {
      amiga = ::google::protobuf::internal::GetOwnedMessage(message_arena, amiga, submessage_arena);
    }
    set_has_amiga();
    _impl_.format_.amiga_ = amiga;
  }
  // @@protoc_insertion_point(field_set_allocated:DecoderProto.amiga)
}
void DecoderProto::clear_amiga() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (format_case() == kAmiga) {
    if (GetArena() == nullptr) {
      delete _impl_.format_.amiga_;
    } else if (::google::protobuf::internal::DebugHardenClearOneofMessageOnArena()) {
      ::google::protobuf::internal::MaybePoisonAfterClear(_impl_.format_.amiga_);
    }
    clear_has_format();
  }
}
void DecoderProto::set_allocated_apple2(::Apple2DecoderProto* PROTOBUF_NULLABLE apple2) {
  ::google::protobuf::Arena* message_arena = GetArena();
  clear_format();
  if (apple2) {
    ::google::protobuf::Arena* submessage_arena = reinterpret_cast<::google::protobuf::Message*>(apple2)->GetArena();
    if (message_arena != submessage_arena) {
      apple2 = ::google::protobuf::internal::GetOwnedMessage(message_arena, apple2, submessage_arena);
    }
    set_has_apple2();
    _impl_.format_.apple2_ = apple2;
  }
  // @@protoc_insertion_point(field_set_allocated:DecoderProto.apple2)
}
void DecoderProto::clear_apple2() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (format_case() == kApple2) {
    if (GetArena() == nullptr) {
      delete _impl_.format_.apple2_;
    } else if (::google::protobuf::internal::DebugHardenClearOneofMessageOnArena()) {
      ::google::protobuf::internal::MaybePoisonAfterClear(_impl_.format_.apple2_);
    }
    clear_has_format();
  }
}
void DecoderProto::set_allocated_brother(::BrotherDecoderProto* PROTOBUF_NULLABLE brother) {
  ::google::protobuf::Arena* message_arena = GetArena();
  clear_format();
  if (brother) {
    ::google::protobuf::Arena* submessage_arena = reinterpret_cast<::google::protobuf::Message*>(brother)->GetArena();
    if (message_arena != submessage_arena) {
      brother = ::google::protobuf::internal::GetOwnedMessage(message_arena, brother, submessage_arena);
    }
    set_has_brother();
    _impl_.format_.brother_ = brother;
  }
  // @@protoc_insertion_point(field_set_allocated:DecoderProto.brother)
}
void DecoderProto::clear_brother() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (format_case() == kBrother) {
    if (GetArena() == nullptr) {
      delete _impl_.format_.brother_;
    } else if (::google::protobuf::internal::DebugHardenClearOneofMessageOnArena()) {
      ::google::protobuf::internal::MaybePoisonAfterClear(_impl_.format_.brother_);
    }
    clear_has_format();
  }
}
void DecoderProto::set_allocated_c64(::Commodore64DecoderProto* PROTOBUF_NULLABLE c64) {
  ::google::protobuf::Arena* message_arena = GetArena();
  clear_format();
  if (c64) {
    ::google::protobuf::Arena* submessage_arena = reinterpret_cast<::google::protobuf::Message*>(c64)->GetArena();
    if (message_arena != submessage_arena) {
      c64 = ::google::protobuf::internal::GetOwnedMessage(message_arena, c64, submessage_arena);
    }
    set_has_c64();
    _impl_.format_.c64_ = c64;
  }
  // @@protoc_insertion_point(field_set_allocated:DecoderProto.c64)
}
void DecoderProto::clear_c64() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (format_case() == kC64) {
    if (GetArena() == nullptr) {
      delete _impl_.format_.c64_;
    } else if (::google::protobuf::internal::DebugHardenClearOneofMessageOnArena()) {
      ::google::protobuf::internal::MaybePoisonAfterClear(_impl_.format_.c64_);
    }
    clear_has_format();
  }
}
void DecoderProto::set_allocated_f85(::F85DecoderProto* PROTOBUF_NULLABLE f85) {
  ::google::protobuf::Arena* message_arena = GetArena();
  clear_format();
  if (f85) {
    ::google::protobuf::Arena* submessage_arena = reinterpret_cast<::google::protobuf::Message*>(f85)->GetArena();
    if (message_arena != submessage_arena) {
      f85 = ::google::protobuf::internal::GetOwnedMessage(message_arena, f85, submessage_arena);
    }
    set_has_f85();
    _impl_.format_.f85_ = f85;
  }
  // @@protoc_insertion_point(field_set_allocated:DecoderProto.f85)
}
void DecoderProto::clear_f85() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (format_case() == kF85) {
    if (GetArena() == nullptr) {
      delete _impl_.format_.f85_;
    } else if (::google::protobuf::internal::DebugHardenClearOneofMessageOnArena()) {
      ::google::protobuf::internal::MaybePoisonAfterClear(_impl_.format_.f85_);
    }
    clear_has_format();
  }
}
void DecoderProto::set_allocated_fb100(::Fb100DecoderProto* PROTOBUF_NULLABLE fb100) {
  ::google::protobuf::Arena* message_arena = GetArena();
  clear_format();
  if (fb100) {
    ::google::protobuf::Arena* submessage_arena = reinterpret_cast<::google::protobuf::Message*>(fb100)->GetArena();
    if (message_arena != submessage_arena) {
      fb100 = ::google::protobuf::internal::GetOwnedMessage(message_arena, fb100, submessage_arena);
    }
    set_has_fb100();
    _impl_.format_.fb100_ = fb100;
  }
  // @@protoc_insertion_point(field_set_allocated:DecoderProto.fb100)
}
void DecoderProto::clear_fb100() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (format_case() == kFb100) {
    if (GetArena() == nullptr) {
      delete _impl_.format_.fb100_;
    } else if (::google::protobuf::internal::DebugHardenClearOneofMessageOnArena()) {
      ::google::protobuf::internal::MaybePoisonAfterClear(_impl_.format_.fb100_);
    }
    clear_has_format();
  }
}
void DecoderProto::set_allocated_ibm(::IbmDecoderProto* PROTOBUF_NULLABLE ibm) {
  ::google::protobuf::Arena* message_arena = GetArena();
  clear_format();
  if (ibm) {
    ::google::protobuf::Arena* submessage_arena = reinterpret_cast<::google::protobuf::Message*>(ibm)->GetArena();
    if (message_arena != submessage_arena) {
      ibm = ::google::protobuf::internal::GetOwnedMessage(message_arena, ibm, submessage_arena);
    }
    set_has_ibm();
    _impl_.format_.ibm_ = ibm;
  }
  // @@protoc_insertion_point(field_set_allocated:DecoderProto.ibm)
}
void DecoderProto::clear_ibm() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (format_case() == kIbm) {
    if (GetArena() == nullptr) {
      delete _impl_.format_.ibm_;
    } else if (::google::protobuf::internal::DebugHardenClearOneofMessageOnArena()) {
      ::google::protobuf::internal::MaybePoisonAfterClear(_impl_.format_.ibm_);
    }
    clear_has_format();
  }
}
void DecoderProto::set_allocated_macintosh(::MacintoshDecoderProto* PROTOBUF_NULLABLE macintosh) {
  ::google::protobuf::Arena* message_arena = GetArena();
  clear_format();
  if (macintosh) {
    ::google::protobuf::Arena* submessage_arena = reinterpret_cast<::google::protobuf::Message*>(macintosh)->GetArena();
    if (message_arena != submessage_arena) {
      macintosh = ::google::protobuf::internal::GetOwnedMessage(message_arena, macintosh, submessage_arena);
    }
    set_has_macintosh();
    _impl_.format_.macintosh_ = macintosh;
  }
  // @@protoc_insertion_point(field_set_allocated:DecoderProto.macintosh)
}
void DecoderProto::clear_macintosh() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (format_case() == kMacintosh) {
    if (GetArena() == nullptr) {
      delete _impl_.format_.macintosh_;
    } else if (::google::protobuf::internal::DebugHardenClearOneofMessageOnArena()) {
      ::google::protobuf::internal::MaybePoisonAfterClear(_impl_.format_.macintosh_);
    }
    clear_has_format();
  }
}
void DecoderProto::set_allocated_micropolis(::MicropolisDecoderProto* PROTOBUF_NULLABLE micropolis) {
  ::google::protobuf::Arena* message_arena = GetArena();
  clear_format();
  if (micropolis) {
    ::google::protobuf::Arena* submessage_arena = reinterpret_cast<::google::protobuf::Message*>(micropolis)->GetArena();
    if (message_arena != submessage_arena) {
      micropolis = ::google::protobuf::internal::GetOwnedMessage(message_arena, micropolis, submessage_arena);
    }
    set_has_micropolis();
    _impl_.format_.micropolis_ = micropolis;
  }
  // @@protoc_insertion_point(field_set_allocated:DecoderProto.micropolis)
}
void DecoderProto::clear_micropolis() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (format_case() == kMicropolis) {
    if (GetArena() == nullptr) {
      delete _impl_.format_.micropolis_;
    } else if (::google::protobuf::internal::DebugHardenClearOneofMessageOnArena()) {
      ::google::protobuf::internal::MaybePoisonAfterClear(_impl_.format_.micropolis_);
    }
    clear_has_format();
  }
}
void DecoderProto::set_allocated_mx(::MxDecoderProto* PROTOBUF_NULLABLE mx) {
  ::google::protobuf::Arena* message_arena = GetArena();
  clear_format();
  if (mx) {
    ::google::protobuf::Arena* submessage_arena = reinterpret_cast<::google::protobuf::Message*>(mx)->GetArena();
    if (message_arena != submessage_arena) {
      mx = ::google::protobuf::internal::GetOwnedMessage(message_arena, mx, submessage_arena);
    }
    set_has_mx();
    _impl_.format_.mx_ = mx;
  }
  // @@protoc_insertion_point(field_set_allocated:DecoderProto.mx)
}
void DecoderProto::clear_mx() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (format_case() == kMx) {
    if (GetArena() == nullptr) {
      delete _impl_.format_.mx_;
    } else if (::google::protobuf::internal::DebugHardenClearOneofMessageOnArena()) {
      ::google::protobuf::internal::MaybePoisonAfterClear(_impl_.format_.mx_);
    }
    clear_has_format();
  }
}
void DecoderProto::set_allocated_northstar(::NorthstarDecoderProto* PROTOBUF_NULLABLE northstar) {
  ::google::protobuf::Arena* message_arena = GetArena();
  clear_format();
  if (northstar) {
    ::google::protobuf::Arena* submessage_arena = reinterpret_cast<::google::protobuf::Message*>(northstar)->GetArena();
    if (message_arena != submessage_arena) {
      northstar = ::google::protobuf::internal::GetOwnedMessage(message_arena, northstar, submessage_arena);
    }
    set_has_northstar();
    _impl_.format_.northstar_ = northstar;
  }
  // @@protoc_insertion_point(field_set_allocated:DecoderProto.northstar)
}
void DecoderProto::clear_northstar() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (format_case() == kNorthstar) {
    if (GetArena() == nullptr) {
      delete _impl_.format_.northstar_;
    } else if (::google::protobuf::internal::DebugHardenClearOneofMessageOnArena()) {
      ::google::protobuf::internal::MaybePoisonAfterClear(_impl_.format_.northstar_);
    }
    clear_has_format();
  }
}
void DecoderProto::set_allocated_rolandd20(::RolandD20DecoderProto* PROTOBUF_NULLABLE rolandd20) {
  ::google::protobuf::Arena* message_arena = GetArena();
  clear_format();
  if (rolandd20) {
    ::google::protobuf::Arena* submessage_arena = reinterpret_cast<::google::protobuf::Message*>(rolandd20)->GetArena();
    if (message_arena != submessage_arena) {
      rolandd20 = ::google::protobuf::internal::GetOwnedMessage(message_arena, rolandd20, submessage_arena);
    }
    set_has_rolandd20();
    _impl_.format_.rolandd20_ = rolandd20;
  }
  // @@protoc_insertion_point(field_set_allocated:DecoderProto.rolandd20)
}
void DecoderProto::clear_rolandd20() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (format_case() == kRolandd20) {
    if (GetArena() == nullptr) {
      delete _impl_.format_.rolandd20_;
    } else if (::google::protobuf::internal::DebugHardenClearOneofMessageOnArena()) {
      ::google::protobuf::internal::MaybePoisonAfterClear(_impl_.format_.rolandd20_);
    }
    clear_has_format();
  }
}
void DecoderProto::set_allocated_smaky6(::Smaky6DecoderProto* PROTOBUF_NULLABLE smaky6) {
  ::google::protobuf::Arena* message_arena = GetArena();
  clear_format();
  if (smaky6) {
    ::google::protobuf::Arena* submessage_arena = reinterpret_cast<::google::protobuf::Message*>(smaky6)->GetArena();
    if (message_arena != submessage_arena) {
      smaky6 = ::google::protobuf::internal::GetOwnedMessage(message_arena, smaky6, submessage_arena);
    }
    set_has_smaky6();
    _impl_.format_.smaky6_ = smaky6;
  }
  // @@protoc_insertion_point(field_set_allocated:DecoderProto.smaky6)
}
void DecoderProto::clear_smaky6() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (format_case() == kSmaky6) {
    if (GetArena() == nullptr) {
      delete _impl_.format_.smaky6_;
    } else if (::google::protobuf::internal::DebugHardenClearOneofMessageOnArena()) {
      ::google::protobuf::internal::MaybePoisonAfterClear(_impl_.format_.smaky6_);
    }
    clear_has_format();
  }
}
void DecoderProto::set_allocated_tartu(::TartuDecoderProto* PROTOBUF_NULLABLE tartu) {
  ::google::protobuf::Arena* message_arena = GetArena();
  clear_format();
  if (tartu) {
    ::google::protobuf::Arena* submessage_arena = reinterpret_cast<::google::protobuf::Message*>(tartu)->GetArena();
    if (message_arena != submessage_arena) {
      tartu = ::google::protobuf::internal::GetOwnedMessage(message_arena, tartu, submessage_arena);
    }
    set_has_tartu();
    _impl_.format_.tartu_ = tartu;
  }
  // @@protoc_insertion_point(field_set_allocated:DecoderProto.tartu)
}
void DecoderProto::clear_tartu() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (format_case() == kTartu) {
    if (GetArena() == nullptr) {
      delete _impl_.format_.tartu_;
    } else if (::google::protobuf::internal::DebugHardenClearOneofMessageOnArena()) {
      ::google::protobuf::internal::MaybePoisonAfterClear(_impl_.format_.tartu_);
    }
    clear_has_format();
  }
}
void DecoderProto::set_allocated_tids990(::Tids990DecoderProto* PROTOBUF_NULLABLE tids990) {
  ::google::protobuf::Arena* message_arena = GetArena();
  clear_format();
  if (tids990) {
    ::google::protobuf::Arena* submessage_arena = reinterpret_cast<::google::protobuf::Message*>(tids990)->GetArena();
    if (message_arena != submessage_arena) {
      tids990 = ::google::protobuf::internal::GetOwnedMessage(message_arena, tids990, submessage_arena);
    }
    set_has_tids990();
    _impl_.format_.tids990_ = tids990;
  }
  // @@protoc_insertion_point(field_set_allocated:DecoderProto.tids990)
}
void DecoderProto::clear_tids990() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (format_case() == kTids990) {
    if (GetArena() == nullptr) {
      delete _impl_.format_.tids990_;
    } else if (::google::protobuf::internal::DebugHardenClearOneofMessageOnArena()) {
      ::google::protobuf::internal::MaybePoisonAfterClear(_impl_.format_.tids990_);
    }
    clear_has_format();
  }
}
void DecoderProto::set_allocated_victor9k(::Victor9kDecoderProto* PROTOBUF_NULLABLE victor9k) {
  ::google::protobuf::Arena* message_arena = GetArena();
  clear_format();
  if (victor9k) {
    ::google::protobuf::Arena* submessage_arena = reinterpret_cast<::google::protobuf::Message*>(victor9k)->GetArena();
    if (message_arena != submessage_arena) {
      victor9k = ::google::protobuf::internal::GetOwnedMessage(message_arena, victor9k, submessage_arena);
    }
    set_has_victor9k();
    _impl_.format_.victor9k_ = victor9k;
  }
  // @@protoc_insertion_point(field_set_allocated:DecoderProto.victor9k)
}
void DecoderProto::clear_victor9k() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (format_case() == kVictor9K) {
    if (GetArena() == nullptr) {
      delete _impl_.format_.victor9k_;
    } else if (::google::protobuf::internal::DebugHardenClearOneofMessageOnArena()) {
      ::google::protobuf::internal::MaybePoisonAfterClear(_impl_.format_.victor9k_);
    }
    clear_has_format();
  }
}
void DecoderProto::set_allocated_zilogmcz(::ZilogMczDecoderProto* PROTOBUF_NULLABLE zilogmcz) {
  ::google::protobuf::Arena* message_arena = GetArena();
  clear_format();
  if (zilogmcz) {
    ::google::protobuf::Arena* submessage_arena = reinterpret_cast<::google::protobuf::Message*>(zilogmcz)->GetArena();
    if (message_arena != submessage_arena) {
      zilogmcz = ::google::protobuf::internal::GetOwnedMessage(message_arena, zilogmcz, submessage_arena);
    }
    set_has_zilogmcz();
    _impl_.format_.zilogmcz_ = zilogmcz;
  }
  // @@protoc_insertion_point(field_set_allocated:DecoderProto.zilogmcz)
}
void DecoderProto::clear_zilogmcz() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (format_case() == kZilogmcz) {
    if (GetArena() == nullptr) {
      delete _impl_.format_.zilogmcz_;
    } else if (::google::protobuf::internal::DebugHardenClearOneofMessageOnArena()) {
      ::google::protobuf::internal::MaybePoisonAfterClear(_impl_.format_.zilogmcz_);
    }
    clear_has_format();
  }
}
void DecoderProto::clear_copy_flux_to() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (_impl_.copy_flux_to_ != nullptr) _impl_.copy_flux_to_->Clear();
  ClearHasBit(_impl_._has_bits_[0], 0x00000002U);
}
DecoderProto::DecoderProto(::google::protobuf::Arena* PROTOBUF_NULLABLE arena)
#if defined(PROTOBUF_CUSTOM_VTABLE)
    : Super_(arena, DecoderProto_get_class_data()) {
#else   // PROTOBUF_CUSTOM_VTABLE
    : Super_(arena) {
#endif  // PROTOBUF_CUSTOM_VTABLE
  SharedCtor(arena);
  // @@protoc_insertion_point(arena_constructor:DecoderProto)
}
PROTOBUF_NDEBUG_INLINE DecoderProto::Impl_::Impl_(
    [[maybe_unused]] ::google::protobuf::internal::InternalVisibility visibility,
    [[maybe_unused]] ::google::protobuf::Arena* PROTOBUF_NULLABLE arena, const Impl_& from,
    [[maybe_unused]] const ::DecoderProto& from_msg)
      : _has_bits_{from._has_bits_},
        write_csv_to_(arena, from.write_csv_to_),
        format_{},
        _oneof_case_{from._oneof_case_[0]} {}

DecoderProto::DecoderProto(
    ::google::protobuf::Arena* PROTOBUF_NULLABLE arena,
    const DecoderProto& from)
#if defined(PROTOBUF_CUSTOM_VTABLE)
    : Super_(arena, DecoderProto_get_class_data()) {

#else   // PROTOBUF_CUSTOM_VTABLE
    : Super_(arena) {
#endif  // PROTOBUF_CUSTOM_VTABLE
  DecoderProto* const _this = this;
  (void)_this;
  _internal_metadata_.MergeFrom<::google::protobuf::UnknownFieldSet>(
      from._internal_metadata_);
  new (&_impl_) Impl_(internal_visibility(), arena, from._impl_, from);
  ::uint32_t cached_has_bits = _impl_._has_bits_[0];
  _impl_.copy_flux_to_ = (CheckHasBit(cached_has_bits, 0x00000002U))
                 ? Super_::CopyConstruct(arena, *from._impl_.copy_flux_to_)
                 : nullptr;
  ::memcpy(reinterpret_cast<char*>(&_impl_) +
               offsetof(Impl_, dump_sectors_),
           reinterpret_cast<const char*>(&from._impl_) +
               offsetof(Impl_, dump_sectors_),
           offsetof(Impl_, flux_scale_) -
               offsetof(Impl_, dump_sectors_) +
               sizeof(Impl_::flux_scale_));
  switch (format_case()) {
    case FORMAT_NOT_SET:
      break;
      case kAeslanier:
        _impl_.format_.aeslanier_ = Super_::CopyConstruct(arena, *from._impl_.format_.aeslanier_);
        break;
      case kAgat:
        _impl_.format_.agat_ = Super_::CopyConstruct(arena, *from._impl_.format_.agat_);
        break;
      case kAmiga:
        _impl_.format_.amiga_ = Super_::CopyConstruct(arena, *from._impl_.format_.amiga_);
        break;
      case kApple2:
        _impl_.format_.apple2_ = Super_::CopyConstruct(arena, *from._impl_.format_.apple2_);
        break;
      case kBrother:
        _impl_.format_.brother_ = Super_::CopyConstruct(arena, *from._impl_.format_.brother_);
        break;
      case kC64:
        _impl_.format_.c64_ = Super_::CopyConstruct(arena, *from._impl_.format_.c64_);
        break;
      case kF85:
        _impl_.format_.f85_ = Super_::CopyConstruct(arena, *from._impl_.format_.f85_);
        break;
      case kFb100:
        _impl_.format_.fb100_ = Super_::CopyConstruct(arena, *from._impl_.format_.fb100_);
        break;
      case kIbm:
        _impl_.format_.ibm_ = Super_::CopyConstruct(arena, *from._impl_.format_.ibm_);
        break;
      case kMacintosh:
        _impl_.format_.macintosh_ = Super_::CopyConstruct(arena, *from._impl_.format_.macintosh_);
        break;
      case kMicropolis:
        _impl_.format_.micropolis_ = Super_::CopyConstruct(arena, *from._impl_.format_.micropolis_);
        break;
      case kMx:
        _impl_.format_.mx_ = Super_::CopyConstruct(arena, *from._impl_.format_.mx_);
        break;
      case kNorthstar:
        _impl_.format_.northstar_ = Super_::CopyConstruct(arena, *from._impl_.format_.northstar_);
        break;
      case kRolandd20:
        _impl_.format_.rolandd20_ = Super_::CopyConstruct(arena, *from._impl_.format_.rolandd20_);
        break;
      case kSmaky6:
        _impl_.format_.smaky6_ = Super_::CopyConstruct(arena, *from._impl_.format_.smaky6_);
        break;
      case kTartu:
        _impl_.format_.tartu_ = Super_::CopyConstruct(arena, *from._impl_.format_.tartu_);
        break;
      case kTids990:
        _impl_.format_.tids990_ = Super_::CopyConstruct(arena, *from._impl_.format_.tids990_);
        break;
      case kVictor9K:
        _impl_.format_.victor9k_ = Super_::CopyConstruct(arena, *from._impl_.format_.victor9k_);
        break;
      case kZilogmcz:
        _impl_.format_.zilogmcz_ = Super_::CopyConstruct(arena, *from._impl_.format_.zilogmcz_);
        break;
  }

  // @@protoc_insertion_point(copy_constructor:DecoderProto)
}
PROTOBUF_NDEBUG_INLINE DecoderProto::Impl_::Impl_(
    [[maybe_unused]] ::google::protobuf::internal::InternalVisibility visibility,
    [[maybe_unused]] ::google::protobuf::Arena* PROTOBUF_NULLABLE arena)
      : write_csv_to_(arena),
        pulse_debounce_threshold_{0.3},
        bit_error_threshold_{0.4},
        minimum_clock_us_{0.75},
        pll_adjust_{0.04},
        retries_{5},
        skip_unnecessary_tracks_{true},
        pll_phase_{0.6},
        flux_scale_{1},
        format_{},
        _oneof_case_{} {}

inline void DecoderProto::SharedCtor(::_pb::Arena* PROTOBUF_NULLABLE arena) {
  new (&_impl_) Impl_(internal_visibility(), arena);
  ::memset(reinterpret_cast<char*>(&_impl_) +
               offsetof(Impl_, copy_flux_to_),
           0,
           offsetof(Impl_, dump_records_) -
               offsetof(Impl_, copy_flux_to_) +
               sizeof(Impl_::dump_records_));
}
DecoderProto::~DecoderProto() {
  // @@protoc_insertion_point(destructor:DecoderProto)
  SharedDtor(*this);
}
inline void DecoderProto::SharedDtor(MessageLite& self) {
  DecoderProto& this_ = static_cast<DecoderProto&>(self);
  if constexpr (::_pbi::DebugHardenCheckHasBitConsistency()) {
    this_.CheckHasBitConsistency();
  }
  this_._internal_metadata_.Delete<::google::protobuf::UnknownFieldSet>();
  ABSL_DCHECK(this_.GetArena() == nullptr);
  this_._impl_.write_csv_to_.Destroy();
  delete this_._impl_.copy_flux_to_;
  if (this_.has_format()) {
    this_.clear_format();
  }
  this_._impl_.~Impl_();
}

void DecoderProto::clear_format() {
// @@protoc_insertion_point(one_of_clear_start:DecoderProto)
  ::google::protobuf::internal::TSanWrite(&_impl_);
  switch (format_case()) {
    case kAeslanier: {
      if (GetArena() == nullptr) {
        delete _impl_.format_.aeslanier_;
      } else if (::google::protobuf::internal::DebugHardenClearOneofMessageOnArena()) {
        ::google::protobuf::internal::MaybePoisonAfterClear(_impl_.format_.aeslanier_);
      }
      break;
    }
    case kAgat: {
      if (GetArena() == nullptr) {
        delete _impl_.format_.agat_;
      } else if (::google::protobuf::internal::DebugHardenClearOneofMessageOnArena()) {
        ::google::protobuf::internal::MaybePoisonAfterClear(_impl_.format_.agat_);
      }
      break;
    }
    case kAmiga: {
      if (GetArena() == nullptr) {
        delete _impl_.format_.amiga_;
      } else if (::google::protobuf::internal::DebugHardenClearOneofMessageOnArena()) {
        ::google::protobuf::internal::MaybePoisonAfterClear(_impl_.format_.amiga_);
      }
      break;
    }
    case kApple2: {
      if (GetArena() == nullptr) {
        delete _impl_.format_.apple2_;
      } else if (::google::protobuf::internal::DebugHardenClearOneofMessageOnArena()) {
        ::google::protobuf::internal::MaybePoisonAfterClear(_impl_.format_.apple2_);
      }
      break;
    }
    case kBrother: {
      if (GetArena() == nullptr) {
        delete _impl_.format_.brother_;
      } else if (::google::protobuf::internal::DebugHardenClearOneofMessageOnArena()) {
        ::google::protobuf::internal::MaybePoisonAfterClear(_impl_.format_.brother_);
      }
      break;
    }
    case kC64: {
      if (GetArena() == nullptr) {
        delete _impl_.format_.c64_;
      } else if (::google::protobuf::internal::DebugHardenClearOneofMessageOnArena()) {
        ::google::protobuf::internal::MaybePoisonAfterClear(_impl_.format_.c64_);
      }
      break;
    }
    case kF85: {
      if (GetArena() == nullptr) {
        delete _impl_.format_.f85_;
      } else if (::google::protobuf::internal::DebugHardenClearOneofMessageOnArena()) {
        ::google::protobuf::internal::MaybePoisonAfterClear(_impl_.format_.f85_);
      }
      break;
    }
    case kFb100: {
      if (GetArena() == nullptr) {
        delete _impl_.format_.fb100_;
      } else if (::google::protobuf::internal::DebugHardenClearOneofMessageOnArena()) {
        ::google::protobuf::internal::MaybePoisonAfterClear(_impl_.format_.fb100_);
      }
      break;
    }
    case kIbm: {
      if (GetArena() == nullptr) {
        delete _impl_.format_.ibm_;
      } else if (::google::protobuf::internal::DebugHardenClearOneofMessageOnArena()) {
        ::google::protobuf::internal::MaybePoisonAfterClear(_impl_.format_.ibm_);
      }
      break;
    }
    case kMacintosh: {
      if (GetArena() == nullptr) {
        delete _impl_.format_.macintosh_;
      } else if (::google::protobuf::internal::DebugHardenClearOneofMessageOnArena()) {
        ::google::protobuf::internal::MaybePoisonAfterClear(_impl_.format_.macintosh_);
      }
      break;
    }
    case kMicropolis: {
      if (GetArena() == nullptr) {
        delete _impl_.format_.micropolis_;
      } else if (::google::protobuf::internal::DebugHardenClearOneofMessageOnArena()) {
        ::google::protobuf::internal::MaybePoisonAfterClear(_impl_.format_.micropolis_);
      }
      break;
    }
    case kMx: {
      if (GetArena() == nullptr) {
        delete _impl_.format_.mx_;
      } else if (::google::protobuf::internal::DebugHardenClearOneofMessageOnArena()) {
        ::google::protobuf::internal::MaybePoisonAfterClear(_impl_.format_.mx_);
      }
      break;
    }
    case kNorthstar: {
      if (GetArena() == nullptr) {
        delete _impl_.format_.northstar_;
      } else if (::google::protobuf::internal::DebugHardenClearOneofMessageOnArena()) {
        ::google::protobuf::internal::MaybePoisonAfterClear(_impl_.format_.northstar_);
      }
      break;
    }
    case kRolandd20: {
      if (GetArena() == nullptr) {
        delete _impl_.format_.rolandd20_;
      } else if (::google::protobuf::internal::DebugHardenClearOneofMessageOnArena()) {
        ::google::protobuf::internal::MaybePoisonAfterClear(_impl_.format_.rolandd20_);
      }
      break;
    }
    case kSmaky6: {
      if (GetArena() == nullptr) {
        delete _impl_.format_.smaky6_;
      } else if (::google::protobuf::internal::DebugHardenClearOneofMessageOnArena()) {
        ::google::protobuf::internal::MaybePoisonAfterClear(_impl_.format_.smaky6_);
      }
      break;
    }
    case kTartu: {
      if (GetArena() == nullptr) {
        delete _impl_.format_.tartu_;
      } else if (::google::protobuf::internal::DebugHardenClearOneofMessageOnArena()) {
        ::google::protobuf::internal::MaybePoisonAfterClear(_impl_.format_.tartu_);
      }
      break;
    }
    case kTids990: {
      if (GetArena() == nullptr) {
        delete _impl_.format_.tids990_;
      } else if (::google::protobuf::internal::DebugHardenClearOneofMessageOnArena()) {
        ::google::protobuf::internal::MaybePoisonAfterClear(_impl_.format_.tids990_);
      }
      break;
    }
    case kVictor9K: {
      if (GetArena() == nullptr) {
        delete _impl_.format_.victor9k_;
      } else if (::google::protobuf::internal::DebugHardenClearOneofMessageOnArena()) {
        ::google::protobuf::internal::MaybePoisonAfterClear(_impl_.format_.victor9k_);
      }
      break;
    }
    case kZilogmcz: {
      if (GetArena() == nullptr) {
        delete _impl_.format_.zilogmcz_;
      } else if (::google::protobuf::internal::DebugHardenClearOneofMessageOnArena()) {
        ::google::protobuf::internal::MaybePoisonAfterClear(_impl_.format_.zilogmcz_);
      }
      break;
    }
    case FORMAT_NOT_SET: {
      break;
    }
  }
  _impl_._oneof_case_[0] = FORMAT_NOT_SET;
}


#ifndef PROTOBUF_MESSAGE_GLOBALS
PROTOBUF_CONSTINIT PROTOBUF_ATTRIBUTE_INIT_PRIORITY1 const
    ::google::protobuf::internal::ClassDataFull DecoderProto_class_data_ =
        DecoderProto::InternalGenerateClassData_(DecoderProto_globals_._default);

PROTOBUF_ATTRIBUTE_WEAK const ::google::protobuf::internal::ClassData* PROTOBUF_NONNULL
DecoderProto::GetClassData() const {
  ::google::protobuf::internal::PrefetchToLocalCache(&DecoderProto_class_data_);
  ::google::protobuf::internal::PrefetchToLocalCache(DecoderProto_class_data_.tc_table);
  return DecoderProto_class_data_.base();
}
#else
PROTOBUF_ATTRIBUTE_WEAK const ::google::protobuf::internal::ClassData* PROTOBUF_NONNULL
DecoderProto::GetClassData() const {
  ::google::protobuf::internal::PrefetchToLocalCache(&DecoderProto_globals_);
  ::google::protobuf::internal::PrefetchToLocalCache(
      ::google::protobuf::internal::MessageGlobalsBase::ToParseTableBase(&DecoderProto_globals_));
  return DecoderProto_globals_.GetClassData();
}
#endif  // !PROTOBUF_MESSAGE_GLOBALS
#ifndef PROTOBUF_MESSAGE_GLOBALS
PROTOBUF_CONSTINIT
PROTOBUF_ATTRIBUTE_INIT_PRIORITY1 const DecoderProto::ParseTableT_
    DecoderProto::_table_ =
        DecoderProto::InternalGenerateParseTable_(DecoderProto_class_data_.base());
#endif  // !PROTOBUF_MESSAGE_GLOBALS
PROTOBUF_NOINLINE void DecoderProto::Clear() {
  auto& this_ [[maybe_unused]] = *this;
  // @@protoc_insertion_point(message_clear_start:DecoderProto)
  ::google::protobuf::internal::TSanWrite(&_impl_);
  ::uint32_t cached_has_bits [[maybe_unused]] = 0;

  cached_has_bits = this_._impl_._has_bits_[0];
  if (BatchCheckHasBit(cached_has_bits, 0x00000003U)) {
    if (CheckHasBit(cached_has_bits, 0x00000001U)) {
      this_._impl_.write_csv_to_.ClearNonDefaultToEmpty();
    }
    if (CheckHasBit(cached_has_bits, 0x00000002U)) {
      ABSL_DCHECK(this_._impl_.copy_flux_to_ != nullptr);
      this_._impl_.copy_flux_to_->Clear();
    }
  }
  ::memset(&this_._impl_.dump_sectors_, 0,
           static_cast<::size_t>(
               reinterpret_cast<char*>(&this_._impl_.dump_records_) -
               reinterpret_cast<char*>(&this_._impl_.dump_sectors_)) +
               sizeof(_impl_.dump_records_));
  if (BatchCheckHasBit(cached_has_bits, 0x000000f0U)) {
    this_._impl_.pulse_debounce_threshold_ = 0.3;
    this_._impl_.bit_error_threshold_ = 0.4;
    this_._impl_.minimum_clock_us_ = 0.75;
    this_._impl_.pll_adjust_ = 0.04;
  }
  if (BatchCheckHasBit(cached_has_bits, 0x00000f00U)) {
    this_._impl_.retries_ = 5;
    this_._impl_.skip_unnecessary_tracks_ = true;
    this_._impl_.pll_phase_ = 0.6;
    this_._impl_.flux_scale_ = 1;
  }
  clear_format();
  _impl_._has_bits_.Clear();
  _internal_metadata_.Clear<::google::protobuf::UnknownFieldSet>();
}

#if defined(PROTOBUF_CUSTOM_VTABLE)
::uint8_t* PROTOBUF_NONNULL DecoderProto::_InternalSerialize(
    const ::google::protobuf::MessageLite& base, ::uint8_t* PROTOBUF_NONNULL target,
    ::google::protobuf::io::EpsCopyOutputStream* PROTOBUF_NONNULL stream) {
  const DecoderProto& this_ = static_cast<const DecoderProto&>(base);
#else   // PROTOBUF_CUSTOM_VTABLE
::uint8_t* PROTOBUF_NONNULL DecoderProto::_InternalSerialize(
    ::uint8_t* PROTOBUF_NONNULL target,
    ::google::protobuf::io::EpsCopyOutputStream* PROTOBUF_NONNULL stream) const {
  const DecoderProto& this_ = *this;
#endif  // PROTOBUF_CUSTOM_VTABLE
  if constexpr (::_pbi::DebugHardenCheckHasBitConsistency()) {
    this_.CheckHasBitConsistency();
  }
  // @@protoc_insertion_point(serialize_to_array_start:DecoderProto)
  ::uint32_t cached_has_bits = 0;
  (void)cached_has_bits;

  cached_has_bits = this_._impl_._has_bits_[0];
  // optional double pulse_debounce_threshold = 1 [default = 0.3, json_name = "pulseDebounceThreshold", (.help) = "ignore pulses with intervals shorter than this, in fractions of a clock"];
  if (CheckHasBit(cached_has_bits, 0x00000010U)) {
    target = stream->EnsureSpace(target);
    target = ::_pbi::WireFormatLite::WriteDoubleToArray(
        1, this_._internal_pulse_debounce_threshold(), target);
  }

  // optional double bit_error_threshold = 2 [default = 0.4, json_name = "bitErrorThreshold", (.help) = "amount of error to tolerate in pulse timing, in fractions of a clock"];
  if (CheckHasBit(cached_has_bits, 0x00000020U)) {
    target = stream->EnsureSpace(target);
    target = ::_pbi::WireFormatLite::WriteDoubleToArray(
        2, this_._internal_bit_error_threshold(), target);
  }

  // optional double minimum_clock_us = 4 [default = 0.75, json_name = "minimumClockUs", (.help) = "refuse to detect clocks shorter than this, to avoid false positives"];
  if (CheckHasBit(cached_has_bits, 0x00000040U)) {
    target = stream->EnsureSpace(target);
    target = ::_pbi::WireFormatLite::WriteDoubleToArray(
        4, this_._internal_minimum_clock_us(), target);
  }

  switch (this_.format_case()) {
    case kIbm: {
      target = ::google::protobuf::internal::WireFormatLite::InternalWriteMessage(
          5, *this_._impl_.format_.ibm_, this_._impl_.format_.ibm_->GetCachedSize(), target,
          stream);
      break;
    }
    case kBrother: {
      target = ::google::protobuf::internal::WireFormatLite::InternalWriteMessage(
          6, *this_._impl_.format_.brother_, this_._impl_.format_.brother_->GetCachedSize(), target,
          stream);
      break;
    }
    case kAeslanier: {
      target = ::google::protobuf::internal::WireFormatLite::InternalWriteMessage(
          7, *this_._impl_.format_.aeslanier_, this_._impl_.format_.aeslanier_->GetCachedSize(), target,
          stream);
      break;
    }
    case kAmiga: {
      target = ::google::protobuf::internal::WireFormatLite::InternalWriteMessage(
          8, *this_._impl_.format_.amiga_, this_._impl_.format_.amiga_->GetCachedSize(), target,
          stream);
      break;
    }
    case kC64: {
      target = ::google::protobuf::internal::WireFormatLite::InternalWriteMessage(
          9, *this_._impl_.format_.c64_, this_._impl_.format_.c64_->GetCachedSize(), target,
          stream);
      break;
    }
    case kF85: {
      target = ::google::protobuf::internal::WireFormatLite::InternalWriteMessage(
          10, *this_._impl_.format_.f85_, this_._impl_.format_.f85_->GetCachedSize(), target,
          stream);
      break;
    }
    case kFb100: {
      target = ::google::protobuf::internal::WireFormatLite::InternalWriteMessage(
          11, *this_._impl_.format_.fb100_, this_._impl_.format_.fb100_->GetCachedSize(), target,
          stream);
      break;
    }
    case kMacintosh: {
      target = ::google::protobuf::internal::WireFormatLite::InternalWriteMessage(
          12, *this_._impl_.format_.macintosh_, this_._impl_.format_.macintosh_->GetCachedSize(), target,
          stream);
      break;
    }
    case kApple2: {
      target = ::google::protobuf::internal::WireFormatLite::InternalWriteMessage(
          13, *this_._impl_.format_.apple2_, this_._impl_.format_.apple2_->GetCachedSize(), target,
          stream);
      break;
    }
    case kMicropolis: {
      target = ::google::protobuf::internal::WireFormatLite::InternalWriteMessage(
          14, *this_._impl_.format_.micropolis_, this_._impl_.format_.micropolis_->GetCachedSize(), target,
          stream);
      break;
    }
    case kMx: {
      target = ::google::protobuf::internal::WireFormatLite::InternalWriteMessage(
          15, *this_._impl_.format_.mx_, this_._impl_.format_.mx_->GetCachedSize(), target,
          stream);
      break;
    }
    case kTids990: {
      target = ::google::protobuf::internal::WireFormatLite::InternalWriteMessage(
          16, *this_._impl_.format_.tids990_, this_._impl_.format_.tids990_->GetCachedSize(), target,
          stream);
      break;
    }
    case kVictor9K: {
      target = ::google::protobuf::internal::WireFormatLite::InternalWriteMessage(
          17, *this_._impl_.format_.victor9k_, this_._impl_.format_.victor9k_->GetCachedSize(), target,
          stream);
      break;
    }
    case kZilogmcz: {
      target = ::google::protobuf::internal::WireFormatLite::InternalWriteMessage(
          18, *this_._impl_.format_.zilogmcz_, this_._impl_.format_.zilogmcz_->GetCachedSize(), target,
          stream);
      break;
    }
    default:
      break;
  }
  // optional .FluxSinkProto copy_flux_to = 19 [json_name = "copyFluxTo", (.help) = "while decoding, write a copy of the flux here"];
  if (CheckHasBit(cached_has_bits, 0x00000002U)) {
    target = ::google::protobuf::internal::WireFormatLite::InternalWriteMessage(
        19, *this_._impl_.copy_flux_to_, this_._impl_.copy_flux_to_->GetCachedSize(), target,
        stream);
  }

  // optional bool dump_records = 20 [default = false, json_name = "dumpRecords", (.help) = "if set, then dump the parsed but undecoded disk records"];
  if (CheckHasBit(cached_has_bits, 0x00000008U)) {
    target = stream->EnsureSpace(target);
    target = ::_pbi::WireFormatLite::WriteBoolToArray(
        20, this_._internal_dump_records(), target);
  }

  // optional bool dump_sectors = 21 [default = false, json_name = "dumpSectors", (.help) = "if set, then dump the decoded sectors to this file"];
  if (CheckHasBit(cached_has_bits, 0x00000004U)) {
    target = stream->EnsureSpace(target);
    target = ::_pbi::WireFormatLite::WriteBoolToArray(
        21, this_._internal_dump_sectors(), target);
  }

  // optional int32 retries = 22 [default = 5, json_name = "retries", (.help) = "how many times to retry each track in the event of a read failure"];
  if (CheckHasBit(cached_has_bits, 0x00000100U)) {
    target = stream->EnsureSpace(target);
    target = ::_pbi::WireFormatLite::WriteInt32ToArray(
        22, this_._internal_retries(), target);
  }

  // optional string write_csv_to = 23 [json_name = "writeCsvTo", (.help) = "if set, write a CSV report of the disk state"];
  if (CheckHasBit(cached_has_bits, 0x00000001U)) {
    const ::std::string& _s = this_._internal_write_csv_to();
    target = stream->WriteStringMaybeAliased(23, _s, target);
  }

  // .NorthstarDecoderProto northstar = 24 [json_name = "northstar"];
  if (this_.format_case() == kNorthstar) {
    target = ::google::protobuf::internal::WireFormatLite::InternalWriteMessage(
        24, *this_._impl_.format_.northstar_, this_._impl_.format_.northstar_->GetCachedSize(), target,
        stream);
  }

  // optional double pll_adjust = 25 [default = 0.04, json_name = "pllAdjust"];
  if (CheckHasBit(cached_has_bits, 0x00000080U)) {
    target = stream->EnsureSpace(target);
    target = ::_pbi::WireFormatLite::WriteDoubleToArray(
        25, this_._internal_pll_adjust(), target);
  }

  // optional double pll_phase = 26 [default = 0.6, json_name = "pllPhase"];
  if (CheckHasBit(cached_has_bits, 0x00000400U)) {
    target = stream->EnsureSpace(target);
    target = ::_pbi::WireFormatLite::WriteDoubleToArray(
        26, this_._internal_pll_phase(), target);
  }

  // optional double flux_scale = 27 [default = 1, json_name = "fluxScale"];
  if (CheckHasBit(cached_has_bits, 0x00000800U)) {
    target = stream->EnsureSpace(target);
    target = ::_pbi::WireFormatLite::WriteDoubleToArray(
        27, this_._internal_flux_scale(), target);
  }

  // .AgatDecoderProto agat = 28 [json_name = "agat"];
  if (this_.format_case() == kAgat) {
    target = ::google::protobuf::internal::WireFormatLite::InternalWriteMessage(
        28, *this_._impl_.format_.agat_, this_._impl_.format_.agat_->GetCachedSize(), target,
        stream);
  }

  // optional bool skip_unnecessary_tracks = 29 [default = true, json_name = "skipUnnecessaryTracks", (.help) = "don\'t read tracks if we already have all necessary sectors"];
  if (CheckHasBit(cached_has_bits, 0x00000200U)) {
    target = stream->EnsureSpace(target);
    target = ::_pbi::WireFormatLite::WriteBoolToArray(
        29, this_._internal_skip_unnecessary_tracks(), target);
  }

  switch (this_.format_case()) {
    case kSmaky6: {
      target = ::google::protobuf::internal::WireFormatLite::InternalWriteMessage(
          30, *this_._impl_.format_.smaky6_, this_._impl_.format_.smaky6_->GetCachedSize(), target,
          stream);
      break;
    }
    case kRolandd20: {
      target = ::google::protobuf::internal::WireFormatLite::InternalWriteMessage(
          31, *this_._impl_.format_.rolandd20_, this_._impl_.format_.rolandd20_->GetCachedSize(), target,
          stream);
      break;
    }
    case kTartu: {
      target = ::google::protobuf::internal::WireFormatLite::InternalWriteMessage(
          32, *this_._impl_.format_.tartu_, this_._impl_.format_.tartu_->GetCachedSize(), target,
          stream);
      break;
    }
    default:
      break;
  }
  if (ABSL_PREDICT_FALSE(this_._internal_metadata_.have_unknown_fields())) {
    target =
        ::_pbi::WireFormat::InternalSerializeUnknownFieldsToArray(
            this_._internal_metadata_.unknown_fields<::google::protobuf::UnknownFieldSet>(::google::protobuf::UnknownFieldSet::default_instance), target, stream);
  }
  // @@protoc_insertion_point(serialize_to_array_end:DecoderProto)
  return target;
}

#if defined(PROTOBUF_CUSTOM_VTABLE)
::size_t DecoderProto::ByteSizeLong(const MessageLite& base) {
  const DecoderProto& this_ = static_cast<const DecoderProto&>(base);
#else   // PROTOBUF_CUSTOM_VTABLE
::size_t DecoderProto::ByteSizeLong() const {
  const DecoderProto& this_ = *this;
#endif  // PROTOBUF_CUSTOM_VTABLE
  // @@protoc_insertion_point(message_byte_size_start:DecoderProto)
  ::size_t total_size = 0;

  ::uint32_t cached_has_bits [[maybe_unused]] = 0;

  ::_pbi::Prefetch5LinesFrom7Lines(&this_);
  cached_has_bits = this_._impl_._has_bits_[0];
  total_size += ::absl::popcount(0x00000c80U & cached_has_bits) * 10;
  total_size += ::absl::popcount(0x00000070U & cached_has_bits) * 9;
  total_size += ::absl::popcount(0x0000020cU & cached_has_bits) * 3;
  if (BatchCheckHasBit(cached_has_bits, 0x00000003U)) {
    // optional string write_csv_to = 23 [json_name = "writeCsvTo", (.help) = "if set, write a CSV report of the disk state"];
    if (CheckHasBit(cached_has_bits, 0x00000001U)) {
      total_size += 2 + ::google::protobuf::internal::WireFormatLite::StringSize(
                                      this_._internal_write_csv_to());
    }
    // optional .FluxSinkProto copy_flux_to = 19 [json_name = "copyFluxTo", (.help) = "while decoding, write a copy of the flux here"];
    if (CheckHasBit(cached_has_bits, 0x00000002U)) {
      total_size += 2 +
                    ::google::protobuf::internal::WireFormatLite::MessageSize(*this_._impl_.copy_flux_to_);
    }
  }
   {
    // optional int32 retries = 22 [default = 5, json_name = "retries", (.help) = "how many times to retry each track in the event of a read failure"];
    if (CheckHasBit(cached_has_bits, 0x00000100U)) {
      total_size += 2 + ::_pbi::WireFormatLite::Int32Size(
                                      this_._internal_retries());
    }
  }
  switch (this_.format_case()) {
    // .AesLanierDecoderProto aeslanier = 7 [json_name = "aeslanier"];
    case kAeslanier: {
      total_size += 1 +
                    ::google::protobuf::internal::WireFormatLite::MessageSize(*this_._impl_.format_.aeslanier_);
      break;
    }
    // .AgatDecoderProto agat = 28 [json_name = "agat"];
    case kAgat: {
      total_size += 2 +
                    ::google::protobuf::internal::WireFormatLite::MessageSize(*this_._impl_.format_.agat_);
      break;
    }
    // .AmigaDecoderProto amiga = 8 [json_name = "amiga"];
    case kAmiga: {
      total_size += 1 +
                    ::google::protobuf::internal::WireFormatLite::MessageSize(*this_._impl_.format_.amiga_);
      break;
    }
    // .Apple2DecoderProto apple2 = 13 [json_name = "apple2"];
    case kApple2: {
      total_size += 1 +
                    ::google::protobuf::internal::WireFormatLite::MessageSize(*this_._impl_.format_.apple2_);
      break;
    }
    // .BrotherDecoderProto brother = 6 [json_name = "brother"];
    case kBrother: {
      total_size += 1 +
                    ::google::protobuf::internal::WireFormatLite::MessageSize(*this_._impl_.format_.brother_);
      break;
    }
    // .Commodore64DecoderProto c64 = 9 [json_name = "c64"];
    case kC64: {
      total_size += 1 +
                    ::google::protobuf::internal::WireFormatLite::MessageSize(*this_._impl_.format_.c64_);
      break;
    }
    // .F85DecoderProto f85 = 10 [json_name = "f85"];
    case kF85: {
      total_size += 1 +
                    ::google::protobuf::internal::WireFormatLite::MessageSize(*this_._impl_.format_.f85_);
      break;
    }
    // .Fb100DecoderProto fb100 = 11 [json_name = "fb100"];
    case kFb100: {
      total_size += 1 +
                    ::google::protobuf::internal::WireFormatLite::MessageSize(*this_._impl_.format_.fb100_);
      break;
    }
    // .IbmDecoderProto ibm = 5 [json_name = "ibm"];
    case kIbm: {
      total_size += 1 +
                    ::google::protobuf::internal::WireFormatLite::MessageSize(*this_._impl_.format_.ibm_);
      break;
    }
    // .MacintoshDecoderProto macintosh = 12 [json_name = "macintosh"];
    case kMacintosh: {
      total_size += 1 +
                    ::google::protobuf::internal::WireFormatLite::MessageSize(*this_._impl_.format_.macintosh_);
      break;
    }
    // .MicropolisDecoderProto micropolis = 14 [json_name = "micropolis"];
    case kMicropolis: {
      total_size += 1 +
                    ::google::protobuf::internal::WireFormatLite::MessageSize(*this_._impl_.format_.micropolis_);
      break;
    }
    // .MxDecoderProto mx = 15 [json_name = "mx"];
    case kMx: {
      total_size += 1 +
                    ::google::protobuf::internal::WireFormatLite::MessageSize(*this_._impl_.format_.mx_);
      break;
    }
    // .NorthstarDecoderProto northstar = 24 [json_name = "northstar"];
    case kNorthstar: {
      total_size += 2 +
                    ::google::protobuf::internal::WireFormatLite::MessageSize(*this_._impl_.format_.northstar_);
      break;
    }
    // .RolandD20DecoderProto rolandd20 = 31 [json_name = "rolandd20"];
    case kRolandd20: {
      total_size += 2 +
                    ::google::protobuf::internal::WireFormatLite::MessageSize(*this_._impl_.format_.rolandd20_);
      break;
    }
    // .Smaky6DecoderProto smaky6 = 30 [json_name = "smaky6"];
    case kSmaky6: {
      total_size += 2 +
                    ::google::protobuf::internal::WireFormatLite::MessageSize(*this_._impl_.format_.smaky6_);
      break;
    }
    // .TartuDecoderProto tartu = 32 [json_name = "tartu"];
    case kTartu: {
      total_size += 2 +
                    ::google::protobuf::internal::WireFormatLite::MessageSize(*this_._impl_.format_.tartu_);
      break;
    }
    // .Tids990DecoderProto tids990 = 16 [json_name = "tids990"];
    case kTids990: {
      total_size += 2 +
                    ::google::protobuf::internal::WireFormatLite::MessageSize(*this_._impl_.format_.tids990_);
      break;
    }
    // .Victor9kDecoderProto victor9k = 17 [json_name = "victor9k"];
    case kVictor9K: {
      total_size += 2 +
                    ::google::protobuf::internal::WireFormatLite::MessageSize(*this_._impl_.format_.victor9k_);
      break;
    }
    // .ZilogMczDecoderProto zilogmcz = 18 [json_name = "zilogmcz"];
    case kZilogmcz: {
      total_size += 2 +
                    ::google::protobuf::internal::WireFormatLite::MessageSize(*this_._impl_.format_.zilogmcz_);
      break;
    }
    case FORMAT_NOT_SET: {
      break;
    }
  }
  return this_.MaybeComputeUnknownFieldsSize(total_size,
                                             &this_._impl_._cached_size_);
}

void DecoderProto::MergeImpl(::google::protobuf::MessageLite& to_msg,
                      const ::google::protobuf::MessageLite& from_msg) {
   auto* const _this = static_cast<DecoderProto*>(&to_msg);
  auto& from = static_cast<const DecoderProto&>(from_msg);
  if constexpr (::_pbi::DebugHardenCheckHasBitConsistency()) {
    from.CheckHasBitConsistency();
  }
  ::google::protobuf::Arena* arena = _this->GetArena();
  // @@protoc_insertion_point(class_specific_merge_from_start:DecoderProto)
  ABSL_DCHECK_NE(&from, _this);
  ::uint32_t cached_has_bits = 0;
  (void)cached_has_bits;

  cached_has_bits = from._impl_._has_bits_[0];
  if (BatchCheckHasBit(cached_has_bits, 0x000000ffU)) {
    if (CheckHasBit(cached_has_bits, 0x00000001U)) {
      _this->_internal_set_write_csv_to(from._internal_write_csv_to());
    }
    if (CheckHasBit(cached_has_bits, 0x00000002U)) {
      ABSL_DCHECK(from._impl_.copy_flux_to_ != nullptr);
      if (_this->_impl_.copy_flux_to_ == nullptr) {
        _this->_impl_.copy_flux_to_ = Super_::CopyConstruct(arena, *from._impl_.copy_flux_to_);
      } else {
        _this->_impl_.copy_flux_to_->MergeFrom(*from._impl_.copy_flux_to_);
      }
    }
    if (CheckHasBit(cached_has_bits, 0x00000004U)) {
      _this->_impl_.dump_sectors_ = from._impl_.dump_sectors_;
    }
    if (CheckHasBit(cached_has_bits, 0x00000008U)) {
      _this->_impl_.dump_records_ = from._impl_.dump_records_;
    }
    if (CheckHasBit(cached_has_bits, 0x00000010U)) {
      _this->_impl_.pulse_debounce_threshold_ = from._impl_.pulse_debounce_threshold_;
    }
    if (CheckHasBit(cached_has_bits, 0x00000020U)) {
      _this->_impl_.bit_error_threshold_ = from._impl_.bit_error_threshold_;
    }
    if (CheckHasBit(cached_has_bits, 0x00000040U)) {
      _this->_impl_.minimum_clock_us_ = from._impl_.minimum_clock_us_;
    }
    if (CheckHasBit(cached_has_bits, 0x00000080U)) {
      _this->_impl_.pll_adjust_ = from._impl_.pll_adjust_;
    }
  }
  if (BatchCheckHasBit(cached_has_bits, 0x00000f00U)) {
    if (CheckHasBit(cached_has_bits, 0x00000100U)) {
      _this->_impl_.retries_ = from._impl_.retries_;
    }
    if (CheckHasBit(cached_has_bits, 0x00000200U)) {
      _this->_impl_.skip_unnecessary_tracks_ = from._impl_.skip_unnecessary_tracks_;
    }
    if (CheckHasBit(cached_has_bits, 0x00000400U)) {
      _this->_impl_.pll_phase_ = from._impl_.pll_phase_;
    }
    if (CheckHasBit(cached_has_bits, 0x00000800U)) {
      _this->_impl_.flux_scale_ = from._impl_.flux_scale_;
    }
  }
  _this->_impl_._has_bits_[0] |= cached_has_bits;
  if (const uint32_t oneof_from_case =
          from._impl_._oneof_case_[0]) {
    const uint32_t oneof_to_case = _this->_impl_._oneof_case_[0];
    const bool oneof_needs_init = oneof_to_case != oneof_from_case;
    if (oneof_needs_init) {
      if (oneof_to_case != 0) {
        _this->clear_format();
      }
      _this->_impl_._oneof_case_[0] = oneof_from_case;
    }

    switch (oneof_from_case) {
      case kAeslanier: {
        if (oneof_needs_init) {
          _this->_impl_.format_.aeslanier_ = Super_::CopyConstruct(arena, *from._impl_.format_.aeslanier_);
        } else {
          _this->_impl_.format_.aeslanier_->MergeFrom(*from._impl_.format_.aeslanier_);
        }
        break;
      }
      case kAgat: {
        if (oneof_needs_init) {
          _this->_impl_.format_.agat_ = Super_::CopyConstruct(arena, *from._impl_.format_.agat_);
        } else {
          _this->_impl_.format_.agat_->MergeFrom(*from._impl_.format_.agat_);
        }
        break;
      }
      case kAmiga: {
        if (oneof_needs_init) {
          _this->_impl_.format_.amiga_ = Super_::CopyConstruct(arena, *from._impl_.format_.amiga_);
        } else {
          _this->_impl_.format_.amiga_->MergeFrom(*from._impl_.format_.amiga_);
        }
        break;
      }
      case kApple2: {
        if (oneof_needs_init) {
          _this->_impl_.format_.apple2_ = Super_::CopyConstruct(arena, *from._impl_.format_.apple2_);
        } else {
          _this->_impl_.format_.apple2_->MergeFrom(*from._impl_.format_.apple2_);
        }
        break;
      }
      case kBrother: {
        if (oneof_needs_init) {
          _this->_impl_.format_.brother_ = Super_::CopyConstruct(arena, *from._impl_.format_.brother_);
        } else {
          _this->_impl_.format_.brother_->MergeFrom(*from._impl_.format_.brother_);
        }
        break;
      }
      case kC64: {
        if (oneof_needs_init) {
          _this->_impl_.format_.c64_ = Super_::CopyConstruct(arena, *from._impl_.format_.c64_);
        } else {
          _this->_impl_.format_.c64_->MergeFrom(*from._impl_.format_.c64_);
        }
        break;
      }
      case kF85: {
        if (oneof_needs_init) {
          _this->_impl_.format_.f85_ = Super_::CopyConstruct(arena, *from._impl_.format_.f85_);
        } else {
          _this->_impl_.format_.f85_->MergeFrom(*from._impl_.format_.f85_);
        }
        break;
      }
      case kFb100: {
        if (oneof_needs_init) {
          _this->_impl_.format_.fb100_ = Super_::CopyConstruct(arena, *from._impl_.format_.fb100_);
        } else {
          _this->_impl_.format_.fb100_->MergeFrom(*from._impl_.format_.fb100_);
        }
        break;
      }
      case kIbm: {
        if (oneof_needs_init) {
          _this->_impl_.format_.ibm_ = Super_::CopyConstruct(arena, *from._impl_.format_.ibm_);
        } else {
          _this->_impl_.format_.ibm_->MergeFrom(*from._impl_.format_.ibm_);
        }
        break;
      }
      case kMacintosh: {
        if (oneof_needs_init) {
          _this->_impl_.format_.macintosh_ = Super_::CopyConstruct(arena, *from._impl_.format_.macintosh_);
        } else {
          _this->_impl_.format_.macintosh_->MergeFrom(*from._impl_.format_.macintosh_);
        }
        break;
      }
      case kMicropolis: {
        if (oneof_needs_init) {
          _this->_impl_.format_.micropolis_ = Super_::CopyConstruct(arena, *from._impl_.format_.micropolis_);
        } else {
          _this->_impl_.format_.micropolis_->MergeFrom(*from._impl_.format_.micropolis_);
        }
        break;
      }
      case kMx: {
        if (oneof_needs_init) {
          _this->_impl_.format_.mx_ = Super_::CopyConstruct(arena, *from._impl_.format_.mx_);
        } else {
          _this->_impl_.format_.mx_->MergeFrom(*from._impl_.format_.mx_);
        }
        break;
      }
      case kNorthstar: {
        if (oneof_needs_init) {
          _this->_impl_.format_.northstar_ = Super_::CopyConstruct(arena, *from._impl_.format_.northstar_);
        } else {
          _this->_impl_.format_.northstar_->MergeFrom(*from._impl_.format_.northstar_);
        }
        break;
      }
      case kRolandd20: {
        if (oneof_needs_init) {
          _this->_impl_.format_.rolandd20_ = Super_::CopyConstruct(arena, *from._impl_.format_.rolandd20_);
        } else {
          _this->_impl_.format_.rolandd20_->MergeFrom(*from._impl_.format_.rolandd20_);
        }
        break;
      }
      case kSmaky6: {
        if (oneof_needs_init) {
          _this->_impl_.format_.smaky6_ = Super_::CopyConstruct(arena, *from._impl_.format_.smaky6_);
        } else {
          _this->_impl_.format_.smaky6_->MergeFrom(*from._impl_.format_.smaky6_);
        }
        break;
      }
      case kTartu: {
        if (oneof_needs_init) {
          _this->_impl_.format_.tartu_ = Super_::CopyConstruct(arena, *from._impl_.format_.tartu_);
        } else {
          _this->_impl_.format_.tartu_->MergeFrom(*from._impl_.format_.tartu_);
        }
        break;
      }
      case kTids990: {
        if (oneof_needs_init) {
          _this->_impl_.format_.tids990_ = Super_::CopyConstruct(arena, *from._impl_.format_.tids990_);
        } else {
          _this->_impl_.format_.tids990_->MergeFrom(*from._impl_.format_.tids990_);
        }
        break;
      }
      case kVictor9K: {
        if (oneof_needs_init) {
          _this->_impl_.format_.victor9k_ = Super_::CopyConstruct(arena, *from._impl_.format_.victor9k_);
        } else {
          _this->_impl_.format_.victor9k_->MergeFrom(*from._impl_.format_.victor9k_);
        }
        break;
      }
      case kZilogmcz: {
        if (oneof_needs_init) {
          _this->_impl_.format_.zilogmcz_ = Super_::CopyConstruct(arena, *from._impl_.format_.zilogmcz_);
        } else {
          _this->_impl_.format_.zilogmcz_->MergeFrom(*from._impl_.format_.zilogmcz_);
        }
        break;
      }
      case FORMAT_NOT_SET:
        break;
    }
  }
  _this->_internal_metadata_.MergeFrom<::google::protobuf::UnknownFieldSet>(
      from._internal_metadata_);
}

void DecoderProto::CopyFrom(const DecoderProto& from) {
  // @@protoc_insertion_point(class_specific_copy_from_start:DecoderProto)
  if (&from == this) return;
  Clear();
  MergeFrom(from);
}


void DecoderProto::InternalSwap(DecoderProto* PROTOBUF_RESTRICT PROTOBUF_NONNULL other) {
  using ::std::swap;
  auto* arena = GetArena();
  ABSL_DCHECK_EQ(arena, other->GetArena());
  _internal_metadata_.InternalSwap(&other->_internal_metadata_);
  swap(_impl_._has_bits_[0], other->_impl_._has_bits_[0]);
  ::_pbi::ArenaStringPtr::InternalSwap(&_impl_.write_csv_to_, &other->_impl_.write_csv_to_, arena);
  ::google::protobuf::internal::memswap<
      PROTOBUF_FIELD_OFFSET(DecoderProto, _impl_.flux_scale_)
      + sizeof(DecoderProto::_impl_.flux_scale_)
      - PROTOBUF_FIELD_OFFSET(DecoderProto, _impl_.copy_flux_to_)>(
          reinterpret_cast<char*>(&_impl_.copy_flux_to_),
          reinterpret_cast<char*>(&other->_impl_.copy_flux_to_));
  swap(_impl_.format_, other->_impl_.format_);
  swap(_impl_._oneof_case_[0], other->_impl_._oneof_case_[0]);
}

::google::protobuf::Metadata DecoderProto::GetMetadata() const {
  return Super_::GetMetadataImpl(GetClassData()->full());
}
// @@protoc_insertion_point(namespace_scope)
namespace google {
namespace protobuf {
}  // namespace protobuf
}  // namespace google
// @@protoc_insertion_point(global_scope)
PROTOBUF_ATTRIBUTE_INIT_PRIORITY2 static ::std::false_type
    _static_init2_ [[maybe_unused]] =
        (::_pbi::AddDescriptors(&descriptor_table_lib_2fdecoders_2fdecoders_2eproto),
         ::std::false_type{});
#include "google/protobuf/port_undef.inc"
