On May 9, 2017, President Donald Trump fired James Comey as director of the FBI. Since then, Trump has repeatedly called Comey a liar. Trump says the former FBI chief lied about private conversations they had in January and February 2017. “James Comey better hope that there are no ‘tapes’ of our conversations,” the president tweeted three days after terminating Comey.

As it turns out, there were no tapes. But there are witnesses and records. And that evidence, closely examined by special counsel Robert Mueller, settles the Trump-Comey dispute. Trump lied. Comey told the truth.

In his report on the Russia investigation, released by the Justice Department last Thursday, Mueller notes that Comey, unlike Trump, has testified under oath about their conversations. Mueller also points out that Comey, unlike Trump, wrote contemporaneous accounts of the conversations and distributed those accounts to colleagues. By doing so, Comey committed himself to factual claims that could be checked by investigators under penalty of perjury. Comey couldn’t change his story, and Mueller concludes that he hasn’t. But Trump has.

Trump and Comey met for dinner on Jan. 27, 2017. In a memo written immediately afterward, Comey said Trump had invited him to the dinner. Months later, Trump said Comey’s account was false. In a draft letter dictated by the president on May 5, 2017, and in an interview with NBC News a week later, the president said Comey had “asked for the dinner” in order to tell Trump that “he wanted to stay on.”

Mueller shreds Trump’s story. Based on written records and interviews with numerous White House officials—all of them named—the report says Trump “made it clear” to his “senior staff in early 2017 that he wanted Comey to stay on.” A White House document, the President’s Daily Diary, confirms that Trump called Comey to invite him to the dinner. Reince Priebus, who was Trump’s chief of staff at the time, told Mueller’s investigators that Trump arranged the dinner in order to ask Comey “whether he wanted to stay.” And two weeks after the dinner, Trump told former New Jersey Gov. Chris Christie that he “really like[d]” Comey and welcomed the FBI director as part of the administration. Not until May, when he decided to fire Comey, did Trump concoct a story that Comey had been under “review” and “did not have assurance from the President that he would be permitted to keep his job.”

Comey’s memo describes Trump asking him, during the dinner, for personal loyalty. Trump and the White House say that story is a lie. But Mueller finds that “substantial evidence corroborates Comey’s account.” In his chat with Christie, Trump said he wanted to make sure Comey was “part of the team.” That’s close to what Comey claims Trump said at the dinner. In addition, Mueller reports that Trump equivocated in a conversation with Sean Spicer, who was Trump’s press secretary at the time. According to Spicer, Trump said that if he had asked Comey for loyalty during the meal, “Who cares?”

Trump says there was no reason for him to make such a request. But Mueller finds lots of evidence that Trump had reasons and that he was thinking about them. A day before the dinner, on Jan. 26, Trump was notified that the FBI had just interviewed his then–national security adviser, Michael Flynn, about secret talks with Russia. Hours after learning of the interview, and just before calling the FBI director, Trump asked his advisers, for the first time, what they thought of Comey. One adviser, Steve Bannon, counseled Trump to include Bannon or Priebus in the dinner. But Trump shot down that idea. Mueller reports that according to Bannon, Trump “stated that he wanted to dine with Comey alone.”

In a second memo, Comey describes a meeting with Trump in the Oval Office on Feb. 14, 2017. That was the day after Flynn resigned for lying about his contacts with Russia. Comey writes that Trump shooed everyone else out of the room so he could speak to Comey alone. Trump denies that he did so. But Mueller finds that “other Administration officials who were present have confirmed Comey’s account.” Priebus told investigators that everyone else was directed to leave the room, “like Comey said.” Jeff Sessions, who was then Trump’s attorney general, confirmed that Trump “asked to speak to Comey alone.”

Trump and the White House say that story is a lie. But Mueller finds that “substantial evidence corroborates Comey’s account.”

