package Sereal::Encoder::Constants;
use strict;
use warnings;
require Exporter;
our @ISA= qw(Exporter);

our $VERSION = '4.005'; # Don't forget to update the TestCompat set for testing against installed encoders!

our (@EXPORT_OK, %DEFINE, %TAG_INFO_HASH, @TAG_INFO_ARRAY);

our %EXPORT_TAGS= ( all => \@EXPORT_OK );
# start autoupdated section - do not modify directly

BEGIN {
    %DEFINE = (
      "SRL_HDR_ALIAS" => 46,
      "SRL_HDR_ARRAY" => 43,
      "SRL_HDR_ARRAYREF" => 64,
      "SRL_HDR_ARRAYREF_HIGH" => 79,
      "SRL_HDR_ARRAYREF_LOW" => 64,
      "SRL_HDR_BINARY" => 38,
      "SRL_HDR_CANONICAL_UNDEF" => 57,
      "SRL_HDR_COPY" => 47,
      "SRL_HDR_DOUBLE" => 35,
      "SRL_HDR_EXTEND" => 62,
      "SRL_HDR_FALSE" => 58,
      "SRL_HDR_FLOAT" => 34,
      "SRL_HDR_HASH" => 42,
      "SRL_HDR_HASHREF" => 80,
      "SRL_HDR_HASHREF_HIGH" => 95,
      "SRL_HDR_HASHREF_LOW" => 80,
      "SRL_HDR_LONG_DOUBLE" => 36,
      "SRL_HDR_MANY" => 60,
      "SRL_HDR_NEG" => 16,
      "SRL_HDR_NEG_HIGH" => 31,
      "SRL_HDR_NEG_LOW" => 16,
      "SRL_HDR_OBJECT" => 44,
      "SRL_HDR_OBJECTV" => 45,
      "SRL_HDR_OBJECTV_FREEZE" => 51,
      "SRL_HDR_OBJECT_FREEZE" => 50,
      "SRL_HDR_PACKET_START" => 61,
      "SRL_HDR_PAD" => 63,
      "SRL_HDR_POS" => 0,
      "SRL_HDR_POS_HIGH" => 15,
      "SRL_HDR_POS_LOW" => 0,
      "SRL_HDR_REFN" => 40,
      "SRL_HDR_REFP" => 41,
      "SRL_HDR_REGEXP" => 49,
      "SRL_HDR_RESERVED" => 52,
      "SRL_HDR_RESERVED_HIGH" => 56,
      "SRL_HDR_RESERVED_LOW" => 52,
      "SRL_HDR_SHORT_BINARY" => 96,
      "SRL_HDR_SHORT_BINARY_HIGH" => 127,
      "SRL_HDR_SHORT_BINARY_LOW" => 96,
      "SRL_HDR_STR_UTF8" => 39,
      "SRL_HDR_TRACK_FLAG" => 128,
      "SRL_HDR_TRUE" => 59,
      "SRL_HDR_UNDEF" => 37,
      "SRL_HDR_VARINT" => 32,
      "SRL_HDR_WEAKEN" => 48,
      "SRL_HDR_ZIGZAG" => 33,
      "SRL_MAGIC_STRING" => "=srl",
      "SRL_MAGIC_STRING_HIGHBIT" => "=\363rl",
      "SRL_MAGIC_STRING_HIGHBIT_UINT_BE" => "1039364716",
      "SRL_MAGIC_STRING_HIGHBIT_UINT_LE" => "1819472701",
      "SRL_MAGIC_STRING_HIGHBIT_UTF8" => "=\303\263rl",
      "SRL_MAGIC_STRING_HIGHBIT_UTF8_UINT_BE" => "1036235634",
      "SRL_MAGIC_STRING_HIGHBIT_UTF8_UINT_LE" => "1924383549",
      "SRL_MAGIC_STRING_UINT_BE" => "1030976108",
      "SRL_MAGIC_STRING_UINT_LE" => "1819439933",
      "SRL_MAGIC_STRLEN" => 4,
      "SRL_MASK_ARRAYREF_COUNT" => 15,
      "SRL_MASK_HASHREF_COUNT" => 15,
      "SRL_MASK_SHORT_BINARY_LEN" => 31,
      "SRL_NEG_MIN_SIZE" => 16,
      "SRL_POS_MAX_SIZE" => 15,
      "SRL_PROTOCOL_ENCODING_MASK" => 240,
      "SRL_PROTOCOL_ENCODING_RAW" => 0,
      "SRL_PROTOCOL_ENCODING_SNAPPY" => 16,
      "SRL_PROTOCOL_ENCODING_SNAPPY_INCREMENTAL" => 32,
      "SRL_PROTOCOL_ENCODING_ZLIB" => 48,
      "SRL_PROTOCOL_ENCODING_ZSTD" => 64,
      "SRL_PROTOCOL_HDR_CONTINUE" => 8,
      "SRL_PROTOCOL_HDR_USER_DATA" => 1,
      "SRL_PROTOCOL_VERSION" => 4,
      "SRL_PROTOCOL_VERSION_BITS" => 4,
      "SRL_PROTOCOL_VERSION_MASK" => 15
    );

}

