anchor.diff:  
   %% @doc O(e^n) comparer
   -spec exponential(pos_integer()) -> float().
  -exponential(N) -> math:pow(2.71828182845904523536028747135266249775724709369995, N).
  +exponential(N) -> math:pow(2.718281828459045, N).
   
   %% ====================================================================
   %% Internal functions
  
positive.code:     true -> ?INFO("RawData:~n\t~p~n", [RawData]);
      false -> ok
    end,
    SortedBy2 = lists:keysort(2, [{K, V, M} || {K, V, M} <- RawData, V =/= error, M =/= error]),
    SortedBy3 = lists:keysort(3, [{K, V, M} || {K, V, M} <- RawData, V =/= error, M =/= error]),
    Outliers =
      [{K, error, M} || {K, error, M} <- RawData] ++ [{K, V, error} || {K, V, error} <- RawData] ++
        lists:sublist(lists:reverse(SortedBy2), 1, erlang:trunc(proplists:get_value(outliers, Options, 20)/2) + 1) ++
        lists:sublist(lists:reverse(SortedBy3), 1, erlang:trunc(proplists:get_value(outliers, Options, 20)/2) + 1),
    Data =
      [case lists:member({K,V,M}, Outliers) of
         true -> {K, 0, M};
         false -> {K, V, M}
       end || {K,V,M} <- Results],
    Top = lists:max([erlang:max(V, M) || {_, V, M} <- Data]),
    Bottom = erlang:trunc(lists:min([erlang:min(V, M) || {_, V, M} <- Data, V > 0, M > 0]) / 2),
    Step = 
  
negative.code:         (Top - Bottom) / proplists:get_value(rows, Options, 70)
      end,
    graph(Top, Bottom, Step, proplists:get_value(symbols, Options, #symbols{}), Data).
  
  remove_outliers(RawData, Options) ->
      SortedBy2 = lists:keysort(2, [{K, V, M} || {K, V, M} <- RawData, V =/= error, M =/= error]),
      SortedBy3 = lists:keysort(3, [{K, V, M} || {K, V, M} <- RawData, V =/= error, M =/= error]),
      Outliers =
        [{K, error, M} || {K, error, M} <- RawData] ++ [{K, V, error} || {K, V, error} <- RawData] ++
          lists:sublist(lists:reverse(SortedBy2), 1, erlang:trunc(proplists:get_value(outliers, Options, 20) / 2) + 1) ++
          lists:sublist(lists:reverse(SortedBy3), 1, erlang:trunc(proplists:get_value(outliers, Options, 20) / 2) + 1),
      [case lists:member({K,V,M}, Outliers) of
         true -> {K, 0, M};
         false -> {K, V, M}
       end || {K,V,M} <- RawData].
  
  graph(Top, Bottom, _Step, _Symbols, Data) when Top =< Bottom ->
    io:format("       ~s~n", [lists:duplicate(length(Data), $-)]),
  