anchor.diff:                              sofar <- sofar + k.Length
                           else
                               let keyOverflowFirstPage = nextPageNumber
  -                            let kRange = writeOverflow pageManager token nextPageNumber boundaryPageNumber pbOverflow fs (new MemoryStream(k))
  +                            let kRange = writeOverflow nextPageNumber boundaryPageNumber (new MemoryStream(k))
                               nextPageNumber <- fst kRange
                               boundaryPageNumber <- snd kRange
                               sofar <- sofar + sizeof<int32>
  
positive.code:                 let flushThisPage = (countPairs > 0) && (not fitBothInline) && (wouldFitBothInlineOnNextPage || ( (not fitKeyInlineValueOverflow) && (not fitBothOverflow) ) )
  
                  if flushThisPage then
                      prevPageNumber <- nextPageNumber
                      let (nextPage,boundaryPage) = flushLeaf countPairs lastKey nextPageNumber boundaryPageNumber
                      nextPageNumber <- nextPage
                      boundaryPageNumber <- boundaryPage
                      // we have not advanced the cursor.  go back to the top of the loop
                  else
                      if fitBothInline then
                          putKeyWithLength k
                          if null = v then
                              pb.PutByte(FLAG_TOMBSTONE)
                              pb.PutVarint(0L)
                          else
                              pb.PutByte(0uy)
                              pb.PutVarint(int64 vlen)
                              pb.PutStream(v, int vlen)
                      else
                          let putOverflow strm nextPageNumber boundaryPageNumber =
                              let overflowFirstPage = nextPageNumber
                              let newRange = writeOverflow pageManager token nextPageNumber boundaryPageNumber pbOverflow fs strm
                              pb.PutByte(FLAG_OVERFLOW)
                              pb.PutVarint(strm.Length)
                              pb.PutInt32(overflowFirstPage)
                              newRange
  
                          // TODO is it possible for v to be a tombstone here?
  
                          if fitKeyInlineValueOverflow then
                              putKeyWithLength k
  
                              let vRange = putOverflow v nextPageNumber boundaryPageNumber
                              nextPageNumber <- fst vRange
                              boundaryPageNumber <- snd vRange
                          else
                              let kRange = putOverflow (new MemoryStream(k)) nextPageNumber boundaryPageNumber
                              nextPageNumber <- fst kRange
                              boundaryPageNumber <- snd kRange
  
                              let vRange = putOverflow v nextPageNumber boundaryPageNumber
                              nextPageNumber <- fst vRange
                              boundaryPageNumber <- snd vRange
  
                      csr.Next()
  
                      lastKey <- k
                      countPairs <- countPairs + 1
  
              // if the current page has anything in it, we need to
              // write it out
              if pb.Position > 0 then
                  let (nextPage,boundaryPage) = flushLeaf countPairs lastKey nextPageNumber boundaryPageNumber
                  nextPageNumber <- nextPage
                  boundaryPageNumber <- boundaryPage
  
              (nextPageNumber,boundaryPageNumber,leaves)
  
          let (startingPage,startingBoundary) = pageManager.GetRange(token)
          utils.SeekPage(fs, pageSize, startingPage)
  
negative.code:                 if nextPage <> (thisPageNumber+1) then utils.SeekPage(fs, pageSize, nextPage)
                  range
  
              let rec putKeys countPairs lastKey nextPageNumber boundaryPageNumber =
                  let k = csr.Key()
                  let v = csr.Value()
                  // assert k <> null
  