```\n    function setIntervals(uint256 id_, uint32[3] calldata intervals_) external override {\n        // Check that the market is live\n        if (!isLive(id_)) revert Auctioneer_InvalidParams();\n\n\n        // Check that the intervals are non-zero\n        if (intervals_[0] == 0 || intervals_[1] == 0 || intervals_[2] == 0)\n            revert Auctioneer_InvalidParams();\n\n\n        // Check that tuneInterval >= tuneAdjustmentDelay\n        if (intervals_[0] < intervals_[1]) revert Auctioneer_InvalidParams();\n\n\n        BondMetadata storage meta = metadata[id_];\n        // Check that tuneInterval >= depositInterval\n        if (intervals_[0] < meta.depositInterval) revert Auctioneer_InvalidParams();\n\n\n        // Check that debtDecayInterval >= minDebtDecayInterval\n        if (intervals_[2] < minDebtDecayInterval) revert Auctioneer_InvalidParams();\n\n\n        // Check that sender is market owner\n        BondMarket memory market = markets[id_];\n        if (msg.sender != market.owner) revert Auctioneer_OnlyMarketOwner();\n\n\n        // Update intervals\n        meta.tuneInterval = intervals_[0];\n        meta.tuneIntervalCapacity = market.capacity.mulDiv(\n            uint256(intervals_[0]),\n            uint256(terms[id_].conclusion) - block.timestamp\n        ); // don't have a stored value for market duration, this will update tuneIntervalCapacity based on time remaining\n        meta.tuneAdjustmentDelay = intervals_[1];\n        meta.debtDecayInterval = intervals_[2];\n    }\n```\n