© Copyright 2018 – 2024 FIRECRACKER SPORTS. All Rights Reserved.​ TERMS OF USE  |  PRIVACY POLICY

2024 Player Metrics

01/01/2025 - 03/31/2025
Providence , Rhode Island

INFORMATION

  • Age groups:
    1 Divisions High School (16U-18U)
  • Pool Play:
    Wednesday, January 1st through Sunday, March 30th, 2025
  • Price:
    High School (16U-18U) - $0
  • Playoffs/Championships:
    Monday, March 31st, 2025

Registration

  • DIVISION:
    • High School (16U-18U)
    • OPEN
    597 Players Registered
    COST: $0

College Coaches Attending

Teams

Locations

schedule

HOTELS

SCHEDULES & STANDINGS

Brackets

TOP PERFORMERS

RankProfileNameHome To First (30 Yard Dash)
1 Emmanuel Alvarez 2.28
2 Javier Burgos 3.68
3 Maikel Soriano 3.72
4 Joshua Warming 3.75
5 Lenell Evans 3.75
6 Brailin Dominguez 3.81
7 Gavin Sampson 3.84
8 Jack Raymond 3.84
9 Claudio Martinez 3.86
10 Raynel Rodriguez 3.86
11 Christian Wheeler 3.87
12 Lucas Fabiano 3.87
13 Josh Gamere 3.88
14 Ethan Stokes 3.88
15 Levi Hessel 3.88
16 Alex Zilora 3.9
17 Chase Morrison 3.9
18 Jonathan Gomez 3.9
19 Andres Garcia 3.91
20 Charles MacElhiney 3.91
21 EJ Perez 3.91
22 Jackson McLane 3.91
23 P.J. Casey 3.91
24 Corey Blanchette 3.93
25 Ethan Ford 3.93
26 Jack Himelfarb 3.93
27 Ruben Cortorreal 3.93
28 Blake Morse 3.94
29 Andrew Weiss 3.94
30 Charlie Gamere 3.94
31 Finn McHale 3.94
32 John Fedorowicz 3.94
33 Nick Commisso 3.94
34 Sean Matrose 3.94
35 William Machnik 3.94
36 Brayden Hastings 3.96
37 Christopher Rouleau 3.96
38 Andrew Tannous 3.97
39 John Ferguson 3.97
40 Keith DeCosta 3.97
41 Mark WHITTINGTON 3.97
42 Michael Blair 3.97
43 Noah Corliss 3.97
44 Tyson Kass 3.97
45 Zach Elinich 3.97
46 Theo Allan 3.98
47 Tommy Gibeault 3.99
48 Alex Allain 4
49 Chris Barboza 4
50 Ethan Torres 4
51 Evan Davis 4
52 Frank Allo 4
53 Gianni Barberio 4
54 Jackson Gietek 4
55 Shea Curley 4
56 Tommy Caporaso 4
57 Adryan Ureña 4.01
58 Mac Ash 4.01
59 Sam Iafrati 4.01
60 Yamil Moya 4.02
61 Boston Bettencourt 4.03
62 Brock Winslow 4.03
63 Colin Westbrook 4.03
64 Eric Rossi 4.03
65 Jackson Avanzino 4.03
66 Javier Lugo 4.03
67 Jayden Tolentino 4.03
68 Joshua Cline 4.03
69 Kyle O\'Sullivan 4.03
70 Oliver Lawrence 4.03
71 Randy Rosario 4.03
72 Robert Bouchard 4.03
73 Colin Padovich 4.04
74 Liam Thornley 4.04
75 Lucas daCosta 4.04
76 Ryan Nunes 4.05
77 Ashton Goodwin 4.06
78 Benjamin Monteiro 4.06
79 Evan Wright 4.06
80 Jackson Immomen 4.06
81 Jaiden Collins 4.06
82 James Bruso 4.06
83 Jeremy Evangelista 4.06
84 Leonardo May 4.06
85 Max Hopkins 4.06
86 Robert Cortina 4.06
87 Will Winiarski 4.06
88 Jeremie Luna 4.07
89 Jordany Acosta 4.07
90 Brett Richard 4.08
91 Jonas Diaz 4.08
92 Colin Faber 4.09
93 Julian Oliver 4.09
94 Liam Heaney 4.09
95 Mark Ehrenzeller 4.09
96 Max Maturah 4.09
97 Ryan DeMelo 4.09
98 Sam Fantasia 4.09
99 Aidan Bailey 4.1
100 Alex Russell 4.1
101 Andrew Beauregard 4.1
102 Bodie Burke 4.1
103 COOPER ANDERSON 4.1
104 Darius Taliaferro 4.1
105 Harold Fernandez 4.1
106 Jackson McBride 4.1
107 Joshua Misiaszek 4.1
108 Maxwell Carlin 4.1
109 Nikolas LaPointe 4.1
110 Robert Frick 4.1
111 Ryder Herchenroder 4.1
112 Ross Lipsky 4.11
113 Brady Coppinger 4.11
114 Patrick Brooks 4.11
115 Wes Keayes 4.11
116 Xavier Molina 4.11
117 Adam Gold 4.12
118 Brody Barrett 4.12
119 Carter Harris 4.12
120 Finn Maiona 4.12
121 MILES PEREZ 4.12
122 Mitchell Canuel 4.12
123 Oliver Dean 4.12
124 Aiden Keeling-Lococo 4.13
125 Alex Croteau 4.13
126 Anthony Roman 4.13
127 Gavin Rolleston 4.13
128 Gracin Tanguay 4.13
129 Nicholas Sorbera 4.13
130 Nolan Bell 4.13
131 Owen Pennini 4.13
132 Grahm Hutton 4.14
133 Jullian Dejesus 4.14
134 Armani Pimentel 4.15
135 Blake Teague 4.15
136 Carter Whitten 4.15
137 Gianluca Giordano 4.15
138 Jackson Mazzaferro 4.15
139 Jake Reichert 4.15
140 Kaden Goldstein 4.15
141 Mathew Charrette 4.15
142 Noah Lam 4.15
143 Quinn Bramble 4.15
144 Rhys Urbanczyk 4.15
145 Sam Unfricht 4.15
146 Troy Leighton 4.15
147 Bryce Silva 4.16
148 Dustin Menzel 4.16
149 Jake Pratt 4.16
150 Tristen Hong 4.16
151 Colby Ciavarro 4.17
152 Ethan Pham 4.17
153 Edward Roquez 4.18
154 Jack Monteith 4.18
155 Jayden Burgos 4.18
156 Sam Goodwin 4.18
157 Andrew (AJ) Swerdloff 4.19
158 Andres Reyes 4.19
159 Anthony Pimentel 4.19
160 Braeden Dwyer 4.19
161 Bryan Putman 4.19
162 Chester Bouchard 4.19
163 Daniel Nuti 4.19
164 Evan Candelario 4.19
165 Evan Groff 4.19
166 Evan Liverseidge 4.19
167 Henry Sanders 4.19
168 Jack Cestodio 4.19
169 JACK HARMON 4.19
170 Jeremy Parkos 4.19
171 JOHN OLSON 4.19
172 Matteo Cuccovia 4.19
173 Samuel Sheldon 4.19
174 Zach Iacabbo-Sawyer 4.19
175 Aaron Vega 4.2
176 Jack Finocchario 4.2
177 Joe Kelly 4.2
178 Aidan Daugherty 4.21
179 Brady Quirion 4.21
180 Ivan Hramiak 4.21
181 Miles Wilson 4.21
182 Alexander Chamorro 4.22
183 Angelo Minyetti 4.22
184 Anthony Frayler 4.22
185 Brendan Woytowich 4.22
186 Carter Ivens 4.22
187 Dylan Alt 4.22
188 Jack Snyder 4.22
189 Jake Morin 4.22
190 James Flynn 4.22
191 Jonah Babcock 4.22
192 Joshua Santana 4.22
193 Wiatt Bolduc 4.22
194 Will Lavelle 4.22
195 Jackson O\'Dell 4.23
196 Adoni Frances 4.24
197 Aaron Waters 4.24
198 Cole Landini 4.24
199 Justin Tremblay 4.24
200 Braeden Crowe 4.25
201 Brayan Fernandez 4.25
202 Brian Keene 4.25
203 Carson Hammer 4.25
204 Desmond Hayeck 4.25
205 Dominick Zuliani 4.25
206 Elias Weppler 4.25
207 Gil Bianchi 4.25
208 Grant Wyers 4.25
209 Jacob Marsh 4.25
210 Jake Mulligan 4.25
211 Jordi Burgos 4.25
212 Michael Roman 4.25
213 Trey Smith 4.25
214 Will Burgess 4.25
215 Aiden LeBouf 4.26
216 Corey Culhane 4.26
217 Connor O\'Malley 4.27
218 Aidan Gagnon 4.28
219 Brennan Robert 4.28
220 Elan Santana 4.28
221 Elijah Powell 4.28
222 Eric Johnston 4.28
223 Jack Therrien 4.28
224 Jake McGarry 4.28
225 Kameron Morris 4.28
226 Liam Monahan 4.28
227 Matthew Olynciw 4.28
228 michael fuentes 4.28
229 Nick Leddy 4.28
230 Phillip Groeling II 4.28
231 Priyam Chokshi 4.28
232 Rowan Brown-Knobel 4.28
233 Sean Krouskoff 4.28
234 Wynnton Stefanovicz 4.28
235 Gus Merhige 4.29
236 Miguel Colon 4.29
237 Smerlin Lopez 4.29
238 Ty Chhourn 4.29
239 Adam Ruskin 4.3
240 Cooper Tantraporn 4.3
241 AIDAN MOSQUEDA 4.31
242 Blake Deneault 4.31
243 Joseph Castelo 4.31
244 Ryan Kukel 4.31
245 Vincent Willits 4.31
246 Anthony Dufour 4.32
247 Jovaniel Cruz 4.32
248 Michael Goss 4.33
249 Collin Picard 4.34
250 Connor Hammond 4.34
251 Cooper McFarlane 4.34
252 Evan Pupka 4.34
253 Joel Cortorreal 4.34
254 Patrick Larson 4.34
255 Payton Young 4.34
256 Quinlan Grace 4.34
257 Wes Asselin 4.34
258 Austin Lowe 4.35
259 Brady Edgcomb 4.35
260 Brendan Kantscheidt 4.35
261 Eddie McClung 4.35
262 Jace Wolfradt 4.35
263 Jake Thompson 4.35
264 Miles Lawrence 4.35
265 Samuel Kinisky 4.35
266 Matthew Downs 4.36
267 Blake Mulhearn 4.37
268 Brayden Koegel 4.37
269 Chase Malbaurn 4.37
270 Cormac Lang 4.37
271 Gavin Rooney 4.37
272 Hayden McClellan 4.37
273 Julio Casado 4.37
274 patrick Herlihy 4.37
275 Aaron Ilgenfritz 4.38
276 Christopher Welch 4.38
277 Dylan Lewendon 4.38
278 Evan Corrigan 4.38
279 Graydon Greenberg 4.38
280 Grayson Simmons 4.38
281 Jake Reyngold 4.38
282 Nolan Tetreault 4.38
283 Riki Ekuni 4.38
284 Logan Dome 4.39
285 Joseph Jr. Colagiacomo 4.4
286 Luke McGrail 4.4
287 Noah Foster 4.4
288 Sheamus Mahoney 4.4
289 Luke McDermott 4.41
290 Cole Fredriksen 4.42
291 Christian Nopper 4.43
292 Sean McKeon 4.43
293 Brady Boissonneault 4.44
294 Jackson Sheehy 4.44
295 Joe Foscaldo 4.44
296 Nolan Wondolowski 4.44
297 Wyatt Daigle 4.44
298 Izaiah Macon 4.46
299 Caden Reynolds 4.47
300 Christian Kochanek 4.47
301 Drew Budihas 4.47
302 Jack O\'Sullivan 4.47
303 Jack Pastor 4.47
304 James McDermott 4.47
305 Maxwell Rapoza 4.47
306 Owen Harrington 4.47
307 E.J. Ross 4.5
308 Matthew Lynaugh 4.5
309 Zeke Reyes 4.5
310 Dylan Comiskey 4.51
311 Jose Vinas 4.51
312 Santiago Gavalo 4.51
313 Thomas McDonnell 4.51
314 Jack Swartz 4.52
315 Jack West 4.52
316 Wade Margolies 4.52
317 Austin Jorge 4.53
318 Ean Williamson 4.53
319 Evan Philipson 4.53
320 Ismael Grant 4.53
321 John Millet 4.53
322 Marcus Noel 4.53
323 Tyler Yoxall 4.53
324 Ashton Chieppa 4.54
325 Jack Elia 4.55
326 Darren Russo 4.56
327 Geoffrey Laliberte 4.56
328 Jack Amann 4.56
329 Riley McDade 4.56
330 Wyatt Kurtz 4.56
331 Kevin Dones 4.57
332 Louis Nevadomski 4.59
333 John Crowley 4.59
334 Lucas Johnson 4.62
335 Mason Easterbrooks 4.62
336 Bryson Graves 4.63
337 Dylan Cosgrove 4.63
338 Jacob Carling 4.63
339 John Scavone III. (JJ) 4.63
340 Nick Cannella 4.63
341 Boden Shah 4.64
342 Derek Steinberg 4.64
343 Eli Bostian 4.64
344 ALEXANDER Lutomski 4.68
345 Cooper Benoit 4.69
346 Joshua Albizu 4.69
347 Kyle Desrosiers 4.69
348 Joseph Nevadomski 4.72
349 Barrett Snider 4.72
350 Zachary Lavoie 4.75
351 Chase Zraunig 4.76
352 Conor Canonico 4.78
353 Liam Mulhern 4.8
354 Michael Valente 4.81
355 Anthony Nevadomski 4.84
356 Brady Wuethrich 4.88
357 Gavin King 4.91
358 Nick Pospisil 4.91
359 Jahyr Torbaa 4.93
360 Luke Mazares 4.95
361 Yerlin Feliz 5.01
362 COBY O\'CONNOR 5.03
363 Naizaiah Rosa 5.05
364 Orion Ruck 5.08
365 Caden Laverdiere 5.09
366 Jackson Finn 5.09
367 Luca DiZebba 5.1
368 Junior Vasquez 5.15
369 Mario Corso-Winks 5.18
370 William CoPenny 5.25
371 Rainiel Gonell 5.43
372 Leonel Septimus 5.58
373 Reynaldo Medina 5.84
374 Zachary Powell 6.13
375 Jesse Avanzino 6.34
376 Ethan Azoff 6.5
377 Wade Middleton 6.54
RankProfileName60 Time
1 Lenell Evans 6.69
2 Joshua Warming 6.78
3 Chase Morrison 6.8
4 Javier Burgos 6.81
5 Ethan Stokes 6.9
6 Christian Wheeler 6.94
7 EJ Perez 6.94
8 Jackson Gietek 6.94
9 Maikel Soriano 6.97
10 Jeremie Luna 7
11 Frank Allo 7.02
12 Sean Matrose 7.02
13 Alex Zilora 7.03
14 Andres Garcia 7.03
15 Finn McHale 7.03
16 John Fedorowicz 7.07
17 Jonathan Gomez 7.07
18 Lucas Fabiano 7.07
19 Alex Allain 7.08
20 Josh Gamere 7.09
21 Ty Chhourn 7.09
22 Eric Johnston 7.1
23 Evan Davis 7.1
24 Jack Raymond 7.1
25 Ashton Goodwin 7.12
26 Charlie Gamere 7.12
27 Harold Fernandez 7.12
28 William Machnik 7.12
29 Nick Commisso 7.13
30 Ruben Cortorreal 7.13
31 Sam Iafrati 7.13
32 Andrew Tannous 7.14
33 Christopher Rouleau 7.14
34 Tyson Kass 7.14
35 Brayden Hastings 7.15
36 Junior Vasquez 7.16
37 Mitchell Canuel 7.16
38 Raynel Rodriguez 7.16
39 Finn Maiona 7.17
40 Gianni Barberio 7.17
41 Jackson Avanzino 7.17
42 Jackson McLane 7.18
43 Shea Curley 7.19
44 Andrew Weiss 7.2
45 Boston Bettencourt 7.2
46 Jack Cestodio 7.21
47 Keith DeCosta 7.21
48 Aidan Bailey 7.22
49 Leonardo May 7.22
50 Ryan Nunes 7.22
51 Brian Keene 7.23
52 Bodie Burke 7.25
53 Gavin Sampson 7.25
54 Jack Himelfarb 7.25
55 Jayden Tolentino 7.25
56 John Ferguson 7.25
57 Lucas daCosta 7.25
58 Mark WHITTINGTON 7.25
59 Michael Blair 7.25
60 Patrick Brooks 7.25
61 Will Winiarski 7.25
62 Charles MacElhiney 7.26
63 Dylan Lewendon 7.26
64 Jackson Immomen 7.26
65 Jeremy Evangelista 7.26
66 Kyle Desrosiers 7.26
67 Jackson McBride 7.27
68 Rowan Brown-Knobel 7.27
69 Ryder Herchenroder 7.27
70 Colin Faber 7.28
71 Colin Westbrook 7.28
72 Jack Elia 7.28
73 Randy Rosario 7.28
74 Tommy Caporaso 7.28
75 Theo Allan 7.30
76 Bryce Silva 7.3
77 Orion Ruck 7.3
78 Brailin Dominguez 7.31
79 Carter Ivens 7.31
80 Claudio Martinez 7.31
81 Wes Keayes 7.31
82 Yamil Moya 7.32
83 Eric Rossi 7.33
84 Evan Wright 7.33
85 Liam Heaney 7.33
86 Austin Lowe 7.34
87 Corey Blanchette 7.34
88 Emmanuel Alvarez 7.34
89 Joshua Cline 7.34
90 Julian Oliver 7.34
91 Levi Hessel 7.34
92 Smerlin Lopez 7.34
93 William CoPenny 7.34
94 Liam Thornley 7.35
95 MILES PEREZ 7.35
96 Henry Sanders 7.36
97 Quinn Bramble 7.36
98 Adryan Ureña 7.37
99 Angelo Minyetti 7.37
100 Ethan Ford 7.38
101 Mac Ash 7.38
102 Mathew Charrette 7.38
103 Joe Kelly 7.39
104 Andrew Beauregard 7.4
105 Chris Barboza 7.4
106 COOPER ANDERSON 7.4
107 P.J. Casey 7.4
108 Adoni Frances 7.41
109 Brock Winslow 7.41
110 Cooper Tantraporn 7.41
111 Daniel Nuti 7.41
112 Sam Fantasia 7.41
113 Ross Lipsky 7.42
114 Blake Morse 7.43
115 Evan Liverseidge 7.43
116 Jack Snyder 7.43
117 Riki Ekuni 7.43
118 Aidan Daugherty 7.44
119 Aiden Keeling-Lococo 7.44
120 Desmond Hayeck 7.44
121 Ivan Hramiak 7.44
122 Joseph Castelo 7.44
123 Marcus Noel 7.44
124 Nolan Bell 7.44
125 Robert Bouchard 7.44
126 Zach Elinich 7.44
127 Connor O\'Malley 7.45
128 Kaden Goldstein 7.45
129 Mark Ehrenzeller 7.45
130 Will Lavelle 7.45
131 Darius Taliaferro 7.46
132 Robert Cortina 7.46
133 Alex Croteau 7.47
134 Kyle O\'Sullivan 7.47
135 Max Hopkins 7.47
136 Maxwell Carlin 7.47
137 Ethan Pham 7.48
138 Ethan Torres 7.48
139 Jake Pratt 7.48
140 Jack Monteith 7.49
141 Nicholas Sorbera 7.49
142 Colin Padovich 7.5
143 Gianluca Giordano 7.5
144 Izaiah Macon 7.5
145 Jake McGarry 7.5
146 Jonas Diaz 7.5
147 Jullian Dejesus 7.5
148 Noah Corliss 7.5
149 Nolan Wondolowski 7.5
150 Oliver Dean 7.5
151 Ryan DeMelo 7.5
152 Dustin Menzel 7.52
153 Grahm Hutton 7.52
154 Matteo Cuccovia 7.52
155 Brody Barrett 7.53
156 Carter Harris 7.53
157 Dominick Zuliani 7.53
158 Javier Lugo 7.53
159 Wade Margolies 7.53
160 Jake Morin 7.54
161 Jordany Acosta 7.54
162 Dylan Alt 7.56
163 Elijah Powell 7.56
164 Ismael Grant 7.56
165 Jace Wolfradt 7.56
166 Jake Reichert 7.56
167 Oliver Lawrence 7.56
168 Owen Pennini 7.56
169 Sam Goodwin 7.56
170 Anthony Pimentel 7.57
171 Armani Pimentel 7.57
172 Chester Bouchard 7.57
173 Corey Culhane 7.57
174 Yerlin Feliz 7.57
175 Aiden LeBouf 7.58
176 Brendan Woytowich 7.58
177 Benjamin Monteiro 7.59
178 Colby Ciavarro 7.59
179 Grant Wyers 7.59
180 Tristen Hong 7.59
181 Brayan Fernandez 7.6
182 Zach Iacabbo-Sawyer 7.6
183 Elias Weppler 7.61
184 Nikolas LaPointe 7.61
185 Aidan Gagnon 7.62
186 Brady Coppinger 7.62
187 Brady Quirion 7.62
188 Max Maturah 7.62
189 Andrew (AJ) Swerdloff 7.63
190 Jeremy Parkos 7.63
191 Miles Lawrence 7.63
192 Phillip Groeling II 7.63
193 Reynaldo Medina 7.63
194 Jackson Mazzaferro 7.64
195 Adam Ruskin 7.65
196 Brett Richard 7.65
197 Chase Malbaurn 7.65
198 Braeden Crowe 7.66
199 Evan Candelario 7.66
200 Mario Corso-Winks 7.66
201 Miguel Colon 7.66
202 Noah Lam 7.66
203 Riley McDade 7.66
204 Brennan Robert 7.68
205 Jack Finocchario 7.68
206 Jake Mulligan 7.68
207 James Bruso 7.68
208 Adam Gold 7.69
209 Alex Russell 7.69
210 Evan Groff 7.69
211 JOHN OLSON 7.69
212 Liam Monahan 7.69
213 Michael Roman 7.69
214 Sean Krouskoff 7.69
215 Troy Leighton 7.69
216 Anthony Dufour 7.7
217 Justin Tremblay 7.71
218 Aaron Vega 7.72
219 Aaron Waters 7.72
220 Wynnton Stefanovicz 7.72
221 Gavin Rooney 7.74
222 James Flynn 7.75
223 Jayden Burgos 7.75
224 Joshua Santana 7.75
225 Miles Wilson 7.75
226 Quinlan Grace 7.75
227 Will Burgess 7.75
228 Matthew Downs 7.76
229 Rhys Urbanczyk 7.76
230 Ryan Kukel 7.76
231 Michael Goss 7.77
232 Blake Teague 7.78
233 Brendan Kantscheidt 7.78
234 Robert Frick 7.78
235 Sam Unfricht 7.78
236 Trey Smith 7.78
237 Patrick Larson 7.79
238 Braeden Dwyer 7.8
239 Rainiel Gonell 7.8
240 Anthony Frayler 7.81
241 Gracin Tanguay 7.81
242 Jack Therrien 7.81
243 Jackson O\'Dell 7.81
244 Owen Harrington 7.81
245 Wyatt Daigle 7.81
246 Cole Landini 7.82
247 Edward Roquez 7.82
248 Evan Corrigan 7.82
249 Jonah Babcock 7.82
250 Carter Whitten 7.83
251 Connor Hammond 7.83
252 Jaiden Collins 7.83
253 Tommy Gibeault 7.83
254 Anthony Roman 7.84
255 Graydon Greenberg 7.84
256 Joshua Misiaszek 7.85
257 Brayden Koegel 7.86
258 Evan Philipson 7.86
259 Wiatt Bolduc 7.86
260 Andres Reyes 7.87
261 Grayson Simmons 7.87
262 patrick Herlihy 7.87
263 JACK HARMON 7.88
264 Lucas Johnson 7.88
265 michael fuentes 7.88
266 Kameron Morris 7.89
267 Vincent Willits 7.89
268 Drew Budihas 7.9
269 Jacob Carling 7.9
270 Jordi Burgos 7.9
271 Priyam Chokshi 7.91
272 Jahyr Torbaa 7.92
273 Xavier Molina 7.92
274 Jacob Marsh 7.93
275 Cole Fredriksen 7.94
276 Gavin Rolleston 7.94
277 Jake Reyngold 7.94
278 Christian Nopper 7.96
279 Logan Dome 7.96
280 Luke McGrail 7.96
281 Cooper McFarlane 7.97
282 Jovaniel Cruz 7.97
283 Luke McDermott 7.97
284 Matthew Olynciw 7.97
285 Nolan Tetreault 7.97
286 Cormac Lang 7.99
287 Alexander Chamorro 8
288 Blake Mulhearn 8
289 Joe Foscaldo 8.02
290 Mason Easterbrooks 8.02
291 Naizaiah Rosa 8.02
292 Payton Young 8.02
293 E.J. Ross 8.03
294 Joel Cortorreal 8.03
295 Samuel Sheldon 8.03
296 Carson Hammer 8.04
297 Dylan Comiskey 8.05
298 Jake Thompson 8.05
299 Zachary Powell 8.05
300 Evan Pupka 8.06
301 John Millet 8.06
302 Sheamus Mahoney 8.07
303 Jackson Finn 8.08
304 Noah Foster 8.08
305 Aaron Ilgenfritz 8.09
306 Elan Santana 8.09
307 Hayden McClellan 8.09
308 Samuel Kinisky 8.09
309 Ashton Chieppa 8.1
310 Julio Casado 8.1
311 Eddie McClung 8.12
312 Nick Leddy 8.12
313 Wes Asselin 8.12
314 Blake Deneault 8.13
315 Caden Reynolds 8.13
316 Gus Merhige 8.13
317 Jack Amann 8.13
318 Luca DiZebba 8.13
319 Louis Nevadomski 8.15
320 AIDAN MOSQUEDA 8.16
321 Zeke Reyes 8.16
322 Jackson Sheehy 8.18
323 Jose Vinas 8.19
324 Brady Edgcomb 8.2
325 Darren Russo 8.2
326 Gil Bianchi 8.22
327 Brady Boissonneault 8.25
328 Bryan Putman 8.25
329 Nick Cannella 8.25
330 Sean McKeon 8.25
331 Dylan Cosgrove 8.29
332 Eli Bostian 8.29
333 Maxwell Rapoza 8.3
334 Collin Picard 8.31
335 Thomas McDonnell 8.32
336 Tyler Yoxall 8.32
337 Wyatt Kurtz 8.32
338 Jesse Avanzino 8.33
339 Christian Kochanek 8.36
340 Derek Steinberg 8.36
341 Austin Jorge 8.37
342 Ean Williamson 8.37
343 Jack O\'Sullivan 8.37
344 Jack Pastor 8.37
345 Boden Shah 8.4
346 Zachary Lavoie 8.4
347 Santiago Gavalo 8.41
348 Jack Swartz 8.44
349 Jack West 8.44
350 John Scavone III. (JJ) 8.44
351 Joshua Albizu 8.44
352 Geoffrey Laliberte 8.47
353 Kevin Dones 8.47
354 ALEXANDER Lutomski 8.5
355 James McDermott 8.5
356 Christopher Welch 8.55
357 Cooper Benoit 8.57
358 Conor Canonico 8.59
359 Chase Zraunig 8.62
360 Barrett Snider 8.67
361 Liam Mulhern 8.68
362 Leonel Septimus 8.72
363 Bryson Graves 8.75
364 Brady Wuethrich 8.8
365 Matthew Lynaugh 8.8
366 John Crowley 8.84
367 Joseph Jr. Colagiacomo 8.97
368 Joseph Nevadomski 8.99
369 Gavin King 9.03
370 Anthony Nevadomski 9.08
371 Luke Mazares 9.16
372 Michael Valente 9.38
373 Wade Middleton 9.51
374 COBY O\'CONNOR 9.67
375 Caden Laverdiere 9.72
376 Nick Pospisil 9.77
377 Ethan Azoff 10.37
RankProfileNameInfield Velocity
1 Alex Allain 89
2 Leonardo May 89
3 Jeremy Evangelista 87
4 Ruben Cortorreal 86
5 Jace Wolfradt 85
6 Mitchell Canuel 84
7 Max Hopkins 83
8 Quinn Bramble 83
9 Claudio Martinez 82
10 Javier Burgos 82
11 Jeremy O\'Hara 82
12 Maikel Soriano 82
13 Tristen Hong 82
14 Wade Margolies 82
15 Jullian Dejesus 81
16 Lucas daCosta 81
17 Matteo Cuccovia 81
18 Evan Groff 80
19 Harold Fernandez 80
20 Jack Raymond 80
21 Jonas Diaz 80
22 Joshua Misiaszek 80
23 Robert Bouchard 80
24 Zachary Powell 80
25 Aiden Keeling-Lococo 79
26 Colin Faber 79
27 Tyler Yoxall 79
28 Ross Lipsky 78
29 Ashton Goodwin 78
30 Christopher Rouleau 78
31 Miles Lawrence 78
32 MILES PEREZ 78
33 Zeke Reyes 78
34 Adoni Frances 77
35 Braeden Crowe 77
36 Brett Richard 77
37 Jayden Burgos 77
38 Jonathan Gomez 77
39 Levi Hessel 77
40 Nathan Arnold 77
41 Riley McDade 77
42 Trey Smith 77
43 Alex Russell 76
44 Anthony Dufour 76
45 Brody Barrett 76
46 Darren Russo 76
47 Elan Santana 76
48 Ethan Ford 76
49 Geoffrey Laliberte 76
50 Jake Reichert 76
51 Jesse Avanzino 76
52 Jose Vinas 76
53 Jovaniel Cruz 76
54 Justin Tremblay 76
55 Nick Commisso 76
56 Nolan Wondolowski 76
57 Alex Croteau 75
58 Carter Whitten 75
59 Connor Hammond 75
60 Cooper Tantraporn 75
61 Corey Blanchette 75
62 Henry Sanders 75
63 Junior Vasquez 75
64 Naizaiah Rosa 75
65 Quinlan Grace 75
66 Tommy Caporaso 75
67 Zachary Lavoie 75
68 Aidan Daugherty 74
69 Brock Winslow 74
70 Collin Picard 74
71 Evan Davis 74
72 Evan Liverseidge 74
73 Evan Pupka 74
74 Jake Pratt 74
75 Mathew Charrette 74
76 Matteo Panciera 74
77 Patrick Larson 74
78 Payton Young 74
79 Robert Frick 74
80 Wyatt Daigle 74
81 Blake Morse 73
82 Aiden LeBouf 73
83 Andres Reyes 73
84 Brayden Koegel 73
85 Ethan Stokes 73
86 Grant Wyers 73
87 Hayden McClellan 73
88 Jackson McLane 73
89 Nolan Tetreault 73
90 Samuel Kinisky 73
91 Steven Curtin 73
92 Will Lavelle 73
93 William CoPenny 73
94 Benjamin Monteiro 72
95 Dylan Alt 72
96 Eddie McClung 72
97 Grayson Simmons 72
98 Jake Morin 72
99 Michael Valente 72
100 Nick Cannella 72
101 patrick Herlihy 72
102 Robert Cortina 72
103 Sean McKeon 72
104 Wyatt Kurtz 72
105 Andrew Beauregard 71
106 Ethan Pham 71
107 Jack O\'Sullivan 71
108 Jack Pastor 71
109 Jacoby Turcotte 71
110 Michael Blair 71
111 ALEXANDER Lutomski 70
112 Carson Hammer 70
113 Charles MacElhiney 70
114 Evan Corrigan 70
115 Kameron Morris 70
116 Peter Karas 70
117 Will Burgess 70
118 Caden Reynolds 69
119 Conor Canonico 69
120 Daniel Nuti 69
121 Dylan Lewendon 69
122 Izaiah Macon 69
123 Jake Reyngold 69
124 Justin Discher 69
125 Miguel Colon 69
126 Ryan DeMelo 69
127 Andrew Weiss 68
128 E.J. Ross 68
129 Ean Williamson 68
130 Gavin Rolleston 68
131 Jackson Mazzaferro 68
132 John Millet 68
133 Julian Oliver 68
134 Kyle Desrosiers 68
135 Xavier Molina 68
136 AIDAN MOSQUEDA 67
137 Andrew (AJ) Swerdloff 67
138 Christian Kochanek 67
139 Cooper McFarlane 67
140 Gavin Rooney 67
141 Graydon Greenberg 67
142 Jack Finocchario 67
143 Jack West 67
144 Joe Foscaldo 67
145 Joshua Albizu 67
146 Kevin Dones 67
147 Luke McGrail 67
148 Maxwell Rapoza 67
149 Michael Roman 67
150 Aidan Gagnon 66
151 Brady Boissonneault 66
152 Brayan Fernandez 66
153 COBY O\'CONNOR 66
154 Dylan Cosgrove 66
155 Julio Casado 66
156 Luke McDermott 66
157 Matthew Downs 66
158 Sam Goodwin 66
159 Austin Jorge 65
160 Christian Nopper 65
161 Cole Landini 65
162 Jordany Acosta 65
163 Luca DiZebba 65
164 Nick Pospisil 65
165 Nikolas LaPointe 65
166 Sean Krouskoff 65
167 Alex Zilora 64
168 Carter Ivens 64
169 Chase Malbaurn 64
170 Chase Zraunig 64
171 Cole Gallagher 64
172 Derek Steinberg 64
173 Max Maturah 64
174 Priyam Chokshi 64
175 Wiatt Bolduc 64
176 Boden Shah 63
177 Jackson Finn 63
178 Mason Easterbrooks 63
179 Joseph Nevadomski 62
180 Blake Mulhearn 62
181 Gavin King 62
182 JAMES SMITH 62
183 Lucas Johnson 62
184 Lucas Malan 62
185 Noah Foster 62
186 Rhys Urbanczyk 62
187 Wes Asselin 62
188 Anthony Nevadomski 61
189 Christopher Welch 61
190 Colby Ciavarro 61
191 Rainiel Gonell 61
192 John Scavone III. (JJ) 60
193 Barrett Snider 59
194 Liam Mulhern 59
195 Owen Harrington 59
196 Gus Merhige 58
197 Santiago Gavalo 56
198 John Crowley 55
199 Nolan Keobke 53
200 Cooper Benoit 52
201 JOHN OLSON 52
202 Cormac Lang 49
203 Joseph Jr. Colagiacomo 48
RankProfileNameOutfield Velocity
1 Colin Westbrook 88
2 Joshua Warming 86
3 Josh Gamere 84
4 Lenell Evans 84
5 Wes Keayes 84
6 Corey Culhane 83
7 Chris Barboza 83
8 EJ Perez 83
9 Ryan Kukel 83
10 Wynnton Stefanovicz 83
11 Mario Corso-Winks 83
12 Jeremie Luna 82
13 Armani Pimentel 82
14 Desmond Hayeck 82
15 Boston Bettencourt 81
16 COOPER ANDERSON 81
17 Solomon Flores 81
18 Brayden Hastings 81
19 Ryder Herchenroder 81
20 Mark WHITTINGTON 81
21 Jordi Burgos 80
22 Noah Corliss 80
23 Dominick Zuliani 80
24 Charlie Gamere 80
25 Anthony Pimentel 80
26 Grahm Hutton 79
27 Jackson Immomen 79
28 Zach Elinich 79
29 Chase Morrison 79
30 Aaron Vega 78
31 Shea Curley 78
32 Marcus Noel 78
33 Mac Ash 78
34 Finn McHale 78
35 Will Winiarski 78
36 Jack Snyder 77
37 Joseph Castelo 77
38 Jeremy Parkos 77
39 Austin Lowe 77
40 Jack Himelfarb 76
41 Jackson Gietek 76
42 Brian Keene 76
43 John Fedorowicz 76
44 Ethan Torres 76
45 Sean Matrose 76
46 Aidan Bailey 76
47 Darius Taliaferro 75
48 Reynaldo Medina 75
49 Evan Wright 75
50 Tyson Kass 75
51 Randy Rosario 74
52 Andres Garcia 74
53 Angelo Minyetti 74
54 Gianni Barberio 74
55 Jake Mulligan 74
56 Brady Wuethrich 74
57 Carter Harris 73
58 Frank Allo 73
59 Owen Pennini 73
60 Liam Heaney 73
61 Orion Ruck 73
62 Yerlin Feliz 72
63 Matthew Lynaugh 72
64 Ismael Grant 72
65 Anthony Frayler 72
66 Phillip Groeling II 72
67 Kaden Goldstein 71
68 Sam Unfricht 71
69 James Flynn 71
70 Jackson O\'Dell 71
71 Oliver Dean 71
72 Jack Monteith 70
73 Ty Chhourn 70
74 Christian Wheeler 70
75 Alex Labell 70
76 Finn Maiona 70
77 Eric Rossi 70
78 Joel Cortorreal 69
79 Jackson Avanzino 69
80 Jack Cestodio 69
81 Sam Iafrati 68
82 Braeden Dwyer 67
83 Maxwell Carlin 67
84 Gianluca Giordano 67
85 Dylan Comiskey 66
86 Brady Coppinger 65
87 Gracin Tanguay 64
88 Anthony Roman 64
89 Keith DeCosta 64
90 Aaron Waters 62
91 Tommy Gibeault 62
92 Bryan Putman 61
93 Eli Bostian 59
94 Connor O\'Malley 55
RankProfileNameExit Velocity Peak
1 Tristen Hong 99.1
2 Harold Fernandez 96.9
3 Jack Raymond 96.9
4 Leonardo May 96
5 Edward Roquez 95.8
6 Matthew Tan 95.4
7 Alexander Ramos 95.1
8 Chase Morrison 93.9
9 Nolan Bell 93.6
10 Robert Bouchard 93.6
11 Jeremy Evangelista 93.2
12 Camden Ogden 93
13 Elan Santana 93
14 Jayden Pavao 93
15 Zeke Reyes 92.9
16 Alex Argabright 92.5
17 Chester Bouchard 92.5
18 Owen Turgeon 92.3
19 Joshua Warming 92.1
20 Levi Hessel 91.7
21 Steven Curtin 91.7
22 Colby Stoehr 91.6
23 Jayden Tolentino 91.6
24 Kory Barbier 91.6
25 Wes Keayes 91.5
26 Wyatt Daigle 91.5
27 Evan Wright 91.3
28 Max Mandler 91.3
29 Chase Roberts 91.2
30 Gianni Vora 91
31 Quinlan Grace 90.7
32 Ira Siegel 90.4
33 Frank Allo 90.2
34 Jack Treat 90
35 Joshua Lyon 90
36 MILES PEREZ 89.9
37 Gil Bianchi 89.8
38 Jake Reichert 89.8
39 JAMES SMITH 89.8
40 Solomon Flores 89.8
41 Aiden Keeling-Lococo 89.6
42 Armani Pimentel 89.5
43 Ethan Pham 89.5
44 Samuel Kinisky 89.5
45 Brayden Rakov 89.4
46 Desmond Hayeck 89.4
47 Jake Reyngold 89.2
48 Jonas Diaz 89.2
49 Alex Allain 89.1
50 William Machnik 89.1
51 Ethan Jackson 89
52 Mark WHITTINGTON 88.8
53 Andrew Tannous 88.7
54 Lenell Evans 88.7
55 Grayson Simmons 88.6
56 Jeremy O\'Hara 88.6
57 Tommy Caporaso 88.6
58 Brayden Hastings 88.4
59 Patrick Brooks 88.3
60 Dean Ennis 88
61 Joseph Downey 88
62 Ryan Cleary 88
63 Ivan Hramiak 87.9
64 Marcus Delos Santos 87.9
65 Michael Blair 87.9
66 Connor Hammond 87.8
67 Jeremie Luna 87.8
68 Oliver Lawrence 87.8
69 Wynnton Stefanovicz 87.8
70 Benjmain Guévin 87.7
71 Nick Cannella 87.7
72 Aiden Simoneau 87.5
73 Joe Kelly 87.5
74 Joshua Misiaszek 87.5
75 Bryan Hoyt 87.4
76 Elias Weppler 87.4
77 Greyson Baldizar 87.3
78 Austin Lowe 87.2
79 Darren Russo 87.2
80 James Bruso 87.1
81 Marcus Noel 87.1
82 Ethan Ocwireja 87
83 Garrison Biggs 87
84 Grant Fournier 87
85 Ryan Nunes 87
86 Truman Leckey 87
87 Brady Ericson 86.9
88 Gavin Sampson 86.9
89 Matthew Lynaugh 86.8
90 Alex Croteau 86.7
91 Charles MacElhiney 86.7
92 Anthony Suffness 86.6
93 Chase Anderson 86.6
94 Grahm Hutton 86.6
95 James Flynn 86.6
96 Luca Polli 86.6
97 Anthony Dufour 86.5
98 Quinn Bramble 86.5
99 Boston Bettencourt 86.4
100 Ethan Ford 86.4
101 Will Lavelle 86.4
102 Josh Gamere 86.2
103 Matt Marino 86.2
104 Jace Wolfradt 86.1
105 Jackson Immomen 86
106 Jake Martino 86
107 Joey Fontana 86
108 Peyton O’Brien 86
109 Stephen Moscatiello 86
110 Emmanuel Alvarez 85.9
111 Joseph Castelo 85.9
112 Nolan Wondolowski 85.9
113 Jonathan Gomez 85.8
114 Brady Quirion 85.7
115 Chris Barboza 85.7
116 Robert Frick 85.7
117 Yerlin Feliz 85.6
118 Boston Parker 85.4
119 Cameron Aguilar 85.4
120 Keyan Mayernik 85.4
121 Anthony Nevadomski 85.3
122 Rhys Urbanczyk 85.3
123 Trey Smith 85.3
124 Jackson McBride 85.2
125 Brandon Jenkins 85.1
126 Evan Candelario 85.1
127 Maikel Soriano 85.1
128 Maxime Therrien 85.1
129 Mitchell Canuel 85.1
130 Nicholas Sorbera 85.1
131 Desmond Powers 85
132 Evan Pupka 85
133 Lucas Alber 85
134 Quinn Campbell 85
135 Adam Gold 84.8
136 Henry Sanders 84.8
137 Mario Corso-Winks 84.8
138 Jaiden Collins 84.7
139 Brett Richard 84.6
140 Christian Wheeler 84.6
141 Evan Groff 84.6
142 Joshua Cline 84.6
143 Andres Reyes 84.5
144 Evan Davis 84.5
145 Phillip Groeling II 84.5
146 Sam Iafrati 84.5
147 Colin Faber 84.4
148 Jose Vinas 84.4
149 Jayden Cruz 84.3
150 Shea Curley 84.3
151 Will Winiarski 84.3
152 AIDAN MOSQUEDA 84.2
153 Barrett Snider 84.2
154 Bryce Silva 84.2
155 Cameron Horn 84.2
156 E.J. Ross 84.2
157 Jovaniel Cruz 84.2
158 Bryson Graves 84.1
159 Mathew Charrette 84.1
160 Max Zajac 84.1
161 Tyson Kass 84.1
162 Deen Durkovic 84
163 Ethan Stokes 84
164 Jack West 84
165 Junior Vasquez 84
166 Matt Volk 84
167 Daniel Nuti 83.9
168 COOPER ANDERSON 83.8
169 Jahyr Torbaa 83.8
170 Finn McHale 83.7
171 Jackson Sheehy 83.7
172 Julio Casado 83.7
173 Matt Faraone 83.7
174 Payton Young 83.7
175 Andrew Beauregard 83.6
176 Brock Winslow 83.5
177 Miles Wilson 83.5
178 Alex Zilora 83.4
179 Carter Ivens 83.4
180 Gianluca Giordano 83.4
181 Jackson Finn 83.4
182 Nolan Tetreault 83.4
183 Ashton Goodwin 83.3
184 Wade Margolies 83.2
185 Gianni Barberio 83.1
186 Brian Rutkowski 83
187 Forrest Mitterbauer 83
188 Jameson Stell 83
189 John Cook 83
190 Michael Martino 83
191 Ryder Herchenroder 83
192 Sean McMahon 83
193 Tripp Beasley 83
194 Jacob Marsh 82.9
195 Robert Cortina 82.9
196 Sean Matrose 82.9
197 Adoni Frances 82.8
198 Keith DeCosta 82.8
199 Zach Elinich 82.8
200 Connor Ireland 82.7
201 Aidan Clapp 82.6
202 Joseph Nevadomski 82.6
203 Charlie Lyons 82.6
204 Eddie McClung 82.6
205 Lucas Johnson 82.6
206 Andrew Weiss 82.4
207 Braeden Crowe 82.4
208 DJ Aviles 82.4
209 Matteo Cuccovia 82.4
210 Conor Canonico 82.3
211 Nicholas Pilolli 82.3
212 Riley McDonald 82.3
213 Troy Leighton 82.3
214 Zachary Lavoie 82.3
215 Adryan Ureña 82.2
216 Jackson Avanzino 82.2
217 Liam Bisson 82.2
218 Matthew Fiaschetti 82.2
219 Wiatt Bolduc 82.2
220 Theo Allan 82.1
221 Ross Lipsky 82
222 Alex Russell 82
223 Brody Barrett 82
224 Christopher Rouleau 82
225 Everett Sisk 82
226 Jack Snyder 82
227 Jake McGarry 82
228 Teddy Monahan 82
229 Yonadsan Vargas 82
230 Aaron Vega 81.9
231 Kaden Goldstein 81.9
232 Alex Labell 81.8
233 EJ Perez 81.8
234 Kevin Dones 81.8
235 Samuel Sheldon 81.5
236 Hayden McClellan 81.4
237 Michael Valente 81.4
238 William CoPenny 81.4
239 Carter Harris 81.3
240 John Fedorowicz 81.3
241 Geoffrey Laliberte 81.2
242 Lucas daCosta 81.2
243 Nate Stewart 81.2
244 Miles Lawrence 81.1
245 Ethan Herndon 81
246 Jack Lorenzini 81
247 Jack McDonald 81
248 John Ferguson 81
249 John Genco 81
250 Will Patla 81
251 Brennan Robert 80.9
252 Ty Chhourn 80.9
253 Patrick Larson 80.8
254 Jack O\'Sullivan 80.7
255 Reynaldo Medina 80.7
256 Louis Nevadomski 80.6
257 Christian Kochanek 80.6
258 Christian Robitaille 80.6
259 Dylan Alt 80.6
260 Grant Wyers 80.6
261 Jacob Carling 80.6
262 Colin Bruccoliere 80.5
263 Oliver Dean 80.5
264 Sean Krouskoff 80.5
265 Anthony Lucarelli 80.4
266 Jake Morin 80.4
267 Jake Thompson 80.4
268 Kameron Morris 80.4
269 Justin Tremblay 80.3
270 Alexander Chamorro 80.2
271 Jake Mulligan 80.2
272 Mark Ehrenzeller 80.2
273 Eric Rossi 80.1
274 Gavin King 80.1
275 Jackson Gietek 80.1
276 Liam Monahan 80.1
277 Evan Hartman 80
278 Jacoby Jacobs 80
279 Jayden Burgos 80
280 Joe Foscaldo 80
281 Maxwell Carlin 80
282 Tyler Yoxall 80
283 Brian Keene 79.9
284 Anthony Pimentel 79.7
285 Evan Philipson 79.7
286 Blake Morse 79.6
287 Chase Malbaurn 79.6
288 Cole Fredriksen 79.6
289 Joshua Albizu 79.4
290 Liam Thornley 79.4
291 Nick D\'Aquino 79.4
292 Brady Wuethrich 79.3
293 Finn Maiona 79.2
294 Samuel Boislard 79.2
295 Nico Brown 79.1
296 Blake Teague 79
297 Cooper Benoit 79
298 Jacob DeJoseph 79
299 Eddie Torres 79
300 Jake Pratt 79
301 Justice Lambert 79
302 Zach Iacabbo-Sawyer 79
303 Brady Boissonneault 78.9
304 Maddox McNeely 78.9
305 Mason Pingree 78.9
306 Orion Ruck 78.9
307 Riley McDade 78.8
308 Claudio Martinez 78.6
309 Cole Gallagher 78.6
310 Jonah Babcock 78.6
311 Nick Commisso 78.6
312 Caleb Verma 78.5
313 Luke Rizzi 78.5
314 Owen Pennini 78.5
315 Corey Blanchette 78.4
316 Collin Picard 78.3
317 Jesse Avanzino 78.3
318 Noah Corliss 78.3
319 Lucas Malan 78.2
320 Rainiel Gonell 78.2
321 Ryan DeMelo 78.2
322 Jacob Farhy 78
323 Jordany Acosta 78
324 Liam Gregg 78
325 Matteo Panciera 78
326 Wyatt Allen 78
327 Mac Ash 77.9
328 Priyam Chokshi 77.9
329 Ashton Chieppa 77.8
330 Braeden Copeland 77.8
331 Caleb Simoneau 77.7
332 Carson Hammer 77.6
333 Javier Burgos 77.6
334 Sheamus Mahoney 77.6
335 Corey Culhane 77.5
336 Jackson O\'Dell 77.5
337 Jackson McLane 77.4
338 Kyle Desrosiers 77.4
339 Liam Heaney 77.3
340 Jack LaSalle 77.2
341 Colin Padovich 77.1
342 Cooper Tantraporn 77.1
343 Mason Easterbrooks 77.1
344 Caleb Price 77
345 Jack Monteith 77
346 Ralph Betner 77
347 Alex Jacques 76.9
348 Bryce Cross 76.9
349 Luke McGrail 76.9
350 Luke McDermott 76.8
351 Miguel Colon 76.8
352 Peter Karas 76.8
353 Jack Finocchario 76.7
354 Michael Hall 76.7
355 Nikolas LaPointe 76.6
356 Matthew Olynciw 76.5
357 Colin Green 76.4
358 Kaden Jones 76.4
359 Okoro James 76.4
360 Andrew (AJ) Swerdloff 76.3
361 Luca DiZebba 76.3
362 Zachary Powell 76.3
363 Jackson Mazzaferro 76.2
364 Aidan Gagnon 76.1
365 Jack Cestodio 76.1
366 Jack Therrien 76.1
367 Yamil Moya 76.1
368 Drew Budihas 76
369 John Esposito 76
370 Tanner Graham 76
371 Thorsten Andreasson 76
372 Brady Coppinger 75.9
373 P.J. Casey 75.9
374 Wyatt Kurtz 75.9
375 Caden Reynolds 75.8
376 Darius Taliaferro 75.8
377 Max Hopkins 75.8
378 Wes Asselin 75.8
379 Jacoby Turcotte 75.7
380 Riki Ekuni 75.7
381 Azan Durkovic 75.5
382 Colby Ciavarro 75.5
383 Evan Corrigan 75.5
384 Brayan Fernandez 75.4
385 Brayden Plugues 75.4
386 Ayden Capps 75.2
387 Colin Westbrook 75.2
388 Michael Goss 75.2
389 Izaiah Macon 75.1
390 Jack Pastor 75.1
391 Ethan Tourne 75
392 Mac Bargatze 75
393 Matthew Downs 75
394 Nathan Arnold 75
395 Patrick Gage 75
396 Richie Rosati 75
397 Ryan Bastian 75
398 Kyle O\'Sullivan 74.9
399 Nolan Keobke 74.8
400 Julian Oliver 74.7
401 Bodie Burke 74.6
402 Christian Nopper 74.6
403 ALEXANDER Lutomski 74.5
404 Graydon Greenberg 74.5
405 Michael Wachter 74.4
406 Cole Landini 74.3
407 Aidan Daugherty 74.1
408 Aidan Bailey 74
409 Austin Jorge 74
410 Eddie Walsh III 74
411 Adam Ruskin 73.8
412 Connor O\'Malley 73.8
413 Aimerick Gauthier 73.7
414 Carson Ames 73.7
415 Michael Roman 73.6
416 Noah Foster 73.5
417 Austin Jorgensen 73.4
418 Jordi Burgos 73.4
419 Gracin Tanguay 73.3
420 Alexis Labranche 73.2
421 Carter Whitten 73.2
422 Liam Mulhern 73.2
423 Randy Rosario 73.2
424 Sean McKeon 73.2
425 Dylan Rickards 73
426 Logan Taylor 73
427 Vincent Willits 73
428 Zachary Trudel-Gagnon 73
429 John Millet 72.9
430 Joshua Santana 72.9
431 Luke Sylvest 72.9
432 Jack Elia 72.8
433 Nick Leddy 72.8
434 Xavier Molina 72.8
435 John Scavone III. (JJ) 72.7
436 Brady Edgcomb 72.5
437 Jullian Dejesus 72.5
438 Javier Lugo 72.4
439 Nick Pospisil 72.4
440 Ean Williamson 72.3
441 Jeremy Parkos 72.3
442 Anthony Frayler 72.1
443 Tony Natale 72.1
444 COBY O\'CONNOR 72
445 Steven Vanore 72
446 Brayden Koegel 71.8
447 Chase Zraunig 71.8
448 Max Maturah 71.8
449 Gavin Rooney 71.4
450 Thomas McDonnell 71.4
451 Aaron Ilgenfritz 71.3
452 Charlie Gallagher 71.3
453 Benjamin Monteiro 71.2
454 Mathis Lamarre Lapointe 71.2
455 Christopher Welch 71.1
456 Jackson Vaccariello 71
457 Landen Phillips 71
458 Shaun Danielson 71
459 Ayden Kempesta 70.9
460 Eric Johnston 70.9
461 Aiden LeBouf 70.5
462 Gavin Rolleston 70.5
463 Tommy Gibeault 70.4
464 Andres Garcia 70.2
465 Dylan Cosgrove 70.2
466 Brayden Vargas 70
467 Johnny Payne 70
468 Nick Maynard 69.9
469 Ismael Grant 69.8
470 Justin Discher 69.6
471 Gus Merhige 69.5
472 michael fuentes 69.5
473 Naizaiah Rosa 69.5
474 Sam Payne 69.4
475 Dylan Comiskey 69.2
476 Anthony Roman 68.9
477 Ruben Cortorreal 68.9
478 Santiago Gavalo 68.9
479 Logan Dome 68.8
480 Joseph Krasowski 68.7
481 Aayan Hassan 68.6
482 Aaron Waters 68.3
483 Déreck Lebel 68.3
484 JOHN OLSON 68.3
485 Cormac Lang 68.1
486 Dylan Sparks 68
487 Brady Dolder 67.9
488 Braeden Dwyer 67.8
489 Dominick Zuliani 67.2
490 Sam Unfricht 67.2
491 Zach Mattes 67
492 Lucas Hodne 66.4
493 Lorenzo Rodriguez 66.3
494 Boden Shah 66.1
495 Dylan Palantino 66
496 Jack O\'Grady 66
497 Raynel Rodriguez 65.9
498 Ethan Torres 65.8
499 James McDermott 65.8
500 Moises Fanerte 65.8
501 Jack Himelfarb 65.7
502 John Crowley 65.7
503 Kam Morris 65.5
504 Jonathan Tawa 65.4
505 Bryan Putman 65.2
506 Max Boehm 64.5
507 Sam Fantasia 64.4
508 Owen Harrington 64.3
509 Cooper McFarlane 64.2
510 Smerlin Lopez 64.2
511 Reagan Baumeister 64
512 Sam Goodwin 64
513 Luke Mazares 63.5
514 Maxwell Rapoza 63.5
515 Andrew Sevigny 63.3
516 Luke Skouras 63.3
517 Derek Steinberg 63.2
518 Peyton Burt 63
519 Andrew Dempsey 62.9
520 Parker Jayasundera 62.9
521 Joel Cortorreal 62.4
522 Mason O’Brien 60.7
523 Blake Mulhearn 59.9
524 Will Burgess 59.1
525 Angelo Minyetti 58.8
526 Lucas Fabiano 57
527 Tommy Montalbano 57
528 Jimmy Gray 56
529 Joseph Jr. Colagiacomo 54.5
530 Caden Laverdiere 54
531 Blake Deneault 53.5
532 Dylan Lewendon 48.7
533 Eli Bostian 47.6
534 Jimmy Heaney 47
RankProfileNameDistance – Avg
1 Tristen Hong 382.7
2 Jack Raymond 366.2
3 Harold Fernandez 363.2
4 Edward Roquez 332.6
5 Quinlan Grace 328.8
6 Tommy Caporaso 328.1
7 Jake Reichert 323.9
8 Jackson Sheehy 319.2
9 Robert Bouchard 316.2
10 Chester Bouchard 316.1
11 Jeremy Evangelista 313.5
12 Henry Sanders 312.2
13 Ethan Pham 310.7
14 Brayden Hastings 307.8
15 Grahm Hutton 302.8
16 Matteo Cuccovia 302.8
17 Christian Wheeler 302.6
18 Chris Barboza 301.1
19 Riley McDonald 300.9
20 Quinn Bramble 300
21 Elan Santana 299.7
22 Armani Pimentel 299.2
23 Javier Burgos 296.5
24 Wynnton Stefanovicz 296.5
25 Jackson Immomen 295.5
26 Boston Bettencourt 295
27 Joshua Misiaszek 295
28 Brett Richard 291.9
29 Christopher Rouleau 289
30 Christian Kochanek 288.6
31 Gil Bianchi 288
32 Jake Mulligan 287.6
33 Lucas Johnson 287.5
34 Steven Curtin 286.5
35 Aaron Vega 286.3
36 Jonas Diaz 285.6
37 Justin Tremblay 285
38 Nolan Bell 285
39 Wyatt Daigle 284.7
40 Jackson McLane 284.4
41 Joe Kelly 283.9
42 Aiden Keeling-Lococo 283.4
43 Josh Gamere 282.7
44 Ira Siegel 282.7
45 Lucas daCosta 281.9
46 Joshua Albizu 281.1
47 Will Winiarski 280.4
48 Maxwell Carlin 279.8
49 Mitchell Canuel 279
50 Alexander Ramos 278.6
51 Jovaniel Cruz 278.3
52 Levi Hessel 278.3
53 Jack O\'Sullivan 277.9
54 Jackson Finn 277.1
55 Jackson McBride 276.6
56 Corey Culhane 276.3
57 Nick Commisso 275.4
58 Noah Corliss 273.4
59 Alex Russell 272.9
60 Jeremie Luna 272.8
61 Anthony Dufour 272.5
62 Sheamus Mahoney 272.5
63 Oliver Dean 272.3
64 William Machnik 269
65 Connor Hammond 268.8
66 Jake Thompson 268.8
67 Kaden Goldstein 268.4
68 Tyson Kass 268.2
69 Barrett Snider 267.4
70 Jack Snyder 267.2
71 Gavin King 265.4
72 James Flynn 265.4
73 Orion Ruck 263.9
74 Luke McDermott 263.8
75 Maikel Soriano 263.3
76 Darren Russo 262.7
77 Jose Vinas 262.5
78 Bryson Graves 262.4
79 Evan Pupka 262.4
80 Jackson Mazzaferro 262.1
81 Nolan Wondolowski 261.8
82 Ethan Ford 261.7
83 Riki Ekuni 261.3
84 Reynaldo Medina 261.2
85 Aaron Ilgenfritz 261.1
86 Owen Pennini 261.1
87 Joshua Warming 260
88 Brady Quirion 259.1
89 Eddie McClung 259
90 Sam Iafrati 259
91 Brock Winslow 258.8
92 Mac Ash 258.1
93 Bryce Silva 257.5
94 Leonardo May 256.9
95 Jordany Acosta 256.8
96 MILES PEREZ 256.4
97 Rhys Urbanczyk 256.4
98 Wes Keayes 255
99 Gavin Sampson 254.4
100 Nicholas Sorbera 254.2
101 Sean Matrose 254.1
102 Ryan DeMelo 253.4
103 Shea Curley 253.3
104 Kevin Dones 252.8
105 Connor O\'Malley 252.2
106 E.J. Ross 251.3
107 Cooper Benoit 250.3
108 Robert Frick 250.2
109 Aiden LeBouf 249.6
110 Lenell Evans 249.5
111 Michael Blair 249.3
112 Mark WHITTINGTON 249.1
113 Joshua Santana 248.8
114 Theo Allan 247.8
115 Elias Weppler 247.6
116 Ivan Hramiak 247.5
117 Brady Coppinger 247.4
118 Jonathan Gomez 247.2
119 Louis Nevadomski 246.6
120 James Bruso 246.5
121 Aidan Bailey 246.2
122 Chase Anderson 246
123 Luke McGrail 245.8
124 Kameron Morris 244.7
125 Javier Lugo 244.6
126 Chase Zraunig 243.9
127 Miles Lawrence 243
128 Jackson Gietek 242.4
129 Colin Faber 242.2
130 Adam Gold 240.6
131 Ethan Stokes 240
132 Trey Smith 239.5
133 Jeremy O\'Hara 239.3
134 Finn McHale 239
135 Colin Westbrook 238.6
136 Blake Teague 238.4
137 Max Maturah 237.5
138 Chase Morrison 237.3
139 Troy Leighton 237.3
140 Patrick Brooks 237.1
141 Adryan Ureña 236.4
142 Cooper Tantraporn 236.3
143 Payton Young 236.1
144 Riley McDade 236.1
145 JAMES SMITH 235.4
146 Wiatt Bolduc 235.4
147 Jake Reyngold 234.6
148 Evan Groff 234.5
149 Mario Corso-Winks 233.9
150 Alexander Chamorro 233.8
151 Samuel Sheldon 233.6
152 Graydon Greenberg 233.1
153 Tyler Yoxall 233.1
154 Jaiden Collins 232.9
155 Zach Iacabbo-Sawyer 232.8
156 Jayden Burgos 232.7
157 Anthony Pimentel 232.3
158 Desmond Hayeck 232.1
159 Matthew Lynaugh 232.1
160 Evan Wright 231.8
161 Hayden McClellan 231.8
162 Samuel Kinisky 231.7
163 Jacoby Turcotte 231.3
164 Anthony Nevadomski 231.1
165 Ruben Cortorreal 229.7
166 Joseph Castelo 229.5
167 Jacob Marsh 229.4
168 Mathew Charrette 229.3
169 Yamil Moya 229.2
170 Brayden Koegel 229.1
171 Marcus Noel 228.9
172 Evan Philipson 228.5
173 John Millet 227.9
174 Cole Gallagher 227.6
175 Andrew Tannous 227.4
176 Sean McKeon 227.3
177 Jack Finocchario 227.2
178 Randy Rosario 225.7
179 Daniel Nuti 224.7
180 Cole Landini 222.9
181 Ethan Herndon 222.7
182 Drew Budihas 222.5
183 Sam Unfricht 222.3
184 Jace Wolfradt 221.7
185 Caden Reynolds 221
186 Joshua Cline 220.6
187 Bodie Burke 220.3
188 Oliver Lawrence 219.5
189 Carson Hammer 218.4
190 Joe Foscaldo 218.4
191 Colin Padovich 218.3
192 Jahyr Torbaa 218
193 Nick Cannella 217.9
194 Gavin Rooney 217.6
195 Liam Thornley 217.2
196 Zach Elinich 217.1
197 Christian Nopper 216.8
198 Jack Pastor 216.1
199 Evan Candelario 215.9
200 Jack Elia 215.6
201 Max Hopkins 215.3
202 Jack Monteith 215.2
203 Brody Barrett 214.2
204 Brady Boissonneault 213.7
205 Emmanuel Alvarez 213.7
206 Liam Monahan 213.3
207 Brady Wuethrich 213.2
208 Eric Rossi 213.2
209 Grant Wyers 212.5
210 Noah Foster 212.2
211 Rainiel Gonell 212
212 Gianluca Giordano 211.6
213 Nick Pospisil 211.1
214 Braeden Crowe 211
215 Miles Wilson 210.7
216 Wes Asselin 210.4
217 Mark Ehrenzeller 209.8
218 Ethan Torres 209.7
219 Evan Corrigan 209.6
220 Carter Ivens 208.9
221 Aidan Daugherty 208.1
222 Luca DiZebba 207.6
223 Dylan Alt 207.5
224 Michael Roman 207.5
225 Joseph Nevadomski 207.1
226 Grayson Simmons 207
227 Jordi Burgos 206.7
228 Kyle Desrosiers 206.7
229 Dominick Zuliani 206.4
230 michael fuentes 206.2
231 ALEXANDER Lutomski 205.7
232 Jackson Avanzino 205.7
233 Solomon Flores 204.8
234 Jake Morin 203.9
235 Andrew Weiss 203.2
236 Michael Valente 203
237 Nolan Tetreault 202.8
238 Chase Malbaurn 201.3
239 Evan Davis 200.8
240 Junior Vasquez 200
241 Zachary Lavoie 199.7
242 Jack Cestodio 199.5
243 Jesse Avanzino 199.1
244 Jacob Carling 198.1
245 Joel Cortorreal 197.4
246 John Ferguson 196.6
247 Alex Allain 195.7
248 John Crowley 195.1
249 Eric Johnston 194.9
250 COOPER ANDERSON 194.7
251 Andrew Beauregard 194.3
252 Gus Merhige 194.2
253 Jullian Dejesus 194.2
254 Matteo Panciera 194.1
255 Yerlin Feliz 193.5
256 Liam Heaney 193.2
257 Nick Leddy 192.6
258 John Fedorowicz 192.4
259 Ty Chhourn 191.4
260 John Scavone III. (JJ) 190.2
261 Zeke Reyes 190
262 Colby Ciavarro 189.6
263 Keith DeCosta 189.1
264 Carter Whitten 189
265 Collin Picard 189
266 Jake McGarry 188.9
267 Aidan Gagnon 188.7
268 Xavier Molina 187.5
269 Patrick Larson 187.3
270 Robert Cortina 186.5
271 Geoffrey Laliberte 186.4
272 Cooper McFarlane 185.9
273 William CoPenny 185.3
274 Alex Zilora 184.9
275 Justin Discher 184.8
276 Claudio Martinez 184.5
277 Priyam Chokshi 184.3
278 Andres Garcia 184.2
279 Ross Lipsky 183.8
280 Thomas McDonnell 182.2
281 Kyle O\'Sullivan 181.9
282 Santiago Gavalo 181.9
283 Alex Croteau 181.4
284 Logan Dome 181.4
285 Brennan Robert 181.3
286 Jeremy Parkos 180.8
287 Blake Mulhearn 180.7
288 Miguel Colon 180.4
289 Jonah Babcock 179.4
290 Adam Ruskin 179.3
291 Matthew Olynciw 179
292 Raynel Rodriguez 178.9
293 Boden Shah 178.7
294 Gianni Barberio 178.4
295 Brayan Fernandez 178.2
296 Derek Steinberg 178.2
297 Blake Morse 177.6
298 Charles MacElhiney 177.1
299 Gavin Rolleston 175.9
300 Sean Krouskoff 174.2
301 Jack West 173.9
302 Jake Pratt 173.9
303 Brian Keene 173.8
304 EJ Perez 173.3
305 Angelo Minyetti 171.8
306 Dylan Cosgrove 171.7
307 Mason Easterbrooks 171
308 Ean Williamson 169.7
309 Finn Maiona 169.6
310 Gracin Tanguay 168.8
311 Landen Phillips 168.8
312 Anthony Frayler 167.9
313 Liam Mulhern 167.6
314 Carter Harris 166.5
315 Ismael Grant 166.1
316 Owen Harrington 164.9
317 Dylan Comiskey 164.2
318 P.J. Casey 164.2
319 Wyatt Kurtz 163.5
320 JOHN OLSON 162.7
321 Sam Goodwin 162.3
322 Wade Margolies 162.1
323 Andrew (AJ) Swerdloff 161.9
324 Alex Labell 160.4
325 Brady Edgcomb 160.1
326 Maxwell Rapoza 160
327 Caden Laverdiere 159.7
328 Naizaiah Rosa 158.6
329 Anthony Roman 158.5
330 Phillip Groeling II 158.2
331 AIDAN MOSQUEDA 156.4
332 Matthew Downs 155.9
333 Jack Therrien 153.2
334 James McDermott 152.2
335 COBY O\'CONNOR 151.8
336 Andres Reyes 150.3
337 Darius Taliaferro 147.1
338 Zachary Powell 146.9
339 Nolan Keobke 146.3
340 Braeden Dwyer 145.7
341 Austin Jorge 144.5
342 Benjamin Monteiro 144.2
343 Nikolas LaPointe 143.3
344 Michael Goss 142.6
345 Joseph Jr. Colagiacomo 138.3
346 Vincent Willits 137.6
347 Blake Deneault 136.3
348 Conor Canonico 134
349 Tommy Gibeault 134
350 Bryan Putman 132.1
351 Ashton Chieppa 131.2
352 Will Burgess 129.9
353 Austin Lowe 126.3
354 Will Lavelle 125.3
355 Jack Himelfarb 123.9
356 Frank Allo 122.9
357 Sam Fantasia 119.8
358 Adoni Frances 118.5
359 Corey Blanchette 106.4
360 Smerlin Lopez 104.1
361 Ashton Goodwin 101.4
362 Peter Karas 96.3
363 Lucas Fabiano 94.6
364 Jackson O\'Dell 87.5
365 Lucas Malan 82.6
366 Dylan Lewendon 73.5
367 Ryan Nunes 72.1
368 Steven Vanore 70.4
369 Nathan Arnold 69.6
370 Eli Bostian 65.6
371 Izaiah Macon 59
372 Cole Fredriksen 45.5
373 Luke Mazares 43.4
374 Julian Oliver 39.3
375 Christopher Welch 36.4
376 Cormac Lang 33
377 Aaron Waters 31.1
RankProfileNameExit Velo – Avg
1 Edward Roquez 94.2
2 Tristen Hong 93.6
3 Jack Raymond 93.1
4 Leonardo May 92.6
5 Nolan Bell 92.5
6 Alexander Ramos 91.8
7 Alex Argabright 90.5
8 Robert Bouchard 90.2
9 Joshua Warming 90.1
10 Owen Turgeon 90.1
11 Gianni Vora 90
12 Steven Curtin 89.5
13 Armani Pimentel 89.4
14 Jake Reichert 89.3
15 Evan Wright 89.2
16 Frank Allo 89.2
17 Jeremy Evangelista 88.3
18 Elan Santana 88.1
19 Ethan Pham 88.1
20 Alex Allain 87.8
21 Javier Burgos 87.8
22 Gil Bianchi 87.6
23 Zeke Reyes 87.5
24 Wyatt Daigle 87.4
25 Jayden Tolentino 87.3
26 Aiden Keeling-Lococo 87.2
27 Harold Fernandez 87.2
28 Ethan Jackson 87
29 Jayden Pavao 87
30 Joshua Misiaszek 87
31 Wes Keayes 86.9
32 Jonas Diaz 86.7
33 Grahm Hutton 86.5
34 William Machnik 86.4
35 Elias Weppler 86.3
36 Mark WHITTINGTON 86.3
37 Quinlan Grace 86.3
38 Chase Roberts 86.2
39 Chester Bouchard 86.1
40 Joshua Lyon 86
41 Brayden Hastings 85.9
42 Desmond Hayeck 85.9
43 JAMES SMITH 85.7
44 Charles MacElhiney 85.6
45 Nick Cannella 85.5
46 Marcus Noel 85.4
47 Tommy Caporaso 85.4
48 Ivan Hramiak 85.3
49 Josh Gamere 85.2
50 Solomon Flores 85.2
51 Dean Ennis 85
52 Garrison Biggs 85
53 Grayson Simmons 85
54 Ira Siegel 85
55 Jackson Immomen 85
56 Jeremy O\'Hara 85
57 Boston Bettencourt 84.9
58 Grant Fournier 84.9
59 Jake Reyngold 84.6
60 Levi Hessel 84.6
61 Maxime Therrien 84.6
62 Jace Wolfradt 84.4
63 Brayden Rakov 84.3
64 Henry Sanders 84.1
65 Quinn Bramble 84.1
66 Brett Richard 84
67 Matt Marino 84
68 Peyton O’Brien 84
69 Benjmain Guévin 83.9
70 MILES PEREZ 83.9
71 Christian Wheeler 83.8
72 Ethan Ford 83.8
73 Chris Barboza 83.7
74 Evan Davis 83.7
75 Gavin Sampson 83.6
76 Anthony Suffness 83.5
77 Brayden Plugues 83.5
78 Evan Candelario 83.5
79 Joe Kelly 83.5
80 Lucas Alber 83.5
81 Connor Hammond 83.3
82 Michael Blair 83.2
83 Patrick Brooks 83.2
84 Ryan Nunes 83.2
85 Samuel Kinisky 83.2
86 Ashton Goodwin 83.1
87 Keyan Mayernik 83.1
88 Andrew Tannous 83
89 Brady Ericson 83
90 Darren Russo 83
91 Deen Durkovic 83
92 Matthew Tan 83
93 Shea Curley 83
94 Stephen Moscatiello 83
95 Anthony Dufour 82.9
96 Chase Anderson 82.7
97 Oliver Lawrence 82.7
98 Lucas Johnson 82.5
99 Ryder Herchenroder 82.5
100 Mario Corso-Winks 82.4
101 Jackson McBride 82.2
102 Cameron Horn 82
103 Colby Stoehr 82
104 Luca Polli 82
105 Maikel Soriano 82
106 Max Zajac 82
107 Quinn Campbell 82
108 Bryson Graves 81.8
109 Lenell Evans 81.8
110 Liam Monahan 81.8
111 Troy Leighton 81.8
112 Joseph Castelo 81.6
113 Matteo Cuccovia 81.6
114 Wade Margolies 81.5
115 Colin Faber 81.4
116 Finn McHale 81.4
117 Jovaniel Cruz 81.4
118 Matt Faraone 81.4
119 Adryan Ureña 81.3
120 Bryan Hoyt 81.3
121 Marcus Delos Santos 81.3
122 Aiden Simoneau 81.2
123 Jackson Sheehy 81.2
124 Jose Vinas 81.2
125 Jack Treat 81
126 Joey Fontana 81
127 Mitchell Canuel 81,1
128 Ryan Cleary 81
129 Tripp Beasley 81
130 Kaden Goldstein 80.9
131 Zach Elinich 80.8
132 Braeden Crowe 80.6
133 Brody Barrett 80.6
134 Boston Parker 80.5
135 Joshua Cline 80.4
136 Max Mandler 80.4
137 Michael Martino 80.4
138 Andres Reyes 80.3
139 Brennan Robert 80.3
140 Geoffrey Laliberte 80.3
141 Jake Thompson 80.3
142 Matthew Lynaugh 80.3
143 Will Lavelle 80.3
144 Will Winiarski 80.2
145 Brock Winslow 80.1
146 Cameron Aguilar 80.1
147 Jahyr Torbaa 80.1
148 Liam Bisson 80.1
149 Nicholas Pilolli 80.1
150 DJ Aviles 80
151 Ethan Ocwireja 80
152 Joseph Downey 80
153 Jake Mulligan 79.9
154 Kevin Dones 79.9
155 Alex Russell 79.8
156 Barrett Snider 79.7
157 Brady Quirion 79.7
158 Julio Casado 79.7
159 Nolan Wondolowski 79.7
160 Tyson Kass 79.7
161 Evan Pupka 79.6
162 Justin Tremblay 79.6
163 Zachary Lavoie 79.6
164 Brady Boissonneault 79.5
165 Mathew Charrette 79.5
166 Maxwell Carlin 79.5
167 Louis Nevadomski 79.4
168 Alex Croteau 79.3
169 Robert Frick 79.3
170 Eddie McClung 79.2
171 Yerlin Feliz 79.2
172 Adam Gold 79.1
173 Alex Labell 79.1
174 Trey Smith 79.1
175 Ethan Stokes 79
176 Jack Lorenzini 79
177 John Genco 79
178 Brandon Jenkins 78.8
179 Emmanuel Alvarez 78.8
180 Phillip Groeling II 78.8
181 Hayden McClellan 78.6
182 Jaiden Collins 78.5
183 Kameron Morris 78.5
184 Keith DeCosta 78.5
185 Lucas daCosta 78.5
186 Christopher Rouleau 78.4
187 Liam Thornley 78.4
188 Sean Matrose 78.4
189 Blake Morse 78.3
190 Joseph Nevadomski 78.3
191 Austin Lowe 78.3
192 Junior Vasquez 78.3
193 William CoPenny 78.3
194 Theo Allan 78.2
195 Daniel Nuti 78.2
196 Jackson Finn 78.1
197 John Fedorowicz 78.1
198 Ethan Tourne 78
199 Forrest Mitterbauer 78
200 Jeremie Luna 78
201 John Cook 78
202 Truman Leckey 78
203 Alexander Chamorro 77.9
204 Matthew Fiaschetti 77.9
205 Miles Lawrence 77.9
206 Andrew Weiss 77.8
207 Blake Teague 77.8
208 Greyson Baldizar 77.8
209 Jonathan Gomez 77.8
210 Christian Kochanek 77.7
211 Jake Pratt 77.7
212 Jayden Burgos 77.7
213 John Ferguson 77.6
214 Joshua Albizu 77.6
215 Orion Ruck 77.6
216 Wiatt Bolduc 77.6
217 Jake Morin 77.5
218 Ty Chhourn 77.5
219 Bryce Silva 77.4
220 Camden Ogden 77.4
221 Chase Malbaurn 77.4
222 COOPER ANDERSON 77.4
223 Ethan Herndon 77.4
224 Noah Corliss 77.4
225 Patrick Larson 77.4
226 Brian Keene 77.3
227 Chase Morrison 77.3
228 Maddox McNeely 77.3
229 Jonah Babcock 77.2
230 Rainiel Gonell 77.2
231 Cole Fredriksen 77.1
232 Gianni Barberio 77.1
233 Ross Lipsky 77
234 Jake Martino 77
235 Nico Brown 77
236 Teddy Monahan 77
237 Aaron Vega 76.8
238 Payton Young 76.8
239 Jackson Gietek 76.7
240 Jacob Marsh 76.6
241 Samuel Boislard 76.6
242 Wynnton Stefanovicz 76.6
243 Jordany Acosta 76.5
244 Riley McDonald 76.5
245 Carter Harris 76.4
246 Gianluca Giordano 76.4
247 Dylan Alt 76.3
248 Jack O\'Sullivan 76.3
249 Joshua Santana 76.3
250 Luke Rizzi 76.3
251 Rhys Urbanczyk 76.3
252 Cole Gallagher 76
253 Cooper Tantraporn 76
254 E.J. Ross 76
255 EJ Perez 76
256 Jacoby Jacobs 76
257 AIDAN MOSQUEDA 75.8
258 Colin Padovich 75.8
259 Corey Culhane 75.8
260 James Bruso 75.8
261 Miles Wilson 75.8
262 Ashton Chieppa 75.6
263 Cooper Benoit 75.6
264 Nolan Tetreault 75.5
265 Sheamus Mahoney 75.4
266 Liam Gregg 75.3
267 Michael Valente 75.3
268 Conor Canonico 75.2
269 Sean Krouskoff 75.2
270 Charlie Lyons 75.1
271 John Millet 75.1
272 Jacob DeJoseph 75
273 Eddie Torres 75
274 Jacob Farhy 75
275 James Flynn 75.
276 Samuel Sheldon 75
277 Sean McMahon 75
278 Thorsten Andreasson 75
279 Yonadsan Vargas 75
280 Andrew Beauregard 74.9
281 Corey Blanchette 74.9
282 Eric Rossi 74.9
283 Finn Maiona 74.9
284 Luke McGrail 74.9
285 Tyler Yoxall 74.9
286 Luca DiZebba 74.8
287 Nicholas Sorbera 74.8
288 Reynaldo Medina 74.8
289 Drew Budihas 74.7
290 Colin Bruccoliere 74.5
291 Jack Pastor 74.5
292 Grant Wyers 74.4
293 Sam Iafrati 74.4
294 Adoni Frances 74.2
295 Jake McGarry 74.2
296 Liam Heaney 74.2
297 Miguel Colon 74.2
298 Carter Ivens 74.1
299 Lucas Malan 74.1
300 Brady Wuethrich 74
301 Jameson Stell 74
302 Justice Lambert 74
303 Matt Volk 74
304 Nick D\'Aquino 74
305 Okoro James 74
306 Oliver Dean 74
307 Tanner Graham 74
308 Jesse Avanzino 73.9
309 Mac Bargatze 73.9
310 Caden Reynolds 73.8
311 Julian Oliver 73.8
312 Mason Pingree 73.8
313 Collin Picard 73.7
314 Owen Pennini 73.7
315 Caleb Simoneau 73.6
316 Jayden Cruz 73.6
317 Luke McDermott 73.6
318 Wyatt Kurtz 73.6
319 Caleb Verma 73.5
320 Mark Ehrenzeller 73.4
321 Riki Ekuni 73.4
322 Colin Westbrook 73.3
323 Andrew (AJ) Swerdloff 73.2
324 Brady Coppinger 73.2
325 Jackson McLane 73.2
326 Mac Ash 73.2
327 Caleb Price 73.1
328 Jack Cestodio 73.1
329 Brian Rutkowski 73
330 Darius Taliaferro 73
331 Eddie Walsh III 73
332 Evan Philipson 73
333 Jacob Carling 73
334 Nick Commisso 73
335 Colby Ciavarro 72.8
336 Matthew Olynciw 72.8
337 Nathan Arnold 72.8
338 Carson Hammer 72.7
339 Xavier Molina 72.7
340 Anthony Pimentel 72.6
341 Michael Wachter 72.6
342 Wes Asselin 72.6
343 Connor Ireland 72.4
344 Jack Finocchario 72.4
345 Riley McDade 72.4
346 John Scavone III. (JJ) 72.3
347 Priyam Chokshi 72.3
348 Kory Barbier 72.2
349 Liam Mulhern 72.2
350 P.J. Casey 72.2
351 Ryan DeMelo 72.2
352 Alexis Labranche 72.1
353 Ayden Capps 72
354 Desmond Powers 72
355 Evan Hartman 72
356 Jack Monteith 72
357 Jack Therrien 72
358 Matteo Panciera 72
359 Nikolas LaPointe 72
360 Patrick Gage 72
361 Aimerick Gauthier 71.8
362 Graydon Greenberg 71.8
363 Mason Easterbrooks 71.7
364 Jordi Burgos 71.5
365 Michael Roman 71.5
366 Vincent Willits 71.5
367 Joe Foscaldo 71.4
368 Zachary Powell 71.3
369 Azan Durkovic 71.2
370 Christian Nopper 71.2
371 Evan Groff 71.1
372 Logan Taylor 71.1
373 Jack LaSalle 71
374 Nate Stewart 71
375 Richie Rosati 71
376 Kyle Desrosiers 70.8
377 Gavin Rooney 70.7
378 Yamil Moya 70.7
379 Gracin Tanguay 70.6
380 Max Maturah 70.6
381 Nick Pospisil 70.6
382 Chase Zraunig 70.5
383 Jack Snyder 70.5
384 Luke Sylvest 70.5
385 Aidan Gagnon 70.3
386 Alex Jacques 70.3
387 Anthony Frayler 70.3
388 Bryce Cross 70.3
389 Evan Corrigan 70.3
390 Austin Jorge 70
391 Jack McDonald 70
392 Jacoby Turcotte 70
393 Michael Goss 70
394 Noah Foster 70
395 Tony Natale 70
396 Will Patla 70
397 Mathis Lamarre Lapointe 69.9
398 Kyle O\'Sullivan 69.6
399 Christian Robitaille 69.5
400 Benjamin Monteiro 69.4
401 Matthew Downs 69.3
402 Max Hopkins 69.3
403 Nolan Keobke 69.3
404 Aidan Clapp 69.2
405 Justin Discher 69.1
406 Carter Whitten 69
407 Anthony Lucarelli 68.9
408 Sam Payne 68.8
409 Brayan Fernandez 68.6
410 ALEXANDER Lutomski 68.5
411 Landen Phillips 68.5
412 Jeremy Parkos 68.4
413 Braeden Copeland 68.3
414 Brayden Koegel 68.2
415 Alex Zilora 68.1
416 Ean Williamson 68.1
417 Gus Merhige 68.1
418 Jullian Dejesus 68.1
419 Everett Sisk 68
420 Jack West 68
421 Ryan Bastian 68
422 Nick Leddy 67.9
423 Sean McKeon 67.8
424 Kaden Jones 67.7
425 Anthony Nevadomski 67.6
426 Connor O\'Malley 67.6
427 Aidan Daugherty 67.5
428 Eric Johnston 67.5
429 Gavin King 67.5
430 Gavin Rolleston 67.5
431 Javier Lugo 67.5
432 Ayden Kempesta 67.4
433 Jackson O\'Dell 67.4
434 Anthony Roman 67.3
435 Jack Elia 67.2
436 Adam Ruskin 67
437 Christopher Welch 67
438 Déreck Lebel 67
439 Nick Maynard 67
440 Ralph Betner 67
441 Wyatt Allen 67
442 Claudio Martinez 66.9
443 Peter Karas 66.9
444 Andres Garcia 66.8
445 Carson Ames 66.7
446 Randy Rosario 66.7
447 Ruben Cortorreal 66.5
448 Michael Hall 66.4
449 Dominick Zuliani 66.3
450 Joseph Krasowski 66
451 Johnny Payne 66
452 Robert Cortina 66
453 Jackson Avanzino 65.9
454 James McDermott 65.6
455 Ismael Grant 65.5
456 Zach Iacabbo-Sawyer 65.5
457 Aaron Waters 65.2
458 Austin Jorgensen 65.2
459 Dylan Cosgrove 65.2
460 Boden Shah 65.1
461 Bryan Putman 65.1
462 Jack O\'Grady 65
463 Jackson Vaccariello 65
464 Shaun Danielson 65
465 Steven Vanore 65
466 Zachary Trudel-Gagnon 65
467 Aaron Ilgenfritz 64.9
468 Dylan Comiskey 64.7
469 Ethan Torres 64.7
470 Jackson Mazzaferro 64.6
471 Bodie Burke 64.3
472 Thomas McDonnell 64.3
473 Izaiah Macon 64.2
474 COBY O\'CONNOR 64
475 Dylan Sparks 64
476 Lorenzo Rodriguez 64
477 Cole Landini 63.9
478 Lucas Hodne 63.9
479 Aiden LeBouf 63.8
480 Kam Morris 63.7
481 Moises Fanerte 63.7
482 Aayan Hassan 63.5
483 Brayden Vargas 63.5
484 Brady Dolder 63.4
485 Colin Green 63.4
486 JOHN OLSON 63.4
487 Brady Edgcomb 63.3
488 John Crowley 63.3
489 Charlie Gallagher 63
490 Cooper McFarlane 62.7
491 Derek Steinberg 62.7
492 Aidan Bailey 62.1
493 Dylan Palantino 62
494 Logan Dome 62
495 Max Boehm 62
496 Luke Mazares 61.7
497 Jonathan Tawa 61.4
498 Maxwell Rapoza 61.3
499 michael fuentes 61.3
500 Raynel Rodriguez 61.3
501 Andrew Sevigny 61.1
502 Luke Skouras 61
503 Braeden Dwyer 60.9
504 Jack Himelfarb 60.4
505 Parker Jayasundera 60.1
506 Dylan Rickards 60
507 Peyton Burt 60
508 Cormac Lang 59
509 Smerlin Lopez 58.8
510 Andrew Dempsey 58.2
511 Mason O’Brien 58
512 Reagan Baumeister 58
513 Angelo Minyetti 57.8
514 Blake Mulhearn 57.7
515 Will Burgess 57.1
516 Naizaiah Rosa 56.7
517 Santiago Gavalo 56.6
518 Tommy Gibeault 56.5
519 Owen Harrington 56.3
520 Zach Mattes 56
521 Sam Unfricht 55.6
522 Sam Goodwin 55.3
523 John Esposito 55
524 Tommy Montalbano 55
525 Jimmy Gray 54.2
526 Sam Fantasia 54.1
527 Joel Cortorreal 53.9
528 Joseph Jr. Colagiacomo 53.2
529 Lucas Fabiano 52.9
530 Blake Deneault 49.1
531 Dylan Lewendon 48
532 Caden Laverdiere 45.4
533 Eli Bostian 34.9
534 Jimmy Heaney 32
RankProfileNameFastball Velocity
1 WILL HURLEY 87.7
2 Wes Keayes 87.5
3 Liam Monahan 87
4 Justin Rivard 86.8
5 Jeremy Evangelista 86.4
6 Caelan Goodwin-Slater 86.3
7 Jace Wolfradt 86.1
8 Leonardo May 86.1
9 Rohan Inamdar 86.1
10 Jeremy O\'Hara 85.9
11 Tyler DiCecco 85.5
12 Brendan Kantscheidt 85.2
13 Nolan Bigras 85.2
14 Jackson Passonno 84.8
15 Mitchell Canuel 84.7
16 Smerlin Lopez 84.7
17 Evan Groff 84.5
18 Quinn Bramble 84.5
19 Aiden Emrich 84.4
20 Alex Allain 84.3
21 Aimerick Gauthier 84
22 Brailin Dominguez 83.9
23 hayden sladewski 83.9
24 Joshua Warming 83.9
25 Chris Barboza 83.8
26 Kevin Johnson 83.8
27 Keyan Mayernik 83.7
28 Chase Forester 83.4
29 Jack Torrence 83.3
30 Josh Litsky 83.2
31 Lucas Hodne 83.1
32 Wyatt Daigle 83
33 Jayden Pavao 82.9
34 Cooper Tantraporn 82.8
35 Peyton O’Brien 82.7
36 John Genco 82.5
37 Mason O’Brien 82.5
38 Jack Amann 82.4
39 Ayden Kempesta 82.3
40 Colin Wing 82.3
41 Jullian Dejesus 82.3
42 Nolan Wondolowski 82.3
43 Anthony Dufour 82.2
44 Danny Armstrong 82.2
45 Marcus Noel 82.2
46 Quinlan Grace 82.2
47 Theo Allan 82.1
48 Jack O\'Grady 82.1
49 Ethan Ford 82
50 Steven Curtin 82
51 Hunter Erickson 81.8
52 Jordi Burgos 81.8
53 Ruben Cortorreal 81.8
54 Jack Perry 81.7
55 Lenell Evans 81.7
56 Alex Argabright 81.6
57 Christian Danzilo 81.6
58 Noah Richardson 81.6
59 Aaron Vega 81.5
60 Brendan Woytowich 81.5
61 Lucas daCosta 81.5
62 Will Lavelle 81.5
63 Ian Brais 81.2
64 Levi Hessel 81.2
65 Joey Santo 80.9
66 Chase Anderson 80.7
67 Mario Corso-Winks 80.7
68 Elijah Powell 80.6
69 Max Hopkins 80.6
70 Tyler Yoxall 80.6
71 Brody Barrett 80.4
72 Nick Daley 80.2
73 Alex Russell 80
74 Charlie Gamere 80
75 Riley McDade 80
76 Conner Gaster 79.9
77 Jack Lorenzini 79.9
78 Robert Bouchard 79.9
79 Wynnton Stefanovicz 79.9
80 Charles MacElhiney 79.8
81 Christopher Rouleau 79.7
82 Corey Culhane 79.7
83 Darren Russo 79.7
84 Geoffrey Laliberte 79.7
85 Jaiden Collins 79.7
86 Nick Commisso 79.7
87 Gianluca Giordano 79.5
88 Zachary Powell 79.4
89 Michael Blair 79.3
90 Ryan Kukel 79.3
91 Evan Liverseidge 79.2
92 Reynaldo Medina 79.2
93 Aayan Hassan 79.1
94 Adam Gold 79.1
95 Noah Lam 79
96 Peter Karas 79
97 Connor Hollenbeck 78.9
98 Corey Blanchette 78.9
99 Trey Smith 78.9
100 Brayden Koegel 78.8
101 Noah Corliss 78.8
102 Connor Hammond 78.7
103 Jacoby Jacobs 78.7
104 patrick Herlihy 78.7
105 Alexis Labranche 78.5
106 Adoni Frances 78.4
107 Jackson McLane 78.4
108 Shea Curley 78.4
109 Payton Young 78.3
110 Rowan Brown-Knobel 78.3
111 Samuel Kinisky 78.3
112 Matteo Panciera 78.2
113 Garrison Biggs 78.1
114 Mathis Lamarre Lapointe 78.1
115 Rowan Galiotto 78.1
116 Dylan Alt 77.9
117 Chase Malbaurn 77.8
118 Grahm Hutton 77.7
119 Zachary Lavoie 77.7
120 Logan Voltaire 77.6
121 Braeden Copeland 77.5
122 Junior Vasquez 77.5
123 Brayden Rakov 77.4
124 JAMES SMITH 77.4
125 Jayden Burgos 77.4
126 Nico Brown 77.4
127 Miles Lawrence 77.3
128 Gavin Spiegel 77.2
129 Tommy Montalbano 77.2
130 COOPER ANDERSON 77.1
131 Andrew Weag 77
132 Charlie Gallagher 77
133 Mark Ehrenzeller 76.9
134 Carter Whitten 76.5
135 Gavin King 76.4
136 Evan Aubin 76.3
137 Jackson Gietek 76.3
138 Gavin Rolleston 76.1
139 Derek Soper 76
140 ALEXANDER Lutomski 75.8
141 Caleb Verma 75.8
142 Robert Cortina 75.8
143 Jack West 75.7
144 Jake Mulligan 75.7
145 Luke McGrail 75.6
146 Mathew Charrette 75.6
147 Michael Martino 75.6
148 Colin Westbrook 75.5
149 Phillip Groeling II 75.5
150 Andres Garcia 75.3
151 Braeden Crowe 75.3
152 Zeke Reyes 75.3
153 Brian Keene 75.2
154 Jesse Hodella 75.2
155 Luke Rizzi 75.2
156 Jake Pratt 75.1
157 Azan Durkovic 74.9
158 Evan Philipson 74.9
159 Frank Allo 74.9
160 Kyle Desrosiers 74.9
161 Michael Valente 74.9
162 Aidan Bailey 74.8
163 Caleb Price 74.7
164 Jake Thompson 74.6
165 Justin Scully 74.6
166 Patrick Larson 74.6
167 Matthew Lynaugh 74.5
168 Nathan Pletsch 74.5
169 Joseph Castelo 74.4
170 Jack Snyder 74.3
171 Bodie Burke 74.2
172 Dominick Zuliani 74.2
173 Aidan Gagnon 74.1
174 AIDAN MOSQUEDA 74.1
175 Alex Croteau 74.1
176 Louis Nevadomski 74.1
177 Evan Pupka 74.1
178 Cameron Aguilar 74
179 Darius Taliaferro 74
180 Justin Discher 74
181 Justin Tremblay 74
182 Kameron Morris 74
183 Ryan DeMelo 74
184 GianLuca Ingrasia 73.8
185 Levi Maguire 73.5
186 Cameron Thomson 73.4
187 Lucas Johnson 73.4
188 Xavier Molina 73.4
189 Levi Reale 73.3
190 Anthony Nevadomski 73.2
191 Matthew Olynciw 73.2
192 Oliver Dean 73.2
193 Austin Lowe 73.1
194 Leonel Septimus 73.1
195 Evan Wright 73
196 Naizaiah Rosa 73
197 Caden Reynolds 72.9
198 Jack Pastor 72.8
199 Eddie McClung 72.7
200 Andrew Beauregard 72.6
201 Anthony Frayler 72.6
202 John Millet 72.5
203 Emmanuel Alvarez 72.4
204 Nathan Arnold 72.3
205 Nick Pospisil 72.3
206 Chris Colabelli 72.1
207 Cooper McFarlane 72
208 Ethan Pham 71.8
209 Jackson O\'Dell 71.8
210 Jack Finocchario 71.5
211 Sean McKeon 71.5
212 Benjamin Monteiro 71.2
213 Liam Mulhern 71.2
214 Wade Middleton 71.2
215 Nolan Keobke 71.1
216 Graydon Greenberg 70.9
217 Cole Fredriksen 70.7
218 Will Burgess 70.6
219 Ethan Stokes 70.5
220 Julian Oliver 70.5
221 Andrew (AJ) Swerdloff 70.3
222 Drew Budihas 70.2
223 Aiden LeBouf 70.1
224 Michael Roman 70.1
225 Sean Krouskoff 70.1
226 Nikolas LaPointe 70
227 Ashton Chieppa 69.7
228 Derek Steinberg 69.6
229 Miguel Colon 69.5
230 Ethan Azoff 69.4
231 Jack Cestodio 69
232 Steven Vanore 69
233 James Flynn 68.7
234 Cooper Benoit 68.5
235 John Scavone III. (JJ) 68.3
236 Dylan Lewendon 68.1
237 Priyam Chokshi 68.1
238 Luke McDermott 67.9
239 Wes Asselin 67.8
240 Jack Monteith 67.7
241 Mason Easterbrooks 67.6
242 Chase Zraunig 67.3
243 Jack O\'Sullivan 67.1
244 Sam Unfricht 66.8
245 COBY O\'CONNOR 66.6
246 Brady Coppinger 66.5
247 Daniel Batka 66.3
248 Max Maturah 66.2
249 Gracin Tanguay 66.1
250 Bryan Putman 66
251 Wesley Snow 65.5
252 Joseph Nevadomski 65.2
253 Owen Harrington 65
254 Gavin Rooney 64.6
255 Adam Ruskin 63.5
256 Braeden Dwyer 63.5
257 Landen Phillips 62.8
258 John Crowley 62.6
259 Aaron Waters 62.1
260 Gus Merhige 61.9
261 Anthony Roman 61.7
RankProfileNameSpin Rate
1 Jack Perry 20135
2 Wyatt Daigle 2581
3 WILL HURLEY 2331
4 Brayden Koegel 2318
5 Brody Barrett 2300
6 Chris Barboza 2263
7 Jeremy Evangelista 2258
8 Evan Groff 2250
9 Caelan Goodwin-Slater 2249
10 Ryan Kukel 2229
11 Jackson Passonno 2228
12 Leonardo May 2219
13 Zachary Powell 2215
14 Nolan Wondolowski 2214
15 Mitchell Canuel 2196
16 Gianluca Giordano 2193
17 Smerlin Lopez 2182
18 Alex Allain 2180
19 Jackson Gietek 2175
20 Wynnton Stefanovicz 2173
21 Adoni Frances 2169
22 John Genco 2160
23 Brailin Dominguez 2159
24 Mario Corso-Winks 2159
25 Nolan Bigras 2157
26 Ryder Herchenroder 2157
27 Cooper McFarlane 2156
28 Reynaldo Medina 2148
29 Cooper Tantraporn 2134
30 Liam Monahan 2133
31 Marcus Noel 2130
32 Brayden Rakov 2122
33 Matthew Olynciw 2121
34 Tyler Yoxall 2107
35 Patrick Larson 2101
36 hayden sladewski 2100
37 Robert Bouchard 2094
38 Geoffrey Laliberte 2093
39 Kevin Johnson 2093
40 Cameron Thomson 2090
41 Keyan Mayernik 2090
42 Noah Corliss 2087
43 Michael Blair 2083
44 Dustin Menzel 2082
45 Corey Culhane 2077
46 Rohan Inamdar 2067
47 Jayden Pavao 2062
48 Jake Mulligan 2061
49 Aiden LeBouf 2048
50 Connor Hammond 2041
51 Austin Lowe 2034
52 Tyler DiCecco 2034
53 Alex Russell 2033
54 Ethan Ford 2030
55 Zeke Reyes 2025
56 Shea Curley 2023
57 Ayden Kempesta 2017
58 Justin Tremblay 2014
59 Mathis Lamarre Lapointe 2013
60 Jaiden Collins 2007
61 Jack Snyder 2005
62 Jack Torrence 2005
63 Junior Vasquez 2002
64 Aidan Gagnon 2000
65 Anthony Dufour 2000
66 Charlie Gamere 2000
67 Miguel Colon 2000
68 Nick Daley 2000
69 Jordi Burgos 1991
70 Aiden Emrich 1990
71 Chase Anderson 1988
72 Justin Rivard 1988
73 Jack Lorenzini 1986
74 Dominick Zuliani 1985
75 Cooper Benoit 1984
76 Gavin Rooney 1978
77 Rowan Brown-Knobel 1975
78 Eddie McClung 1966
79 Jake Thompson 1965
80 Mason O’Brien 1963
81 Mason Easterbrooks 1954
82 Evan Wright 1953
83 Ethan Pham 1952
84 Charles MacElhiney 1951
85 Gavin King 1950
86 Peter Karas 1950
87 Steven Curtin 1950
88 Wes Keayes 1950
89 Jack Amann 1948
90 Jack West 1943
91 Mark Ehrenzeller 1936
92 Levi Hessel 1931
93 Jullian Dejesus 1929
94 Gavin Spiegel 1928
95 Jack Pastor 1924
96 Sean Krouskoff 1919
97 Trey Smith 1919
98 Riley McDade 1915
99 Charlie Gallagher 1913
100 Peyton O’Brien 1913
101 Aayan Hassan 1912
102 Chase Forester 1912
103 patrick Herlihy 1909
104 Cole Fredriksen 1904
105 Theo Allan 1903
106 Brendan Kantscheidt 1900
107 Jeremy O\'Hara 1900
108 Joshua Warming 1900
109 Justin Discher 1900
110 Miles Lawrence 1900
111 Nathan Arnold 1900
112 Nolan Keobke 1900
113 Quinlan Grace 1900
114 Will Lavelle 1900
115 Frank Allo 1899
116 Caden Reynolds 1897
117 Logan Voltaire 1896
118 Graydon Greenberg 1895
119 Lucas daCosta 1895
120 Evan Aubin 1894
121 Lenell Evans 1894
122 Louis Nevadomski 1891
123 Jace Wolfradt 1887
124 Joey Santo 1885
125 Nico Brown 1885
126 Jacoby Jacobs 1883
127 Leonel Septimus 1882
128 Grahm Hutton 1879
129 Jayden Burgos 1879
130 ALEXANDER Lutomski 1875
131 Noah Lam 1875
132 Max Hopkins 1874
133 Zachary Lavoie 1871
134 Quinn Bramble 1870
135 Darren Russo 1865
136 Sean McKeon 1865
137 Jack Finocchario 1862
138 Brendan Woytowich 1861
139 Nikolas LaPointe 1861
140 Evan Liverseidge 1859
141 Chase Malbaurn 1850
142 COOPER ANDERSON 1850
143 Danny Armstrong 1847
144 Evan Philipson 1846
145 Connor Hollenbeck 1845
146 Justin Scully 1845
147 Wes Asselin 1845
148 Ruben Cortorreal 1842
149 Bodie Burke 1841
150 Hunter Erickson 1840
151 Michael Martino 1837
152 Ashton Chieppa 1836
153 Naizaiah Rosa 1833
154 Andrew Weag 1830
155 Tommy Montalbano 1830
156 Caleb Verma 1826
157 Payton Young 1823
158 Luke McDermott 1819
159 Will Burgess 1817
160 Xavier Molina 1815
161 Joseph Castelo 1811
162 Kameron Morris 1811
163 Robert Cortina 1811
164 Michael Roman 1810
165 Alex Croteau 1800
166 Darius Taliaferro 1800
167 Derek Soper 1800
168 JAMES SMITH 1800
169 Nathan Pletsch 1799
170 Elijah Powell 1798
171 Jesse Hodella 1798
172 Lucas Johnson 1796
173 Bryan Putman 1790
174 Ian Brais 1789
175 Aimerick Gauthier 1782
176 Owen Harrington 1776
177 Michael Valente 1774
178 Colin Wing 1773
179 Christian Danzilo 1771
180 Anthony Nevadomski 1768
181 Matthew Lynaugh 1766
182 Wade Middleton 1763
183 Aidan Bailey 1761
184 Rowan Galiotto 1758
185 John Scavone III. (JJ) 1757
186 Carter Whitten 1756
187 Corey Blanchette 1756
188 Jack Monteith 1754
189 Jackson McLane 1754
190 Josh Litsky 1754
191 Gavin Rolleston 1750
192 Phillip Groeling II 1750
193 Priyam Chokshi 1750
194 Ryan DeMelo 1745
195 Lucas Hodne 1744
196 Conner Gaster 1741
197 Chase Zraunig 1740
198 Benjamin Monteiro 1736
199 Nick Commisso 1736
200 Luke McGrail 1733
201 Jack O\'Sullivan 1731
202 Max Maturah 1729
203 Jack O\'Grady 1724
204 GianLuca Ingrasia 1721
205 Jackson O\'Dell 1718
206 Aaron Vega 1717
207 Braeden Crowe 1707
208 Andrew Beauregard 1702
209 Samuel Kinisky 1700
210 Christopher Rouleau 1698
211 Emmanuel Alvarez 1690
212 Levi Maguire 1690
213 Dylan Lewendon 1686
214 Alexis Labranche 1682
215 Azan Durkovic 1681
216 Kyle Desrosiers 1681
217 Nick Pospisil 1679
218 Noah Richardson 1676
219 Evan Pupka 1669
220 Andres Garcia 1667
221 AIDAN MOSQUEDA 1663
222 John Millet 1663
223 Anthony Roman 1662
224 Liam Mulhern 1661
225 Adam Gold 1653
226 Anthony Frayler 1650
227 Joseph Nevadomski 1650
228 Matteo Panciera 1650
229 Oliver Dean 1648
230 Dylan Comiskey 1640
231 Colin Westbrook 1637
232 Braeden Copeland 1631
233 Jake Pratt 1631
234 Sam Unfricht 1631
235 Jack Cestodio 1629
236 Derek Steinberg 1621
237 Levi Reale 1616
238 Gracin Tanguay 1615
239 Landen Phillips 1611
240 Andrew (AJ) Swerdloff 1599
241 Cameron Aguilar 1595
242 Caleb Price 1584
243 James Flynn 1567
244 John Crowley 1563
245 Julian Oliver 1550
246 Gus Merhige 1533
247 Luke Rizzi 1525
248 Brady Coppinger 1521
249 COBY O\'CONNOR 1518
250 Ethan Azoff 1499
251 Wesley Snow 1496
252 Brian Keene 1488
253 Garrison Biggs 1452
254 Drew Budihas 1442
255 Ethan Stokes 1432
256 Chris Colabelli 1422
257 Mathew Charrette 1357
258 Daniel Batka 1350
259 Samuel Boislard 1321
260 Braeden Dwyer 1317
261 Adam Ruskin 1272
262 Steven Vanore 1256
263 Aaron Waters 1243
264 Alex Argabright 1183
RankProfileNameCurveball Velo – Avg
1 Smerlin Lopez 81.5
2 Jeremy Evangelista 80.7
3 Wes Keayes 80
4 Chris Barboza 79.7
5 Ruben Cortorreal 79.6
6 Quinlan Grace 79
7 Lenell Evans 78.7
8 Jeremy O\'Hara 78
9 Geoffrey Laliberte 77.4
10 Caelan Goodwin-Slater 77.1
11 Alex Allain 76.9
12 Josh Litsky 76.3
13 Kevin Johnson 76.1
14 Mitchell Canuel 76
15 Justin Rivard 75.9
16 Leonardo May 75.9
17 Jullian Dejesus 75.5
18 Evan Groff 75
19 Nolan Wondolowski 75
20 Corey Culhane 74.8
21 Ethan Ford 74.8
22 Mason O’Brien 74.8
23 Liam Monahan 74.5
24 Jace Wolfradt 74.2
25 Jordi Burgos 74
26 Jack Amann 73.7
27 Adam Gold 73.4
28 Wynnton Stefanovicz 73.4
29 Lucas daCosta 73
30 Nick Daley 73
31 Aayan Hassan 72.7
32 Corey Blanchette 72.6
33 Mario Corso-Winks 72.6
34 Charles MacElhiney 72.5
35 Tyler DiCecco 72.5
36 Robert Bouchard 72.3
37 Ryan Kukel 72.3
38 Jayden Burgos 72.2
39 Charlie Gamere 72.1
40 Noah Richardson 72.1
41 Ayden Kempesta 72
42 Dustin Menzel 72
43 Matteo Panciera 72
44 Samuel Boislard 71.8
45 Jack Torrence 71.6
46 Ian Brais 71.5
47 patrick Herlihy 71.4
48 Danny Armstrong 71.3
49 Logan Voltaire 71.1
50 Derek Soper 71
51 Gavin Rolleston 71
52 Jackson McLane 71
53 Trey Smith 71
54 Tyler Yoxall 71
55 Zachary Lavoie 71
56 Payton Young 70.9
57 Jack West 70.8
58 Luke McGrail 70.7
59 Michael Valente 70.7
60 Xavier Molina 70.4
61 Robert Cortina 70.2
62 Connor Hammond 70.1
63 Anthony Dufour 70
64 Shea Curley 70
65 Andrew Weag 69.6
66 ALEXANDER Lutomski 69.5
67 John Millet 69.5
68 Aidan Bailey 69.4
69 Zeke Reyes 69.4
70 Evan Pupka 69.3
71 Jake Thompson 69.3
72 Joey Santo 69.2
73 Aidan Gagnon 69
74 Alex Russell 69
75 Justin Discher 69
76 Mathew Charrette 69
77 Peter Karas 69
78 Cameron Aguilar 68.9
79 Connor Hollenbeck 68.9
80 Jack Lorenzini 68.9
81 Michael Blair 68.9
82 Azan Durkovic 68.6
83 Austin Lowe 68.5
84 Brayden Koegel 68.5
85 Colin Westbrook 68.4
86 Luke Rizzi 68.4
87 Aaron Vega 68.3
88 Ryan DeMelo 68.3
89 Darren Russo 68.1
90 Jake Pratt 68.1
91 Noah Lam 68.1
92 Jake Mulligan 68
93 Jesse Hodella 68
94 Miles Lawrence 68
95 Nolan Keobke 68
96 Patrick Larson 68
97 Evan Philipson 67.9
98 Theo Allan 67.7
99 Christian Danzilo 67.7
100 Justin Tremblay 67.5
101 Tommy Montalbano 67.4
102 Brendan Kantscheidt 67
103 Kameron Morris 67
104 Samuel Kinisky 67
105 AIDAN MOSQUEDA 66.8
106 Jack Snyder 66.8
107 Steven Vanore 66.8
108 Evan Liverseidge 66.6
109 Joseph Castelo 66.5
110 Nathan Pletsch 66.3
111 Braeden Crowe 66.1
112 GianLuca Ingrasia 66.1
113 Anthony Nevadomski 66
114 Darius Taliaferro 66
115 Gianluca Giordano 66,6
116 Lucas Johnson 65.9
117 Christopher Rouleau 65.8
118 Bodie Burke 65.4
119 Ethan Stokes 65.4
120 Leonel Septimus 65.3
121 Cole Fredriksen 65.2
122 Jackson Gietek 64.9
123 Graydon Greenberg 64.7
124 Nick Pospisil 64.7
125 Dominick Zuliani 64.4
126 Luke McDermott 64.4
127 Peyton O’Brien 64
128 Brian Keene 63.7
129 Levi Maguire 63.5
130 Braeden Copeland 63.2
131 Sam Unfricht 63.1
132 COBY O\'CONNOR 63
133 Wes Asselin 62.4
134 Max Maturah 62.3
135 Sean Krouskoff 62.2
136 Cooper Benoit 62.
137 Jack Pastor 62
138 Andres Garcia 61.5
139 Matthew Olynciw 61.2
140 Ashton Chieppa 61
141 Chase Zraunig 60
142 Jack Monteith 59.7
143 John Scavone III. (JJ) 59.7
144 Sean McKeon 59.2
145 Oliver Dean 58.4
146 Dylan Comiskey 58.2
147 Brady Coppinger 58
148 Bryan Putman 57.3
149 Gracin Tanguay 57
150 Jack O\'Sullivan 56.6
151 Dylan Lewendon 56.3
152 Gavin Rooney 54.8
153 John Crowley 50.6
RankProfileNameChangeup Velo – Avg
1 Gavin Rooney 52
2 Landen Phillips 53.4
3 John Crowley 54.9
4 Anthony Roman 55.4
5 Nikolas LaPointe 56.5
6 Wes Asselin 57.2
7 Aiden LeBouf 57.5
8 Leonel Septimus 58
9 Mark Ehrenzeller 58.4
10 Oliver Dean 59.9
11 Jullian Dejesus 60.2
12 COBY O\'CONNOR 60.5
13 Emmanuel Alvarez 60.7
14 Mason Easterbrooks 60.7
15 Andrew Beauregard 60.8
16 Jackson Gietek 60.8
17 Joseph Nevadomski 61
18 Patrick Larson 61.4
19 Dylan Lewendon 61.5
20 Anthony Nevadomski 61.7
21 Wade Middleton 61.9
22 Caden Reynolds 62
23 Benjamin Monteiro 62.1
24 GianLuca Ingrasia 62.2
25 Andres Garcia 62.5
26 Jackson O\'Dell 62.8
27 Bodie Burke 63.2
28 Cooper McFarlane 63.3
29 Jack Monteith 63.4
30 AIDAN MOSQUEDA 63.5
31 Ashton Chieppa 63.5
32 Jack Lorenzini 63.7
33 Liam Mulhern 63.7
34 Naizaiah Rosa 63.7
35 Braeden Copeland 63.9
36 Charlie Gallagher 63.9
37 Lucas Johnson 64.1
38 Michael Blair 64.4
39 Dylan Comiskey 64.5
40 Sean McKeon 64.5
41 Braeden Crowe 64.6
42 Christian Danzilo 64.9
43 Colin Westbrook 64.9
44 Cameron Aguilar 65.1
45 Cole Fredriksen 65.2
46 Xavier Molina 65.2
47 John Millet 65.3
48 Austin Lowe 65.4
49 Sean Krouskoff 65.4
50 Chase Forester 65.6
51 Grahm Hutton 65.6
52 Dominick Zuliani 65.7
53 Tommy Montalbano 65.8
54 Jacoby Jacobs 65.9
55 Charlie Gamere 66
56 Chase Malbaurn 66
57 Evan Aubin 66.2
58 Jack Snyder 66.2
59 Nathan Pletsch 66.3
60 Garrison Biggs 66.5
61 Jack Pastor 66.5
62 Kyle Desrosiers 66.5
63 Riley McDade 66.6
64 Chris Colabelli 66.7
65 Reynaldo Medina 66.9
66 Max Hopkins 67
67 Josh Litsky 67.2
68 Zeke Reyes 67.2
69 Connor Hollenbeck 67.4
70 Nolan Wondolowski 67.4
71 Alex Argabright 67.6
72 Azan Durkovic 67.6
73 Robert Cortina 67.6
74 Caleb Price 68
75 Miles Lawrence 68
76 Shea Curley 68
77 Wynnton Stefanovicz 68
78 Jaiden Collins 68.2
79 Mario Corso-Winks 68.2
80 Rowan Brown-Knobel 68.3
81 Matthew Olynciw 68.4
82 Gavin Spiegel 68.5
83 Quinn Bramble 68.7
84 Elijah Powell 68.8
85 Jack O\'Grady 68.8
86 patrick Herlihy 68.8
87 Adoni Frances 69
88 Lucas Hodne 69
89 Conner Gaster 69.3
90 Ian Brais 69.3
91 Lenell Evans 69.3
92 Brian Keene 69.4
93 Chris Barboza 69.4
94 John Genco 69.4
95 Frank Allo 69.5
96 Michael Martino 69.6
97 Kevin Johnson 69.8
98 Zachary Powell 70.3
99 Jace Wolfradt 70.4
100 Nolan Bigras 70.4
101 Wyatt Daigle 70.8
102 Colin Wing 70.9
103 Noah Corliss 71
104 Quinlan Grace 71
105 Ethan Ford 71.7
106 Jack Amann 71.8
107 Justin Rivard 72
108 Keyan Mayernik 72.2
109 Payton Young 72.2
110 Danny Armstrong 72.4
111 Jayden Pavao 72.5
112 Lucas daCosta 72.5
113 Evan Groff 72.7
114 Mitchell Canuel 72.7
115 Jack Torrence 72.9
116 Tyler DiCecco 72.9
117 Brendan Kantscheidt 73
118 Robert Bouchard 73.1
119 Ryder Herchenroder 73.2
120 Caelan Goodwin-Slater 73.5
121 Peyton O’Brien 73.7
122 Brendan Woytowich 74.1
123 Liam Monahan 74.6
124 Ruben Cortorreal 74.9
125 Joshua Warming 75
126 Theo Allan 75.7
127 Wes Keayes 76
128 Gianluca Giordano 76.2
129 Jeremy Evangelista 76.3
130 Aiden Emrich 76.9
RankProfileNameSplitter Velo – Avg
1 Payton Young 73.7

