anchor.diff:  cs_enumerated_avp({AvpName, Values}) ->
       lists:flatmap(fun(V) -> c_enumerated_avp(AvpName, V) end, Values).
   
  -c_enumerated_avp(AvpName, {I,_}) ->
  -    [{?clause, [?ATOM(decode), ?ATOM(AvpName), ?TERM(<<I:32/integer>>)],
  +c_enumerated_avp(AvpName, {_,I}) ->
  +    [{?clause, [?ATOM(decode), ?Atom(AvpName), ?TERM(<<I:32/integer>>)],
         [],
         [?TERM(I)]},
  -     {?clause, [?ATOM(encode), ?ATOM(AvpName), ?INTEGER(I)],
  +     {?clause, [?ATOM(encode), ?Atom(AvpName), ?INTEGER(I)],
         [],
         [?TERM(<<I:32/integer>>)]}].
   
  
positive.code:     Imported = lists:flatmap(fun avps/1, get_value(import_enums, Spec)),
      Groups = get_value(grouped, Spec)
          ++ lists:flatmap(fun avps/1, get_value(import_groups, Spec)),
      Enums = [T || {N,_} = T <- get_value(enums, Spec),
                    not lists:keymember(N, 1, Imported)]
          ++ Imported,
      lists:map(fun c_empty_value/1, Groups ++ Enums)
          ++ [{?clause, [?VAR('Name')], [], [?CALL(empty, [?VAR('Name')])]}].
  
  c_empty_value({Name, _, _, _}) ->
      {?clause, [?ATOM(Name)],
       [],
       [?CALL(empty_group, [?ATOM(Name)])]};
  
  c_empty_value({Name, _}) ->
      {?clause, [?ATOM(Name)],
       [],
       [?TERM(<<0:32/integer>>)]}.
  
  
negative.code:      "%%\n\n").
  
  hrl_header(Name) ->
      header() ++ "-hrl_name('" ++ ?S(Name) ++ ".hrl').\n".
  
  %% avp_info/1
  
  avp_info(Entry) ->  %% {Name, Arity}
      case Entry of
          {{A}} -> {A, 1};
          {A}   -> {A, 1};
          [A]   -> {A, {0,1}};
          {Q,T} ->
              {A,_} = avp_info(T),
              {A, arity(Q)}
  