function computeRepresentativeRuns(runsByUrl) {
  /** @type {Array<T>} */
  const representativeRuns = [];

  for (const runs of runsByUrl) {
    if (!runs.length) continue;

    const sortedByFcp = runs
      .slice()
      .sort(
        (a, b) =>
          getAuditValue(a[1], 'first-contentful-paint') -
          getAuditValue(b[1], 'first-contentful-paint')
      );
    const medianFcp = getAuditValue(
      sortedByFcp[Math.floor(runs.length / 2)][1],
      'first-contentful-paint'
    );

    const sortedByInteractive = runs
      .slice()
      .sort((a, b) => getAuditValue(a[1], 'interactive') - getAuditValue(b[1], 'interactive'));
    const medianInteractive = getAuditValue(
      sortedByInteractive[Math.floor(runs.length / 2)][1],
      'interactive'
    );

    const sortedByProximityToMedian = runs
      .slice()
      .sort(
        (a, b) =>
          getMedianSortValue(a[1], medianFcp, medianInteractive) -
          getMedianSortValue(b[1], medianFcp, medianInteractive)
      );

    representativeRuns.push(sortedByProximityToMedian[0][0]);
  }

  return representativeRuns;
}
@template T
@param {Array<Array<[T, LH.Result]>>} runsByUrl
@return {Array<T>}