anchor.diff:  
   -spec min_timeout_value_ms() -> non_neg_integer() | none.
   min_timeout_value_ms() ->
  -    Now = now_timestamp_us(),
  +    NowNS = now_timestamp_ns(),
       case get(?PROCDIC_TICKS) of
           [] -> none;
           Ticks ->
  -            [#tick{ deadline_us=MinDeadlineUS } | _]
  -                = lists:keysort(#tick.deadline_us, Ticks),
  -            round(max(0, MinDeadlineUS - Now) / 1000)
  +            [#tick{ deadline_ns=MinDeadlineNS } | _]
  +                = lists:keysort(#tick.deadline_ns, Ticks),
  +            round(max(0, MinDeadlineNS - NowNS) / 1000000)
       end.
   
   -ifdef(pre18).
  --spec now_timestamp_us() -> non_neg_integer().
  -now_timestamp_us() ->
  +-spec now_timestamp_ns() -> timestamp().
  +now_timestamp_ns() ->
       {MegaSecs, Secs, MicroSecs} = os:timestamp(),
  -    (((MegaSecs * 1000000) + Secs) * 1000000) + MicroSecs.
  +    ((((MegaSecs * 1000000) + Secs) * 1000000) + MicroSecs) * 1000.
   -else.
  --spec now_timestamp_us() -> integer().
  -now_timestamp_us() ->
  -    erlang:monotonic_time(micro_seconds).
  +-spec now_timestamp_ns() -> timestamp().
  +now_timestamp_ns() ->
  +    erlang:monotonic_time(nano_seconds).
   -endif.
   
   -spec split_start_options([start_option()]) -> {[{ticks, tick_start_option()}],
  
positive.code: 
  -record(tick, {
            id :: term(),
            duration_us :: pos_integer(),
            deadline_us :: non_neg_integer(),
            generation :: non_neg_integer()
  }).
  -type tick() :: #tick{}.
  
negative.code: 
  -type tick_start_option() :: {TickId :: term(), TickDuration :: pos_integer()}.
  -export_type([tick_start_option/0]).
  
  -ifdef(pre18).
  -type timestamp() :: non_neg_integer().
  -else.
  -type timestamp() :: integer().
  -endif.
  
  %% ------------------------------------------------------------------
  %% API Function Definitions
  