NATIONAL HARBOR, Maryland

President Trump invited a conservative activist who got punched in the face at the University of California-Berkeley to share the stage with him during a two-hour CPAC speech in which he promised to sign an executive order protecting free speech on campus.

“He took a punch for all of us,” Trump said of Leadership Institute organizer Hayden Williams, who was attacked last month on the Berkeley campus while recruiting students for Turning Point USA. Comparing him to boxing legend Muhamad Ali — “He could take a punch” — the president said “the good news” is that Williams is “going to be a wealthy young man” after he sues the university and the man who attacked him. Police have reportedly arrested Zachary Greenberg, a 28-year-old former university employee, in the Feb. 19 assault that was captured on video and went viral online.

“Today I’m proud to announce that I will be very soon signing an executive order requiring colleges and universities to support free speech if they want federal research dollars,” Trump told the crowd of conservative activists packed into the Potomac Ballroom of the Gaylord Hotel. “If they want our dollars, and we give it to them by the billions, they’ve got to allow people like Hayden and many other great young people and old people to speak. Free speech. If they don’t, it will be costly. That will be signed soon.”

Trump’s speech Saturday afternoon was one of the longest since he became president, as he ad-libbed and used strong language, at one point describing the seemingly endless Mueller investigation as “bulls—t.”

“You know I’m totally off-script now,” Trump said early in the speech. “And this is how I got elected, by being off-script.”

It was one of those “let Trump be Trump” moments that was sure to be criticized by pundits, although the audience at the 46th annual Conservative Political Action Conference loved it, repeatedly interrupting the president’s remarks with applause and chants of “USA! USA! USA!”

As expected, Trump took aim at the Democrats’ “Green New Deal” climate-change agenda, mockingly urging his 2020 opponents to embrace the multi-trillion-dollar boondoggle. “They can stay with that argument,” he said, conjuring up the specter of people depending on windmills for electricity: “Darling, is the wind blowing today? I’d like to watch television, darling.” He imagined the presidential campaign debates next year: “When I’m on the debate stage with one of these maniacs… Trains to Hawaii?”

Trump also predictably savaged the “fake news” media, at one point calling out the Washington Post’s Dave Weigel by name for an incident in which Weigel tweeted a photo of a Trump rally venue, taken hours before the event began, showing empty seats. “I thought he was going to get fired.… It was fake news,” Trump said.

Trump also told a story about flying into Iraq on a presidential trip when Air Force One was required to turn out the lights for security reasons, illustrating what he saw as the failure of U.S. policy in the region. “Seven trillion dollars [spent on the Iraq war] and we have to fly in with no lights,” he said, after describing his policy as “reversing decades of blunders and betrayals.”

The president appeared remarkably upbeat and energetic, despite having just arrived back in D.C. after the Hanoi summit that he ended early, walking away from the negotiations over North Korea’s nuclear program. Critics will find fault with Trump’s off-the-script speech, but the people who paid to see him loved it. Outside the Gaylord afterwards, I spoke to Suzzanne Monk, a self-described “Trumpertarian” who told me she’d gotten in line at 7 a.m. to see Trump, and she had no complaints. “It was awesome,” she said. One of the biggest ovations Saturday was when the president recalled predictions that he couldn’t possibly win in 2016, and then predicted “the numbers are going to be even bigger” in 2020. The crowd erupted: “USA! USA! USA!”

Trump’s populist train keeps rolling and the “fake news” media can’t stop it.