Comey writes that Trump, having cleared the room, told him, “I hope you can see your way clear to letting this go, to letting Flynn go.” The White House says that account “is not a truthful or accurate portrayal of the conversation.” Trump, on Twitter, has called it a fabrication: “I never asked Comey to stop investigating Flynn. Just more Fake News covering another Comey lie!” But Mueller reports that in backstage conversations with Priebus and then–White House counsel Don McGahn, Trump acknowledged that in the Feb. 14 meeting, he “spoke to Comey about Flynn” and called Flynn “a good guy.”

Mueller also finds circumstantial evidence to support Comey’s account of the Feb. 14 meeting. Hours before it took place, Trump indicated to Christie over lunch that he thought he could end the Russia investigation by ending the investigation of Flynn. “Now that we fired Flynn, the Russia thing is over,” the president told Christie. That’s also the lunch at which Trump asked Christie to tell Comey, in a bid for reciprocal loyalty from the FBI director, that Comey was “part of the team.” Both comments are consistent with Comey’s account that the president, a few hours later, directly asked him to drop the Flynn investigation.

In addition, Mueller reports that a week after the Feb. 14 meeting with Comey, Trump asked deputy national security adviser K.T. McFarland to draft an email falsely certifying that Trump hadn’t directed Flynn to speak to the Russians about sanctions. This request shows that Trump feared being personally implicated by the investigation. And the special counsel points out that if Trump had simply wanted to tell Comey that Flynn was a good guy—not secretly ask the FBI director to drop an investigation—he didn’t need to kick Sessions out of the room.

Other conversations unearthed by Mueller fit the pattern described in Comey’s memos. On March 3, Trump raged to his advisers that previous presidents had been free, in Trump’s words, to “tell” their attorneys general “who to investigate.” Trump was furious that his subordinates wouldn’t similarly comply. So it’s likely that when Trump spoke to Comey on Feb. 14, that’s what he was trying to do. Trump made his message more explicit in a March 22 conversation with Dan Coats, the director of national intelligence. Mueller reports that according to national security aides, Trump asked Coats “to contact Comey to see if there was a way to get past the investigation, get it over with, end it, or words to that effect.”

Comey thinks Trump fired him for refusing to abort or curtail the investigation. Trump says that’s not true. The president has claimed that he did it for two reasons. One was that the FBI director had lost the support of his rank and file. The bureau, Trump asserted, was “in turmoil.” The other reason was a memo by Deputy Attorney General Rod Rosenstein, which the Justice Department submitted to Trump on May 8, 2017. The memo argued that Comey had overstepped his authority in the Hillary Clinton email investigation.

Mueller exposes these rationales as lies. He finds “no evidence” to support Trump’s claim about the FBI rank and file. In fact, the report shows that Trump began to fabricate this claim on May 5, after he had decided to fire Comey. On May 9, having axed the FBI director, Trump summoned FBI Deputy Director Andrew McCabe and asked him “whether many people in the FBI disliked Comey.” McCabe told Trump that “most people in the FBI felt positively about Comey.” So, on May 10, Trump rephrased his question as a statement, telling McCabe that “he had received ‘hundreds’ of messages from FBI employees indicating their support for terminating Comey.” Sarah Sanders, who was then Trump’s deputy press secretary, repeated this talking point. But under interrogation and the threat of perjury charges, she later confessed that it “was not founded on anything.”

As for Rosenstein’s memo, Mueller proves that Trump engineered it as a cover story. On May 8, the day before he fired Comey, Trump told his advisers, “I’ve made my decision.” He made his reason clear: Comey had refused to state publicly that Trump wasn’t under investigation. Only after this conversation, based on legal advice, did the president ask Rosenstein to write a memo. Trump then cited the memo—which made a completely different argument against Comey unrelated to Russia—as his basis for terminating the FBI director. And the White House buried Trump’s original termination letter, which exposed his true motives. According to notes discovered by Mueller’s team, the White House counsel’s office concluded that the letter should never see the “light of day.”

When Trump warned Comey that the White House might have tapes of their conversations, he was bluffing. The president knew he hadn’t recorded the conversations because recordings would have proved he was lying. Trump figured that if he kept everyone else out of the room, nobody would ever know the truth. But now, thanks to Mueller, we do.