RULES

There is no rules.

WEATHER

`);printWindow.document.close(); }); /* function gpe_get_schedules_list() { const event_id = '41186'; let division_filter_drop = $("#division_filter_drop").val(); let pool_filter_drop = $("#pool_filter_drop").val(); let date_filter_drop = $("#date_filter_drop").val();// Show processing indicator (manually trigger it) table.destroy(); // Destroy old DataTable before making new AJAX call $("#schedules_table tbody").html('Loading...'); // Temporary loader row$.ajax({ url: gpe.ajax_url, type: 'post', data: { action: 'gpe_ajax', type: 'gpe_get_schedules_list', event_id: event_id, division_filter_drop: division_filter_drop, pool_filter_drop: pool_filter_drop, date_filter_drop: date_filter_drop }, success: function (response) { // Clear the table body and add new content $("#schedules_table tbody").empty().html(response.data.html);// Reinitialize DataTable with processing enabled table = $("#schedules_table").DataTable({ processing: true, serverSide: false, // Keep it false unless loading data dynamically searching: true, paging: true, autoWidth: false }); } }); } function gpe_get_standing_list() { const event_id = '41186'; let division_filter_drop = $("#division_filter_drop_for_standing").val(); let pool_filter_drop = $("#pool_filter_drop_for_standing").val(); // Show processing indicator (manually trigger it) standings_table.destroy(); // Destroy old DataTable before making new AJAX call $("#standings_table tbody").html('Loading...'); // Temporary loader row $.ajax({ url: gpe.ajax_url, type: 'post', data: { action: 'gpe_ajax', type: 'gpe_get_standing_list', event_id: event_id, division_filter_drop: division_filter_drop, pool_filter_drop: pool_filter_drop }, success: function (response) { // Clear the table body and add new content $("#standings_table tbody").empty().html(response.data.html); // Reinitialize DataTable with processing enabled standings_table = $("#standings_table").DataTable({ processing: true, serverSide: false, // Keep it false unless loading data dynamically searching: true, paging: false }); } }); }*/ $('#shareDropdown').change(function(){ var selectedOption = $(this).val(); if (selectedOption === "copy") { var pageLink = window.location.href; var tempInput = $(""); $("body").append(tempInput); tempInput.val(pageLink).select(); document.execCommand("copy"); tempInput.remove(); Swal.fire({ title:"Success", text:"Copied to clipboard!", icon:'success' }); // Reset dropdown selection $(this).prop('selectedIndex', 0); } }); }); let isSchedulesTableInitialized = false;function gpeCustomeTabsnew(evt, cityName) { var i, tabcontent, tablinks; tabcontent = document.getElementsByClassName("gpe_tabcontent"); for (i = 0; i < tabcontent.length; i++) { tabcontent[i].style.display = "none"; } tablinks = document.getElementsByClassName("gpe_tablinks"); for (i = 0; i < tablinks.length; i++) { tablinks[i].className = tablinks[i].className.replace(" gpe_active", ""); } document.getElementById(cityName).style.display = "block"; evt.currentTarget.className += " gpe_active";if (cityName === "schedules_and_standings") { // ✅ Prevent reinitializing the DataTable if (!isSchedulesTableInitialized) { // Only call once window.gpe_get_schedules_list(); window.gpe_get_standing_list(); isSchedulesTableInitialized = true; } } }function gpeCustomeTabs(evt, cityName) { var i, tabcontent, tablinks; tabcontent = document.getElementsByClassName("gpe_tabcontent"); for (i = 0; i < tabcontent.length; i++) { tabcontent[i].style.display = "none"; } tablinks = document.getElementsByClassName("gpe_tablinks"); for (i = 0; i < tablinks.length; i++) { tablinks[i].className = tablinks[i].className.replace(" gpe_active", ""); } document.getElementById(cityName).style.display = "block"; evt.currentTarget.className += " gpe_active"; // Redraw connectors when Bracket tab is activated if (cityName === "brackets"){ //alert("Bracket"); loadSavedBracket(); } if (cityName === "brackets" && window.globalSerialMap) { // Wait until the browser has painted the visible DOM //requestAnimationFrame(() => { //setTimeout(() => { //waitForLayoutAndDraw(window.globalSerialMap, 20); waitForLayoutAndDrawStable(window.globalSerialMap, 20); //}, 100); //}); } }// Get the element with id="defaultOpen" and click on it document.getElementById("defaultOpen").click(); var acc = document.getElementsByClassName("gpe_accordion"); var i; for (i = 0; i < acc.length; i++) { acc[i].addEventListener("click", function() { this.classList.toggle("active"); var panel = this.nextElementSibling; if (panel.style.maxHeight) { panel.style.maxHeight = null; } else { panel.style.maxHeight = panel.scrollHeight + "px"; } }); }var latitude = document.getElementById("latitude").value; var longitude = document.getElementById("longitude").value;var iframe = document.createElement("iframe"); iframe.src = "https://www.google.com/maps/embed?pb=!1m28!1m12!1m3!1d19797.686238814687!2d-71.3765509!3d41.8633795!2m3!1f0!2f0!3f0!3m2!1i1024!2i768!4f13.1!4m13!3e6!4m5!1s0x89e45a80fc2b13ab%3A0x8f62f2e279889968!2sCurrent%20Location!3m2!1d" + latitude + "!2d" + longitude + "!4m5!1s0x89e45a7a2b41f7f3%3A0x6cb46461e8d0c1b4!2s" + latitude + "%2C" + longitude + "!3m2!1d" + latitude + "!2d" + longitude + "!5e0!3m2!1sen!2sus!4v1644233201036!5m2!1sen!2sus"; iframe.width = "528"; iframe.height = "295"; iframe.style.border = "0"; iframe.allowfullscreen = true;var mapContainer = document.getElementById("mapContainer"); mapContainer.innerHTML = ""; mapContainer.appendChild(iframe); function getPoolsByDivision(divisionId) { return $.ajax({ url: gpe.ajax_url, method: "POST", dataType: "json", data: { action: "gpe_ajax", type: "get_pools_save", division_id: divisionId } }); }function loadSavedBracket() { // Get the division ID from the division select dropdown const divisionId = $("#division_select").val(); // Get the current event ID dynamically from PHP const eventId = '41186';// If division ID is not selected, exit early if (!divisionId) return;// Perform both AJAX requests in parallel $.when( $.ajax({ url: gpe.ajax_url, // URL for the AJAX request type: "POST", // HTTP method dataType: "json", // Expected response type data: { action: "gpe_ajax", // WordPress action hook for AJAX type: "get_saved_bracket", // Custom action to get saved bracket data event_id: eventId, // The current event ID division_id: divisionId // The selected division ID } }), getPoolsByDivision(divisionId) // Function to get pools for the selected division ).done(function (bracketRes, poolsRes) { // Extract bracket data from the first response (bracketRes) const bracketData = bracketRes[0]?.data?.bracket_data || []; // Prepare a map of pool ID to pool title const poolMap = {}; poolsRes[0]?.data?.forEach(pool => { poolMap[pool.id] = pool.title; });// Call renderSavedBracket function to render the bracket renderSavedBracket(bracketData, poolMap); }).fail(function () { // In case of failure, show an error message in the bracket container $("#bracket").html("
Error loading bracket.
"); }); } function renderSavedBracket(bracketData, poolMap) { let bracketWrapper = $(".bracket_wrapper"); if (bracketWrapper.length === 0) { bracketWrapper = $("
").addClass("bracket_wrapper"); // Append it to the main container if it's missing $("#bracket").replaceWith(bracketWrapper); } else { bracketWrapper.empty(); // Clear existing content if already present } let bracketDiv = $("
").attr("id", "bracket"); bracketWrapper.append(bracketDiv); if (!bracketData || bracketData.length === 0) { bracketDiv.append(`

