@startuml

start
:newTime = 0
totalTime = 0
isEnd = it == list.end()
lastTime = 0;

#tomato:if (!isEnd) then (not end)
    #tomato:totalTime += it.getRelTicks();
endif

    while ( !isEnd && (totalTime <= newTime) ) is (goForward)
    :isEnd = (++it == list.end());
        :lastTime = totalTime;
        #tomato:if (!isEnd) then (not end)
            #tomato:totalTime += it.getRelTicks();
        endif
    endwhile

#tomato:if (!isEnd) then (not end)
    #tomato:subRelTicks(newTime- lastTime);
endif
:it.setRelTicks(newTime - lastTime);
:insert(it, newTimeout);

@enduml