use constant \%DEFINE;
push @EXPORT_OK, keys %DEFINE;
@TAG_INFO_ARRAY = (
  # autoupdated by author_tools/update_from_header.pl do not modify directly!
  {
    "comment" => "small positive integer - value in low 4 bits (identity)",
    "masked" => 1,
    "masked_val" => 0,
    "name" => "POS_0",
    "type_name" => "POS",
    "type_value" => 0,
    "value" => 0
  },
  # autoupdated by author_tools/update_from_header.pl do not modify directly!
  {
    "masked" => 1,
    "masked_val" => 1,
    "name" => "POS_1",
    "type_name" => "POS",
    "type_value" => 0,
    "value" => 1
  },
  # autoupdated by author_tools/update_from_header.pl do not modify directly!
  {
    "masked" => 1,
    "masked_val" => 2,
    "name" => "POS_2",
    "type_name" => "POS",
    "type_value" => 0,
    "value" => 2
  },
  # autoupdated by author_tools/update_from_header.pl do not modify directly!
  {
    "masked" => 1,
    "masked_val" => 3,
    "name" => "POS_3",
    "type_name" => "POS",
    "type_value" => 0,
    "value" => 3
  },
  # autoupdated by author_tools/update_from_header.pl do not modify directly!
  {
    "masked" => 1,
    "masked_val" => 4,
    "name" => "POS_4",
    "type_name" => "POS",
    "type_value" => 0,
    "value" => 4
  },
  # autoupdated by author_tools/update_from_header.pl do not modify directly!
  {
    "masked" => 1,
    "masked_val" => 5,
    "name" => "POS_5",
    "type_name" => "POS",
    "type_value" => 0,
    "value" => 5
  },
  # autoupdated by author_tools/update_from_header.pl do not modify directly!
  {
    "masked" => 1,
    "masked_val" => 6,
    "name" => "POS_6",
    "type_name" => "POS",
    "type_value" => 0,
    "value" => 6
  },
  # autoupdated by author_tools/update_from_header.pl do not modify directly!
  {
    "masked" => 1,
    "masked_val" => 7,
    "name" => "POS_7",
    "type_name" => "POS",
    "type_value" => 0,
    "value" => 7
  },
  # autoupdated by author_tools/update_from_header.pl do not modify directly!
  {
    "masked" => 1,
    "masked_val" => 8,
    "name" => "POS_8",
    "type_name" => "POS",
    "type_value" => 0,
    "value" => 8
  },
  # autoupdated by author_tools/update_from_header.pl do not modify directly!
  {
    "masked" => 1,
    "masked_val" => 9,
    "name" => "POS_9",
    "type_name" => "POS",
    "type_value" => 0,
    "value" => 9
  },
  # autoupdated by author_tools/update_from_header.pl do not modify directly!
  {
    "masked" => 1,
    "masked_val" => 10,
    "name" => "POS_10",
    "type_name" => "POS",
    "type_value" => 0,
    "value" => 10
  },
  # autoupdated by author_tools/update_from_header.pl do not modify directly!
  {
    "masked" => 1,
    "masked_val" => 11,
    "name" => "POS_11",
    "type_name" => "POS",
    "type_value" => 0,
    "value" => 11
  },
  # autoupdated by author_tools/update_from_header.pl do not modify directly!
  {
    "masked" => 1,
    "masked_val" => 12,
    "name" => "POS_12",
    "type_name" => "POS",
    "type_value" => 0,
    "value" => 12
  },
  # autoupdated by author_tools/update_from_header.pl do not modify directly!
  {
    "masked" => 1,
    "masked_val" => 13,
    "name" => "POS_13",
    "type_name" => "POS",
    "type_value" => 0,
    "value" => 13
  },
  # autoupdated by author_tools/update_from_header.pl do not modify directly!
  {
    "masked" => 1,
    "masked_val" => 14,
    "name" => "POS_14",
    "type_name" => "POS",
    "type_value" => 0,
    "value" => 14
  },
  # autoupdated by author_tools/update_from_header.pl do not modify directly!
  {
    "masked" => 1,
    "masked_val" => 15,
    "name" => "POS_15",
    "type_name" => "POS",
    "type_value" => 0,
    "value" => 15
  },
  # autoupdated by author_tools/update_from_header.pl do not modify directly!
  {
    "comment" => "small negative integer - value in low 4 bits (k+32)",
    "masked" => 1,
    "masked_val" => 16,
    "name" => "NEG_16",
    "type_name" => "NEG",
    "type_value" => 16,
    "value" => 16
  },
  # autoupdated by author_tools/update_from_header.pl do not modify directly!
  {
    "masked" => 1,
    "masked_val" => 15,
    "name" => "NEG_15",
    "type_name" => "NEG",
    "type_value" => 16,
    "value" => 17
  },
  # autoupdated by author_tools/update_from_header.pl do not modify directly!
  {
    "masked" => 1,
    "masked_val" => 14,
    "name" => "NEG_14",
    "type_name" => "NEG",
    "type_value" => 16,
    "value" => 18
  },
  # autoupdated by author_tools/update_from_header.pl do not modify directly!
  {
    "masked" => 1,
    "masked_val" => 13,
    "name" => "NEG_13",
    "type_name" => "NEG",
    "type_value" => 16,
    "value" => 19
  },
  # autoupdated by author_tools/update_from_header.pl do not modify directly!
  {
    "masked" => 1,
    "masked_val" => 12,
    "name" => "NEG_12",
    "type_name" => "NEG",
    "type_value" => 16,
    "value" => 20
  },
  # autoupdated by author_tools/update_from_header.pl do not modify directly!
  {
    "masked" => 1,
    "masked_val" => 11,
    "name" => "NEG_11",
    "type_name" => "NEG",
    "type_value" => 16,
    "value" => 21
  },
  # autoupdated by author_tools/update_from_header.pl do not modify directly!
  {
    "masked" => 1,
    "masked_val" => 10,
    "name" => "NEG_10",
    "type_name" => "NEG",
    "type_value" => 16,
    "value" => 22
  },
  # autoupdated by author_tools/update_from_header.pl do not modify directly!
  {
    "masked" => 1,
    "masked_val" => 9,
    "name" => "NEG_9",
    "type_name" => "NEG",
    "type_value" => 16,
    "value" => 23
  },
  # autoupdated by author_tools/update_from_header.pl do not modify directly!
  {
    "masked" => 1,
    "masked_val" => 8,
    "name" => "NEG_8",
    "type_name" => "NEG",
    "type_value" => 16,
    "value" => 24
  },
  # autoupdated by author_tools/update_from_header.pl do not modify directly!
  {
    "masked" => 1,
    "masked_val" => 7,
    "name" => "NEG_7",
    "type_name" => "NEG",
    "type_value" => 16,
    "value" => 25
  },
  # autoupdated by author_tools/update_from_header.pl do not modify directly!
  {
    "masked" => 1,
    "masked_val" => 6,
    "name" => "NEG_6",
    "type_name" => "NEG",
    "type_value" => 16,
    "value" => 26
  },
  # autoupdated by author_tools/update_from_header.pl do not modify directly!
  {
    "masked" => 1,
    "masked_val" => 5,
    "name" => "NEG_5",
    "type_name" => "NEG",
    "type_value" => 16,
    "value" => 27
  },
  # autoupdated by author_tools/update_from_header.pl do not modify directly!
  {
    "masked" => 1,
    "masked_val" => 4,
    "name" => "NEG_4",
    "type_name" => "NEG",
    "type_value" => 16,
    "value" => 28
  },
  # autoupdated by author_tools/update_from_header.pl do not modify directly!
  {
    "masked" => 1,
    "masked_val" => 3,
    "name" => "NEG_3",
    "type_name" => "NEG",
    "type_value" => 16,
    "value" => 29
  },
  # autoupdated by author_tools/update_from_header.pl do not modify directly!
  {
    "masked" => 1,
    "masked_val" => 2,
    "name" => "NEG_2",
    "type_name" => "NEG",
    "type_value" => 16,
    "value" => 30
  },
  # autoupdated by author_tools/update_from_header.pl do not modify directly!
  {
    "masked" => 1,
    "masked_val" => 1,
    "name" => "NEG_1",
    "type_name" => "NEG",
    "type_value" => 16,
    "value" => 31
  },
  # autoupdated by author_tools/update_from_header.pl do not modify directly!
  {
    "comment" => "<VARINT> - Varint variable length integer",
    "name" => "VARINT",
    "type_name" => "VARINT",
    "type_value" => 32,
    "value" => 32
  },
  # autoupdated by author_tools/update_from_header.pl do not modify directly!
  {
    "comment" => "<ZIGZAG-VARINT> - Zigzag variable length integer",
    "name" => "ZIGZAG",
    "type_name" => "ZIGZAG",
    "type_value" => 33,
    "value" => 33
  },
  # autoupdated by author_tools/update_from_header.pl do not modify directly!
  {
    "comment" => "<IEEE-FLOAT>",
    "name" => "FLOAT",
    "type_name" => "FLOAT",
    "type_value" => 34,
    "value" => 34
  },
  # autoupdated by author_tools/update_from_header.pl do not modify directly!
  {
    "comment" => "<IEEE-DOUBLE>",
    "name" => "DOUBLE",
    "type_name" => "DOUBLE",
    "type_value" => 35,
    "value" => 35
  },
  # autoupdated by author_tools/update_from_header.pl do not modify directly!
  {
    "comment" => "<IEEE-LONG-DOUBLE>",
    "name" => "LONG_DOUBLE",
    "type_name" => "LONG_DOUBLE",
    "type_value" => 36,
    "value" => 36
  },
  # autoupdated by author_tools/update_from_header.pl do not modify directly!
  {
    "comment" => "None - Perl undef var; eg my \$var= undef;",
    "name" => "UNDEF",
    "type_name" => "UNDEF",
    "type_value" => 37,
    "value" => 37
  },
  # autoupdated by author_tools/update_from_header.pl do not modify directly!
  {
    "comment" => "<LEN-VARINT> <BYTES> - binary/(latin1) string",
    "name" => "BINARY",
    "type_name" => "BINARY",
    "type_value" => 38,
    "value" => 38
  },
  # autoupdated by author_tools/update_from_header.pl do not modify directly!
  {
    "comment" => "<LEN-VARINT> <UTF8> - utf8 string",
    "name" => "STR_UTF8",
    "type_name" => "STR_UTF8",
    "type_value" => 39,
    "value" => 39
  },
  # autoupdated by author_tools/update_from_header.pl do not modify directly!
  {
    "comment" => "<ITEM-TAG>    - ref to next item",
    "name" => "REFN",
    "type_name" => "REFN",
    "type_value" => 40,
    "value" => 40
  },
  # autoupdated by author_tools/update_from_header.pl do not modify directly!
  {
    "comment" => "<OFFSET-VARINT> - ref to previous item stored at offset",
    "name" => "REFP",
    "type_name" => "REFP",
    "type_value" => 41,
    "value" => 41
  },
  # autoupdated by author_tools/update_from_header.pl do not modify directly!
  {
    "comment" => "<COUNT-VARINT> [<KEY-TAG> <ITEM-TAG> ...] - count followed by key/value pairs",
    "name" => "HASH",
    "type_name" => "HASH",
    "type_value" => 42,
    "value" => 42
  },
  # autoupdated by author_tools/update_from_header.pl do not modify directly!
  {
    "comment" => "<COUNT-VARINT> [<ITEM-TAG> ...] - count followed by items",
    "name" => "ARRAY",
    "type_name" => "ARRAY",
    "type_value" => 43,
    "value" => 43
  },
  # autoupdated by author_tools/update_from_header.pl do not modify directly!
  {
    "comment" => "<STR-TAG> <ITEM-TAG> - class, object-item",
    "name" => "OBJECT",
    "type_name" => "OBJECT",
    "type_value" => 44,
    "value" => 44
  },
  # autoupdated by author_tools/update_from_header.pl do not modify directly!
  {
    "comment" => "<OFFSET-VARINT> <ITEM-TAG> - offset of previously used classname tag - object-item",
    "name" => "OBJECTV",
    "type_name" => "OBJECTV",
    "type_value" => 45,
    "value" => 45
  },
  # autoupdated by author_tools/update_from_header.pl do not modify directly!
  {
    "comment" => "<OFFSET-VARINT> - alias to item defined at offset",
    "name" => "ALIAS",
    "type_name" => "ALIAS",
    "type_value" => 46,
    "value" => 46
  },
  # autoupdated by author_tools/update_from_header.pl do not modify directly!
  {
    "comment" => "<OFFSET-VARINT> - copy of item defined at offset",
    "name" => "COPY",
    "type_name" => "COPY",
    "type_value" => 47,
    "value" => 47
  },
  # autoupdated by author_tools/update_from_header.pl do not modify directly!
  {
    "comment" => "<REF-TAG> - Weaken the following reference",
    "name" => "WEAKEN",
    "type_name" => "WEAKEN",
    "type_value" => 48,
    "value" => 48
  },
  # autoupdated by author_tools/update_from_header.pl do not modify directly!
  {
    "comment" => "<PATTERN-STR-TAG> <MODIFIERS-STR-TAG>",
    "name" => "REGEXP",
    "type_name" => "REGEXP",
    "type_value" => 49,
    "value" => 49
  },
  # autoupdated by author_tools/update_from_header.pl do not modify directly!
  {
    "comment" => "<STR-TAG> <ITEM-TAG> - class, object-item. Need to call \"THAW\" method on class after decoding",
    "name" => "OBJECT_FREEZE",
    "type_name" => "OBJECT_FREEZE",
    "type_value" => 50,
    "value" => 50
  },
  # autoupdated by author_tools/update_from_header.pl do not modify directly!
  {
    "comment" => "<OFFSET-VARINT> <ITEM-TAG> - (OBJECTV_FREEZE is to OBJECT_FREEZE as OBJECTV is to OBJECT)",
    "name" => "OBJECTV_FREEZE",
    "type_name" => "OBJECTV_FREEZE",
    "type_value" => 51,
    "value" => 51
  },
  # autoupdated by author_tools/update_from_header.pl do not modify directly!
  {
    "comment" => "reserved",
    "masked" => 1,
    "masked_val" => 0,
    "name" => "RESERVED_0",
    "type_name" => "RESERVED",
    "type_value" => 52,
    "value" => 52
  },
  # autoupdated by author_tools/update_from_header.pl do not modify directly!
  {
    "masked" => 1,
    "masked_val" => 1,
    "name" => "RESERVED_1",
    "type_name" => "RESERVED",
    "type_value" => 52,
    "value" => 53
  },
  # autoupdated by author_tools/update_from_header.pl do not modify directly!
  {
    "masked" => 1,
    "masked_val" => 2,
    "name" => "RESERVED_2",
    "type_name" => "RESERVED",
    "type_value" => 52,
    "value" => 54
  },
  # autoupdated by author_tools/update_from_header.pl do not modify directly!
  {
    "masked" => 1,
    "masked_val" => 3,
    "name" => "RESERVED_3",
    "type_name" => "RESERVED",
    "type_value" => 52,
    "value" => 55
  },
  # autoupdated by author_tools/update_from_header.pl do not modify directly!
  {
    "masked" => 1,
    "masked_val" => 4,
    "name" => "RESERVED_4",
    "type_name" => "RESERVED",
    "type_value" => 52,
    "value" => 56
  },
  # autoupdated by author_tools/update_from_header.pl do not modify directly!
  {
    "comment" => "undef (PL_sv_undef) - \"the\" Perl undef (see notes)",
    "name" => "CANONICAL_UNDEF",
    "type_name" => "CANONICAL_UNDEF",
    "type_value" => 57,
    "value" => 57
  },
  # autoupdated by author_tools/update_from_header.pl do not modify directly!
  {
    "comment" => "false (PL_sv_no)",
    "name" => "FALSE",
    "type_name" => "FALSE",
    "type_value" => 58,
    "value" => 58
  },
  # autoupdated by author_tools/update_from_header.pl do not modify directly!
  {
    "comment" => "true  (PL_sv_yes)",
    "name" => "TRUE",
    "type_name" => "TRUE",
    "type_value" => 59,
    "value" => 59
  },
  # autoupdated by author_tools/update_from_header.pl do not modify directly!
  {
    "comment" => "<LEN-VARINT> <TYPE-BYTE> <TAG-DATA> - repeated tag (not done yet, will be implemented in version 3)",
    "name" => "MANY",
    "type_name" => "MANY",
    "type_value" => 60,
    "value" => 60
  },
  # autoupdated by author_tools/update_from_header.pl do not modify directly!
  {
    "comment" => "(first byte of magic string in header)",
    "name" => "PACKET_START",
    "type_name" => "PACKET_START",
    "type_value" => 61,
    "value" => 61
  },
  # autoupdated by author_tools/update_from_header.pl do not modify directly!
  {
    "comment" => "<BYTE> - for additional tags",
    "name" => "EXTEND",
    "type_name" => "EXTEND",
    "type_value" => 62,
    "value" => 62
  },
  # autoupdated by author_tools/update_from_header.pl do not modify directly!
  {
    "comment" => "(ignored tag, skip to next byte)",
    "name" => "PAD",
    "type_name" => "PAD",
    "type_value" => 63,
    "value" => 63
  },
  # autoupdated by author_tools/update_from_header.pl do not modify directly!
  {
    "comment" => "[<ITEM-TAG> ...] - count of items in low 4 bits (ARRAY must be refcnt=1)",
    "masked" => 1,
    "masked_val" => 0,
    "name" => "ARRAYREF_0",
    "type_name" => "ARRAYREF",
    "type_value" => 64,
    "value" => 64
  },
  # autoupdated by author_tools/update_from_header.pl do not modify directly!
  {
    "masked" => 1,
    "masked_val" => 1,
    "name" => "ARRAYREF_1",
    "type_name" => "ARRAYREF",
    "type_value" => 64,
    "value" => 65
  },
  # autoupdated by author_tools/update_from_header.pl do not modify directly!
  {
    "masked" => 1,
    "masked_val" => 2,
    "name" => "ARRAYREF_2",
    "type_name" => "ARRAYREF",
    "type_value" => 64,
    "value" => 66
  },
  # autoupdated by author_tools/update_from_header.pl do not modify directly!
  {
    "masked" => 1,
    "masked_val" => 3,
    "name" => "ARRAYREF_3",
    "type_name" => "ARRAYREF",
    "type_value" => 64,
    "value" => 67
  },
  # autoupdated by author_tools/update_from_header.pl do not modify directly!
  {
    "masked" => 1,
    "masked_val" => 4,
    "name" => "ARRAYREF_4",
    "type_name" => "ARRAYREF",
    "type_value" => 64,
    "value" => 68
  },
  # autoupdated by author_tools/update_from_header.pl do not modify directly!
  {
    "masked" => 1,
    "masked_val" => 5,
    "name" => "ARRAYREF_5",
    "type_name" => "ARRAYREF",
    "type_value" => 64,
    "value" => 69
  },
  # autoupdated by author_tools/update_from_header.pl do not modify directly!
  {
    "masked" => 1,
    "masked_val" => 6,
    "name" => "ARRAYREF_6",
    "type_name" => "ARRAYREF",
    "type_value" => 64,
    "value" => 70
  },
  # autoupdated by author_tools/update_from_header.pl do not modify directly!
  {
    "masked" => 1,
    "masked_val" => 7,
    "name" => "ARRAYREF_7",
    "type_name" => "ARRAYREF",
    "type_value" => 64,
    "value" => 71
  },
  # autoupdated by author_tools/update_from_header.pl do not modify directly!
  {
    "masked" => 1,
    "masked_val" => 8,
    "name" => "ARRAYREF_8",
    "type_name" => "ARRAYREF",
    "type_value" => 64,
    "value" => 72
  },
  # autoupdated by author_tools/update_from_header.pl do not modify directly!
  {
    "masked" => 1,
    "masked_val" => 9,
    "name" => "ARRAYREF_9",
    "type_name" => "ARRAYREF",
    "type_value" => 64,
    "value" => 73
  },
  # autoupdated by author_tools/update_from_header.pl do not modify directly!
  {
    "masked" => 1,
    "masked_val" => 10,
    "name" => "ARRAYREF_10",
    "type_name" => "ARRAYREF",
    "type_value" => 64,
    "value" => 74
  },
  # autoupdated by author_tools/update_from_header.pl do not modify directly!
  {
    "masked" => 1,
    "masked_val" => 11,
    "name" => "ARRAYREF_11",
    "type_name" => "ARRAYREF",
    "type_value" => 64,
    "value" => 75
  },
  # autoupdated by author_tools/update_from_header.pl do not modify directly!
  {
    "masked" => 1,
    "masked_val" => 12,
    "name" => "ARRAYREF_12",
    "type_name" => "ARRAYREF",
    "type_value" => 64,
    "value" => 76
  },
  # autoupdated by author_tools/update_from_header.pl do not modify directly!
  {
    "masked" => 1,
    "masked_val" => 13,
    "name" => "ARRAYREF_13",
    "type_name" => "ARRAYREF",
    "type_value" => 64,
    "value" => 77
  },
  # autoupdated by author_tools/update_from_header.pl do not modify directly!
  {
    "masked" => 1,
    "masked_val" => 14,
    "name" => "ARRAYREF_14",
    "type_name" => "ARRAYREF",
    "type_value" => 64,
    "value" => 78
  },
  # autoupdated by author_tools/update_from_header.pl do not modify directly!
  {
    "masked" => 1,
    "masked_val" => 15,
    "name" => "ARRAYREF_15",
    "type_name" => "ARRAYREF",
    "type_value" => 64,
    "value" => 79
  },
  # autoupdated by author_tools/update_from_header.pl do not modify directly!
  {
    "comment" => "[<KEY-TAG> <ITEM-TAG> ...] - count in low 4 bits, key/value pairs (HASH must be refcnt=1)",
    "masked" => 1,
    "masked_val" => 0,
    "name" => "HASHREF_0",
    "type_name" => "HASHREF",
    "type_value" => 80,
    "value" => 80
  },
  # autoupdated by author_tools/update_from_header.pl do not modify directly!
  {
    "masked" => 1,
    "masked_val" => 1,
    "name" => "HASHREF_1",
    "type_name" => "HASHREF",
    "type_value" => 80,
    "value" => 81
  },
  # autoupdated by author_tools/update_from_header.pl do not modify directly!
  {
    "masked" => 1,
    "masked_val" => 2,
    "name" => "HASHREF_2",
    "type_name" => "HASHREF",
    "type_value" => 80,
    "value" => 82
  },
  # autoupdated by author_tools/update_from_header.pl do not modify directly!
  {
    "masked" => 1,
    "masked_val" => 3,
    "name" => "HASHREF_3",
    "type_name" => "HASHREF",
    "type_value" => 80,
    "value" => 83
  },
  # autoupdated by author_tools/update_from_header.pl do not modify directly!
  {
    "masked" => 1,
    "masked_val" => 4,
    "name" => "HASHREF_4",
    "type_name" => "HASHREF",
    "type_value" => 80,
    "value" => 84
  },
  # autoupdated by author_tools/update_from_header.pl do not modify directly!
  {
    "masked" => 1,
    "masked_val" => 5,
    "name" => "HASHREF_5",
    "type_name" => "HASHREF",
    "type_value" => 80,
    "value" => 85
  },
  # autoupdated by author_tools/update_from_header.pl do not modify directly!
  {
    "masked" => 1,
    "masked_val" => 6,
    "name" => "HASHREF_6",
    "type_name" => "HASHREF",
    "type_value" => 80,
    "value" => 86
  },
  # autoupdated by author_tools/update_from_header.pl do not modify directly!
  {
    "masked" => 1,
    "masked_val" => 7,
    "name" => "HASHREF_7",
    "type_name" => "HASHREF",
    "type_value" => 80,
    "value" => 87
  },
  # autoupdated by author_tools/update_from_header.pl do not modify directly!
  {
    "masked" => 1,
    "masked_val" => 8,
    "name" => "HASHREF_8",
    "type_name" => "HASHREF",
    "type_value" => 80,
    "value" => 88
  },
  # autoupdated by author_tools/update_from_header.pl do not modify directly!
  {
    "masked" => 1,
    "masked_val" => 9,
    "name" => "HASHREF_9",
    "type_name" => "HASHREF",
    "type_value" => 80,
    "value" => 89
  },
  # autoupdated by author_tools/update_from_header.pl do not modify directly!
  {
    "masked" => 1,
    "masked_val" => 10,
    "name" => "HASHREF_10",
    "type_name" => "HASHREF",
    "type_value" => 80,
    "value" => 90
  },
  # autoupdated by author_tools/update_from_header.pl do not modify directly!
  {
    "masked" => 1,
    "masked_val" => 11,
    "name" => "HASHREF_11",
    "type_name" => "HASHREF",
    "type_value" => 80,
    "value" => 91
  },
  # autoupdated by author_tools/update_from_header.pl do not modify directly!
  {
    "masked" => 1,
    "masked_val" => 12,
    "name" => "HASHREF_12",
    "type_name" => "HASHREF",
    "type_value" => 80,
    "value" => 92
  },
  # autoupdated by author_tools/update_from_header.pl do not modify directly!
  {
    "masked" => 1,
    "masked_val" => 13,
    "name" => "HASHREF_13",
    "type_name" => "HASHREF",
    "type_value" => 80,
    "value" => 93
  },
  # autoupdated by author_tools/update_from_header.pl do not modify directly!
  {
    "masked" => 1,
    "masked_val" => 14,
    "name" => "HASHREF_14",
    "type_name" => "HASHREF",
    "type_value" => 80,
    "value" => 94
  },
  # autoupdated by author_tools/update_from_header.pl do not modify directly!
  {
    "masked" => 1,
    "masked_val" => 15,
    "name" => "HASHREF_15",
    "type_name" => "HASHREF",
    "type_value" => 80,
    "value" => 95
  },
  # autoupdated by author_tools/update_from_header.pl do not modify directly!
  {
    "comment" => "<BYTES> - binary/latin1 string, length encoded in low 5 bits of tag",
    "masked" => 1,
    "masked_val" => 0,
    "name" => "SHORT_BINARY_0",
    "type_name" => "SHORT_BINARY",
    "type_value" => 96,
    "value" => 96
  },
  # autoupdated by author_tools/update_from_header.pl do not modify directly!
  {
    "masked" => 1,
    "masked_val" => 1,
    "name" => "SHORT_BINARY_1",
    "type_name" => "SHORT_BINARY",
    "type_value" => 96,
    "value" => 97
  },
  # autoupdated by author_tools/update_from_header.pl do not modify directly!
  {
    "masked" => 1,
    "masked_val" => 2,
    "name" => "SHORT_BINARY_2",
    "type_name" => "SHORT_BINARY",
    "type_value" => 96,
    "value" => 98
  },
  # autoupdated by author_tools/update_from_header.pl do not modify directly!
  {
    "masked" => 1,
    "masked_val" => 3,
    "name" => "SHORT_BINARY_3",
    "type_name" => "SHORT_BINARY",
    "type_value" => 96,
    "value" => 99
  },
  # autoupdated by author_tools/update_from_header.pl do not modify directly!
  {
    "masked" => 1,
    "masked_val" => 4,
    "name" => "SHORT_BINARY_4",
    "type_name" => "SHORT_BINARY",
    "type_value" => 96,
    "value" => 100
  },
  # autoupdated by author_tools/update_from_header.pl do not modify directly!
  {
    "masked" => 1,
    "masked_val" => 5,
    "name" => "SHORT_BINARY_5",
    "type_name" => "SHORT_BINARY",
    "type_value" => 96,
    "value" => 101
  },
  # autoupdated by author_tools/update_from_header.pl do not modify directly!
  {
    "masked" => 1,
    "masked_val" => 6,
    "name" => "SHORT_BINARY_6",
    "type_name" => "SHORT_BINARY",
    "type_value" => 96,
    "value" => 102
  },
  # autoupdated by author_tools/update_from_header.pl do not modify directly!
  {
    "masked" => 1,
    "masked_val" => 7,
    "name" => "SHORT_BINARY_7",
    "type_name" => "SHORT_BINARY",
    "type_value" => 96,
    "value" => 103
  },
  # autoupdated by author_tools/update_from_header.pl do not modify directly!
  {
    "masked" => 1,
    "masked_val" => 8,
    "name" => "SHORT_BINARY_8",
    "type_name" => "SHORT_BINARY",
    "type_value" => 96,
    "value" => 104
  },
  # autoupdated by author_tools/update_from_header.pl do not modify directly!
  {
    "masked" => 1,
    "masked_val" => 9,
    "name" => "SHORT_BINARY_9",
    "type_name" => "SHORT_BINARY",
    "type_value" => 96,
    "value" => 105
  },
  # autoupdated by author_tools/update_from_header.pl do not modify directly!
  {
    "masked" => 1,
    "masked_val" => 10,
    "name" => "SHORT_BINARY_10",
    "type_name" => "SHORT_BINARY",
    "type_value" => 96,
    "value" => 106
  },
  # autoupdated by author_tools/update_from_header.pl do not modify directly!
  {
    "masked" => 1,
    "masked_val" => 11,
    "name" => "SHORT_BINARY_11",
    "type_name" => "SHORT_BINARY",
    "type_value" => 96,
    "value" => 107
  },
  # autoupdated by author_tools/update_from_header.pl do not modify directly!
  {
    "masked" => 1,
    "masked_val" => 12,
    "name" => "SHORT_BINARY_12",
    "type_name" => "SHORT_BINARY",
    "type_value" => 96,
    "value" => 108
  },
  # autoupdated by author_tools/update_from_header.pl do not modify directly!
  {
    "masked" => 1,
    "masked_val" => 13,
    "name" => "SHORT_BINARY_13",
    "type_name" => "SHORT_BINARY",
    "type_value" => 96,
    "value" => 109
  },
  # autoupdated by author_tools/update_from_header.pl do not modify directly!
  {
    "masked" => 1,
    "masked_val" => 14,
    "name" => "SHORT_BINARY_14",
    "type_name" => "SHORT_BINARY",
    "type_value" => 96,
    "value" => 110
  },
  # autoupdated by author_tools/update_from_header.pl do not modify directly!
  {
    "masked" => 1,
    "masked_val" => 15,
    "name" => "SHORT_BINARY_15",
    "type_name" => "SHORT_BINARY",
    "type_value" => 96,
    "value" => 111
  },
  # autoupdated by author_tools/update_from_header.pl do not modify directly!
  {
    "masked" => 1,
    "masked_val" => 16,
    "name" => "SHORT_BINARY_16",
    "type_name" => "SHORT_BINARY",
    "type_value" => 96,
    "value" => 112
  },
  # autoupdated by author_tools/update_from_header.pl do not modify directly!
  {
    "masked" => 1,
    "masked_val" => 17,
    "name" => "SHORT_BINARY_17",
    "type_name" => "SHORT_BINARY",
    "type_value" => 96,
    "value" => 113
  },
  # autoupdated by author_tools/update_from_header.pl do not modify directly!
  {
    "masked" => 1,
    "masked_val" => 18,
    "name" => "SHORT_BINARY_18",
    "type_name" => "SHORT_BINARY",
    "type_value" => 96,
    "value" => 114
  },
  # autoupdated by author_tools/update_from_header.pl do not modify directly!
  {
    "masked" => 1,
    "masked_val" => 19,
    "name" => "SHORT_BINARY_19",
    "type_name" => "SHORT_BINARY",
    "type_value" => 96,
    "value" => 115
  },
  # autoupdated by author_tools/update_from_header.pl do not modify directly!
  {
    "masked" => 1,
    "masked_val" => 20,
    "name" => "SHORT_BINARY_20",
    "type_name" => "SHORT_BINARY",
    "type_value" => 96,
    "value" => 116
  },
  # autoupdated by author_tools/update_from_header.pl do not modify directly!
  {
    "masked" => 1,
    "masked_val" => 21,
    "name" => "SHORT_BINARY_21",
    "type_name" => "SHORT_BINARY",
    "type_value" => 96,
    "value" => 117
  },
  # autoupdated by author_tools/update_from_header.pl do not modify directly!
  {
    "masked" => 1,
    "masked_val" => 22,
    "name" => "SHORT_BINARY_22",
    "type_name" => "SHORT_BINARY",
    "type_value" => 96,
    "value" => 118
  },
  # autoupdated by author_tools/update_from_header.pl do not modify directly!
  {
    "masked" => 1,
    "masked_val" => 23,
    "name" => "SHORT_BINARY_23",
    "type_name" => "SHORT_BINARY",
    "type_value" => 96,
    "value" => 119
  },
  # autoupdated by author_tools/update_from_header.pl do not modify directly!
  {
    "masked" => 1,
    "masked_val" => 24,
    "name" => "SHORT_BINARY_24",
    "type_name" => "SHORT_BINARY",
    "type_value" => 96,
    "value" => 120
  },
  # autoupdated by author_tools/update_from_header.pl do not modify directly!
  {
    "masked" => 1,
    "masked_val" => 25,
    "name" => "SHORT_BINARY_25",
    "type_name" => "SHORT_BINARY",
    "type_value" => 96,
    "value" => 121
  },
  # autoupdated by author_tools/update_from_header.pl do not modify directly!
  {
    "masked" => 1,
    "masked_val" => 26,
    "name" => "SHORT_BINARY_26",
    "type_name" => "SHORT_BINARY",
    "type_value" => 96,
    "value" => 122
  },
  # autoupdated by author_tools/update_from_header.pl do not modify directly!
  {
    "masked" => 1,
    "masked_val" => 27,
    "name" => "SHORT_BINARY_27",
    "type_name" => "SHORT_BINARY",
    "type_value" => 96,
    "value" => 123
  },
  # autoupdated by author_tools/update_from_header.pl do not modify directly!
  {
    "masked" => 1,
    "masked_val" => 28,
    "name" => "SHORT_BINARY_28",
    "type_name" => "SHORT_BINARY",
    "type_value" => 96,
    "value" => 124
  },
  # autoupdated by author_tools/update_from_header.pl do not modify directly!
  {
    "masked" => 1,
    "masked_val" => 29,
    "name" => "SHORT_BINARY_29",
    "type_name" => "SHORT_BINARY",
    "type_value" => 96,
    "value" => 125
  },
  # autoupdated by author_tools/update_from_header.pl do not modify directly!
  {
    "masked" => 1,
    "masked_val" => 30,
    "name" => "SHORT_BINARY_30",
    "type_name" => "SHORT_BINARY",
    "type_value" => 96,
    "value" => 126
  },
  # autoupdated by author_tools/update_from_header.pl do not modify directly!
  {
    "masked" => 1,
    "masked_val" => 31,
    "name" => "SHORT_BINARY_31",
    "type_name" => "SHORT_BINARY",
    "type_value" => 96,
    "value" => 127
  }
);

$TAG_INFO_HASH{chr $_}= $TAG_INFO_ARRAY[$_] for 0 .. 127;
push @EXPORT_OK, qw(%TAG_INFO_HASH @TAG_INFO_ARRAY);

# stop autoupdated section - do not modify directly!
1;