Bracket not available, please select a different division from the drop down menu

`); return; } let groups = {}; let serialMap = {}; let matchCounter = 1; bracketData.forEach(match => { if (match.is_important === "1") { if (!groups[match.group_number]) groups[match.group_number] = {}; if (!groups[match.group_number][match.column_number]) groups[match.group_number][match.column_number] = []; groups[match.group_number][match.column_number].push(match); } }); const sortedGroups = Object.keys(groups).sort(); const mainGroup = sortedGroups[0]; let groupScrollWrapper = $("
").addClass("group-scroll-wrapper"); for (let group of sortedGroups) { let groupSerialCounter = 1; let groupDiv = $("
").addClass("group").attr("data-group", group); let columnsContainer = $("
").addClass("columns-container"); let groupMatchesArray = Object.values(groups[group]).flat(); let groupLabel = groupMatchesArray[0]?.group_label ?? `Group ${group}`; let labelDiv = $("
").addClass("group-label").text(groupLabel); groupDiv.append(labelDiv); let columns = Object.keys(groups[group]).sort((a, b) => a - b); const groupMatches = {}; const allMatches = Object.values(groups[group]).flat(); const matchCount = allMatches.length; const isFiveTeam = allMatches.length === 4 && columns.length === 3; const isSevenTeam = matchCount === 6 && columns.length === 4; const isTenTeam = matchCount === 9 && columns.length === 4; const isNineTeam = matchCount === 8 && columns.length === 4; const isSixTeam = matchCount === 5 && columns.length === 3; const isTwelveTeam = matchCount === 11 && columns.length === 4; // Adjust if using 12 matches if (isTwelveTeam) { allMatches.sort((a, b) => parseInt(a.name) - parseInt(b.name)); const displayOrder = [ allMatches[0], allMatches[1], allMatches[2], allMatches[3], // Round 1 allMatches[4], allMatches[5], allMatches[6], allMatches[7], // Round 2 allMatches[8], allMatches[9], // Semifinals allMatches[10] // Final ];let roundDiv1 = $("
").addClass("round").attr("data-column", columns[0]); let roundDiv2 = $("
").addClass("round").attr("data-column", columns[1]); let roundDiv3 = $("
").addClass("round").attr("data-column", columns[2]); let roundDiv4 = $("
").addClass("round").attr("data-column", columns[3]);displayOrder.forEach((match, i) => { const serial = groupSerialCounter++; const matchId = `match-serial-${group}-${serial}`; let matchDiv = $("
") .addClass("match") .attr("id", matchId) .attr("data-match-index", match.name);let score1 = match.team1_score ?? "-"; let score2 = match.team2_score ?? "-"; //let team1 = match.team_name1 ?? "Team 1"; //let team2 = match.team_name2 ?? "Team 2"; let team1 = match.source_label_team1 && match.source_label_team1.trim() !== "" ? match.source_label_team1 : (match.team_name1 ?? "Team 1"); let team2 = match.source_label_team2 && match.source_label_team2.trim() !== "" ? match.source_label_team2 : (match.team_name2 ?? "Team 2");let startTime = formatStartDateTime(match.start_date, match.start_time); let location = match.location || "";matchDiv.html(`
${match.name}
${startTime}
${location}
${team1} ${score1}
${team2} ${score2}
`);const matchContainer = $("
").addClass("match-container").css("margin-bottom", "20px"); matchContainer.append(matchDiv);match.serial = serial; if (!groupMatches[match.column_number]) groupMatches[match.column_number] = []; groupMatches[match.column_number].push(match); serialMap[`${group}-${serial}`] = { ...match, group, column: match.column_number, serial };if (i < 4) roundDiv1.append(matchContainer); // Round 1 else if (i < 8) roundDiv2.append(matchContainer); // Round 2 else if (i < 10) roundDiv3.append(matchContainer); // Semis else roundDiv4.append(matchContainer); // Final });columnsContainer.append(roundDiv1); columnsContainer.append($("
").addClass("connector-column")); columnsContainer.append(roundDiv2); columnsContainer.append($("
").addClass("connector-column")); columnsContainer.append(roundDiv3); columnsContainer.append($("
").addClass("connector-column")); columnsContainer.append(roundDiv4);groupDiv.append(columnsContainer); groupScrollWrapper.append(groupDiv);const groupNumbers = Object.keys(groups); // make sure 'groups' is defined and validconst importantMatchExists = Object.values(groupMatches) .flat() .some(m => m.is_importantlast === "1");setTimeout(() => { if (importantMatchExists) { const currentGroupNumber = group; const currentIndex = groupNumbers.indexOf(currentGroupNumber); const prevGroupNumber = currentIndex > 0 ? groupNumbers[currentIndex - 1] : null; const lastChecked = true;positionMatcheslast(groupMatches, currentGroupNumber, prevGroupNumber, lastChecked); } positionMatches(groupMatches, group); //waitForLayoutAndDraw(serialMap, 20); waitForLayoutAndDrawStable(serialMap, 20);}, 100);continue; }if (isSixTeam) { allMatches.sort((a, b) => parseInt(a.name) - parseInt(b.name));const displayOrder = [ allMatches[0], // Match 1 allMatches[1], // Match 2 allMatches[2], // Match 3 allMatches[3], // Match 4 allMatches[4] // Final ];let roundDiv1 = $("
").addClass("round").attr("data-column", columns[0]); let roundDiv2 = $("
").addClass("round").attr("data-column", columns[1]); let roundDiv3 = $("
").addClass("round").attr("data-column", columns[2]);displayOrder.forEach((match, i) => { const serial = groupSerialCounter++; const matchId = `match-serial-${group}-${serial}`;let matchDiv = $("
") .addClass("match") .attr("id", matchId) .attr("data-match-index", match.name);let score1 = match.team1_score ?? "-"; let score2 = match.team2_score ?? "-"; //let team1 = match.team_name1 ?? "Team 1"; //let team2 = match.team_name2 ?? "Team 2"; let team1 = match.source_label_team1 && match.source_label_team1.trim() !== "" ? match.source_label_team1 : (match.team_name1 ?? "Team 1"); let team2 = match.source_label_team2 && match.source_label_team2.trim() !== "" ? match.source_label_team2 : (match.team_name2 ?? "Team 2");let startTime = formatStartDateTime(match.start_date, match.start_time); let location = match.location || "";matchDiv.html(`
${match.name}
${startTime}
${location}
${team1} ${score1}
${team2} ${score2}
`);const matchContainer = $("
").addClass("match-container").css("margin-bottom", "20px"); matchContainer.append(matchDiv);match.serial = serial; if (!groupMatches[match.column_number]) groupMatches[match.column_number] = []; groupMatches[match.column_number].push(match);serialMap[`${group}-${serial}`] = { ...match, group, column: match.column_number, serial };if (i < 2) roundDiv1.append(matchContainer); else if (i < 4) roundDiv2.append(matchContainer); else roundDiv3.append(matchContainer); });columnsContainer.append(roundDiv1); columnsContainer.append($("
").addClass("connector-column")); columnsContainer.append(roundDiv2); columnsContainer.append($("
").addClass("connector-column")); columnsContainer.append(roundDiv3);groupDiv.append(columnsContainer); groupScrollWrapper.append(groupDiv);const groupNumbers = Object.keys(groups); // make sure 'groups' is defined and validconst importantMatchExists = Object.values(groupMatches) .flat() .some(m => m.is_importantlast === "1");setTimeout(() => { if (importantMatchExists) { const currentGroupNumber = group; const currentIndex = groupNumbers.indexOf(currentGroupNumber); const prevGroupNumber = currentIndex > 0 ? groupNumbers[currentIndex - 1] : null; const lastChecked = true;positionMatcheslast(groupMatches, currentGroupNumber, prevGroupNumber, lastChecked); } positionMatches(groupMatches, group); //waitForLayoutAndDraw(serialMap, 20); waitForLayoutAndDrawStable(serialMap, 20);}, 100);continue; } if (isNineTeam) { allMatches.sort((a, b) => parseInt(a.name) - parseInt(b.name));const displayOrder = [ allMatches[0], // Game 1 - Round 1 allMatches[1], // Game 2 - Round 2 allMatches[2], // Game 3 allMatches[3], // Game 4 allMatches[4], // Game 5 allMatches[5], // Game 6 - Round 3 allMatches[6], // Game 7 allMatches[7] // Game 8 - Round 4 (Final) ];let roundDiv1 = $("
").addClass("round").attr("data-column", columns[0]); let roundDiv2 = $("
").addClass("round").attr("data-column", columns[1]); let roundDiv3 = $("
").addClass("round").attr("data-column", columns[2]); let roundDiv4 = $("
").addClass("round").attr("data-column", columns[3]);displayOrder.forEach((match, i) => { const serial = groupSerialCounter++; const matchId = `match-serial-${group}-${serial}`;let matchDiv = $("
") .addClass("match") .attr("id", matchId) .attr("data-match-index", match.name);let score1 = match.team1_score ?? "-"; let score2 = match.team2_score ?? "-"; //let team1 = match.team_name1 ?? "Team 1"; //let team2 = match.team_name2 ?? "Team 2"; let team1 = match.source_label_team1 && match.source_label_team1.trim() !== "" ? match.source_label_team1 : (match.team_name1 ?? "Team 1"); let team2 = match.source_label_team2 && match.source_label_team2.trim() !== "" ? match.source_label_team2 : (match.team_name2 ?? "Team 2");let startTime = formatStartDateTime(match.start_date, match.start_time); let location = match.location || "";matchDiv.html(`
${match.name}
${startTime}
${location}
${team1} ${score1}
${team2} ${score2}
`);const matchContainer = $("
").addClass("match-container").css("margin-bottom", "20px"); matchContainer.append(matchDiv);match.serial = serial; if (!groupMatches[match.column_number]) groupMatches[match.column_number] = []; groupMatches[match.column_number].push(match);serialMap[`${group}-${serial}`] = { ...match, group, column: match.column_number, serial };if (i === 0) roundDiv1.append(matchContainer); else if (i >= 1 && i <= 4) roundDiv2.append(matchContainer); else if (i === 5 || i === 6) roundDiv3.append(matchContainer); else if (i === 7) roundDiv4.append(matchContainer); });columnsContainer.append(roundDiv1); columnsContainer.append($("
").addClass("connector-column")); columnsContainer.append(roundDiv2); columnsContainer.append($("
").addClass("connector-column")); columnsContainer.append(roundDiv3); columnsContainer.append($("
").addClass("connector-column")); columnsContainer.append(roundDiv4);groupDiv.append(columnsContainer); groupScrollWrapper.append(groupDiv);const groupNumbers = Object.keys(groups); // make sure 'groups' is defined and validconst importantMatchExists = Object.values(groupMatches) .flat() .some(m => m.is_importantlast === "1");setTimeout(() => { if (importantMatchExists) { const currentGroupNumber = group; const currentIndex = groupNumbers.indexOf(currentGroupNumber); const prevGroupNumber = currentIndex > 0 ? groupNumbers[currentIndex - 1] : null; const lastChecked = true;positionMatcheslast(groupMatches, currentGroupNumber, prevGroupNumber, lastChecked); } positionMatches(groupMatches, group); //waitForLayoutAndDraw(serialMap, 20); waitForLayoutAndDrawStable(serialMap, 20);}, 100);continue; }if (isTenTeam) { allMatches.sort((a, b) => parseInt(a.name) - parseInt(b.name)); console.log("10-team allMatches:", allMatches.map(m => ({ name: m.name, id: m.id, column: m.column_number })));// Custom display order: Round 2 is visually reordered // Custom display order: Round 2 is visually reordered const displayOrder = [ allMatches[0], allMatches[1], // Round 1: Match 36, 37 allMatches[2], allMatches[3], allMatches[4], allMatches[5], // Round 2: Matches 3, 4, 5, 6 (in order) allMatches[6], allMatches[7], // Round 3: Matches 42–43 allMatches[8] // Final: Match 44 ];let roundDiv1 = $("
").addClass("round").attr("data-column", columns[0]); let roundDiv2 = $("
").addClass("round").attr("data-column", columns[1]); let roundDiv3 = $("
").addClass("round").attr("data-column", columns[2]); let roundDiv4 = $("
").addClass("round").attr("data-column", columns[3]);displayOrder.forEach((match, i) => { const serial = groupSerialCounter++; const matchId = `match-serial-${group}-${serial}`;let matchDiv = $("
") .addClass("match") .attr("id", matchId) .attr("data-match-index", match.name);let score1 = match.team1_score ?? "-"; let score2 = match.team2_score ?? "-"; //let team1 = match.team_name1 ?? "Team 1"; //let team2 = match.team_name2 ?? "Team 2"; let team1 = match.source_label_team1 && match.source_label_team1.trim() !== "" ? match.source_label_team1 : (match.team_name1 ?? "Team 1"); let team2 = match.source_label_team2 && match.source_label_team2.trim() !== "" ? match.source_label_team2 : (match.team_name2 ?? "Team 2");let startTime = formatStartDateTime(match.start_date, match.start_time); let location = match.location || "";matchDiv.html(`
${match.name}
${startTime}
${location}
${team1} ${score1}
${team2} ${score2}
`);const matchContainer = $("
") .addClass("match-container") .css("margin-bottom", "20px"); // ← add spacing between matchesmatchContainer.append(matchDiv);match.serial = serial; if (!groupMatches[match.column_number]) groupMatches[match.column_number] = []; groupMatches[match.column_number].push(match);serialMap[`${group}-${serial}`] = { ...match, group, column: match.column_number, serial };if (i < 2) roundDiv1.append(matchContainer); // Round 1 else if (i >= 2 && i <= 5) { // Force desired visual order for Round 2: Matches 38, 39, 40, 41 // Map i to visual index: 2→0, 3→1, 4→2, 5→3 const round2Order = [2, 3, 4, 5]; const targetIndex = round2Order.indexOf(i);if (targetIndex !== -1) { const container = roundDiv2.find(".match-container").eq(targetIndex); if (container.length) { container.before(matchContainer); } else { roundDiv2.append(matchContainer); } } }else if (i < 8) roundDiv3.append(matchContainer); // Round 3 else roundDiv4.append(matchContainer); // Final });columnsContainer.append(roundDiv1); columnsContainer.append($("
").addClass("connector-column")); columnsContainer.append(roundDiv2); columnsContainer.append($("
").addClass("connector-column")); columnsContainer.append(roundDiv3); columnsContainer.append($("
").addClass("connector-column")); columnsContainer.append(roundDiv4);groupDiv.append(columnsContainer); groupScrollWrapper.append(groupDiv);const groupNumbers = Object.keys(groups); // make sure 'groups' is defined and validconst importantMatchExists = Object.values(groupMatches) .flat() .some(m => m.is_importantlast === "1");setTimeout(() => { if (importantMatchExists) { const currentGroupNumber = group; const currentIndex = groupNumbers.indexOf(currentGroupNumber); const prevGroupNumber = currentIndex > 0 ? groupNumbers[currentIndex - 1] : null; const lastChecked = true;positionMatcheslast(groupMatches, currentGroupNumber, prevGroupNumber, lastChecked); } positionMatches(groupMatches, group); //waitForLayoutAndDraw(serialMap, 20); waitForLayoutAndDrawStable(serialMap, 20);}, 100);continue; }if (isFiveTeam) { allMatches.sort((a, b) => parseInt(a.name) - parseInt(b.name)); const displayOrder = [allMatches[0], allMatches[2], allMatches[1], allMatches[3]]; groupMatches[columns[0]] = [allMatches[0]]; groupMatches[columns[1]] = [allMatches[2], allMatches[1]]; groupMatches[columns[2]] = [allMatches[3]]; let roundDiv1 = $("
").addClass("round").attr("data-column", columns[0]); let roundDiv2 = $("
").addClass("round").attr("data-column", columns[1]); let roundDiv3 = $("
").addClass("round").attr("data-column", columns[2]); displayOrder.forEach((match, i) => { const serial = groupSerialCounter++; const matchId = `match-serial-${group}-${serial}`; let matchDiv = $("
") .addClass("match") .attr("id", matchId) .attr("data-match-index", match.name);let score1 = match.team1_score ?? "-"; let score2 = match.team2_score ?? "-"; //let team1 = match.team_name1 ?? "Team 1"; //let team2 = match.team_name2 ?? "Team 2"; let team1 = match.source_label_team1 && match.source_label_team1.trim() !== "" ? match.source_label_team1 : (match.team_name1 ?? "Team 1"); let team2 = match.source_label_team2 && match.source_label_team2.trim() !== "" ? match.source_label_team2 : (match.team_name2 ?? "Team 2");let startTime = formatStartDateTime(match.start_date, match.start_time); let location = match.location || "";matchDiv.html(`
${match.name}
${startTime}
${location}
${team1} ${score1}
${team2} ${score2}
`); const matchContainer = $("
").addClass("match-container"); matchContainer.append(matchDiv);match.serial = serial; serialMap[`${group}-${serial}`] = { ...match, group, column: match.column_number, serial };if (i === 0) roundDiv1.append(matchContainer); else if (i === 1 || i === 2) roundDiv2.append(matchContainer); else if (i === 3) roundDiv3.append(matchContainer); });columnsContainer.append(roundDiv1); columnsContainer.append($("
").addClass("connector-column")); columnsContainer.append(roundDiv2); columnsContainer.append($("
").addClass("connector-column")); columnsContainer.append(roundDiv3);groupDiv.append(columnsContainer); groupScrollWrapper.append(groupDiv);const groupNumbers = Object.keys(groups); // make sure 'groups' is defined and validconst importantMatchExists = Object.values(groupMatches) .flat() .some(m => m.is_importantlast === "1");setTimeout(() => { if (importantMatchExists) { const currentGroupNumber = group; const currentIndex = groupNumbers.indexOf(currentGroupNumber); const prevGroupNumber = currentIndex > 0 ? groupNumbers[currentIndex - 1] : null; const lastChecked = true;positionMatcheslast(groupMatches, currentGroupNumber, prevGroupNumber, lastChecked); } positionMatches(groupMatches, group); //waitForLayoutAndDraw(serialMap, 20); waitForLayoutAndDrawStable(serialMap, 20);}, 100);continue; }if (isSevenTeam) { allMatches.sort((a, b) => parseInt(a.name) - parseInt(b.name));const displayOrder = [ allMatches[0], // Match 1 allMatches[1], // Match 2 allMatches[2], // Match 3 allMatches[3], // Match 4 allMatches[4], // Match 5 allMatches[5] // Match 6 ];// Use only the first 3 columns for layout let roundDiv1 = $("
").addClass("round").attr("data-column", columns[0]); let roundDiv2 = $("
").addClass("round").attr("data-column", columns[1]); let roundDiv3 = $("
").addClass("round").attr("data-column", columns[2]);displayOrder.forEach((match, i) => { const serial = groupSerialCounter++; const matchId = `match-serial-${group}-${serial}`;let matchDiv = $("
") .addClass("match") .attr("id", matchId) .attr("data-match-index", match.name);let score1 = match.team1_score ?? "-"; let score2 = match.team2_score ?? "-"; //let team1 = match.team_name1 ?? "Team 1"; //let team2 = match.team_name2 ?? "Team 2"; let team1 = match.source_label_team1 && match.source_label_team1.trim() !== "" ? match.source_label_team1 : (match.team_name1 ?? "Team 1"); let team2 = match.source_label_team2 && match.source_label_team2.trim() !== "" ? match.source_label_team2 : (match.team_name2 ?? "Team 2");let startTime = formatStartDateTime(match.start_date, match.start_time); let location = match.location || "";matchDiv.html(`
${match.name}
${startTime}
${location}
${team1} ${score1}
${team2} ${score2}
`);const matchContainer = $("
").addClass("match-container"); matchContainer.append(matchDiv);match.serial = serial; if (!groupMatches["1"]) groupMatches["1"] = []; groupMatches["1"].push(match); serialMap[`${group}-${serial}`] = { ...match, group, column: match.column_number, serial };if (i < 3) { roundDiv1.append(matchContainer); // Matches 0,1,2 } else if (i < 5) { roundDiv2.append(matchContainer); // Matches 3,4 } else { roundDiv3.append(matchContainer); // Match 5 }});columnsContainer.append(roundDiv1); columnsContainer.append($("
").addClass("connector-column")); columnsContainer.append(roundDiv2); columnsContainer.append($("
").addClass("connector-column")); columnsContainer.append(roundDiv3);groupDiv.append(columnsContainer); groupScrollWrapper.append(groupDiv);const groupNumbers = Object.keys(groups); // make sure 'groups' is defined and validconst importantMatchExists = Object.values(groupMatches) .flat() .some(m => m.is_importantlast === "1");setTimeout(() => { if (importantMatchExists) { const currentGroupNumber = group; const currentIndex = groupNumbers.indexOf(currentGroupNumber); const prevGroupNumber = currentIndex > 0 ? groupNumbers[currentIndex - 1] : null; const lastChecked = true;positionMatcheslast(groupMatches, currentGroupNumber, prevGroupNumber, lastChecked); } positionMatches(groupMatches, group); //waitForLayoutAndDraw(serialMap, 20); waitForLayoutAndDrawStable(serialMap, 20);}, 100);continue; } columns.forEach((column, columnIndex) => { groups[group][column].sort((a, b) => parseInt(a.name) - parseInt(b.name)); let roundDiv = $("
").addClass("round").attr("data-column", column); groupMatches[column] = [];groups[group][column].forEach(match => { const serial = groupSerialCounter++; const matchId = `match-serial-${group}-${serial}`;let matchDiv = $("
") .addClass("match") .attr("id", matchId) .attr("data-match-index", match.name);let score1 = match.team1_score ?? "-"; let score2 = match.team2_score ?? "-"; //let team1 = match.team_name1 ?? "Team 1"; //let team2 = match.team_name2 ?? "Team 2"; let team1 = match.source_label_team1 && match.source_label_team1.trim() !== "" ? match.source_label_team1 : (match.team_name1 ?? "Team 1"); let team2 = match.source_label_team2 && match.source_label_team2.trim() !== "" ? match.source_label_team2 : (match.team_name2 ?? "Team 2"); let startTime = formatStartDateTime(match.start_date, match.start_time); let location = match.location || "";matchDiv.html(`
${match.name}
${startTime}
${location}
${team1} ${score1}
${team2} ${score2}
`);const matchContainer = $("
").addClass("match-container"); matchContainer.append(matchDiv); roundDiv.append(matchContainer);match.serial = serial; serialMap[`${group}-${serial}`] = { ...match, group, column, serial };groupMatches[column].push(match); });columnsContainer.append(roundDiv); if (columnIndex < columns.length - 1) { columnsContainer.append($("
").addClass("connector-column")); } });groupDiv.append(columnsContainer); groupScrollWrapper.append(groupDiv);const groupNumbers = Object.keys(groups); // make sure 'groups' is defined and validconst importantMatchExists = Object.values(groupMatches) .flat() .some(m => m.is_importantlast === "1");setTimeout(() => { if (importantMatchExists) { const currentGroupNumber = group; const currentIndex = groupNumbers.indexOf(currentGroupNumber); const prevGroupNumber = currentIndex > 0 ? groupNumbers[currentIndex - 1] : null; const lastChecked = true;positionMatcheslast(groupMatches, currentGroupNumber, prevGroupNumber, lastChecked); }positionMatches(groupMatches, group); //waitForLayoutAndDraw(serialMap, 20); waitForLayoutAndDrawStable(serialMap, 20); }, 100);}bracketDiv.append(groupScrollWrapper);const observer = new MutationObserver(() => { const visible = $(".bracket_wrapper:visible").length > 0; if (visible) { setTimeout(() => { //waitForLayoutAndDraw(window._lastSerialMap || {}, 20); waitForLayoutAndDrawStable(window._lastSerialMap || {}, 20);}, 100); } });observer.observe(document.body, { childList: true, subtree: true }); window.globalSerialMap = serialMap; } function isElementVisible(el) { if (!el) return false; const style = window.getComputedStyle(el); const rect = el.getBoundingClientRect();return ( style.display !== 'none' && style.visibility !== 'hidden' && style.opacity !== '0' && rect.width > 0 && rect.height > 0 && document.body.contains(el) ); }function positionMatcheslast(groupMatches, group, prevGroupNumber, isLastCheckboxChecked = false) { if (!isLastCheckboxChecked) { // If checkbox not checked, hide and clear SVG just in case const existingSvg = document.getElementById('global-connector-svg'); if (existingSvg) { existingSvg.style.display = 'none'; while (existingSvg.firstChild) existingSvg.removeChild(existingSvg.firstChild); console.log("❌ Checkbox not checked — hiding SVG and clearing lines."); } return; }const prevGroup = document.querySelector(`.group[data-group="${prevGroupNumber}"]`); const currGroup = document.querySelector(`.group[data-group="${group}"]`);let svg = document.getElementById('global-connector-svg'); if (!svg) { svg = document.createElementNS("http://www.w3.org/2000/svg", "svg"); svg.id = 'global-connector-svg'; svg.style.position = 'absolute'; svg.style.top = '0'; svg.style.left = '0'; svg.style.zIndex = '9999'; svg.style.pointerEvents = 'none'; document.body.appendChild(svg); console.log("📦 Created global SVG container with id='global-connector-svg'"); }// Always update size svg.style.width = document.documentElement.scrollWidth + 'px'; svg.style.height = document.documentElement.scrollHeight + 'px';if (isElementVisible(prevGroup) && isElementVisible(currGroup)) { const prevRect = prevGroup.getBoundingClientRect(); const currRect = currGroup.getBoundingClientRect();const prevPos = { x: prevRect.left + window.scrollX + prevRect.width, y: prevRect.top + window.scrollY + prevRect.height / 2 };const currPos = { x: currRect.left + window.scrollX, y: currRect.top + window.scrollY + currRect.height / 2 };// Clear old lines while (svg.firstChild) { svg.removeChild(svg.firstChild); }// Draw new line const line = document.createElementNS("http://www.w3.org/2000/svg", "line"); line.setAttribute("x1", prevPos.x); line.setAttribute("y1", prevPos.y); line.setAttribute("x2", currPos.x); line.setAttribute("y2", currPos.y); line.setAttribute("stroke", "#999"); line.setAttribute("stroke-width", "2");svg.appendChild(line);svg.style.display = 'block'; // show SVG console.log("✅ Line appended to global SVG and SVG shown"); } else { // No visible groups → clear and hide SVG while (svg.firstChild) { svg.removeChild(svg.firstChild); } svg.style.display = 'none'; console.warn("⚠️ One or both group elements are hidden or missing — hiding SVG"); } }function formatStartDateTime(start_date, start_time) { // Check for null, undefined, or empty values if (!start_date || !start_time || typeof start_time !== 'string' || !start_time.includes(' ')) { return ""; }const timePart = start_time.split(' ')[1]; if (!timePart) return "";const timeObj = new Date(`1970-01-01T${timePart}`); if (isNaN(timeObj.getTime())) { return ""; }// Convert start_date from "YYYY-MM-DD" to "MM/DD/YYYY" const [year, month, day] = start_date.split('-'); if (!year || !month || !day) return "";const formattedDate = `${month}/${day}/${year}`;const timeFormatted = timeObj.toLocaleTimeString('en-US', { hour: '2-digit', minute: '2-digit', hour12: true, // 24-hour format });return `${formattedDate} ${timeFormatted} EST`; }function positionMatches(groupMatches, group) { const levels = Object.keys(groupMatches).sort((a, b) => +a - +b); const matchCenters = {}; const spacing = 200; let bottomMost = 0; const totalMatches = Object.values(groupMatches).flat().length; const isFiveTeamLayout = totalMatches === 4; const isSixTeamLayout = totalMatches === 5; const isSevenTeamLayout = totalMatches === 6; const isTenTeamLayout = totalMatches === 9; const isNineTeamLayout = totalMatches === 8; const isTwelveTeamLayout = totalMatches === 11;if (isTwelveTeamLayout) { const serialPositions = { 1: 200, // Round 1 2: 400, 3: 600, 4: 800, 5: 100, 6: 300, // Quarterfinals 7: 500, 8: 700, 9: 200, 10: 600, // Semifinal 1 11: 400 // Final };// Position matches Object.keys(serialPositions).forEach((serialStr) => { const serial = parseInt(serialStr); const $match = $(`#match-serial-${group}-${serial}`).closest(".match-container"); if ($match.length) { const y = serialPositions[serial]; $match.css({ position: "absolute", top: `${y}px` }); matchCenters[serial] = y + $match.outerHeight() / 2; bottomMost = Math.max(bottomMost, y + $match.outerHeight()); } });// Draw connector lines (you may need to tweak based on actual match setup) drawConnectorLine(group, 1, 5, 'left', 'bottom'); drawConnectorLine(group, 2, 6, 'left', 'bottom'); drawConnectorLine(group, 3, 7, 'left', 'bottom'); drawConnectorLine(group, 4, 8, 'left', 'bottom'); drawConnectorLine(group, 5, 9, 'right', 'top'); drawConnectorLine(group, 6, 9, 'right', 'bottom'); drawConnectorLine(group, 7, 10, 'right', 'top'); drawConnectorLine(group, 8, 10, 'right', 'bottom'); drawConnectorLine(group, 9, 11, 'right', 'top'); drawConnectorLine(group, 10, 11, 'right', 'bottom'); drawChampionLine(group, 11);$(`.group[data-group="${group}"]`).css("height", `${bottomMost + 250}px`); return; }if (isNineTeamLayout) { const serialPositions = { 1: 200, // Game 1 (Round 1) 2: 100, // Game 2 (Round 2) 3: 300, // Game 3 4: 500, // Game 4 5: 700, // Game 5 6: 200, // Game 6 (Round 3) 7: 600, // Game 7 8: 400 // Game 8 (Final) };[1, 2, 3, 4, 5, 6, 7, 8].forEach((serial) => { const $match = $(`#match-serial-${group}-${serial}`).closest(".match-container"); if ($match.length) { const y = serialPositions[serial]; $match.css({ position: "absolute", top: `${y}px` }); matchCenters[serial] = y + $match.outerHeight() / 2; bottomMost = Math.max(bottomMost, y + $match.outerHeight()); } }); // Draw connector lines based on logical flow drawConnectorLine(group, 1, 2); // Game 1 → Game 2 drawConnectorLine(group, 2, 6); // Game 2 → Game 6 drawConnectorLine(group, 3, 6); // Game 3 → Game 6 drawConnectorLine(group, 4, 7); // Game 4 → Game 7 drawConnectorLine(group, 5, 7); // Game 5 → Game 7 drawConnectorLine(group, 6, 8); // Game 6 → Game 8 drawConnectorLine(group, 7, 8); // Game 7 → Game 8 drawChampionLine(group, 8);bottomMost = 0; [1, 2, 3, 4, 5, 6, 7, 8].forEach((serial) => { const $match = $(`#match-serial-${group}-${serial}`).closest(".match-container"); if ($match.length) { const y = serialPositions[serial]; $match.css({ position: "absolute", top: `${y}px` }); matchCenters[serial] = y + $match.outerHeight() / 2; bottomMost = Math.max(bottomMost, y + $match.outerHeight()); } }); drawChampionLine(group, 8); // Apply accurate height to container $(`.group[data-group="${group}"]`).css("height", `${bottomMost + 250}px`); return; }// Ten Team Layout if (isTenTeamLayout) { const serialPositions = { 1: 200, 2: 600, 3: 100, 4: 300, 5: 500, 6: 700, 7: 200, 8: 600, 9: 400 };// Loop through matches 1 to 9 to set positions [1, 2, 3, 4, 5, 6, 7, 8, 9].forEach((serial) => { const $match = $(`#match-serial-${group}-${serial}`).closest(".match-container"); if ($match.length) { const y = serialPositions[serial]; $match.css({ position: "absolute", top: `${y}px` }); matchCenters[serial] = y + $match.outerHeight() / 2; bottomMost = Math.max(bottomMost, y + $match.outerHeight()); } });// Draw connector lines for Round 1, 2, and 3 drawConnectorLine(group, 1, 3, 'left', 'bottom'); drawConnectorLine(group, 2, 5, 'left', 'bottom'); drawConnectorLine(group, 3, 7, 'right', 'top'); drawConnectorLine(group, 4, 7, 'right', 'bottom'); drawConnectorLine(group, 5, 8, 'right', 'top'); drawConnectorLine(group, 6, 8, 'right', 'bottom'); drawConnectorLine(group, 7, 9, 'right', 'top'); drawConnectorLine(group, 8, 9, 'right', 'bottom'); drawChampionLine(group, 9);bottomMost = 0; [1, 2, 3, 4, 5, 6, 7, 8, 9].forEach((serial) => { const $match = $(`#match-serial-${group}-${serial}`).closest(".match-container"); if ($match.length) { const y = serialPositions[serial]; $match.css({ position: "absolute", top: `${y}px` }); matchCenters[serial] = y + $match.outerHeight() / 2; bottomMost = Math.max(bottomMost, y + $match.outerHeight()); } }); drawChampionLine(group, 9); $(`.group[data-group="${group}"]`).css("height", `${bottomMost + 250}px`); return; } if (isSevenTeamLayout) { const matchCenters = {}; let bottomMost = 0;// More generous vertical spacing between 1 → 2 → 3 (adjusted for more matches) const serialPositions = { 1: 0, // Match 1 at the top 2: 180, // Match 2 below Match 1 3: 400, // Match 3 below Match 2 4: 620, // Match 4 below Match 3 (between 1 & 2) 5: 840, // Match 5 below Match 4 (between 2 & 3) 6: 1060, // Match 6 below Match 5 (between 4 & 5) 7: 1280 // Match 7 at the bottom (below Match 6) };// Position Matches 1–7 (Play-ins) [1, 2, 3, 4, 5, 6, 7].forEach((serial) => { const $match = $(`#match-serial-${group}-${serial}`).closest(".match-container"); if ($match.length) { const y = serialPositions[serial]; $match.css({ position: "absolute", top: `${y}px` }); matchCenters[serial] = y + $match.outerHeight() / 2; bottomMost = Math.max(bottomMost, y + $match.outerHeight()); } }); console.log('Height1'+bottomMost); // Adjust positions for the additional matches if necessary: // Match 4: between 1 & 2 (Positioned earlier in `serialPositions`) const $match4 = $(`#match-serial-${group}-4`).closest(".match-container"); if ($match4.length) { const centerY = (matchCenters[1] + matchCenters[2]) / 2 - $match4.outerHeight() / 2; $match4.css({ position: "absolute", top: `${centerY}px` }); matchCenters[4] = centerY + $match4.outerHeight() / 2; bottomMost = Math.max(bottomMost, centerY + $match4.outerHeight()); }// Match 5: between 2 and 3 — center with slight right offset const $match5 = $(`#match-serial-${group}-5`).closest(".match-container"); if ($match5.length && matchCenters[2] && matchCenters[3]) { const centerY = (matchCenters[2] + matchCenters[3]) / 2 - $match5.outerHeight() / 2; const rightOffset = 40; // slight offset to center horizontally $match5.css({ position: "absolute", top: `${centerY}px` }); matchCenters[5] = centerY + $match5.outerHeight() / 2; bottomMost = Math.max(bottomMost, centerY + $match5.outerHeight()); }// Match 6: between match 4 and 5, centered to the right const $match6 = $(`#match-serial-${group}-6`).closest(".match-container"); if ($match6.length && matchCenters[4] && matchCenters[5]) { const centerY = (matchCenters[4] + matchCenters[5]) / 2 - $match6.outerHeight() / 2; const rightOffset = 60; // adjust as needed for proper placement $match6.css({ position: "absolute", top: `${centerY}px` }); matchCenters[6] = centerY + $match6.outerHeight() / 2; bottomMost = Math.max(bottomMost, centerY + $match6.outerHeight()); }// Match 7: below match 6, at the bottom-most position const $match7 = $(`#match-serial-${group}-7`).closest(".match-container"); if ($match7.length && matchCenters[6]) { const centerY = matchCenters[6] + 180; // 180px down from match 6 $match7.css({ position: "absolute", top: `${centerY}px` }); matchCenters[7] = centerY + $match7.outerHeight() / 2; bottomMost = Math.max(bottomMost, centerY + $match7.outerHeight()); }// Draw connector lines between matches drawConnectorLine(group, 1, 4); drawConnectorLine(group, 2, 5); drawConnectorLine(group, 3, 5); drawConnectorLine(group, 4, 6); drawConnectorLine(group, 5, 6); drawConnectorLine(group, 6, 7); // Adding connector line for Match 7 drawChampionLine(group, 7);// Set container height based on the bottom-most position // Recalculate actual bottom-most point after all matches are positioned bottomMost = 0; [1, 2, 3, 4, 5, 6, 7].forEach((serial) => { const $match = $(`#match-serial-${group}-${serial}`).closest(".match-container"); if ($match.length) { const top = parseFloat($match.css("top")) || 0; const height = $match.outerHeight() || 0; bottomMost = Math.max(bottomMost, top + height); } }); // Apply accurate height to container drawChampionLine(group, 6); $(`.group[data-group="${group}"]`).css("height", `${bottomMost + 250}px`); return; } if (isSixTeamLayout) { const serialPositions = { 1: 225, // Game 1 2: 400, // Game 2 3: 100, // Game 3 (Winner G1 vs Team 5) 4: 525, // Game 4 (Winner G2 vs Team 6) 5: 300 // Game 5 (Final) };[1, 2, 3, 4, 5].forEach((serial) => { const $match = $(`#match-serial-${group}-${serial}`).closest(".match-container"); if ($match.length) { const y = serialPositions[serial]; $match.css({ position: "absolute", top: `${y}px` }); matchCenters[serial] = y + $match.outerHeight() / 2; bottomMost = Math.max(bottomMost, y + $match.outerHeight()); } });// Draw correct connector lines //drawConnectorLine(group, 1, 3, 'right', 'top'); //drawConnectorLine(group, 2, 4, 'right', 'bottom'); //drawConnectorLine(group, 3, 5, 'right', 'top'); //drawConnectorLine(group, 4, 5, 'right', 'bottom');// Adjust container height bottomMost = 0; [1, 2, 3, 4, 5].forEach((serial) => { const $match = $(`#match-serial-${group}-${serial}`).closest(".match-container"); if ($match.length) { const top = parseFloat($match.css("top")) || 0; const height = $match.outerHeight() || 0; bottomMost = Math.max(bottomMost, top + height); } }); drawChampionLine(group, 5); $(`.group[data-group="${group}"]`).css("height", `${bottomMost + 250}px`); return; }// Helper function function drawConnectorLine(group, fromSerial, toSerial) { const fromEl = $(`#match-serial-${group}-${fromSerial}`).closest(".match-container"); const toEl = $(`#match-serial-${group}-${toSerial}`).closest(".match-container");if (!fromEl.length || !toEl.length) { console.warn(`Cannot draw line: from ${fromSerial} or to ${toSerial} not found.`); return; }const $group = $(`.group[data-group="${group}"]`); const $svg = $group.find("svg.connector-layer");if (!$svg.length) { console.warn(`Missing SVG layer in group ${group}`); return; }const fromOffset = fromEl.position(); const toOffset = toEl.position();const fromX = fromEl.position().left + fromEl.outerWidth(); const fromY = fromOffset.top + fromEl.outerHeight() / 2; const toX = toEl.position().left; const toY = toOffset.top + toEl.outerHeight() / 2;const line = document.createElementNS("http://www.w3.org/2000/svg", "line"); line.setAttribute("x1", fromX); line.setAttribute("y1", fromY); line.setAttribute("x2", toX); line.setAttribute("y2", toY); line.setAttribute("stroke", "#333"); line.setAttribute("stroke-width", "2");$svg.append(line); }// Positioning for 5-team layout if (isFiveTeamLayout) { const serialPositions = { 1: 200, // First round (Play-in) 3: 80, // Semifinal 1 (top) 2: 320, // Semifinal 2 (bottom) 4: 200 // Final (centered between semi 1 and 2) };Object.entries(groupMatches).forEach(([level, matches]) => { matches.forEach((match) => { const matchId = `match-serial-${group}-${match.serial}`; const $el = $(`#${matchId}`).closest(".match-container");if (!$el.length) return;const y = serialPositions[match.serial] ?? 0; $el.css({ position: "absolute", top: `${y}px` });matchCenters[match.serial] = y + $el.outerHeight() / 2; bottomMost = Math.max(bottomMost, y + $el.outerHeight()); }); }); drawChampionLine(group, 4); $(`.group[data-group="${group}"]`).css("height", bottomMost + 160); return; }// Default layout for other brackets levels.forEach((level, levelIndex) => { const matches = groupMatches[level];matches.forEach((match, i) => { const matchId = `match-serial-${group}-${match.serial}`; const $el = $(`#${matchId}`).closest(".match-container");if (!$el.length) return;if (levelIndex === 0) { const pairIndex = Math.floor(i / 2); const y = i * spacing + pairIndex * 40; $el.css({ position: "absolute", top: `${y}px` }); matchCenters[match.serial] = y + $el.outerHeight() / 2; bottomMost = Math.max(bottomMost, y + $el.outerHeight()); } else { const prevLevel = levels[levelIndex - 1]; const prevMatches = groupMatches[prevLevel]; const prev1 = prevMatches[i * 2]; const prev2 = prevMatches[i * 2 + 1];if (prev1 && prev2) { const center1 = matchCenters[prev1.serial]; const center2 = matchCenters[prev2.serial]; const centerY = (center1 + center2) / 2; const topOffset = centerY - $el.outerHeight() / 2; $el.css({ position: "absolute", top: `${topOffset}px` }); matchCenters[match.serial] = centerY; bottomMost = Math.max(bottomMost, topOffset + $el.outerHeight()); } } }); });$(`.group[data-group="${group}"]`).css("height", bottomMost + 180); const lastLevel = levels[levels.length - 1]; const lastMatch = groupMatches[lastLevel]?.[0]; if (lastMatch) drawChampionLine(group, lastMatch.serial);} function drawChampionLine(group, finalMatchSerial) { console.log(`drawChampionLine called with group=${group}, finalMatchSerial=${finalMatchSerial}`);const finalMatch = $(`#match-serial-${group}-${finalMatchSerial}`).closest(".match-container"); if (!finalMatch.length) { console.warn("Final match element not found"); return; }const $group = $(`.group[data-group="${group}"]`); let $svg = $group.find("svg.connector-layer");if (!$svg.length) { console.warn(`Missing SVG layer in group ${group}, creating one.`); $svg = $(``); $group.append($svg); }const matchOffset = finalMatch.offset(); const svgOffset = $svg.offset();const matchRightX = matchOffset.left - svgOffset.left + finalMatch.outerWidth(); const matchCenterY = matchOffset.top - svgOffset.top + finalMatch.outerHeight() / 2;const $teams = finalMatch.find(".team-row"); let championName = ""; let highScore = -1;$teams.each(function () { const teamName = $(this).find(".team-name").text().trim(); const score = parseInt($(this).find(".score").text().trim(), 10); if (!isNaN(score) && score > 0 && score > highScore) { highScore = score; championName = teamName; } });if (!championName) { console.warn("Could not determine champion team"); return; }const lowerChampionName = championName.toLowerCase(); const skipKeywords = ["winner", "winner of game"]; const shouldSkip = skipKeywords.some(keyword => lowerChampionName.includes(keyword));if (shouldSkip) { console.log(`Skipping champion line: name "${championName}" includes skip keyword.`); return; }console.log(`Champion team: ${championName} with score ${highScore}`);const svgNS = "http://www.w3.org/2000/svg"; const lineLength = 180; const offsetY = 29; // how much to move everything down from matchCenterYconst lineY = matchCenterY + offsetY;// Draw line const line = document.createElementNS(svgNS, "line"); line.setAttribute("x1", matchRightX); line.setAttribute("y1", lineY); line.setAttribute("x2", matchRightX + lineLength); line.setAttribute("y2", lineY); line.setAttribute("stroke", "#ccc"); line.setAttribute("stroke-width", "2"); $svg.append(line);const centerX = matchRightX + lineLength / 2; // Champion name (above the line) const nameText = document.createElementNS(svgNS, "text"); nameText.setAttribute("x", centerX); nameText.setAttribute("y", lineY - 16); // slightly above the line nameText.setAttribute("text-anchor", "middle"); nameText.setAttribute("font-size", "15px"); nameText.setAttribute("font-weight", "bold"); nameText.setAttribute("fill", "#000"); nameText.setAttribute("style", "text-shadow: 1px 1px 2px #ccc;"); nameText.textContent = `${championName}`; $svg.append(nameText);// "Champion" label (below the line) const championText = document.createElementNS(svgNS, "text"); championText.setAttribute("x", centerX); championText.setAttribute("y", lineY + 26); // slightly below the line championText.setAttribute("text-anchor", "middle"); championText.setAttribute("font-size", "14px"); championText.setAttribute("font-style", "italic"); championText.setAttribute("fill", "#000"); championText.setAttribute("style", "text-shadow: 1px 1px 1px #eee;"); championText.textContent = "Champion"; $svg.append(championText);console.log("Champion line and labels drawn."); }function debounce(func, delay) { let timeout; return function (...args) { clearTimeout(timeout); timeout = setTimeout(() => func.apply(this, args), delay); }; } /* function waitForLayoutAndDraw(serialMap, maxTries = 10) { if (window._isDrawingScheduled) return;window._isDrawingScheduled = true; window._lastSerialMap = serialMap;let tries = 0;function tryDraw() { const wrapper = document.querySelector(".bracket_wrapper");if (!wrapper) { if (tries < maxTries) { tries++; requestAnimationFrame(tryDraw); } else { window._isDrawingScheduled = false; // Reset if failed after all tries } return; }const rect = wrapper.getBoundingClientRect(); if (rect.width < 100 || rect.height < 100) { if (tries < maxTries) { tries++; requestAnimationFrame(tryDraw); } else { window._isDrawingScheduled = false; } return; }// ✅ Only draw once per layout session if (!wrapper.dataset.hasDrawn) { drawBracketConnectors(serialMap, true); wrapper.dataset.hasDrawn = "true"; // 🔽 🔽 Add this block here 🔽 🔽 document.querySelectorAll('.group').forEach(group => { const maxHeight = 900; if (group.offsetHeight > maxHeight && !group.classList.contains('group-scroll')) { group.classList.add('group-scroll'); console.log("✅ group-scroll added to:", group); } }); }// 🟢 Reset the flag after a short time (if needed later) setTimeout(() => { window._isDrawingScheduled = false; wrapper.dataset.hasDrawn = ""; // Allow future redraws if needed }, 1000);const scrollTarget = document.querySelector(".group-scroll-wrapper");if (!scrollTarget.dataset.scrollListenerAdded && window.innerWidth <= 768) { console.log("🟢 Mobile scroll listener added");scrollTarget.addEventListener( "scroll", debounce(() => { console.log("🔁 Scrolling (mobile)"); drawBracketConnectors(window._lastSerialMap, true); }, 2) );scrollTarget.dataset.scrollListenerAdded = "true"; }requestAnimationFrame(tryDraw); }*/ function waitForLayoutAndDraw(serialMap, maxTries = 10) { if (window._isDrawingScheduled) return;window._isDrawingScheduled = true; window._lastSerialMap = serialMap;let tries = 0;function tryDraw() { const wrapper = document.querySelector(".bracket_wrapper");if (!wrapper) { if (tries < maxTries) { tries++; requestAnimationFrame(tryDraw); } else { window._isDrawingScheduled = false; } return; }const rect = wrapper.getBoundingClientRect(); if (rect.width < 100 || rect.height < 100) { if (tries < maxTries) { tries++; requestAnimationFrame(tryDraw); } else { window._isDrawingScheduled = false; } return; }// ✅ Draw once per layout if (!wrapper.dataset.hasDrawn) { drawBracketConnectors(serialMap, true); wrapper.dataset.hasDrawn = "true";document.querySelectorAll(".group").forEach(group => { const maxHeight = 900; if (group.offsetHeight > maxHeight && !group.classList.contains("group-scroll")) { group.classList.add("group-scroll"); console.log("✅ group-scroll added to:", group); } }); }// 🟢 Reset draw flag after timeout setTimeout(() => { window._isDrawingScheduled = false; wrapper.dataset.hasDrawn = ""; }, 1000);// ✅ ADD SCROLL LISTENER FOR MOBILE ONLY console.log("Window width:", window.innerWidth); // Inside tryDraw() const scrollTarget = document.querySelector(".group-scroll-wrapper");if (!scrollTarget.dataset.scrollListenerAdded && window.innerWidth <= 768) { console.log("🟢 Mobile scroll listener added");scrollTarget.addEventListener( "scroll", debounce(() => { console.log("🔁 Scrolling (mobile)"); drawBracketConnectors(window._lastSerialMap, true); }, 2) );scrollTarget.dataset.scrollListenerAdded = "true"; }}requestAnimationFrame(tryDraw); }function waitForLayoutAndDrawStable(serialMap, maxTries = 10) { let tries = 0;function attempt() { const wrapper = document.querySelector(".bracket_wrapper"); const groupReady = Array.from(document.querySelectorAll(".group")).every(el => el.offsetHeight > 200);if (!groupReady && tries < maxTries) { tries++; return setTimeout(attempt, 100); // Wait for layout }waitForLayoutAndDraw(serialMap); // ⬅️ Only call once layout is stable }attempt(); } function drawBracketConnectors(serialMap, forceRedraw = false) { console.log("Ketan test"); const svgNS = "http://www.w3.org/2000/svg"; let svg = document.getElementById("bracket-connector-svg"); const wrapper = document.querySelector(".bracket_wrapper");const wrapperRect = wrapper.getBoundingClientRect(); const scrollLeft = wrapper.scrollLeft; const scrollTop = wrapper.scrollTop;if (!svg) { svg = document.createElementNS(svgNS, "svg"); svg.setAttribute("id", "bracket-connector-svg"); svg.style.position = "absolute"; svg.style.top = "0"; svg.style.left = "0"; svg.style.pointerEvents = "none"; wrapper.appendChild(svg); }svg.style.width = wrapper.scrollWidth + "px"; svg.style.height = wrapper.scrollHeight + "px";const layoutHash = JSON.stringify( Object.values(serialMap).map(m => { const el = document.getElementById(`match-serial-${m.group}-${m.serial}`); const rect = el?.getBoundingClientRect(); return { serial: m.serial, group: m.group, column: m.column, rect: rect ? { top: rect.top, left: rect.left, width: rect.width, height: rect.height } : null }; }) );if (!forceRedraw && window._lastLayoutHash === layoutHash) return; window._lastLayoutHash = layoutHash;while (svg.firstChild) svg.removeChild(svg.firstChild);const groupMap = {}; for (const serial in serialMap) { const match = serialMap[serial]; if (!groupMap[match.group]) groupMap[match.group] = []; groupMap[match.group].push(match); }for (const group in groupMap) { const matches = groupMap[group].sort((a, b) => +a.serial - +b.serial); const matchMap = {};matches.forEach(match => { matchMap[match.serial] = match; match.el = document.getElementById(`match-serial-${group}-${match.serial}`); match.rect = match.el?.getBoundingClientRect(); });const isFiveMatch = matches.length === 4; const isThreeTeam = matches.length === 2 && matchMap["1"] && matchMap["2"]; if ( matches.length === 11 && matchMap["1"] && matchMap["2"] && matchMap["3"] && matchMap["4"] && matchMap["5"] && matchMap["6"] && matchMap["7"] && matchMap["8"] && matchMap["9"] && matchMap["10"] && matchMap["11"] ) { const m = matchMap;// Round 1 → Round 2 drawLConnectorCustom(m[1].rect, m[5].rect, "bottom", 40); drawLConnectorCustom(m[2].rect, m[6].rect, "bottom", 40);drawLConnectorCustom(m[3].rect, m[7].rect, "bottom", 40); drawLConnectorCustom(m[4].rect, m[8].rect, "bottom", 40);// Seeds 1-4 with byes go directly to M7–M10 // Assume M5 feeds M7, M6 feeds M8, and so ondrawLConnectorCustom(m[5].rect, m[9].rect, "top", 40); drawLConnectorCustom(m[6].rect, m[9].rect, "bottom", 40);drawLConnectorCustom(m[7].rect, m[10].rect, "top", 40); // adjust if seed logic differs drawLConnectorCustom(m[8].rect, m[10].rect, "bottom", 40);// Round 2 → Semifinal drawLConnectorCustom(m[9].rect, m[11].rect, "top", 40); drawLConnectorCustom(m[10].rect, m[11].rect, "bottom", 40);continue; }if ( matches.length === 9 && matchMap["1"] && matchMap["2"] && matchMap["3"] && matchMap["4"] && matchMap["5"] && matchMap["6"] && matchMap["7"] && matchMap["8"] && matchMap["9"] ) { const m1 = matchMap[1]; const m2 = matchMap[2]; const m3 = matchMap[3]; const m4 = matchMap[4]; const m5 = matchMap[5]; const m6 = matchMap[6]; const m7 = matchMap[7]; const m8 = matchMap[8]; const m9 = matchMap[9];// Round 1 if (m1?.rect && m5?.rect) drawLConnectorCustom(m1.rect, m3.rect, "bottom", 40); if (m2?.rect && m6?.rect) drawLConnectorCustom(m2.rect, m5.rect, "bottom", 40);// Round 2 if (m3?.rect && m7?.rect) drawLConnectorCustom(m3.rect, m7.rect, "top", 40); if (m4?.rect && m7?.rect) drawLConnectorCustom(m4.rect, m7.rect, "bottom", 40); if (m5?.rect && m8?.rect) drawLConnectorCustom(m5.rect, m8.rect, "top", 40); if (m6?.rect && m8?.rect) drawLConnectorCustom(m6.rect, m8.rect, "bottom", 40);// Round 3 (Final) if (m7?.rect && m9?.rect) drawLConnectorCustom(m7.rect, m9.rect, "top", 40); if (m8?.rect && m9?.rect) drawLConnectorCustom(m8.rect, m9.rect, "bottom", 40);continue; } if (matches.length === 5) { // Adjusted for 5 matches console.log("matches.length === 5", matches); // log matches array console.log("matchMap:", matchMap); // log matchMap objectconst m1 = matchMap[1]; const m2 = matchMap[2]; const m3 = matchMap[3]; const m4 = matchMap[4]; const m5 = matchMap[5]; // Remove m6 because it's not available// Round 1 → Round 2 // M1 → M4 (top) if (m1?.rect && m3?.rect) { console.log("Drawing connector for M1 to M3"); drawLConnectorCustom(m1.rect, m3.rect, "top", 40); }// M2 → M5 (top) if (m2?.rect && m4?.rect) { console.log("Drawing connector for M2 to M4"); drawLConnectorCustom(m2.rect, m4.rect, "top", 40); }// M3 → M5 (bottom) if (m3?.rect && m5?.rect) { console.log("Drawing connector for M3 to M5"); drawLConnectorCustom(m3.rect, m5.rect, "bottom", 40); }// Round 2 → Final // M4 → (no M6, adjust logic based on match availability) if (m4?.rect && m5?.rect) { console.log("Drawing connector for M4 to the final match"); // Draw a connector to the final match (if you have a final setup) // You might have a fallback if there's no M6 drawLConnectorCustom(m4.rect,m5.rect, "top", 40); }continue; // use continue, not return — don't break whole function }if (matches.length === 6 && matchMap["1"] && matchMap["2"] && matchMap["3"] && matchMap["4"] && matchMap["5"] && matchMap["6"]) {const m1 = matchMap[1]; const m2 = matchMap[2]; const m3 = matchMap[3]; const m4 = matchMap[4]; const m5 = matchMap[5]; const m6 = matchMap[6];// Round 1 → Round 2 // M1 → M4 (top) if (m1?.rect && m4?.rect) drawLConnectorCustom(m1.rect, m4.rect, "top", 40);// M2 → M5 (top) if (m2?.rect && m5?.rect) drawLConnectorCustom(m2.rect, m5.rect, "top", 40);// M3 → M5 (bottom) if (m3?.rect && m5?.rect) drawLConnectorCustom(m3.rect, m5.rect, "bottom", 40);// Round 2 → Final // M4 → M6 (top) if (m4?.rect && m6?.rect) drawLConnectorCustom(m4.rect, m6.rect, "top", 40);// M5 → M6 (bottom) if (m5?.rect && m6?.rect) drawLConnectorCustom(m5.rect, m6.rect, "bottom", 40);continue; }if (isThreeTeam) { console.log("This is a testing"); const fromMatch = matchMap[1]; const toMatch = matchMap[2];if (fromMatch?.rect && toMatch?.rect) { drawLConnectorCustom(fromMatch.rect, toMatch.rect, "right", 40); }continue; // only skip current group } /*if (matches.length === 5) { const m1 = matchMap[1], m2 = matchMap[2]; const m3 = matchMap[3], m4 = matchMap[4], m5 = matchMap[5];if (m1?.rect && m4?.rect) drawLConnectorCustom(m1.rect, m4.rect, "top", 40); if (m2?.rect && m4?.rect) drawLConnectorCustom(m2.rect, m4.rect, "bottom", 40); if (m3?.rect && m5?.rect) drawLConnectorCustom(m3.rect, m5.rect, "top", 40); if (m4?.rect && m5?.rect) drawLConnectorCustom(m4.rect, m5.rect, "bottom", 40); }*/if (isFiveMatch) { const s1 = matchMap[1], s2 = matchMap[2], s3 = matchMap[3], s4 = matchMap[4];if (s1?.rect && s3?.rect) drawLConnectorCustom(s1.rect, s2.rect, "top"); if (s2?.rect && s4?.rect) drawLConnectorCustom(s2.rect, s4.rect, "top", 40); if (s3?.rect && s4?.rect) drawLConnectorCustom(s3.rect, s4.rect, "bottom", 80);continue; // use continue, not return — don't break whole function }const columns = [...new Set(matches.map(m => +m.column))].sort((a, b) => a - b);for (let colIndex = 1; colIndex < columns.length; colIndex++) { const currentCol = columns[colIndex]; const prevCol = columns[colIndex - 1];const currentMatches = matches.filter(m => +m.column === currentCol); const prevMatches = matches.filter(m => +m.column === prevCol);for (let i = 0; i < currentMatches.length; i++) { const targetMatch = currentMatches[i]; const input1 = prevMatches[i * 2]; const input2 = prevMatches[i * 2 + 1];if (input1?.rect && input2?.rect && targetMatch?.rect) { drawLConnectorCustom(input1.rect, targetMatch.rect, "top", 40); drawLConnectorCustom(input2.rect, targetMatch.rect, "bottom", 40); } else if ((input1?.rect || input2?.rect) && targetMatch?.rect) { const fromRect = input1?.rect || input2?.rect; const direction = input1?.rect ? "top" : "bottom"; drawLConnectorCustom(fromRect, targetMatch.rect, direction, 40); } } }function drawLConnectorCustom(fromRect, toRect, toPoint = "center", elbowOffset = 40) { const startX = fromRect.right - wrapperRect.left + scrollLeft; const startY = fromRect.top + fromRect.height / 2 - wrapperRect.top + scrollTop;let toY; const headerOffset = 48;if (toPoint === "top") { toY = toRect.top + headerOffset + 10 - wrapperRect.top + scrollTop; } else if (toPoint === "bottom") { toY = toRect.bottom - 10 - wrapperRect.top + scrollTop; } else { toY = toRect.top + toRect.height / 2 - wrapperRect.top + scrollTop; }const endX = toRect.left - wrapperRect.left + scrollLeft + 5;const path = document.createElementNS(svgNS, "path"); path.setAttribute("stroke", "#999"); path.setAttribute("stroke-width", "1.5"); path.setAttribute("fill", "none"); path.setAttribute("stroke-linecap", "round");const d = ` M ${startX},${startY} H ${endX} V ${toY} `;path.setAttribute("d", d.trim().replace(/\s+/g, " ")); svg.appendChild(path); }function drawTConnector(fromRect, toRect) { const startX = fromRect.right - wrapperRect.left + scrollLeft; const startY = fromRect.top + fromRect.height / 2 - wrapperRect.top + scrollTop;const endX = toRect.left - wrapperRect.left + scrollLeft; const endY = toRect.top + toRect.height / 2 - wrapperRect.top + scrollTop; const midX = (startX + endX) / 2;const path1 = document.createElementNS(svgNS, "path"); path1.setAttribute("stroke", "#999"); path1.setAttribute("stroke-width", "1.5"); path1.setAttribute("fill", "none"); path1.setAttribute("stroke-linecap", "round"); path1.setAttribute("d", `M ${startX},${startY} H ${midX}`); svg.appendChild(path1);const path2 = document.createElementNS(svgNS, "path"); path2.setAttribute("stroke", "#999"); path2.setAttribute("stroke-width", "1.5"); path2.setAttribute("fill", "none"); path2.setAttribute("stroke-linecap", "round"); path2.setAttribute("d", `M ${endX},${endY} H ${midX}`); svg.appendChild(path2);const verticalLine = document.createElementNS(svgNS, "path"); verticalLine.setAttribute("stroke", "#999"); verticalLine.setAttribute("stroke-width", "1.5"); verticalLine.setAttribute("fill", "none"); verticalLine.setAttribute("stroke-linecap", "round"); verticalLine.setAttribute("d", `M ${midX},${startY} V ${endY}`); svg.appendChild(verticalLine); }function drawHorizontalConnector(fromRect, toRect) { const startX = fromRect.right - wrapperRect.left + scrollLeft; const startY = fromRect.top + fromRect.height / 2 - wrapperRect.top + scrollTop;const endX = toRect.left - wrapperRect.left + scrollLeft;const path = document.createElementNS(svgNS, "path"); path.setAttribute("stroke", "#999"); path.setAttribute("stroke-width", "1.5"); path.setAttribute("fill", "none"); path.setAttribute("stroke-linecap", "round");const d = `M ${startX},${startY} H ${endX}`; path.setAttribute("d", d.trim().replace(/\s+/g, " ")); svg.appendChild(path); }function drawRightThenVertical(fromRect, toRect, align = "top") { const startX = fromRect.right - wrapperRect.left + scrollLeft; const startY = fromRect.top + fromRect.height / 2 - wrapperRect.top + scrollTop; const elbowX = startX + 40;const toY = align === "top" ? toRect.top - wrapperRect.top + scrollTop : toRect.bottom - wrapperRect.top + scrollTop;const toX = toRect.left - wrapperRect.left + scrollLeft;const path = document.createElementNS(svgNS, "path"); path.setAttribute("stroke", "#888"); path.setAttribute("stroke-width", "4"); path.setAttribute("fill", "none"); path.setAttribute("stroke-linejoin", "round"); path.setAttribute("stroke-linecap", "round");const d = ` M ${startX},${startY} H ${elbowX} V ${toY} H ${toX} `; path.setAttribute("d", d.trim().replace(/\s+/g, " ")); svg.appendChild(path); }function drawLine(from, to) { if (!from?.rect || !to?.rect) return;const x1 = from.rect.right + scrollLeft - wrapperRect.left; const y1 = from.rect.top + from.rect.height / 2 + scrollTop - wrapperRect.top;const x2 = to.rect.left + scrollLeft - wrapperRect.left; const y2 = to.rect.top + to.rect.height / 2 + scrollTop - wrapperRect.top;const midX = (x1 + x2) / 2;const path = document.createElementNS(svgNS, "path"); path.setAttribute("stroke", "#999"); path.setAttribute("stroke-width", "2"); path.setAttribute("fill", "none"); path.setAttribute("d", `M ${x1},${y1} H ${midX} V ${y2} H ${x2}`); svg.appendChild(path); }function drawDefaultConnect(input1, input2, targetMatch) { if (!input1?.rect || !input2?.rect || !targetMatch?.rect) return;const x1 = input1.rect.right + scrollLeft - wrapperRect.left; const y1 = input1.rect.top + input1.rect.height / 2 + scrollTop - wrapperRect.top;const x2 = input2.rect.right + scrollLeft - wrapperRect.left; const y2 = input2.rect.top + input2.rect.height / 2 + scrollTop - wrapperRect.top;const toX = targetMatch.rect.left + scrollLeft - wrapperRect.left; const toY = targetMatch.rect.top + targetMatch.rect.height / 2 + scrollTop - wrapperRect.top;const midX = (x1 + toX) / 2; const midY = (y1 + y2) / 2;const path = document.createElementNS(svgNS, "path"); path.setAttribute("stroke", "#999"); path.setAttribute("stroke-width", "2"); path.setAttribute("fill", "none");const d = ` M ${x1},${y1} H ${midX} M ${x2},${y2} H ${midX} M ${midX},${y1} V ${y2} M ${midX},${midY} H ${toX} `; path.setAttribute("d", d.trim().replace(/\s+/g, ' ')); svg.appendChild(path); } } }
×

Request for More Info