anchor.diff:          more -> more;
           {ok, Value, Data1, Pos1} ->
               unmarshal_struct(S, Data1, [Value | Acc], Pos1, Endian)
  +    end.
  +
  +
  +unmarshal_dict(KeyType, ValueType, Length, Data, Pos, Endian) ->
  +    SubType = {struct, [KeyType, ValueType]},
  +    Pad = pad(padding(SubType), Pos),
  +    if 
  +        byte_size(Data) < Pad / 8 -> 
  +            more;
  +        true ->
  +            << 0:Pad, Rest/binary >> = Data,
  +            NewPos = Pos + Pad div 8,
  +            unmarshal_dict(KeyType, ValueType, Length, Rest, #{}, NewPos, Endian)
  +    end.
  +
  +
  +unmarshal_dict(_KeyType, _ValueType, 0, Data, Acc, Pos, _) ->
  +    {ok, Acc, Data, Pos};
  +
  +unmarshal_dict(KeyType, ValueType, Length, Data, Acc, Pos, Endian) when is_integer(Length), Length > 0 ->
  +    SubType = {struct, [KeyType, ValueType]},
  +    case unmarshal(SubType, Data, Pos, Endian) of
  +        more -> 
  +            more;
  +        {ok, {Key, Value}, Data1, Pos1} ->
  +            Size = Pos1 - Pos,
  +            unmarshal_dict(KeyType, ValueType, Length - Size, Data1, Acc#{ Key => Value }, Pos1, Endian)
       end.
   
   
  
positive.code:     {Res1, Pos1} = marshal(Type, Value, Pos),
      marshal_list(T, V, Pos1, [Res, Res1]).
  
  marshal(byte, Value, Pos) ->
      marshal_uint(1, Value, Pos);
  
  marshal(boolean, Value, Pos) ->
      Int =
          case Value of
              true -> 1;
  
negative.code:     marshal_array(SubType, R, Pos1, [Res, Value1]).
  
  
  marshal_dict(KeyType, ValueType, Value, Pos) when is_map(Value) ->
      marshal({array, {struct, [KeyType, ValueType]}}, maps:to_list(Value), Pos);
  
  marshal_dict(KeyType, ValueType, Value, Pos) when is_tuple(Value) ->
      marshal({array, {struct, [KeyType, ValueType]}}, dict:to_list(Value), Pos);
  
  marshal_dict(KeyType, ValueType, Value, Pos) when is_list(Value) ->
      marshal({array, {struct, [KeyType, ValueType]}}, Value, Pos).
  