static A waitForCalculatedValueUsingChangeListener(double timeout default infinity(), IF0 f, IHasChangeListeners sender) {
new BoolVar trigger;
temp tempOnChange(sender, -> trigger.set(true));
while true {
ping();
try object f!;
trigger.waitUntilTrueAndClear(timeout);
}
}