anchor.diff:  %%% Internal functions
   %%%===================================================================
   
  +update_timeline({Pid, PidList, Changes}, {Maped, Updated}, Data) ->
  +    Merged = merge_changes(Data, PidList, Changes),
  +    Map = #{pid => epl:to_bin(Pid),
  +            timeline => lists:map(fun({M, S}) ->
  +                                          #{message => to_string(M),
  +                                            state => to_string(S)}
  +                                  end, Merged)},
  +    {[Map|Maped], [{Pid, PidList, Merged}|Updated]}.
  +
   track_timeline(Pid) ->
       epl_tracer:track_timeline(Pid),
       {Pid, pid_to_list(Pid), []}.
  
positive.code:     NextSubs = lists:delete(Pid, Subs),
      {noreply, State#state{subscribers = NextSubs}};
  handle_cast({add, Pid}, State = #state{timelines = Timelines}) when is_pid(Pid) ->
      T = case lists:any(fun({P, _}) -> P == Pid end, Timelines) of
          true -> Timelines;
          _    -> [{Pid, track_timeline(Pid)}|Timelines]
          end,
      {noreply, State#state{timelines = T}};
  handle_cast({remove, Pid}, State = #state{timelines = Timelines}) when is_pid(Pid) ->
      NextTimelines = lists:filter(fun({P, _}) -> P /= Pid end, Timelines),
      {noreply, State#state{timelines = NextTimelines}};
  handle_cast(_Msg, State) ->
      {noreply, State}.
  
  handle_info({data, _, Data}, State = #state{subscribers = Subs, timelines = Times}) ->
      {Timelines, NewState} =
          lists:foldl(fun({Pid, {P, PidList, Changes}}, {Acc1, Acc2}) ->
                              Merged = get_changes(Data, PidList, Changes),
                              Map =
                                  #{pid =>
                                        epl:to_bin(Pid),
                                    timeline =>
                                        lists:map(fun({M, S}) ->
                                                          #{message =>
                                                                to_string(M),
                                                            state =>
                                                                to_string(S)}
                                                  end, Merged)},
                              Timeline = {P, PidList, Merged},
                              {[Map|Acc1], [{Pid,Timeline}|Acc2]}
                      end, {[], []}, Times),
      JSON = epl_json:encode(#{timelines => Timelines}, <<"timeline-info">>),
      [Pid ! {data, JSON} || Pid <- Subs],
      {noreply, State#state{timelines = NewState}}.
  
  terminate(_Reason, _State) ->
      ok.
  
negative.code:     S = io_lib:format("~p",[Data]),
      epl:to_bin(lists:flatten(S)).
  
  merge_changes(Data, Pid, Changes) ->
      parse_data(Data, Pid) ++ Changes.
  
  parse_data(Data, Pid) ->
  