anchor.diff:  vip_collect(_, AccIn) ->
     AccIn.
   
  --spec label_to_offset_vip(map()) -> [tuple()].
  +-spec label_to_offset_vip(label()) -> [tuple()].
   label_to_offset_vip(#{key := <<"vip_PORT", PortNum/binary>>, value := VIP}) ->
  -  {Offset, _} =  string:to_integer(binary_to_list(PortNum)),
  +  {Offset, []} =  string:to_integer(binary_to_list(PortNum)),
     [{Offset, VIP}];
   label_to_offset_vip(_) ->
     [].
   
  --spec status_to_ips(map()) -> [pos_integer()].
  +-spec status_to_ips(task_status()) -> [pos_integer()].
   status_to_ips(_Status = #{container_status := #{network_infos := NetworkInfos}}) ->
     networkinfos_to_ips(NetworkInfos, []);
   status_to_ips(_) ->
  
positive.code: task_fold(_, AccIn) ->
    AccIn.
  
  -spec vip_permutations(map(), [binary()], [binary()], orddict:orddict()) -> orddict:orddict().
  vip_permutations(_Status = #{healthy := false}, _Ports, _Labels, AccIn) ->
    AccIn;
  vip_permutations(Status, Ports, Labels, AccIn) ->
  
negative.code:          statuses => Statuses
         }).
  
  p_label(NumPorts) ->
    ?LET(L, union([p_vip_label(NumPorts), p_non_vip_label()]), L).
  
  p_vip_label(NumPorts) ->
    ?LET({Proto, PortNum, VIP},
         {p_proto(), integer(0, NumPorts), p_vip()},
         #{key => list_to_binary("vip_PORT" ++ integer_to_list(PortNum)),
           value => list_to_binary(Proto ++ "://" ++ VIP)}).
  
  p_proto() ->
    ?LET(P, union(["tcp", "udp"]), P).
  
  p_ip() ->
    measure(thing, 1, thing2),
    ?LET({I1, I2, I3, I4},
         {integer(0, 255), integer(0, 255), integer(0, 255), integer(0, 255)},
  