void queueEquation(Equation equation) {
    Result rhs = equation.result;
    if (rhs instanceof Value) {
      solved.put(equation.key, (Value)rhs);
      moving.push(equation.key);
    }
    else if (rhs instanceof Pending) {
      Pending pendResult = ((Pending)rhs).copy();
      Result norm = normalize(pendResult.delta);
      if (norm instanceof Value) {
        solved.put(equation.key, (Value)norm);
        moving.push(equation.key);
      }
      else {
        Pending pendResult1 = ((Pending)rhs).copy();
        for (Component component : pendResult1.delta) {
          for (EKey trigger : component.ids) {
            HashSet<EKey> set = dependencies.get(trigger);
            if (set == null) {
              set = new HashSet<>();
              dependencies.put(trigger, set);
            }
            set.add(equation.key);
          }
        }
        pending.put(equation.key, pendResult1);
      }
    }
  }
void queueEquation(Equation equation)