code: function fixOffset(localTS, o, tz) {
    // Our UTC time is just a guess because our offset is just a guess
    let utcGuess = localTS - o * 60 * 1000;
  
    // Test whether the zone matches the offset for this ts
    const o2 = tz.offset(utcGuess);
  
    // If so, offset didn't change and we're done
    if (o === o2) {
      return [utcGuess, o];
    }
  
    // If not, change the ts by the difference in the offset
    utcGuess -= (o2 - o) * 60 * 1000;
  
    // If that gives us the local time we want, we're done
    const o3 = tz.offset(utcGuess);
    if (o2 === o3) {
      return [utcGuess, o2];
    }
  
    // If it's different, we're in a hole time. The offset has changed, but the we don't adjust the time
    return [localTS - Math.min(o2, o3) * 60 * 1000, Math.max(o2, o3)];
  }
docs: find the right offset a given local time. The o input is our guess, which determines which offset we'll pick in ambiguous cases (e.g. there are two 3 AMs b/c Fallback DST)