MEDIUM severity: The `reportOutOfOrderValidatorExits` function is responsible for updating the `exited` portion of an. The `reportOutOfOrderValidatorExits` function is responsible for updating the `exited` portion of an operator's validator when an operator exits without a withdrawal request. However, this update does not trigger a reordering of the heap, which can lead to incorrect utilization calculations and subs...

Vulnerable code:
```\nfunction getOperatorUtilizationHeapForETH(\n    RioLRTOperatorRegistryStorageV1.StorageV1 storage s\n) \n    internal\n    view\n    returns (OperatorUtilizationHeap.Data memory heap)\n{\n    uint8 numActiveOperators = s.activeOperatorCount;\n    if (numActiveOperators == 0) {\n        return OperatorUtilizationHeap.Data(new OperatorUtilizationHeap.Operator[](0), 0);\n    }\n\n    heap = OperatorUtilizationHeap.initialize(MAX_ACTIVE_OPERATOR_COUNT);\n\n    uint256 activeDeposits;\n    IRioLRTOperatorRegistry.OperatorValidatorDetails memory validators;\n\n    unchecked {\n        uint8 i;\n        for (i = 0; i < numActiveOperators; ++i) {\n            uint8 operatorId = s.activeOperatorsByETHDepositUtilization.get(i);\n\n            // Non-existent operator ID. We've reached the end of the heap.\n            if (operatorId == 0) {\n                break;\n            }\n\n            validators = s.operatorDetails[operatorId].validatorDetails;\n            activeDeposits = validators.deposited - validators.exited;\n            heap.operators[i + 1] = OperatorUtilizationHeap.Operator({\n                id: operatorId,\n                utilization: activeDeposits / validators.cap\n            });\n        }\n        heap.count = i;\n    }\n}\n```\n```\nfunction deallocateETHDeposits(uint256 depositsToDeallocate) external onlyCoordinator returns (uint256 depositsDeallocated, OperatorETHDeallocation[] memory deallocations) {\n    deallocations = new OperatorETHDeallocation[](s.activeOperatorCount);\n\n    OperatorUtilizationHeap.Data memory heap = s.getOperatorUtilizationHeapForETH();\n    if (heap.isEmpty()) revert NO_AVAILABLE_OPERATORS_FOR_DEALLOCATION();\n\n    uint256 deallocationIndex;\n    uint256 remainingDeposits = depositsToDeallocate;\n\n    bytes memory pubKeyBatch;\n    while (remainingDeposits > 0) {\n        uint8 operatorId = heap.getMax().id;\n\n        OperatorDetails storage operator = s.operatorDetails[operatorId];\n        OperatorValidatorDetails memory validators = operator.validatorDetails;\n\n        uint256 activeDeposits = validators.deposited - validators.exited;\n\n        if (activeDeposits == 0) break;\n\n        // Code to deallocate deposits\n    }\n}\n```\n```\nfunction reportOutOfOrderValidatorExits(uint8 operatorId, uint256 fromIndex, uint256 validatorCount) external {\n    // Swap the position of the validators starting from the `fromIndex` with the validators that were next in line to be exited.\n    VALIDATOR_DETAILS_POSITION.swapValidatorDetails(operatorId, fromIndex, validators.exited, validatorCount);\n    operator.validatorDetails.exited += uint40(validatorCount);\n\n    emit OperatorOutOfOrderValidatorExitsReported(operatorId, validatorCount);\n}\n```\n```\nfunction test_RemovingValidatorMessesTheHeap() public {\n    OperatorUtilizationHeap.Data memory heap = OperatorUtilizationHeap.initialize(5);\n\n    heap.insert(OperatorUtilizationHeap.Operator({id: 1, utilization: 5}));\n    heap.store(heapStore);\n\n    heap.insert(OperatorUtilizationHeap.Operator({id: 2, utilization: 10}));\n    heap.store(heapStore);\n\n    heap.insert(OperatorUtilizationHeap.Operator({id: 3, utilization: 15}));\n    heap.store(heapStore);\n\n    uint8 numActiveOperators = 3;\n    OperatorUtilizationHeap.Data memory newHeap = OperatorUtilizationHeap.initialize(64);\n    uint8 i;\n    for (i = 0; i < numActiveOperators; ++i) {\n        uint8 operatorId = heapStore.get(i);\n        if (operatorId == 0) break;\n\n        newHeap.operators[i + 1] = OperatorUtilizationHeap.Operator({\n            id: operatorId,\n            utilization: heap.operators[operatorId].utilization\n        });\n    }\n    newHeap.count = i;\n\n    heap.updateUtilizationByID(3, 0);\n\n    console.log("1st", heap.operators[1].id);\n    console.log("2nd", heap.operators[2].id);\n    console.log("3rd", heap.operators[3].id);\n    console.log("origin heaps min", heap.getMin().id);\n    console.log("origin heaps max", heap.getMax().id);\n\n    console.log("1st", newHeap.operators[1].id);\n    console.log("2nd", newHeap.operators[2].id);\n    console.log("3rd", newHeap.operators[3].id);\n    console.log("new heaps min", newHeap.getMin().id);\n    console.log("new heaps max", newHeap.getMax().id);\n\n    assertEq(newHeap.getMin().id, 1);\n    assertEq(heap.getMin().id, 3);\n    assertEq(heap.getMax().id, 2);\n    assertEq(newHeap.getMax().id, 3);\n}\n```