anchor.diff:        addHunk(m2[i], 2);
       }
   
  -    hunks.sort();
  +    hunks.sort((a, b) {
  +      // a[0] file1 offset
  +      // a[1] side
  +      if (a[0] != b[0]) {
  +        return a[0].compareTo(b[0]);
  +      } else {
  +        return a[1].compareTo(b[1]);
  +      }
  +    });
   
       List result = [];
       int commonOffset = 0;
  
positive.code:       int side = x[0];
        if (side == -1) {
          if (excludeFalseConflicts && !isTrueConflict(x)) {
            pushOk(files[0].getRange(x[1], x[1] + x[2]));
          } else {
            flushOk();
            // TODO(adam): class `Conflict`
            result.add({
              "conflict": {
                "a": a.getRange(x[1], x[1] + x[2]),
                "aIndex": x[1],
                "o": o.getRange(x[3], x[3] + x[4]),
                "oIndex": x[3],
                "b": b.getRange(x[5], x[5] + x[6]),
                "bIndex": x[5]
              }
            });
          }
        } else {
          pushOk(files[side].getRange(x[1], x[1] + x[2]));
        }
      }
  
  
negative.code:         }
        }
  
        // candidates[r] = c;
        if (r == candidates.length) {
          candidates.add(c);
        } else {
          candidates[r] = c;
        }
      }
  
      // At this point, we know the LCS: it's in the reverse of the
  