def initialize(index, sha1, start, length, files, validity_assumption=nil)
@index = index
@sha1 = sha1
@start = start
@length = length
@files = files
@valid = nil
@start_index = 0
sum = 0
while(sum + @files[@start_index][2] <= @start)
sum += @files[@start_index][2]
@start_index += 1
end
@start_offset = @start - sum
@have = Covering.new(AwesomeRange.new(0 ... @length)).complete!
@valid = validity_assumption
@have.empty! unless valid?
@claimed = Covering.new(AwesomeRange.new(0 ... @length))
@state_m = Mutex.new
end