NFL · Empirical Bayes

True-Talent Leaderboards

A raw single-season rate is a noisy guess at a player’s real ability, and the noise is worst for the smallest samples — so a naïve leaderboard is topped by whoever got lucky in the fewest tries. This one shrinks every rate toward its position-group prior by how much the sample can be trusted, and shows a 90% credible interval instead of a point. Toggle raw vs. shrunk to watch the flukes fall back to the pack.

EPA per target · 2024

Mean EPA per target, shrunk within position.

Beats raw by
24.4%
lower out-of-sample error
RMSE raw → shrunk
0.38 → 0.29
odd vs. even weeks
Split-half reliability
0.13
how repeatable the raw stat is
Stabilizes at
164 TE · 126 WR
targets to trust the number
shrunkrawthe shrink90% CI
-0.20.00.20.40.6TE avgWR avg1Amon-Ra St. BrownDET · 141+0.482George KittleSF · 94+0.423Terry McLaurinWAS · 118+0.424A.J. BrownPHI · 97+0.425DeVonta SmithPHI · 90+0.416Ladd McConkeyLAC · 113+0.417Mark AndrewsBAL · 69+0.398Rashod BatemanBAL · 72+0.399Adam ThielenCAR · 62+0.3810Tee HigginsCIN · 110+0.3711Alec PierceIND · 69+0.3712Devaughn VeleDEN · 55+0.3713Jonnu SmithMIA · 111+0.3714Ja'Marr ChaseCIN · 175+0.3615Puka NacuaLA · 107+0.3616Jayden ReedGB · 76+0.3617Chris Godwin Jr.TB · 62+0.3618Jalen CokerCAR · 46+0.3519Justin JeffersonMIN · 154+0.3420Jaylen WaddleMIA · 85+0.3421Khalil ShakirBUF · 100+0.3422Tucker KraftGB · 71+0.3323Jalen NailorMIN · 42+0.3324Nico CollinsHOU · 99+0.3325Allen LazardNYJ · 61+0.3326Brian Thomas Jr.JAX · 135+0.3327Darnell MooneyATL · 106+0.3328Tylan WallaceBAL · 12+0.3229Justin WatsonKC · 32+0.3230Pat FreiermuthPIT · 78+0.3231Jordan WhittingtonLA · 28+0.3132Rashee RiceKC · 29+0.3133Josh OliverMIN · 28+0.3034Kalif RaymondDET · 22+0.3035Grant CalcaterraPHI · 30+0.3036Payne DurhamTB · 14+0.2937KhaDarel HodgeATL · 12+0.2938Malik HeathGB · 13+0.2939Nate AdkinsDEN · 15+0.28

Each row is a player: the solid dot is the shrunk estimate, the hollow dot the raw rate, joined by the red pull of regression; the grey bar is the 90% credible interval. A hollow shrunk dot means the sample is below the stabilization line — the number is mostly the position prior. Switch to Raw rank and watch the small-sample names climb.

EPA per target · 2024 · full board

