Chris Froome has effectively become the first Briton to win the Vuelta a Espana as Alberto Contador won the penultimate stage of this year’s race.
Contador, who retires after the race, surged clear on the gruelling 13.2km ascent of Alto de Angliru.
Team Sky’s Froome was third, 17 seconds behind Contador but 34 clear of Italy’s Vincenzo Nibali to extend his lead over the Italian to two minutes, 15 seconds.
Sunday’s finale is largely processional and Froome will not be challenged.
If the 32-year-old completes the stage, which is expected to finish in a bunch sprint in Madrid, he will become just the third man in history to win the Tour de France and Vuelta in the same year, following Jacques Anquetil (1963) and Bernard Hinault (1978).
Froome has finished second in the Vuelta on three occasions but flanked by his team-mates he never looked in danger of losing his advantage on Saturday as riders faced up to the one of the hardest summit finishes in Europe.
Contador, who has won seven Grand Tours, including three Vuelta a Espanas in a glittering career, grimaced on his way up the Angliru, where the gradient rises to more than 20% in the closing few kilometres.
The Spaniard, 34, pushed clear in the final 6km. At one point he was almost forced to a standstill when he collided with a spectator as boisterous fans spilled onto the roads.
He celebrated wildly as he crossed the line for a second win on the Angliru, emulating his 2008 triumph which led to his first Vuelta victory.
Moments later Team Sky’s Wout Poels led Froome home, all but ensuring the Tour-Vuelta double.
Nibali cracks on Angliru
Bahrain-Merida rider Nibali started the stage 97 seconds adrift of Froome and his hopes of erasing any of that deficit were hindered when he crashed on the slippy descent of Alto de la Cordal – the final descent of the race.
He caught back up with Froome’s group but found the pace too high and dropped away in the closing kilometres, eventually finishing 34 seconds adrift, with the Briton also picking up four bonus seconds for his third place.
Russia’s Ilnur Zakarin put in a late burst to deny Contador the third spot on the podium, as he finished fourth on the stage.
Dutch rider Wilco Kelderman, who started the stage in third, dropped to fifth overall.
Sunday’s final stage to Madrid will feature several laps of the Spanish capital and is expected to climax in a bunch sprint finish.
There will be live text commentary on the BBC Sport website from 16:00 BST.
Stage 20 result:
1. Alberto Contador (Spa/Trek-Segafredo) 3hrs 31mins 33secs
2. Wout Poels (Ned/Team Sky) +17secs
3. Chris Froome (GB/Team Sky) Same time
4. Ilnur Zakarin (Rus/Katusha-Alpecin) +35secs
5. Franco Pellizotti (Ita/Bahrain-Merida) +51secs
6. Vincenzo Nibali (Ita/Bahrain-Merida) Same time
7. Steven Kruijswijk (Ned/LottoNL-Jumbo)
8. Wilco Kelderman (Ned/Team Sunweb) +1min 11secs
9. Romain Bardet (Fra/AG2R La Mondiale) +1min 25secs
10. Michael Woods (Can/Cannondale-Drapac) +1min 36secs
General classification after stage 20:
1. Chris Froome (GB/Team Sky) 79hrs 23mins 37secs
2. Vincenzo Nibali (Ita/Bahrain-Merida) +2mins 15secs
3. Ilnur Zakarin (Rus/Katusha-Alpecin) +2mins 51secs
4. Alberto Contador (Spa/Trek-Segafredo) +3mins 11secs
5. Wilco Kelderman (Ned/Team Sunweb) +3mins 15secs
6. Wout Poels (Ned/Team Sky) +6mins 45secs
7. Michael Woods (Can/Cannondale-Drapac) +7mins 56secs
8. Miguel Angel Lopez (Col/Astana Pro Team) +8mins 59secs
9. Steven Kruijswijk (Ned/LottoNL-Jumbo) +11mins 04secs
10. Tejay van Garderen (US/BMC Racing Team) +15mins 36secs
More to follow.