anchor.diff:  
   -export_type([mvreg/0, mvreg_op/0]).
   
  --opaque mvreg() :: [{term(), riak_dt_vclock:vclock()}].
  -
  +-opaque mvreg() :: [{term(), riak_dt_vclock:vclock()}]. %[register_entry].
  +
  +%%-type register_entry() :: {term(), riak_dt_vclock:vclock()}.
   -type mvreg_op() :: {assign, term(), non_neg_integer()}  | {assign, term()} | {propagate, term(), term()}.
   
   -type mv_q() :: timestamp.
  
positive.code:     VEqual = V1 =:= V2,
      TSEqual = riak_dt_vclock:equal(TS1, TS2),
      if VEqual andalso TSEqual ->
              equal(T1, T2);
          true ->
              false
      end;
  eq(_, _) ->
      false.
  
  -spec stats(mvreg()) -> [{atom(), number()}].
  stats(MVReg) ->
      [{value_size, stat(value_size, MVReg)}].
  
  -spec stat(atom(), mvreg()) -> number() | undefined.
  stat(value_size, MVReg) ->
      Values = value(MVReg),
      TS = value(timestamp, MVReg),
  
negative.code:         false
      end.
  
  
  %% @doc Merge a `mvreg()' to another `mvreg()'. Note that the first `mvreg()' is local and can have multiple vector clocks,
  %% while the second one is remote and only has one vector clock.
  -spec merge_to(mvreg(), mvreg()) -> mvreg().
  merge_to([], MVReg2) ->
      MVReg2;
  merge_to([H|T], MVReg2) ->
      First = hd(MVReg2),
      {_, TS1} = H,
      {_, TS2} = First,
      D1 = riak_dt_vclock:dominates(TS2, TS1),
  