EPA per target leaderboard for the 2024 NFL season, shrunk by empirical Bayes with 90% credible intervals, ranked by the shrunk estimate.
#PlayerTeamPostargetsRawShrunk90% interval
1Amon-Ra St. BrownDETWR141+0.68+0.48+0.31+0.65
2George Kittle◦ provisionalSFTE94+0.72+0.42+0.27+0.57
3Terry McLaurin◦ provisionalWASWR118+0.60+0.42+0.25+0.59
4A.J. Brown◦ provisionalPHIWR97+0.64+0.42+0.24+0.60
5DeVonta Smith◦ provisionalPHIWR90+0.63+0.41+0.23+0.59
6Ladd McConkey◦ provisionalLACWR113+0.58+0.41+0.23+0.58
7Mark Andrews◦ provisionalBALTE69+0.73+0.39+0.24+0.55
8Rashod Bateman◦ provisionalBALWR72+0.62+0.39+0.19+0.58
9Adam Thielen◦ provisionalCARWR62+0.65+0.38+0.19+0.58
10Tee Higgins◦ provisionalCINWR110+0.51+0.37+0.20+0.55
11Alec Pierce◦ provisionalINDWR69+0.58+0.37+0.18+0.56
12Devaughn Vele◦ provisionalDENWR55+0.64+0.37+0.17+0.57
13Jonnu Smith◦ provisionalMIATE111+0.54+0.37+0.22+0.51
14Ja'Marr ChaseCINWR175+0.44+0.36+0.21+0.52
15Puka Nacua◦ provisionalLAWR107+0.49+0.36+0.18+0.54
16Jayden Reed◦ provisionalGBWR76+0.54+0.36+0.17+0.55
17Chris Godwin Jr.◦ provisionalTBWR62+0.57+0.36+0.16+0.55
18Jalen Coker◦ provisionalCARWR46+0.63+0.35+0.15+0.56
19Justin JeffersonMINWR154+0.42+0.34+0.18+0.50
20Jaylen Waddle◦ provisionalMIAWR85+0.47+0.34+0.15+0.53
21Khalil Shakir◦ provisionalBUFWR100+0.44+0.34+0.16+0.52
22Tucker Kraft◦ provisionalGBTE71+0.52+0.33+0.18+0.49
23Jalen Nailor◦ provisionalMINWR42+0.58+0.33+0.13+0.54
24Nico Collins◦ provisionalHOUWR99+0.43+0.33+0.15+0.51
25Allen Lazard◦ provisionalNYJWR61+0.49+0.33+0.13+0.53
26Brian Thomas Jr.JAXWR135+0.40+0.33+0.16+0.50
27Darnell Mooney◦ provisionalATLWR106+0.41+0.33+0.15+0.50
28Tylan Wallace◦ provisionalBALWR12+1.06+0.32+0.09+0.55
29Justin Watson◦ provisionalKCWR32+0.60+0.32+0.11+0.54
30Pat Freiermuth◦ provisionalPITTE78+0.46+0.32+0.17+0.47
31Jameson Williams◦ provisionalDETWR91+0.41+0.32+0.14+0.50
32Mack Hollins◦ provisionalBUFWR50+0.49+0.32+0.11+0.52
33Zay Flowers◦ provisionalBALWR117+0.38+0.31+0.14+0.49
34Jauan Jennings◦ provisionalSFWR113+0.38+0.31+0.14+0.49
35Jordan Whittington◦ provisionalLAWR28+0.59+0.31+0.09+0.53
36Isaiah Likely◦ provisionalBALTE58+0.48+0.31+0.15+0.47
37Rashee Rice◦ provisionalKCWR29+0.57+0.31+0.09+0.53
38Keon Coleman◦ provisionalBUFWR58+0.44+0.31+0.11+0.51
39Romeo Doubs◦ provisionalGBWR73+0.41+0.31+0.12+0.50
40Quentin Johnston◦ provisionalLACWR91+0.38+0.31+0.12+0.49
41Josh Palmer◦ provisionalLACWR67+0.41+0.31+0.11+0.50
42Mike Gesicki◦ provisionalCINTE83+0.41+0.30+0.15+0.46
43Josh Oliver◦ provisionalMINTE28+0.61+0.30+0.13+0.48
44Kalif Raymond◦ provisionalDETWR22+0.60+0.30+0.08+0.53
45Noah Gray◦ provisionalKCTE49+0.47+0.30+0.14+0.47
46Jaxon Smith-NjigbaSEAWR138+0.35+0.30+0.14+0.47
47Calvin Austin III◦ provisionalPITWR58+0.42+0.30+0.10+0.50
48Cole Kmet◦ provisionalCHITE59+0.44+0.30+0.14+0.46
49Marvin Mims Jr.◦ provisionalDENWR53+0.42+0.30+0.10+0.50
50Tim Patrick◦ provisionalDETWR45+0.44+0.30+0.09+0.51
51Olamide Zaccheaus◦ provisionalWASWR64+0.39+0.30+0.10+0.49
52Andrei Iosivas◦ provisionalCINWR61+0.39+0.30+0.10+0.50
53Mike Evans◦ provisionalTBWR110+0.35+0.30+0.12+0.47
54Foster Moreau◦ provisionalNOTE43+0.46+0.30+0.13+0.46
55Jordan Addison◦ provisionalMINWR100+0.35+0.30+0.12+0.48
56Grant Calcaterra◦ provisionalPHITE30+0.53+0.30+0.12+0.47
57Sam LaPorta◦ provisionalDETTE83+0.38+0.30+0.14+0.45
58Payne Durham◦ provisionalTBTE14+0.74+0.29+0.11+0.47
59Trey McBride◦ provisionalARITE147+0.33+0.29+0.15+0.43
60KhaDarel Hodge◦ provisionalATLWR12+0.69+0.29+0.06+0.52
61Malik Heath◦ provisionalGBWR13+0.64+0.29+0.06+0.52
62Mike Williams◦ provisionalPITWR35+0.42+0.29+0.07+0.50
63Christian Watson◦ provisionalGBWR54+0.37+0.29+0.08+0.49
64Nate Adkins◦ provisionalDENTE15+0.61+0.28+0.10+0.46
65Zach Ertz◦ provisionalWASTE93+0.33+0.28+0.13+0.43
66Dallas Goedert◦ provisionalPHITE52+0.37+0.28+0.12+0.45
67Brenton Strange◦ provisionalJAXTE53+0.36+0.28+0.12+0.44
68Jalen Tolbert◦ provisionalDALWR79+0.32+0.28+0.09+0.47
69Elijah Higgins◦ provisionalARITE24+0.40+0.27+0.10+0.45
70Kayshon Boutte◦ provisionalNEWR69+0.30+0.27+0.07+0.46
71Tutu Atwell◦ provisionalLAWR62+0.30+0.27+0.07+0.47
72Stone Smartt◦ provisionalLACTE19+0.39+0.27+0.09+0.44
73Josh Reynolds◦ provisionalJAXWR24+0.35+0.27+0.05+0.49
74Sterling Shepard◦ provisionalTBWR52+0.30+0.27+0.06+0.47
75Darnell Washington◦ provisionalPITTE25+0.34+0.26+0.09+0.44
76Tyler Higbee◦ provisionalLATE12+0.41+0.26+0.08+0.44
77Courtland SuttonDENWR135+0.28+0.26+0.10+0.43
78Dawson Knox◦ provisionalBUFTE33+0.31+0.26+0.09+0.43
79Stefon Diggs◦ provisionalHOUWR64+0.28+0.26+0.07+0.46
80AJ Barner◦ provisionalSEATE38+0.29+0.26+0.09+0.43
81George Pickens◦ provisionalPITWR103+0.27+0.26+0.08+0.44
82Malik NabersNYGWR172+0.27+0.26+0.10+0.42
83Derius Davis◦ provisionalLACWR17+0.32+0.26+0.03+0.49
84Mo Alie-Cox◦ provisionalINDTE23+0.30+0.26+0.08+0.43
85Daniel Bellinger◦ provisionalNYGTE17+0.31+0.26+0.08+0.44
86Tank Dell◦ provisionalHOUWR81+0.27+0.26+0.07+0.45
87Jerry JeudyCLEWR148+0.26+0.26+0.09+0.42
88Brandon Aiyuk◦ provisionalSFWR47+0.27+0.26+0.05+0.46
89Mecole Hardman◦ provisionalKCWR14+0.31+0.26+0.03+0.49
90Ja'Tavion Sanders◦ provisionalCARTE43+0.27+0.26+0.09+0.42
91Adam Trautman◦ provisionalDENTE22+0.27+0.25+0.08+0.43
92Luke Schoonmaker◦ provisionalDALTE36+0.26+0.25+0.08+0.42
93Marquise Brown◦ provisionalKCWR15+0.28+0.25+0.03+0.48
94Trey Palmer◦ provisionalTBWR22+0.27+0.25+0.03+0.48
95Parker Washington◦ provisionalJAXWR53+0.25+0.25+0.05+0.45
96Hunter Henry◦ provisionalNETE97+0.25+0.25+0.10+0.40
97Juwan Johnson◦ provisionalNOTE68+0.25+0.25+0.09+0.41
98Erick All◦ provisionalCINTE22+0.24+0.25+0.07+0.43
99Jakobi MeyersLVWR130+0.25+0.25+0.08+0.42
100Nelson Agholor◦ provisionalBALWR29+0.24+0.25+0.03+0.47
101Josh Whyle◦ provisionalTENTE38+0.24+0.25+0.08+0.42
102Ryan Miller◦ provisionalTBWR20+0.24+0.25+0.03+0.47
103Will Dissly◦ provisionalLACTE64+0.24+0.25+0.09+0.41
104Tanner Hudson◦ provisionalCINTE24+0.22+0.25+0.07+0.42
105Drew Sample◦ provisionalCINTE22+0.22+0.25+0.07+0.42
106Bub Means◦ provisionalNOWR15+0.22+0.25+0.02+0.48
107Cade Stover◦ provisionalHOUTE22+0.21+0.25+0.07+0.42
108Brock Wright◦ provisionalDETTE16+0.19+0.25+0.07+0.43
109Devin Duvernay◦ provisionalJAXWR16+0.21+0.25+0.02+0.47
110DeAndre Hopkins◦ provisionalKCWR80+0.24+0.25+0.06+0.44
111Jake Bobo◦ provisionalSEAWR18+0.21+0.25+0.02+0.47
112Marquez Valdes-Scantling◦ provisionalNOWR44+0.23+0.25+0.04+0.45
113DeMario Douglas◦ provisionalNEWR87+0.24+0.25+0.06+0.43
114Lucas Krull◦ provisionalDENTE23+0.20+0.25+0.07+0.42
115Josh Downs◦ provisionalINDWR107+0.24+0.25+0.07+0.42
116Eric Saubert◦ provisionalSFTE14+0.14+0.24+0.06+0.42
117Marvin Harrison Jr.◦ provisionalARIWR116+0.24+0.24+0.07+0.42
118Julian Hill◦ provisionalMIATE20+0.17+0.24+0.07+0.42
119Calvin Ridley◦ provisionalTENWR120+0.23+0.24+0.07+0.42
120Austin Hooper◦ provisionalNETE59+0.22+0.24+0.08+0.40
121Johnny Mundt◦ provisionalMINTE27+0.18+0.24+0.07+0.42
122Jamison Crowder◦ provisionalWASWR13+0.16+0.24+0.01+0.47
123Kendrick Bourne◦ provisionalNEWR38+0.21+0.24+0.03+0.45
124Simi Fehoko◦ provisionalLACWR16+0.17+0.24+0.01+0.47
125Brevyn Spann-Ford◦ provisionalDALTE14+0.10+0.24+0.06+0.42
126Andrew Ogletree◦ provisionalINDTE14+0.09+0.24+0.06+0.42
127Noah Brown◦ provisionalWASWR56+0.21+0.24+0.04+0.44
128Drake LondonATLWR159+0.23+0.24+0.08+0.40
129Malik Washington◦ provisionalMIAWR36+0.20+0.24+0.03+0.45
130Nick Westbrook-Ikhine◦ provisionalTENWR60+0.21+0.24+0.04+0.44
131Tommy Tremble◦ provisionalCARTE32+0.16+0.24+0.07+0.41
132Jordan Akins◦ provisionalCLETE58+0.19+0.24+0.07+0.40
133Tyreek Hill◦ provisionalMIAWR123+0.22+0.24+0.06+0.41
134Dalton Kincaid◦ provisionalBUFTE75+0.20+0.24+0.08+0.39
135Nick Vannett◦ provisionalTENTE20+0.09+0.24+0.06+0.41
136Harrison Bryant◦ provisionalLVTE12-0.02+0.23+0.05+0.41
137DK Metcalf◦ provisionalSEAWR109+0.21+0.23+0.06+0.41
138Darius Slayton◦ provisionalNYGWR72+0.20+0.23+0.04+0.43
139Luke McCaffrey◦ provisionalWASWR25+0.13+0.23+0.01+0.45
140Christian Kirk◦ provisionalJAXWR47+0.18+0.23+0.03+0.44
141John Bates◦ provisionalWASTE13-0.05+0.23+0.05+0.41
142Kevin Austin Jr.◦ provisionalNOWR22+0.11+0.23+0.01+0.45
143KaVontae Turpin◦ provisionalDALWR52+0.18+0.23+0.03+0.43
144Jalen McMillan◦ provisionalTBWR58+0.17+0.23+0.03+0.43
145Xavier Worthy◦ provisionalKCWR99+0.20+0.23+0.05+0.41
146Ricky Pearsall◦ provisionalSFWR47+0.16+0.23+0.02+0.43
147Gerald Everett◦ provisionalCHITE13-0.11+0.23+0.05+0.41
148T.J. Hockenson◦ provisionalMINTE62+0.15+0.23+0.07+0.39
149Cedrick Wilson Jr.◦ provisionalNOWR27+0.09+0.22+0.00+0.44
150Theo Johnson◦ provisionalNYGTE43+0.11+0.22+0.06+0.39
151Tyler Conklin◦ provisionalNYJTE73+0.15+0.22+0.07+0.38
152Greg Dortch◦ provisionalARIWR50+0.15+0.22+0.02+0.43
153Tyler Lockett◦ provisionalSEAWR74+0.17+0.22+0.03+0.41
154Taysom Hill◦ provisionalNOTE31+0.04+0.22+0.05+0.39
155David Moore◦ provisionalCARWR57+0.15+0.22+0.02+0.42
156JuJu Smith-Schuster◦ provisionalKCWR26+0.05+0.22-0.00+0.44
157Brock Bowers◦ provisionalLVTE153+0.18+0.22+0.08+0.35
158Johnny Wilson◦ provisionalPHIWR15-0.08+0.22-0.01+0.44
159Chris Conley◦ provisionalSFWR12-0.16+0.22-0.02+0.45
160Cade Otton◦ provisionalTBTE87+0.14+0.22+0.06+0.37
161John Metchie III◦ provisionalHOUWR37+0.08+0.21+0.00+0.42
162Keenan Allen◦ provisionalCHIWR123+0.17+0.21+0.04+0.38
163Tre Tucker◦ provisionalLVWR81+0.15+0.21+0.02+0.40
164Michael Wilson◦ provisionalARIWR71+0.14+0.21+0.02+0.40
165Davis Allen◦ provisionalLATE13-0.31+0.21+0.03+0.39
166Michael Mayer◦ provisionalLVTE32-0.00+0.21+0.04+0.38
167Noah Fant◦ provisionalSEATE64+0.10+0.21+0.05+0.37
168Rome Odunze◦ provisionalCHIWR101+0.16+0.21+0.03+0.39
169Colby Parkinson◦ provisionalLATE49+0.07+0.21+0.05+0.37
170Robert Woods◦ provisionalHOUWR30+0.03+0.21-0.01+0.43
171Durham Smythe◦ provisionalMIATE17-0.21+0.21+0.03+0.39
172Travis Kelce◦ provisionalKCTE134+0.15+0.21+0.07+0.35
173Jeremy Ruckert◦ provisionalNYJTE28-0.06+0.21+0.03+0.38
174Demarcus Robinson◦ provisionalLAWR66+0.12+0.21+0.01+0.40
175Hayden Hurst◦ provisionalLACTE13-0.37+0.21+0.03+0.39
176Deebo Samuel Sr.◦ provisionalSFWR81+0.14+0.21+0.02+0.39
177Ryan Flournoy◦ provisionalDALWR14-0.20+0.21-0.02+0.43
178Luke Farrell◦ provisionalJAXTE17-0.27+0.20+0.02+0.38
179Kyle Pitts◦ provisionalATLTE74+0.09+0.20+0.05+0.36
180Charlie Woerner◦ provisionalATLTE12-0.48+0.20+0.02+0.38
181Van Jefferson◦ provisionalPITWR40+0.05+0.20-0.01+0.41
182Dyami Brown◦ provisionalWASWR40+0.05+0.20-0.01+0.41
183Pharaoh Brown◦ provisionalSEATE12-0.54+0.20+0.02+0.38
184DeAndre Carter◦ provisionalCHIWR14-0.29+0.20-0.03+0.43
185Davante AdamsNYJWR142+0.15+0.20+0.03+0.36
186Chris Olave◦ provisionalNOWR44+0.03+0.19-0.01+0.40
187Garrett WilsonNYJWR154+0.15+0.19+0.03+0.36
188Jermaine Burton◦ provisionalCINWR14-0.32+0.19-0.04+0.42
189Dante Pettis◦ provisionalNOWR29-0.06+0.19-0.03+0.41
190Greg Dulcich◦ provisionalNYGTE12-0.63+0.19+0.01+0.37
191Jahan Dotson◦ provisionalPHIWR33-0.03+0.19-0.02+0.41
192Tyler Boyd◦ provisionalTENWR58+0.05+0.19-0.01+0.39
193CeeDee LambDALWR154+0.13+0.18+0.02+0.35
194Amari Cooper◦ provisionalBUFWR85+0.08+0.18-0.00+0.37
195Dalton Schultz◦ provisionalHOUTE85+0.04+0.18+0.03+0.33
196DJ MooreCHIWR142+0.12+0.18+0.01+0.34
197Jalen Reagor◦ provisionalLACWR12-0.61+0.18-0.05+0.41
198Evan Engram◦ provisionalJAXTE67-0.01+0.18+0.02+0.33
199Ray-Ray McCloud◦ provisionalATLWR87+0.06+0.17-0.01+0.36
200Tyler Johnson◦ provisionalLAWR41-0.07+0.17-0.04+0.38
201Jalin Hyatt◦ provisionalNYGWR19-0.35+0.17-0.05+0.40
202Cedric Tillman◦ provisionalCLEWR51-0.02+0.17-0.03+0.37
203Xavier Legette◦ provisionalCARWR85+0.05+0.17-0.02+0.36
204Kylen Granson◦ provisionalINDTE31-0.27+0.17-0.00+0.34
205K.J. Osborn◦ provisionalWASWR18-0.41+0.17-0.06+0.39
206Gabe Davis◦ provisionalJAXWR42-0.10+0.16-0.05+0.37
207Mike Woods◦ provisionalCLEWR17-0.53+0.16-0.07+0.38
208Cooper Kupp◦ provisionalLAWR100+0.04+0.16-0.02+0.34
209Xavier Hutchinson◦ provisionalHOUWR26-0.30+0.16-0.06+0.38
210Rashid Shaheed◦ provisionalNOWR41-0.14+0.15-0.06+0.36
211Adonai Mitchell◦ provisionalINDWR55-0.09+0.15-0.05+0.35
212Chig Okonkwo◦ provisionalTENTE71-0.10+0.15-0.01+0.30
213Odell Beckham Jr.◦ provisionalMIAWR19-0.59+0.14-0.08+0.36
214Mason Tipton◦ provisionalNOWR26-0.40+0.14-0.08+0.36
215Michael Pittman◦ provisionalINDWR112+0.01+0.14-0.04+0.31
216David Njoku◦ provisionalCLETE99-0.05+0.14-0.01+0.29
217Lil'Jordan Humphrey◦ provisionalDENWR45-0.19+0.13-0.07+0.34
218DJ Turner◦ provisionalLVWR29-0.39+0.13-0.09+0.35
219Curtis Samuel◦ provisionalBUFWR46-0.22+0.12-0.08+0.33
220Dontayvion Wicks◦ provisionalGBWR76-0.10+0.12-0.07+0.31
221Jake Ferguson◦ provisionalDALTE86-0.15+0.11-0.04+0.27
222Brandin Cooks◦ provisionalDALWR54-0.21+0.11-0.09+0.32
223Jonathan Mingo◦ provisionalDALWR42-0.32+0.11-0.10+0.32
224Jalen Brooks◦ provisionalDALWR30-0.59+0.09-0.13+0.31
225Troy Franklin◦ provisionalDENWR53-0.35+0.07-0.13+0.28
226Diontae Johnson◦ provisionalHOUWR67-0.27+0.07-0.12+0.27
227Ja'Lynn Polk◦ provisionalNEWR34-0.61+0.07-0.15+0.28
228Wan'Dale RobinsonNYGWR140-0.17+0.03-0.14+0.19
229Elijah Moore◦ provisionalCLEWR102-0.36-0.02-0.20+0.16

How the shrinkage works

Two estimators

Rate stats (completion %, success rate, catch rate) use a beta-binomial model: a Beta(α, β) prior fit by marginal likelihood over each position group, then a Beta posterior per player. Per-play averages (EPA, CPOE, yards) use a normal-normal model with DerSimonian–Laird between-player variance. Both pull each player toward their group by exactly how thin their sample is.

Does it help? & the fine print

The trust panel’s numbers come from a leakage-free odd/even-week holdout: fit on odd weeks, predict even-week raw. Shrinkage lowers out-of-sample error for every stat. Priors are fit per season and per position (WR and TE separately), so a TE’s baseline isn’t a skill. Regular season only, 2016–2025. Rushing and receiving efficiency are heavily scheme-driven — read the wide bands as the honesty they are.

Source: nflverse play-by-play. Counted and computed deterministically — never modeled by a language model. Built by build_nfl_leaderboards.py (byte-reproducible).