anchor.diff:      [decode_byte(B, SoFar) | decode_bytes(SoFar + 8, Rest)].
   
   
  +decode_allowed_fast(<<>>) -> [];
  +decode_allowed_fast(<<Index:32, Rest/binary>>) ->
  +    [Index | decode_allowed_fast(Rest)].
  +
  +encode_fastset([]) -> <<>>;
  +encode_fastset([Idx | Rest]) ->
  +    R = encode_fastset(Rest),
  +    <<R/binary, Idx:32>>.
  
positive.code: -define(CANCEL, 8:8).
  -define(PORT, 9:8).
  
  %%====================================================================
  %% API
  %%====================================================================
  
negative.code: 	    {cancel, Index, Begin, Len} ->
  		<<?CANCEL, Index:32/big, Begin:32/big, Len:32/big>>;
  	    {port, PortNum} ->
  		<<?PORT, PortNum:16/big>>;
  	    %% FAST EXTENSION
  	    {suggest, Index} ->
  		<<?SUGGEST, Index:32>>;
  	    have_all ->
  		<<?HAVE_ALL>>;
  	    have_none ->
  		<<?HAVE_NONE>>;
  	    {reject_request, Index, Offset, Len} ->
  		<<?REJECT_REQUEST, Index, Offset, Len>>;
  	    {allowed_fast, FastSet} ->
  		BinFastSet = encode_fastset(FastSet),
  		<<?ALLOWED_FAST, BinFastSet>>
          end,
      Sz = size(Datagram),
      Res = gen_tcp:send(Socket, <<Sz:32/big, Datagram/binary>>),
  