@NotNull
  private DfaMemoryState createMemoryState(@NotNull DfaValueFactory factory,
                                           @NotNull Map<Value, List<DfaVariableValue>> valueMap,
                                           @NotNull Map<Value, JdiValueInfo> infoMap) {
    DfaMemoryState state = new JvmDfaMemoryStateImpl(factory);
    List<DfaVariableValue> distinctValues = new ArrayList<>();
    valueMap.forEach((jdiValue, vars) -> {
      DfaVariableValue canonical = vars.get(0);
      if (!TypeConstraint.fromDfType(canonical.getDfType()).isComparedByEquals()) {
        distinctValues.add(canonical);
      }
      for (DfaVariableValue var : vars) {
        state.applyCondition(var.eq(canonical));
        addConditions(var, infoMap.get(jdiValue), state);
      }
    });
    EntryStream.ofPairs(distinctValues)
      .filterKeyValue((left, right) -> left.getDfType().meet(right.getDfType()) != DfType.BOTTOM)
      .limit(20) // avoid too complex state
      .forKeyValue((left, right) -> state.applyCondition(left.cond(RelationType.NE, right)));
    return state;
  }
@NotNull
  private DfaMemoryState createMemoryState(@NotNull DfaValueFactory factory,
                                           @NotNull Map<Value, List<DfaVariableValue>> valueMap,
                                           @NotNull Map<Value, JdiValueInfo> infoMap)