anchor.diff:      empty(Neighbors).
   
   %% @doc Hashes the key to the identifier space.
  +-spec hash_key(client_key()) -> key().
   hash_key(Key) -> hash_key_(Key).
   
   %% @doc Hashes the key to the identifier space (internal function to allow
   %%      use in e.g. get_random_node_id without dialyzer complaining about the
   %%      opaque key type).
  +-spec hash_key_(client_key()) -> key_t().
   hash_key_(Key) ->
       <<N:128>> = erlang:md5(client_key_to_binary(Key)),
       N.
  
positive.code: %%      Begin==End, the whole key range is split in halves.
  %%      Beware: SplitFactor must be in [0, 1]; the final key will be rounded
  %%      down and may thus be Begin.
  get_split_key(Begin, _End, {Num, _Denom}) when Num == 0 -> Begin;
  get_split_key(_Begin, End, {Num, Denom}) when Num == Denom -> End;
  get_split_key(Begin, End, {Num, Denom}) ->
  
negative.code: %% userdevguide-begin rt_frtchord:init_stabilize
  %% @doc Triggered by a new stabilization round, renews the routing table.
  %% TODO
  -spec init_stabilize(nodelist:neighborhood(), rt()) -> rt().
  init_stabilize(Neighbors, _RT) -> empty(Neighbors).
  %% userdevguide-end rt_frtchord:init_stabilize
  
  