File: VoterUpgradeableV2.sol
227:     function killGauge(address gauge_) external onlyRole(_GOVERNANCE_ROLE) {
...
232:         delete gaugesState[gauge_].isAlive;
...
236:             delete gaugesState[gauge_].claimable;
...
240:         totalWeightsPerEpoch[epochTimestamp] -= weightsPerEpoch[epochTimestamp][state.pool];
        Epoch_x                      Epoch_x+1  
        |-----------x-------------------|-x---------------------  
           call `killGauge()`             call `distribute()` 
File: VoterUpgradeableV2.sol
382:     function notifyRewardAmount(uint256 amount_) external {
...
387:         uint256 weightAt = totalWeightsPerEpoch[_epochTimestamp() - _WEEK]; 
388:         if (weightAt > 0) {
389:             index += (amount_ * 1e18) / weightAt;
390:         }
File: VoterUpgradeableV2.sol
671:     function _distribute(address gauge_) internal {
...
677:             uint256 totalVotesWeight = weightsPerEpoch[currentTimestamp - _WEEK][state.pool];
678: 
679:             if (totalVotesWeight > 0) {
...
684:                     if (state.isAlive) {
685:                         gaugesState[gauge_].claimable += amount;
686:                     } else {
687:                         IERC20Upgradeable(token).safeTransfer(minter, amount);
}
    How `notifyRewardAmount()` increase the `index`
    uint256 weightAt = 1500e18
    uint256 amount_ = 80e18

    index += (amount_ * 1e18) / weightAt;
                = (80e18 * 1e18)/1500e18
                = 5.3e16
    Now, index = 10.053e18

     How `distribute()` calcul the `amount` for the 3 pools
    uint256 delta = index - state.index;
                            =  10.053 e18- 10e18
                            = 0.053e18  

    uint256 amount = (totalVotesWeight * delta) / 1e18;
                                = (500e18 * 0.053e18)/1e18
                                = 26.5e18
    How `notifyRewardAmount()` increase the `index`
    uint256 weightAt = 1000e18
    uint256 amount_ = 80e18

    index += (amount_ * 1e18) / weightAt;
                = (80e18 * 1e18)/1000e18
                = 8e16
    Now, index = 10.08e18

     How `distribute()` calcul the `amount` for the 3 pools
    uint256 delta = index - state.index;
                            =  10.08 e18- 10e18
                            = 0.08e18  

    uint256 amount = (totalVotesWeight * delta) / 1e18;
                                = (500e18 * 0.08e18)/1e18
                                = 40e18
    function killGauge(address gauge_) external onlyRole(_GOVERNANCE_ROLE) {
...

        uint256 epochTimestamp = _epochTimestamp();
        totalWeightsPerEpoch[epochTimestamp] -= weightsPerEpoch[epochTimestamp][state.pool];
+      delete  weightsPerEpoch[epochTimestamp][state.pool];
        emit GaugeKilled(gauge_);
    }
