private function combine($in, $out, callable $combinator)
{
if ($in === null) {
return $out;
}
if ($out === null) {
return $in;
}
if (!is_array($in)) {
return $combinator($in, $out);
}
$result = [];
foreach ($in as $index => $status) {
$result[$index] = $combinator($in[$index], $out[$index]);
}
return $result;
}