anchor.diff:              // don't want to bother with it?  what about a single-page block?
               // should this be a configurable setting?
   
  -            // TODO should we coalesce adjacent blocks?  this requires an
  -            // extra sort.  once to sort everything in order, then coalesce,
  -            // then sort by size descending.
  -
               // TODO if the last block of the file is free, consider just
               // moving nextPage back.
   
               let newList = freeBlocks @ blocks |> consolidateBlockList
  -            // TODO here, inside a critical section, is an unhappy place to do a sort
               let sorted = List.sortBy (fun (x:PageBlock) -> -(x.CountPages)) newList
               freeBlocks <- sorted
           )
  
positive.code:                 // count will always compress better as a varint.
                  List.iter (fun (t:PageBlock) -> pb.PutVarint(t.firstPage |> int64); pb.PutVarint(t.CountPages |> int64);) info.blocks
                  ) h.currentState
              // TODO is pb exactly full?
              pb.Buffer
  
          let pb = PageBuilder(HEADER_SIZE_IN_BYTES)
  
negative.code:                         let blk2 = PageBlock(headBlk.firstPage, headBlk.firstPage+specificSize-1) 
                          let remainder = PageBlock(headBlk.firstPage+specificSize, headBlk.lastPage)
                          freeBlocks <- remainder :: List.tail freeBlocks
                          // TODO problem: the list is probably no longer sorted.  is this okay?
                          //printfn "reusing blk prune: %A, specificSize:%d, freeBlocks now: %A" headBlk specificSize freeBlocks
                          blk2
                      else
  