anchor.diff:  %%
   
   normalize_setopts(Opts) ->
  -    filtermap_opts(fun normalize_setopt/1, Opts).
  -
  -normalize_setopt(Opt) ->
  -    case Opt of
  -        {Tag, _Val} when is_atom(Tag) ->
  -            true;
  -        %%
  -        binary  -> {mode, binary};
  -        list    -> {mode, list};
  -        inet    -> {tcp_module, inet_tcp};
  -        inet6   -> {tcp_module, inet6_tcp};
  -        local   -> {tcp_module, local_tcp};
  -        {raw, Level, Key, Value} ->
  -            {raw, {Level, Key, Value}};
  -        %%
  +    [case Opt of
  +         binary                     -> {mode, binary};
  +         list                       -> {mode, list};
  +         inet                       -> {tcp_module, inet_tcp};
  +         inet6                      -> {tcp_module, inet6_tcp};
  +         local                      -> {tcp_module, local_tcp};
  +         {Tag, _} when is_atom(Tag) -> Opt;
  +         {raw, Level, Key, Value}   -> {raw, {Level, Key, Value}};
           _ ->
               exit(badarg)
  -    end.
  +     end || Opt <- Opts].
   
   normalize_getopts(Opts) ->
  -    filtermap_opts(fun normalize_getopt/1, Opts).
  -
  -normalize_getopt(Opt) ->
  -    case Opt of
  -        Tag when is_boolean(Tag) -> exit(badarg);
  -        Tag when is_atom(Tag)    -> true;
  -        {raw, _}                 -> true;
  -        {raw, Level, Key, Value} -> {raw, {Level, Key, Value}};
  -        _                        -> exit(badarg)
  -    end.
  +    [case Opt of
  +         Tag when is_atom(Tag)    -> Opt;
  +         {raw, _}                 -> Opt;
  +         {raw, Level, Key, Value} -> {raw, {Level, Key, Value}};
  +         _                        -> exit(badarg)
  +     end || Opt <- Opts].
   
   %%
   %% -------
   %% Split options into server start options and other options.
   %% Convert our {sys_debug, _} option into {debug, _} (the
   %% sys_debug option is how to pass a debug option to
  -%% gen_statem:start/3).  A {debug,VaL} opion is later
  -%% transformed into the socket option {{otp,debug}, Val}.
  +%% gen_statem:start/3).  A {debug,Val} option is
  +%% on the other hand a socket option and is later,
  +%% through socket_opts(),  transformed into the module
  +%% 'socket' option {{otp,debug}, Val}.
   %%
   
   split_start_opts(Opts) ->
  -    splitmap_opts(fun split_start_opt/1, Opts).
  -
  -split_start_opt(Opt) ->
  -    case Opt of
  -        {sys_debug, Val} -> {debug, Val};
  -        _                -> false
  -    end.
  +    {StartOpts,
  +     NonStartOpts} =
  +        lists:partition(
  +          fun ({sys_debug, _}) -> true;
  +              (_)              -> false
  +          end, Opts),
  +    {[case Opt of
  +          {sys_debug, Val} -> {debug, Val};
  +          _                -> Opt
  +      end || Opt <- StartOpts],
  +     NonStartOpts}.
   
   %%
   %% -------
  
positive.code: 
      process_flag(trap_exit, true),
      OwnerMon  = monitor(process, Owner),
      Proto     = if (Domain =:= local) -> default; true -> tcp end,
      Extra = #{}, % #{debug => true},
      case socket_open(Domain, Proto, ExtraOpts, Extra) of
          {ok, Socket} ->
              D  = server_opts(),
              ok = socket:setopt(Socket, {otp,iow}, true),
  
negative.code:         Server =
              val(ErrRef,
                  start_server(
                   ServerData, [{timeout, inet:timeout(Timer)} | StartOpts])),
          Socket =
              val({ErrRef, Server},
                  call(Server, {accept, ListenSocket, inet:timeout(Timer)})),
  