about summary refs log tree commit diff
path: root/crates/ra_syntax/tests/data/parser/ok
diff options
context:
space:
mode:
authorDJMcNab <36049421+DJMcNab@users.noreply.github.com>2018-12-21 10:03:02 +0000
committerDJMcNab <36049421+DJMcNab@users.noreply.github.com>2018-12-21 10:03:02 +0000
commit9beee92500bfb5953717a67c18217722ea82be49 (patch)
treed231ac1746f7df690cf2a94bb30f8cc488a827ed /crates/ra_syntax/tests/data/parser/ok
parentda6be9fdda23213813883cec6493b93f22b8c6ea (diff)
downloadrust-9beee92500bfb5953717a67c18217722ea82be49.tar.gz
rust-9beee92500bfb5953717a67c18217722ea82be49.zip
Add comment about the source of the weird_exprs test
Diffstat (limited to 'crates/ra_syntax/tests/data/parser/ok')
-rw-r--r--crates/ra_syntax/tests/data/parser/ok/0035_weird_exprs.rs5
-rw-r--r--crates/ra_syntax/tests/data/parser/ok/0035_weird_exprs.txt4478
2 files changed, 2248 insertions, 2235 deletions
diff --git a/crates/ra_syntax/tests/data/parser/ok/0035_weird_exprs.rs b/crates/ra_syntax/tests/data/parser/ok/0035_weird_exprs.rs
index 74edc635474..8c13231631c 100644
--- a/crates/ra_syntax/tests/data/parser/ok/0035_weird_exprs.rs
+++ b/crates/ra_syntax/tests/data/parser/ok/0035_weird_exprs.rs
@@ -1,3 +1,8 @@
+//! Adapted from a `rustc` test, which can be found at 
+//! https://github.com/rust-lang/rust/blob/6d34ec18c7d7e574553f6347ecf08e1e1c45c13d/src/test/run-pass/weird-exprs.rs.
+//! 
+//! Reported to rust-analyzer in https://github.com/rust-analyzer/rust-analyzer/issues/290
+
 #![allow(non_camel_case_types)]
 #![allow(dead_code)]
 #![allow(unreachable_code)]
diff --git a/crates/ra_syntax/tests/data/parser/ok/0035_weird_exprs.txt b/crates/ra_syntax/tests/data/parser/ok/0035_weird_exprs.txt
index e4507c553ac..20932a8378a 100644
--- a/crates/ra_syntax/tests/data/parser/ok/0035_weird_exprs.txt
+++ b/crates/ra_syntax/tests/data/parser/ok/0035_weird_exprs.txt
@@ -1,2236 +1,2244 @@
-SOURCE_FILE@[0; 3542)
-  ATTR@[0; 31)
-    POUND@[0; 1)
-    EXCL@[1; 2)
-    TOKEN_TREE@[2; 31)
-      L_BRACK@[2; 3)
-      IDENT@[3; 8) "allow"
-      TOKEN_TREE@[8; 30)
-        L_PAREN@[8; 9)
-        IDENT@[9; 29) "non_camel_case_types"
-        R_PAREN@[29; 30)
-      R_BRACK@[30; 31)
-  WHITESPACE@[31; 32)
-  ATTR@[32; 52)
-    POUND@[32; 33)
-    EXCL@[33; 34)
-    TOKEN_TREE@[34; 52)
-      L_BRACK@[34; 35)
-      IDENT@[35; 40) "allow"
-      TOKEN_TREE@[40; 51)
-        L_PAREN@[40; 41)
-        IDENT@[41; 50) "dead_code"
-        R_PAREN@[50; 51)
-      R_BRACK@[51; 52)
-  WHITESPACE@[52; 53)
-  ATTR@[53; 80)
-    POUND@[53; 54)
-    EXCL@[54; 55)
-    TOKEN_TREE@[55; 80)
-      L_BRACK@[55; 56)
-      IDENT@[56; 61) "allow"
-      TOKEN_TREE@[61; 79)
-        L_PAREN@[61; 62)
-        IDENT@[62; 78) "unreachable_code"
-        R_PAREN@[78; 79)
-      R_BRACK@[79; 80)
-  WHITESPACE@[80; 81)
-  ATTR@[81; 105)
-    POUND@[81; 82)
-    EXCL@[82; 83)
-    TOKEN_TREE@[83; 105)
-      L_BRACK@[83; 84)
-      IDENT@[84; 89) "allow"
-      TOKEN_TREE@[89; 104)
-        L_PAREN@[89; 90)
-        IDENT@[90; 103) "unused_parens"
-        R_PAREN@[103; 104)
-      R_BRACK@[104; 105)
-  WHITESPACE@[105; 107)
-  ATTR@[107; 134)
-    POUND@[107; 108)
-    EXCL@[108; 109)
-    TOKEN_TREE@[109; 134)
-      L_BRACK@[109; 110)
-      IDENT@[110; 125) "recursion_limit"
-      WHITESPACE@[125; 126)
-      EQ@[126; 127)
-      WHITESPACE@[127; 128)
-      STRING@[128; 133)
-      R_BRACK@[133; 134)
-  WHITESPACE@[134; 136)
-  USE_ITEM@[136; 156)
-    USE_KW@[136; 139)
-    WHITESPACE@[139; 140)
-    USE_TREE@[140; 155)
-      PATH@[140; 155)
-        PATH@[140; 149)
-          PATH@[140; 143)
-            PATH_SEGMENT@[140; 143)
-              NAME_REF@[140; 143)
-                IDENT@[140; 143) "std"
-          COLONCOLON@[143; 145)
-          PATH_SEGMENT@[145; 149)
-            NAME_REF@[145; 149)
-              IDENT@[145; 149) "cell"
-        COLONCOLON@[149; 151)
-        PATH_SEGMENT@[151; 155)
-          NAME_REF@[151; 155)
-            IDENT@[151; 155) "Cell"
-    SEMI@[155; 156)
-  WHITESPACE@[156; 157)
-  USE_ITEM@[157; 176)
-    USE_KW@[157; 160)
-    WHITESPACE@[160; 161)
-    USE_TREE@[161; 175)
-      PATH@[161; 175)
-        PATH@[161; 169)
-          PATH@[161; 164)
-            PATH_SEGMENT@[161; 164)
-              NAME_REF@[161; 164)
-                IDENT@[161; 164) "std"
-          COLONCOLON@[164; 166)
-          PATH_SEGMENT@[166; 169)
-            NAME_REF@[166; 169)
-              IDENT@[166; 169) "mem"
-        COLONCOLON@[169; 171)
-        PATH_SEGMENT@[171; 175)
-          NAME_REF@[171; 175)
-            IDENT@[171; 175) "swap"
-    SEMI@[175; 176)
-  WHITESPACE@[176; 178)
-  COMMENT@[178; 247)
-  WHITESPACE@[247; 249)
-  FN_DEF@[249; 301)
-    FN_KW@[249; 251)
-    WHITESPACE@[251; 252)
-    NAME@[252; 259)
-      IDENT@[252; 259) "strange"
-    PARAM_LIST@[259; 261)
-      L_PAREN@[259; 260)
-      R_PAREN@[260; 261)
-    WHITESPACE@[261; 262)
-    RET_TYPE@[262; 269)
-      THIN_ARROW@[262; 264)
-      WHITESPACE@[264; 265)
-      PATH_TYPE@[265; 269)
-        PATH@[265; 269)
-          PATH_SEGMENT@[265; 269)
-            NAME_REF@[265; 269)
-              IDENT@[265; 269) "bool"
-    WHITESPACE@[269; 270)
-    BLOCK@[270; 301)
-      L_CURLY@[270; 271)
-      WHITESPACE@[271; 272)
-      LET_STMT@[272; 299)
-        LET_KW@[272; 275)
-        WHITESPACE@[275; 276)
-        BIND_PAT@[276; 278)
-          NAME@[276; 278)
-            IDENT@[276; 278) "_x"
-        COLON@[278; 279)
-        WHITESPACE@[279; 280)
-        PATH_TYPE@[280; 284)
-          PATH@[280; 284)
-            PATH_SEGMENT@[280; 284)
-              NAME_REF@[280; 284)
-                IDENT@[280; 284) "bool"
-        WHITESPACE@[284; 285)
-        EQ@[285; 286)
-        WHITESPACE@[286; 287)
-        RETURN_EXPR@[287; 298)
-          RETURN_KW@[287; 293)
-          WHITESPACE@[293; 294)
-          LITERAL@[294; 298)
-            TRUE_KW@[294; 298)
-        SEMI@[298; 299)
-      WHITESPACE@[299; 300)
-      R_CURLY@[300; 301)
-  WHITESPACE@[301; 303)
-  FN_DEF@[303; 353)
-    FN_KW@[303; 305)
-    WHITESPACE@[305; 306)
-    NAME@[306; 311)
-      IDENT@[306; 311) "funny"
-    PARAM_LIST@[311; 313)
-      L_PAREN@[311; 312)
-      R_PAREN@[312; 313)
-    WHITESPACE@[313; 314)
-    BLOCK@[314; 353)
-      L_CURLY@[314; 315)
-      WHITESPACE@[315; 320)
-      FN_DEF@[320; 336)
-        FN_KW@[320; 322)
-        WHITESPACE@[322; 323)
-        NAME@[323; 324)
-          IDENT@[323; 324) "f"
-        PARAM_LIST@[324; 332)
-          L_PAREN@[324; 325)
-          PARAM@[325; 331)
-            BIND_PAT@[325; 327)
-              NAME@[325; 327)
-                IDENT@[325; 327) "_x"
-            COLON@[327; 328)
-            WHITESPACE@[328; 329)
-            TUPLE_TYPE@[329; 331)
-              L_PAREN@[329; 330)
-              R_PAREN@[330; 331)
-          R_PAREN@[331; 332)
-        WHITESPACE@[332; 333)
-        BLOCK@[333; 336)
-          L_CURLY@[333; 334)
-          WHITESPACE@[334; 335)
-          R_CURLY@[335; 336)
-      WHITESPACE@[336; 341)
-      EXPR_STMT@[341; 351)
-        CALL_EXPR@[341; 350)
-          PATH_EXPR@[341; 342)
-            PATH@[341; 342)
-              PATH_SEGMENT@[341; 342)
-                NAME_REF@[341; 342)
-                  IDENT@[341; 342) "f"
-          ARG_LIST@[342; 350)
-            L_PAREN@[342; 343)
-            RETURN_EXPR@[343; 349)
-              RETURN_KW@[343; 349)
-            R_PAREN@[349; 350)
-        SEMI@[350; 351)
-      WHITESPACE@[351; 352)
-      R_CURLY@[352; 353)
-  WHITESPACE@[353; 355)
-  FN_DEF@[355; 545)
-    FN_KW@[355; 357)
-    WHITESPACE@[357; 358)
-    NAME@[358; 362)
-      IDENT@[358; 362) "what"
-    PARAM_LIST@[362; 364)
-      L_PAREN@[362; 363)
-      R_PAREN@[363; 364)
-    WHITESPACE@[364; 365)
-    BLOCK@[365; 545)
-      L_CURLY@[365; 366)
-      WHITESPACE@[366; 371)
-      FN_DEF@[371; 449)
-        FN_KW@[371; 373)
-        WHITESPACE@[373; 374)
-        NAME@[374; 377)
-          IDENT@[374; 377) "the"
-        PARAM_LIST@[377; 393)
-          L_PAREN@[377; 378)
-          PARAM@[378; 392)
-            BIND_PAT@[378; 379)
-              NAME@[378; 379)
-                IDENT@[378; 379) "x"
-            COLON@[379; 380)
-            WHITESPACE@[380; 381)
-            REFERENCE_TYPE@[381; 392)
-              AMP@[381; 382)
-              PATH_TYPE@[382; 392)
-                PATH@[382; 392)
-                  PATH_SEGMENT@[382; 392)
-                    NAME_REF@[382; 386)
-                      IDENT@[382; 386) "Cell"
-                    TYPE_ARG_LIST@[386; 392)
-                      L_ANGLE@[386; 387)
-                      TYPE_ARG@[387; 391)
-                        PATH_TYPE@[387; 391)
-                          PATH@[387; 391)
-                            PATH_SEGMENT@[387; 391)
-                              NAME_REF@[387; 391)
-                                IDENT@[387; 391) "bool"
-                      R_ANGLE@[391; 392)
-          R_PAREN@[392; 393)
-        WHITESPACE@[393; 394)
-        BLOCK@[394; 449)
-          L_CURLY@[394; 395)
-          WHITESPACE@[395; 404)
-          EXPR_STMT@[404; 443)
-            RETURN_EXPR@[404; 442)
-              RETURN_KW@[404; 410)
-              WHITESPACE@[410; 411)
-              WHILE_EXPR@[411; 442)
-                WHILE_KW@[411; 416)
-                WHITESPACE@[416; 417)
-                CONDITION@[417; 425)
-                  PREFIX_EXPR@[417; 425)
-                    EXCL@[417; 418)
-                    METHOD_CALL_EXPR@[418; 425)
-                      PATH_EXPR@[418; 419)
-                        PATH@[418; 419)
-                          PATH_SEGMENT@[418; 419)
-                            NAME_REF@[418; 419)
-                              IDENT@[418; 419) "x"
-                      DOT@[419; 420)
-                      NAME_REF@[420; 423)
-                        IDENT@[420; 423) "get"
-                      ARG_LIST@[423; 425)
-                        L_PAREN@[423; 424)
-                        R_PAREN@[424; 425)
-                WHITESPACE@[425; 426)
-                BLOCK@[426; 442)
-                  L_CURLY@[426; 427)
-                  WHITESPACE@[427; 428)
-                  EXPR_STMT@[428; 440)
-                    METHOD_CALL_EXPR@[428; 439)
-                      PATH_EXPR@[428; 429)
-                        PATH@[428; 429)
-                          PATH_SEGMENT@[428; 429)
-                            NAME_REF@[428; 429)
-                              IDENT@[428; 429) "x"
-                      DOT@[429; 430)
-                      NAME_REF@[430; 433)
-                        IDENT@[430; 433) "set"
-                      ARG_LIST@[433; 439)
-                        L_PAREN@[433; 434)
-                        LITERAL@[434; 438)
-                          TRUE_KW@[434; 438)
-                        R_PAREN@[438; 439)
-                    SEMI@[439; 440)
-                  WHITESPACE@[440; 441)
-                  R_CURLY@[441; 442)
-            SEMI@[442; 443)
-          WHITESPACE@[443; 448)
-          R_CURLY@[448; 449)
-      WHITESPACE@[449; 454)
-      LET_STMT@[454; 480)
-        LET_KW@[454; 457)
-        WHITESPACE@[457; 458)
-        BIND_PAT@[458; 459)
-          NAME@[458; 459)
-            IDENT@[458; 459) "i"
-        WHITESPACE@[459; 460)
-        EQ@[460; 461)
-        WHITESPACE@[461; 462)
-        REF_EXPR@[462; 479)
-          AMP@[462; 463)
-          CALL_EXPR@[463; 479)
-            PATH_EXPR@[463; 472)
-              PATH@[463; 472)
-                PATH@[463; 467)
-                  PATH_SEGMENT@[463; 467)
-                    NAME_REF@[463; 467)
-                      IDENT@[463; 467) "Cell"
-                COLONCOLON@[467; 469)
-                PATH_SEGMENT@[469; 472)
-                  NAME_REF@[469; 472)
-                    IDENT@[469; 472) "new"
-            ARG_LIST@[472; 479)
-              L_PAREN@[472; 473)
-              LITERAL@[473; 478)
-                FALSE_KW@[473; 478)
-              R_PAREN@[478; 479)
-        SEMI@[479; 480)
-      WHITESPACE@[480; 485)
-      LET_STMT@[485; 507)
-        LET_KW@[485; 488)
-        WHITESPACE@[488; 489)
-        BIND_PAT@[489; 493)
-          NAME@[489; 493)
-            IDENT@[489; 493) "dont"
-        WHITESPACE@[493; 494)
-        EQ@[494; 495)
-        WHITESPACE@[495; 496)
-        BLOCK_EXPR@[496; 506)
-          BLOCK@[496; 506)
-            L_CURLY@[496; 497)
-            LAMBDA_EXPR@[497; 505)
-              PARAM_LIST@[497; 499)
-                PIPE@[497; 498)
-                PIPE@[498; 499)
-              CALL_EXPR@[499; 505)
-                PATH_EXPR@[499; 502)
-                  PATH@[499; 502)
-                    PATH_SEGMENT@[499; 502)
-                      NAME_REF@[499; 502)
-                        IDENT@[499; 502) "the"
-                ARG_LIST@[502; 505)
-                  L_PAREN@[502; 503)
-                  PATH_EXPR@[503; 504)
-                    PATH@[503; 504)
-                      PATH_SEGMENT@[503; 504)
-                        NAME_REF@[503; 504)
-                          IDENT@[503; 504) "i"
-                  R_PAREN@[504; 505)
-            R_CURLY@[505; 506)
-        SEMI@[506; 507)
-      WHITESPACE@[507; 512)
-      EXPR_STMT@[512; 519)
-        CALL_EXPR@[512; 518)
-          PATH_EXPR@[512; 516)
-            PATH@[512; 516)
-              PATH_SEGMENT@[512; 516)
-                NAME_REF@[512; 516)
-                  IDENT@[512; 516) "dont"
-          ARG_LIST@[516; 518)
-            L_PAREN@[516; 517)
-            R_PAREN@[517; 518)
-        SEMI@[518; 519)
-      WHITESPACE@[519; 524)
-      EXPR_STMT@[524; 543)
-        MACRO_CALL@[524; 542)
-          PATH@[524; 530)
-            PATH_SEGMENT@[524; 530)
-              NAME_REF@[524; 530)
-                IDENT@[524; 530) "assert"
-          EXCL@[530; 531)
-          TOKEN_TREE@[531; 542)
-            L_PAREN@[531; 532)
-            TOKEN_TREE@[532; 541)
-              L_PAREN@[532; 533)
-              IDENT@[533; 534) "i"
-              DOT@[534; 535)
-              IDENT@[535; 538) "get"
-              TOKEN_TREE@[538; 540)
-                L_PAREN@[538; 539)
-                R_PAREN@[539; 540)
-              R_PAREN@[540; 541)
-            R_PAREN@[541; 542)
-        SEMI@[542; 543)
-      WHITESPACE@[543; 544)
-      R_CURLY@[544; 545)
-  WHITESPACE@[545; 547)
-  FN_DEF@[547; 1051)
-    FN_KW@[547; 549)
-    WHITESPACE@[549; 550)
-    NAME@[550; 561)
-      IDENT@[550; 561) "zombiejesus"
-    PARAM_LIST@[561; 563)
-      L_PAREN@[561; 562)
-      R_PAREN@[562; 563)
-    WHITESPACE@[563; 564)
-    BLOCK@[564; 1051)
-      L_CURLY@[564; 565)
-      WHITESPACE@[565; 570)
-      LOOP_EXPR@[570; 1049)
-        LOOP_KW@[570; 574)
-        WHITESPACE@[574; 575)
-        BLOCK@[575; 1049)
-          L_CURLY@[575; 576)
-          WHITESPACE@[576; 585)
-          EXPR_STMT@[585; 1012)
-            WHILE_EXPR@[585; 1012)
-              WHILE_KW@[585; 590)
-              WHITESPACE@[590; 591)
-              CONDITION@[591; 599)
-                PAREN_EXPR@[591; 599)
-                  L_PAREN@[591; 592)
-                  RETURN_EXPR@[592; 598)
-                    RETURN_KW@[592; 598)
-                  R_PAREN@[598; 599)
-              WHITESPACE@[599; 600)
-              BLOCK@[600; 1012)
-                L_CURLY@[600; 601)
-                WHITESPACE@[601; 614)
-                IF_EXPR@[614; 1002)
-                  IF_KW@[614; 616)
-                  WHITESPACE@[616; 617)
-                  CONDITION@[617; 625)
-                    PAREN_EXPR@[617; 625)
-                      L_PAREN@[617; 618)
-                      RETURN_EXPR@[618; 624)
-                        RETURN_KW@[618; 624)
-                      R_PAREN@[624; 625)
-                  WHITESPACE@[625; 626)
-                  BLOCK@[626; 945)
-                    L_CURLY@[626; 627)
-                    WHITESPACE@[627; 644)
-                    EXPR_STMT@[644; 931)
-                      MATCH_EXPR@[644; 930)
-                        MATCH_KW@[644; 649)
-                        WHITESPACE@[649; 650)
-                        PAREN_EXPR@[650; 658)
-                          L_PAREN@[650; 651)
-                          RETURN_EXPR@[651; 657)
-                            RETURN_KW@[651; 657)
-                          R_PAREN@[657; 658)
-                        WHITESPACE@[658; 659)
-                        MATCH_ARM_LIST@[659; 930)
-                          L_CURLY@[659; 660)
-                          WHITESPACE@[660; 681)
-                          MATCH_ARM@[681; 876)
-                            LITERAL@[681; 682)
-                              INT_NUMBER@[681; 682) "1"
-                            WHITESPACE@[682; 683)
-                            FAT_ARROW@[683; 685)
-                            WHITESPACE@[685; 686)
-                            BLOCK_EXPR@[686; 876)
-                              BLOCK@[686; 876)
-                                L_CURLY@[686; 687)
-                                WHITESPACE@[687; 712)
-                                IF_EXPR@[712; 854)
-                                  IF_KW@[712; 714)
-                                  WHITESPACE@[714; 715)
-                                  CONDITION@[715; 723)
-                                    PAREN_EXPR@[715; 723)
-                                      L_PAREN@[715; 716)
-                                      RETURN_EXPR@[716; 722)
-                                        RETURN_KW@[716; 722)
-                                      R_PAREN@[722; 723)
-                                  WHITESPACE@[723; 724)
-                                  BLOCK@[724; 786)
-                                    L_CURLY@[724; 725)
-                                    WHITESPACE@[725; 754)
-                                    RETURN_EXPR@[754; 760)
-                                      RETURN_KW@[754; 760)
-                                    WHITESPACE@[760; 785)
-                                    R_CURLY@[785; 786)
-                                  WHITESPACE@[786; 787)
-                                  ELSE_KW@[787; 791)
-                                  WHITESPACE@[791; 792)
-                                  BLOCK@[792; 854)
-                                    L_CURLY@[792; 793)
-                                    WHITESPACE@[793; 822)
-                                    RETURN_EXPR@[822; 828)
-                                      RETURN_KW@[822; 828)
-                                    WHITESPACE@[828; 853)
-                                    R_CURLY@[853; 854)
-                                WHITESPACE@[854; 875)
-                                R_CURLY@[875; 876)
-                          WHITESPACE@[876; 897)
-                          MATCH_ARM@[897; 912)
-                            PLACEHOLDER_PAT@[897; 898)
-                              UNDERSCORE@[897; 898)
-                            WHITESPACE@[898; 899)
-                            FAT_ARROW@[899; 901)
-                            WHITESPACE@[901; 902)
-                            BLOCK_EXPR@[902; 912)
-                              BLOCK@[902; 912)
-                                L_CURLY@[902; 903)
-                                WHITESPACE@[903; 904)
-                                RETURN_EXPR@[904; 910)
-                                  RETURN_KW@[904; 910)
-                                WHITESPACE@[910; 911)
-                                R_CURLY@[911; 912)
-                          WHITESPACE@[912; 929)
-                          R_CURLY@[929; 930)
-                      SEMI@[930; 931)
-                    WHITESPACE@[931; 944)
-                    R_CURLY@[944; 945)
-                  WHITESPACE@[945; 946)
-                  ELSE_KW@[946; 950)
-                  WHITESPACE@[950; 951)
-                  IF_EXPR@[951; 1002)
-                    IF_KW@[951; 953)
-                    WHITESPACE@[953; 954)
-                    CONDITION@[954; 962)
-                      PAREN_EXPR@[954; 962)
-                        L_PAREN@[954; 955)
-                        RETURN_EXPR@[955; 961)
-                          RETURN_KW@[955; 961)
-                        R_PAREN@[961; 962)
-                    WHITESPACE@[962; 963)
-                    BLOCK@[963; 1002)
-                      L_CURLY@[963; 964)
-                      WHITESPACE@[964; 981)
-                      EXPR_STMT@[981; 988)
-                        RETURN_EXPR@[981; 987)
-                          RETURN_KW@[981; 987)
-                        SEMI@[987; 988)
-                      WHITESPACE@[988; 1001)
-                      R_CURLY@[1001; 1002)
-                WHITESPACE@[1002; 1011)
-                R_CURLY@[1011; 1012)
-          WHITESPACE@[1012; 1021)
-          IF_EXPR@[1021; 1043)
-            IF_KW@[1021; 1023)
-            WHITESPACE@[1023; 1024)
-            CONDITION@[1024; 1032)
-              PAREN_EXPR@[1024; 1032)
-                L_PAREN@[1024; 1025)
-                RETURN_EXPR@[1025; 1031)
-                  RETURN_KW@[1025; 1031)
-                R_PAREN@[1031; 1032)
-            WHITESPACE@[1032; 1033)
-            BLOCK@[1033; 1043)
-              L_CURLY@[1033; 1034)
-              WHITESPACE@[1034; 1035)
-              EXPR_STMT@[1035; 1041)
-                BREAK_EXPR@[1035; 1040)
-                  BREAK_KW@[1035; 1040)
-                SEMI@[1040; 1041)
-              WHITESPACE@[1041; 1042)
-              R_CURLY@[1042; 1043)
-          WHITESPACE@[1043; 1048)
-          R_CURLY@[1048; 1049)
-      WHITESPACE@[1049; 1050)
-      R_CURLY@[1050; 1051)
-  WHITESPACE@[1051; 1053)
-  FN_DEF@[1053; 1268)
-    FN_KW@[1053; 1055)
-    WHITESPACE@[1055; 1056)
-    NAME@[1056; 1063)
-      IDENT@[1056; 1063) "notsure"
-    PARAM_LIST@[1063; 1065)
-      L_PAREN@[1063; 1064)
-      R_PAREN@[1064; 1065)
-    WHITESPACE@[1065; 1066)
-    BLOCK@[1066; 1268)
-      L_CURLY@[1066; 1067)
-      WHITESPACE@[1067; 1072)
-      LET_STMT@[1072; 1090)
-        LET_KW@[1072; 1075)
-        WHITESPACE@[1075; 1076)
-        BIND_PAT@[1076; 1082)
-          MUT_KW@[1076; 1079)
-          WHITESPACE@[1079; 1080)
-          NAME@[1080; 1082)
-            IDENT@[1080; 1082) "_x"
-        COLON@[1082; 1083)
-        WHITESPACE@[1083; 1084)
-        PATH_TYPE@[1084; 1089)
-          PATH@[1084; 1089)
-            PATH_SEGMENT@[1084; 1089)
-              NAME_REF@[1084; 1089)
-                IDENT@[1084; 1089) "isize"
-        SEMI@[1089; 1090)
-      WHITESPACE@[1090; 1095)
-      LET_STMT@[1095; 1129)
-        LET_KW@[1095; 1098)
-        WHITESPACE@[1098; 1099)
-        BIND_PAT@[1099; 1105)
-          MUT_KW@[1099; 1102)
-          WHITESPACE@[1102; 1103)
-          NAME@[1103; 1105)
-            IDENT@[1103; 1105) "_y"
-        WHITESPACE@[1105; 1106)
-        EQ@[1106; 1107)
-        WHITESPACE@[1107; 1108)
-        BIN_EXPR@[1108; 1128)
-          PAREN_EXPR@[1108; 1116)
-            L_PAREN@[1108; 1109)
-            BIN_EXPR@[1109; 1115)
-              PATH_EXPR@[1109; 1111)
-                PATH@[1109; 1111)
-                  PATH_SEGMENT@[1109; 1111)
-                    NAME_REF@[1109; 1111)
-                      IDENT@[1109; 1111) "_x"
-              WHITESPACE@[1111; 1112)
-              EQ@[1112; 1113)
-              WHITESPACE@[1113; 1114)
-              LITERAL@[1114; 1115)
-                INT_NUMBER@[1114; 1115) "0"
-            R_PAREN@[1115; 1116)
-          WHITESPACE@[1116; 1117)
-          EQEQ@[1117; 1119)
-          WHITESPACE@[1119; 1120)
-          PAREN_EXPR@[1120; 1128)
-            L_PAREN@[1120; 1121)
-            BIN_EXPR@[1121; 1127)
-              PATH_EXPR@[1121; 1123)
-                PATH@[1121; 1123)
-                  PATH_SEGMENT@[1121; 1123)
-                    NAME_REF@[1121; 1123)
-                      IDENT@[1121; 1123) "_x"
-              WHITESPACE@[1123; 1124)
-              EQ@[1124; 1125)
-              WHITESPACE@[1125; 1126)
-              LITERAL@[1126; 1127)
-                INT_NUMBER@[1126; 1127) "0"
-            R_PAREN@[1127; 1128)
-        SEMI@[1128; 1129)
-      WHITESPACE@[1129; 1134)
-      LET_STMT@[1134; 1167)
-        LET_KW@[1134; 1137)
-        WHITESPACE@[1137; 1138)
-        BIND_PAT@[1138; 1144)
-          MUT_KW@[1138; 1141)
-          WHITESPACE@[1141; 1142)
-          NAME@[1142; 1144)
-            IDENT@[1142; 1144) "_z"
-        WHITESPACE@[1144; 1145)
-        EQ@[1145; 1146)
-        WHITESPACE@[1146; 1147)
-        BIN_EXPR@[1147; 1166)
-          PAREN_EXPR@[1147; 1155)
-            L_PAREN@[1147; 1148)
-            BIN_EXPR@[1148; 1154)
-              PATH_EXPR@[1148; 1150)
-                PATH@[1148; 1150)
-                  PATH_SEGMENT@[1148; 1150)
-                    NAME_REF@[1148; 1150)
-                      IDENT@[1148; 1150) "_x"
-              WHITESPACE@[1150; 1151)
-              EQ@[1151; 1152)
-              WHITESPACE@[1152; 1153)
-              LITERAL@[1153; 1154)
-                INT_NUMBER@[1153; 1154) "0"
-            R_PAREN@[1154; 1155)
-          WHITESPACE@[1155; 1156)
-          L_ANGLE@[1156; 1157)
-          WHITESPACE@[1157; 1158)
-          PAREN_EXPR@[1158; 1166)
-            L_PAREN@[1158; 1159)
-            BIN_EXPR@[1159; 1165)
-              PATH_EXPR@[1159; 1161)
-                PATH@[1159; 1161)
-                  PATH_SEGMENT@[1159; 1161)
-                    NAME_REF@[1159; 1161)
-                      IDENT@[1159; 1161) "_x"
-              WHITESPACE@[1161; 1162)
-              EQ@[1162; 1163)
-              WHITESPACE@[1163; 1164)
-              LITERAL@[1164; 1165)
-                INT_NUMBER@[1164; 1165) "0"
-            R_PAREN@[1165; 1166)
-        SEMI@[1166; 1167)
-      WHITESPACE@[1167; 1172)
-      LET_STMT@[1172; 1203)
-        LET_KW@[1172; 1175)
-        WHITESPACE@[1175; 1176)
-        BIND_PAT@[1176; 1178)
-          NAME@[1176; 1178)
-            IDENT@[1176; 1178) "_a"
-        WHITESPACE@[1178; 1179)
-        EQ@[1179; 1180)
-        WHITESPACE@[1180; 1181)
-        BIN_EXPR@[1181; 1202)
-          PAREN_EXPR@[1181; 1190)
-            L_PAREN@[1181; 1182)
-            BIN_EXPR@[1182; 1189)
-              PATH_EXPR@[1182; 1184)
-                PATH@[1182; 1184)
-                  PATH_SEGMENT@[1182; 1184)
-                    NAME_REF@[1182; 1184)
-                      IDENT@[1182; 1184) "_x"
-              WHITESPACE@[1184; 1185)
-              PLUSEQ@[1185; 1187)
-              WHITESPACE@[1187; 1188)
-              LITERAL@[1188; 1189)
-                INT_NUMBER@[1188; 1189) "0"
-            R_PAREN@[1189; 1190)
-          WHITESPACE@[1190; 1191)
-          EQEQ@[1191; 1193)
-          WHITESPACE@[1193; 1194)
-          PAREN_EXPR@[1194; 1202)
-            L_PAREN@[1194; 1195)
-            BIN_EXPR@[1195; 1201)
-              PATH_EXPR@[1195; 1197)
-                PATH@[1195; 1197)
-                  PATH_SEGMENT@[1195; 1197)
-                    NAME_REF@[1195; 1197)
-                      IDENT@[1195; 1197) "_x"
-              WHITESPACE@[1197; 1198)
-              EQ@[1198; 1199)
-              WHITESPACE@[1199; 1200)
-              LITERAL@[1200; 1201)
-                INT_NUMBER@[1200; 1201) "0"
-            R_PAREN@[1201; 1202)
-        SEMI@[1202; 1203)
-      WHITESPACE@[1203; 1208)
-      LET_STMT@[1208; 1266)
-        LET_KW@[1208; 1211)
-        WHITESPACE@[1211; 1212)
-        BIND_PAT@[1212; 1214)
-          NAME@[1212; 1214)
-            IDENT@[1212; 1214) "_b"
-        WHITESPACE@[1214; 1215)
-        EQ@[1215; 1216)
-        WHITESPACE@[1216; 1217)
-        BIN_EXPR@[1217; 1265)
-          CALL_EXPR@[1217; 1239)
-            PATH_EXPR@[1217; 1221)
-              PATH@[1217; 1221)
-                PATH_SEGMENT@[1217; 1221)
-                  NAME_REF@[1217; 1221)
-                    IDENT@[1217; 1221) "swap"
-            ARG_LIST@[1221; 1239)
-              L_PAREN@[1221; 1222)
-              REF_EXPR@[1222; 1229)
-                AMP@[1222; 1223)
-                MUT_KW@[1223; 1226)
-                WHITESPACE@[1226; 1227)
-                PATH_EXPR@[1227; 1229)
-                  PATH@[1227; 1229)
-                    PATH_SEGMENT@[1227; 1229)
-                      NAME_REF@[1227; 1229)
-                        IDENT@[1227; 1229) "_y"
-              COMMA@[1229; 1230)
-              WHITESPACE@[1230; 1231)
-              REF_EXPR@[1231; 1238)
-                AMP@[1231; 1232)
-                MUT_KW@[1232; 1235)
-                WHITESPACE@[1235; 1236)
-                PATH_EXPR@[1236; 1238)
-                  PATH@[1236; 1238)
-                    PATH_SEGMENT@[1236; 1238)
-                      NAME_REF@[1236; 1238)
-                        IDENT@[1236; 1238) "_z"
-              R_PAREN@[1238; 1239)
-          WHITESPACE@[1239; 1240)
-          EQEQ@[1240; 1242)
-          WHITESPACE@[1242; 1243)
-          CALL_EXPR@[1243; 1265)
-            PATH_EXPR@[1243; 1247)
-              PATH@[1243; 1247)
-                PATH_SEGMENT@[1243; 1247)
-                  NAME_REF@[1243; 1247)
-                    IDENT@[1243; 1247) "swap"
-            ARG_LIST@[1247; 1265)
-              L_PAREN@[1247; 1248)
-              REF_EXPR@[1248; 1255)
-                AMP@[1248; 1249)
-                MUT_KW@[1249; 1252)
-                WHITESPACE@[1252; 1253)
-                PATH_EXPR@[1253; 1255)
-                  PATH@[1253; 1255)
-                    PATH_SEGMENT@[1253; 1255)
-                      NAME_REF@[1253; 1255)
-                        IDENT@[1253; 1255) "_y"
-              COMMA@[1255; 1256)
-              WHITESPACE@[1256; 1257)
-              REF_EXPR@[1257; 1264)
-                AMP@[1257; 1258)
-                MUT_KW@[1258; 1261)
-                WHITESPACE@[1261; 1262)
-                PATH_EXPR@[1262; 1264)
-                  PATH@[1262; 1264)
-                    PATH_SEGMENT@[1262; 1264)
-                      NAME_REF@[1262; 1264)
-                        IDENT@[1262; 1264) "_z"
-              R_PAREN@[1264; 1265)
-        SEMI@[1265; 1266)
-      WHITESPACE@[1266; 1267)
-      R_CURLY@[1267; 1268)
-  WHITESPACE@[1268; 1270)
-  FN_DEF@[1270; 1470)
-    FN_KW@[1270; 1272)
-    WHITESPACE@[1272; 1273)
-    NAME@[1273; 1286)
-      IDENT@[1273; 1286) "canttouchthis"
-    PARAM_LIST@[1286; 1288)
-      L_PAREN@[1286; 1287)
-      R_PAREN@[1287; 1288)
-    WHITESPACE@[1288; 1289)
-    RET_TYPE@[1289; 1297)
-      THIN_ARROW@[1289; 1291)
-      WHITESPACE@[1291; 1292)
-      PATH_TYPE@[1292; 1297)
-        PATH@[1292; 1297)
-          PATH_SEGMENT@[1292; 1297)
-            NAME_REF@[1292; 1297)
-              IDENT@[1292; 1297) "usize"
-    WHITESPACE@[1297; 1298)
-    BLOCK@[1298; 1470)
-      L_CURLY@[1298; 1299)
-      WHITESPACE@[1299; 1304)
-      FN_DEF@[1304; 1327)
-        FN_KW@[1304; 1306)
-        WHITESPACE@[1306; 1307)
-        NAME@[1307; 1308)
-          IDENT@[1307; 1308) "p"
-        PARAM_LIST@[1308; 1310)
-          L_PAREN@[1308; 1309)
-          R_PAREN@[1309; 1310)
-        WHITESPACE@[1310; 1311)
-        RET_TYPE@[1311; 1318)
-          THIN_ARROW@[1311; 1313)
-          WHITESPACE@[1313; 1314)
-          PATH_TYPE@[1314; 1318)
-            PATH@[1314; 1318)
-              PATH_SEGMENT@[1314; 1318)
-                NAME_REF@[1314; 1318)
-                  IDENT@[1314; 1318) "bool"
-        WHITESPACE@[1318; 1319)
-        BLOCK@[1319; 1327)
-          L_CURLY@[1319; 1320)
-          WHITESPACE@[1320; 1321)
-          LITERAL@[1321; 1325)
-            TRUE_KW@[1321; 1325)
-          WHITESPACE@[1325; 1326)
-          R_CURLY@[1326; 1327)
-      WHITESPACE@[1327; 1332)
-      LET_STMT@[1332; 1377)
-        LET_KW@[1332; 1335)
-        WHITESPACE@[1335; 1336)
-        BIND_PAT@[1336; 1338)
-          NAME@[1336; 1338)
-            IDENT@[1336; 1338) "_a"
-        WHITESPACE@[1338; 1339)
-        EQ@[1339; 1340)
-        WHITESPACE@[1340; 1341)
-        PAREN_EXPR@[1341; 1376)
-          L_PAREN@[1341; 1342)
-          BIN_EXPR@[1342; 1375)
-            MACRO_CALL@[1342; 1357)
-              PATH@[1342; 1348)
-                PATH_SEGMENT@[1342; 1348)
-                  NAME_REF@[1342; 1348)
-                    IDENT@[1342; 1348) "assert"
-              EXCL@[1348; 1349)
-              TOKEN_TREE@[1349; 1357)
-                L_PAREN@[1349; 1350)
-                TOKEN_TREE@[1350; 1356)
-                  L_PAREN@[1350; 1351)
-                  TRUE_KW@[1351; 1355)
-                  R_PAREN@[1355; 1356)
-                R_PAREN@[1356; 1357)
-            WHITESPACE@[1357; 1358)
-            EQEQ@[1358; 1360)
-            WHITESPACE@[1360; 1361)
-            PAREN_EXPR@[1361; 1375)
-              L_PAREN@[1361; 1362)
-              MACRO_CALL@[1362; 1374)
-                PATH@[1362; 1368)
-                  PATH_SEGMENT@[1362; 1368)
-                    NAME_REF@[1362; 1368)
-                      IDENT@[1362; 1368) "assert"
-                EXCL@[1368; 1369)
-                TOKEN_TREE@[1369; 1374)
-                  L_PAREN@[1369; 1370)
-                  IDENT@[1370; 1371) "p"
-                  TOKEN_TREE@[1371; 1373)
-                    L_PAREN@[1371; 1372)
-                    R_PAREN@[1372; 1373)
-                  R_PAREN@[1373; 1374)
-              R_PAREN@[1374; 1375)
-          R_PAREN@[1375; 1376)
-        SEMI@[1376; 1377)
-      WHITESPACE@[1377; 1382)
-      LET_STMT@[1382; 1414)
-        LET_KW@[1382; 1385)
-        WHITESPACE@[1385; 1386)
-        BIND_PAT@[1386; 1388)
-          NAME@[1386; 1388)
-            IDENT@[1386; 1388) "_c"
-        WHITESPACE@[1388; 1389)
-        EQ@[1389; 1390)
-        WHITESPACE@[1390; 1391)
-        PAREN_EXPR@[1391; 1413)
-          L_PAREN@[1391; 1392)
-          BIN_EXPR@[1392; 1412)
-            MACRO_CALL@[1392; 1406)
-              PATH@[1392; 1398)
-                PATH_SEGMENT@[1392; 1398)
-                  NAME_REF@[1392; 1398)
-                    IDENT@[1392; 1398) "assert"
-              EXCL@[1398; 1399)
-              TOKEN_TREE@[1399; 1406)
-                L_PAREN@[1399; 1400)
-                TOKEN_TREE@[1400; 1405)
-                  L_PAREN@[1400; 1401)
-                  IDENT@[1401; 1402) "p"
-                  TOKEN_TREE@[1402; 1404)
-                    L_PAREN@[1402; 1403)
-                    R_PAREN@[1403; 1404)
-                  R_PAREN@[1404; 1405)
-                R_PAREN@[1405; 1406)
-            WHITESPACE@[1406; 1407)
-            EQEQ@[1407; 1409)
-            WHITESPACE@[1409; 1410)
-            TUPLE_EXPR@[1410; 1412)
-              L_PAREN@[1410; 1411)
-              R_PAREN@[1411; 1412)
-          R_PAREN@[1412; 1413)
-        SEMI@[1413; 1414)
-      WHITESPACE@[1414; 1419)
-      LET_STMT@[1419; 1468)
-        LET_KW@[1419; 1422)
-        WHITESPACE@[1422; 1423)
-        BIND_PAT@[1423; 1425)
-          NAME@[1423; 1425)
-            IDENT@[1423; 1425) "_b"
-        COLON@[1425; 1426)
-        WHITESPACE@[1426; 1427)
-        PATH_TYPE@[1427; 1431)
-          PATH@[1427; 1431)
-            PATH_SEGMENT@[1427; 1431)
-              NAME_REF@[1427; 1431)
-                IDENT@[1427; 1431) "bool"
-        WHITESPACE@[1431; 1432)
-        EQ@[1432; 1433)
-        WHITESPACE@[1433; 1434)
-        PAREN_EXPR@[1434; 1467)
-          L_PAREN@[1434; 1435)
-          BIN_EXPR@[1435; 1466)
-            MACRO_CALL@[1435; 1452)
-              PATH@[1435; 1442)
-                PATH_SEGMENT@[1435; 1442)
-                  NAME_REF@[1435; 1442)
-                    IDENT@[1435; 1442) "println"
-              EXCL@[1442; 1443)
-              TOKEN_TREE@[1443; 1452)
-                L_PAREN@[1443; 1444)
-                STRING@[1444; 1448)
-                COMMA@[1448; 1449)
-                WHITESPACE@[1449; 1450)
-                INT_NUMBER@[1450; 1451) "0"
-                R_PAREN@[1451; 1452)
-            WHITESPACE@[1452; 1453)
-            EQEQ@[1453; 1455)
-            WHITESPACE@[1455; 1456)
-            PAREN_EXPR@[1456; 1466)
-              L_PAREN@[1456; 1457)
-              RETURN_EXPR@[1457; 1465)
-                RETURN_KW@[1457; 1463)
-                WHITESPACE@[1463; 1464)
-                LITERAL@[1464; 1465)
-                  INT_NUMBER@[1464; 1465) "0"
-              R_PAREN@[1465; 1466)
-          R_PAREN@[1466; 1467)
-        SEMI@[1467; 1468)
-      WHITESPACE@[1468; 1469)
-      R_CURLY@[1469; 1470)
-  WHITESPACE@[1470; 1472)
-  FN_DEF@[1472; 1633)
-    FN_KW@[1472; 1474)
-    WHITESPACE@[1474; 1475)
-    NAME@[1475; 1484)
-      IDENT@[1475; 1484) "angrydome"
-    PARAM_LIST@[1484; 1486)
-      L_PAREN@[1484; 1485)
-      R_PAREN@[1485; 1486)
-    WHITESPACE@[1486; 1487)
-    BLOCK@[1487; 1633)
-      L_CURLY@[1487; 1488)
-      WHITESPACE@[1488; 1493)
-      EXPR_STMT@[1493; 1514)
-        LOOP_EXPR@[1493; 1514)
-          LOOP_KW@[1493; 1497)
-          WHITESPACE@[1497; 1498)
-          BLOCK@[1498; 1514)
-            L_CURLY@[1498; 1499)
-            WHITESPACE@[1499; 1500)
-            IF_EXPR@[1500; 1512)
-              IF_KW@[1500; 1502)
-              WHITESPACE@[1502; 1503)
-              CONDITION@[1503; 1508)
-                BREAK_EXPR@[1503; 1508)
-                  BREAK_KW@[1503; 1508)
-              WHITESPACE@[1508; 1509)
-              BLOCK@[1509; 1512)
-                L_CURLY@[1509; 1510)
-                WHITESPACE@[1510; 1511)
-                R_CURLY@[1511; 1512)
-            WHITESPACE@[1512; 1513)
-            R_CURLY@[1513; 1514)
-      WHITESPACE@[1514; 1519)
-      LET_STMT@[1519; 1533)
-        LET_KW@[1519; 1522)
-        WHITESPACE@[1522; 1523)
-        BIND_PAT@[1523; 1528)
-          MUT_KW@[1523; 1526)
-          WHITESPACE@[1526; 1527)
-          NAME@[1527; 1528)
-            IDENT@[1527; 1528) "i"
-        WHITESPACE@[1528; 1529)
-        EQ@[1529; 1530)
-        WHITESPACE@[1530; 1531)
-        LITERAL@[1531; 1532)
-          INT_NUMBER@[1531; 1532) "0"
-        SEMI@[1532; 1533)
-      WHITESPACE@[1533; 1538)
-      LOOP_EXPR@[1538; 1631)
-        LOOP_KW@[1538; 1542)
-        WHITESPACE@[1542; 1543)
-        BLOCK@[1543; 1631)
-          L_CURLY@[1543; 1544)
-          WHITESPACE@[1544; 1545)
-          EXPR_STMT@[1545; 1552)
-            BIN_EXPR@[1545; 1551)
-              PATH_EXPR@[1545; 1546)
-                PATH@[1545; 1546)
-                  PATH_SEGMENT@[1545; 1546)
-                    NAME_REF@[1545; 1546)
-                      IDENT@[1545; 1546) "i"
-              WHITESPACE@[1546; 1547)
-              PLUSEQ@[1547; 1549)
-              WHITESPACE@[1549; 1550)
-              LITERAL@[1550; 1551)
-                INT_NUMBER@[1550; 1551) "1"
-            SEMI@[1551; 1552)
-          WHITESPACE@[1552; 1553)
-          EXPR_STMT@[1553; 1616)
-            IF_EXPR@[1553; 1616)
-              IF_KW@[1553; 1555)
-              WHITESPACE@[1555; 1556)
-              CONDITION@[1556; 1562)
-                BIN_EXPR@[1556; 1562)
-                  PATH_EXPR@[1556; 1557)
-                    PATH@[1556; 1557)
-                      PATH_SEGMENT@[1556; 1557)
-                        NAME_REF@[1556; 1557)
-                          IDENT@[1556; 1557) "i"
-                  WHITESPACE@[1557; 1558)
-                  EQEQ@[1558; 1560)
-                  WHITESPACE@[1560; 1561)
-                  LITERAL@[1561; 1562)
-                    INT_NUMBER@[1561; 1562) "1"
-              WHITESPACE@[1562; 1563)
-              BLOCK@[1563; 1616)
-                L_CURLY@[1563; 1564)
-                WHITESPACE@[1564; 1565)
-                MATCH_EXPR@[1565; 1614)
-                  MATCH_KW@[1565; 1570)
-                  WHITESPACE@[1570; 1571)
-                  PAREN_EXPR@[1571; 1581)
-                    L_PAREN@[1571; 1572)
-                    CONTINUE_EXPR@[1572; 1580)
-                      CONTINUE_KW@[1572; 1580)
-                    R_PAREN@[1580; 1581)
-                  WHITESPACE@[1581; 1582)
-                  MATCH_ARM_LIST@[1582; 1614)
-                    L_CURLY@[1582; 1583)
-                    WHITESPACE@[1583; 1584)
-                    MATCH_ARM@[1584; 1592)
-                      LITERAL@[1584; 1585)
-                        INT_NUMBER@[1584; 1585) "1"
-                      WHITESPACE@[1585; 1586)
-                      FAT_ARROW@[1586; 1588)
-                      WHITESPACE@[1588; 1589)
-                      BLOCK_EXPR@[1589; 1592)
-                        BLOCK@[1589; 1592)
-                          L_CURLY@[1589; 1590)
-                          WHITESPACE@[1590; 1591)
-                          R_CURLY@[1591; 1592)
-                    COMMA@[1592; 1593)
-                    WHITESPACE@[1593; 1594)
-                    MATCH_ARM@[1594; 1612)
-                      PLACEHOLDER_PAT@[1594; 1595)
-                        UNDERSCORE@[1594; 1595)
-                      WHITESPACE@[1595; 1596)
-                      FAT_ARROW@[1596; 1598)
-                      WHITESPACE@[1598; 1599)
-                      MACRO_CALL@[1599; 1612)
-                        PATH@[1599; 1604)
-                          PATH_SEGMENT@[1599; 1604)
-                            NAME_REF@[1599; 1604)
-                              IDENT@[1599; 1604) "panic"
-                        EXCL@[1604; 1605)
-                        TOKEN_TREE@[1605; 1612)
-                          L_PAREN@[1605; 1606)
-                          STRING@[1606; 1611)
-                          R_PAREN@[1611; 1612)
-                    WHITESPACE@[1612; 1613)
-                    R_CURLY@[1613; 1614)
-                WHITESPACE@[1614; 1615)
-                R_CURLY@[1615; 1616)
-          WHITESPACE@[1616; 1623)
-          EXPR_STMT@[1623; 1629)
-            BREAK_EXPR@[1623; 1628)
-              BREAK_KW@[1623; 1628)
-            SEMI@[1628; 1629)
-          WHITESPACE@[1629; 1630)
-          R_CURLY@[1630; 1631)
-      WHITESPACE@[1631; 1632)
-      R_CURLY@[1632; 1633)
-  WHITESPACE@[1633; 1635)
-  FN_DEF@[1635; 1689)
-    FN_KW@[1635; 1637)
-    WHITESPACE@[1637; 1638)
-    NAME@[1638; 1650)
-      IDENT@[1638; 1650) "evil_lincoln"
-    PARAM_LIST@[1650; 1652)
-      L_PAREN@[1650; 1651)
-      R_PAREN@[1651; 1652)
-    WHITESPACE@[1652; 1653)
-    BLOCK@[1653; 1689)
-      L_CURLY@[1653; 1654)
-      WHITESPACE@[1654; 1655)
-      LET_STMT@[1655; 1687)
-        LET_KW@[1655; 1658)
-        WHITESPACE@[1658; 1659)
-        BIND_PAT@[1659; 1664)
-          NAME@[1659; 1664)
-            IDENT@[1659; 1664) "_evil"
-        WHITESPACE@[1664; 1665)
-        EQ@[1665; 1666)
-        WHITESPACE@[1666; 1667)
-        MACRO_CALL@[1667; 1686)
-          PATH@[1667; 1674)
-            PATH_SEGMENT@[1667; 1674)
-              NAME_REF@[1667; 1674)
-                IDENT@[1667; 1674) "println"
-          EXCL@[1674; 1675)
-          TOKEN_TREE@[1675; 1686)
-            L_PAREN@[1675; 1676)
-            STRING@[1676; 1685)
-            R_PAREN@[1685; 1686)
-        SEMI@[1686; 1687)
-      WHITESPACE@[1687; 1688)
-      R_CURLY@[1688; 1689)
-  WHITESPACE@[1689; 1691)
-  FN_DEF@[1691; 1927)
-    FN_KW@[1691; 1693)
-    WHITESPACE@[1693; 1694)
-    NAME@[1694; 1698)
-      IDENT@[1694; 1698) "dots"
-    PARAM_LIST@[1698; 1700)
-      L_PAREN@[1698; 1699)
-      R_PAREN@[1699; 1700)
-    WHITESPACE@[1700; 1701)
-    BLOCK@[1701; 1927)
-      L_CURLY@[1701; 1702)
-      WHITESPACE@[1702; 1707)
-      EXPR_STMT@[1707; 1925)
-        MACRO_CALL@[1707; 1924)
-          PATH@[1707; 1716)
-            PATH_SEGMENT@[1707; 1716)
-              NAME_REF@[1707; 1716)
-                IDENT@[1707; 1716) "assert_eq"
-          EXCL@[1716; 1717)
-          TOKEN_TREE@[1717; 1924)
-            L_PAREN@[1717; 1718)
-            IDENT@[1718; 1724) "String"
-            COLONCOLON@[1724; 1726)
-            IDENT@[1726; 1730) "from"
-            TOKEN_TREE@[1730; 1784)
-              L_PAREN@[1730; 1731)
-              STRING@[1731; 1783)
-              R_PAREN@[1783; 1784)
-            COMMA@[1784; 1785)
-            WHITESPACE@[1785; 1801)
-            IDENT@[1801; 1807) "format"
-            EXCL@[1807; 1808)
-            TOKEN_TREE@[1808; 1923)
-              L_PAREN@[1808; 1809)
-              STRING@[1809; 1815)
-              COMMA@[1815; 1816)
-              WHITESPACE@[1816; 1817)
-              DOTDOT@[1817; 1819)
-              WHITESPACE@[1819; 1820)
-              DOTDOT@[1820; 1822)
-              WHITESPACE@[1822; 1823)
-              DOTDOT@[1823; 1825)
-              WHITESPACE@[1825; 1826)
-              DOTDOT@[1826; 1828)
-              WHITESPACE@[1828; 1829)
-              DOTDOT@[1829; 1831)
-              WHITESPACE@[1831; 1832)
-              DOTDOT@[1832; 1834)
-              WHITESPACE@[1834; 1835)
-              DOTDOT@[1835; 1837)
-              WHITESPACE@[1837; 1838)
-              DOTDOT@[1838; 1840)
-              WHITESPACE@[1840; 1841)
-              DOTDOT@[1841; 1843)
-              WHITESPACE@[1843; 1844)
-              DOTDOT@[1844; 1846)
-              WHITESPACE@[1846; 1847)
-              DOTDOT@[1847; 1849)
-              WHITESPACE@[1849; 1850)
-              DOTDOT@[1850; 1852)
-              WHITESPACE@[1852; 1853)
-              DOTDOT@[1853; 1855)
-              WHITESPACE@[1855; 1887)
-              DOTDOT@[1887; 1889)
-              WHITESPACE@[1889; 1890)
-              DOTDOT@[1890; 1892)
-              WHITESPACE@[1892; 1893)
-              DOTDOT@[1893; 1895)
-              WHITESPACE@[1895; 1896)
-              DOTDOT@[1896; 1898)
-              WHITESPACE@[1898; 1899)
-              DOTDOT@[1899; 1901)
-              WHITESPACE@[1901; 1902)
-              DOTDOT@[1902; 1904)
-              WHITESPACE@[1904; 1905)
-              DOTDOT@[1905; 1907)
-              WHITESPACE@[1907; 1908)
-              DOTDOT@[1908; 1910)
-              WHITESPACE@[1910; 1911)
-              DOTDOT@[1911; 1913)
-              WHITESPACE@[1913; 1914)
-              DOTDOT@[1914; 1916)
-              WHITESPACE@[1916; 1917)
-              DOTDOT@[1917; 1919)
-              WHITESPACE@[1919; 1920)
-              DOTDOT@[1920; 1922)
-              R_PAREN@[1922; 1923)
-            R_PAREN@[1923; 1924)
-        SEMI@[1924; 1925)
+SOURCE_FILE@[0; 3813)
+  COMMENT@[0; 55)
+  WHITESPACE@[55; 56)
+  COMMENT@[56; 173)
+  WHITESPACE@[173; 174)
+  COMMENT@[174; 178)
+  WHITESPACE@[178; 179)
+  COMMENT@[179; 269)
+  WHITESPACE@[269; 271)
+  ATTR@[271; 302)
+    POUND@[271; 272)
+    EXCL@[272; 273)
+    TOKEN_TREE@[273; 302)
+      L_BRACK@[273; 274)
+      IDENT@[274; 279) "allow"
+      TOKEN_TREE@[279; 301)
+        L_PAREN@[279; 280)
+        IDENT@[280; 300) "non_camel_case_types"
+        R_PAREN@[300; 301)
+      R_BRACK@[301; 302)
+  WHITESPACE@[302; 303)
+  ATTR@[303; 323)
+    POUND@[303; 304)
+    EXCL@[304; 305)
+    TOKEN_TREE@[305; 323)
+      L_BRACK@[305; 306)
+      IDENT@[306; 311) "allow"
+      TOKEN_TREE@[311; 322)
+        L_PAREN@[311; 312)
+        IDENT@[312; 321) "dead_code"
+        R_PAREN@[321; 322)
+      R_BRACK@[322; 323)
+  WHITESPACE@[323; 324)
+  ATTR@[324; 351)
+    POUND@[324; 325)
+    EXCL@[325; 326)
+    TOKEN_TREE@[326; 351)
+      L_BRACK@[326; 327)
+      IDENT@[327; 332) "allow"
+      TOKEN_TREE@[332; 350)
+        L_PAREN@[332; 333)
+        IDENT@[333; 349) "unreachable_code"
+        R_PAREN@[349; 350)
+      R_BRACK@[350; 351)
+  WHITESPACE@[351; 352)
+  ATTR@[352; 376)
+    POUND@[352; 353)
+    EXCL@[353; 354)
+    TOKEN_TREE@[354; 376)
+      L_BRACK@[354; 355)
+      IDENT@[355; 360) "allow"
+      TOKEN_TREE@[360; 375)
+        L_PAREN@[360; 361)
+        IDENT@[361; 374) "unused_parens"
+        R_PAREN@[374; 375)
+      R_BRACK@[375; 376)
+  WHITESPACE@[376; 378)
+  ATTR@[378; 405)
+    POUND@[378; 379)
+    EXCL@[379; 380)
+    TOKEN_TREE@[380; 405)
+      L_BRACK@[380; 381)
+      IDENT@[381; 396) "recursion_limit"
+      WHITESPACE@[396; 397)
+      EQ@[397; 398)
+      WHITESPACE@[398; 399)
+      STRING@[399; 404)
+      R_BRACK@[404; 405)
+  WHITESPACE@[405; 407)
+  USE_ITEM@[407; 427)
+    USE_KW@[407; 410)
+    WHITESPACE@[410; 411)
+    USE_TREE@[411; 426)
+      PATH@[411; 426)
+        PATH@[411; 420)
+          PATH@[411; 414)
+            PATH_SEGMENT@[411; 414)
+              NAME_REF@[411; 414)
+                IDENT@[411; 414) "std"
+          COLONCOLON@[414; 416)
+          PATH_SEGMENT@[416; 420)
+            NAME_REF@[416; 420)
+              IDENT@[416; 420) "cell"
+        COLONCOLON@[420; 422)
+        PATH_SEGMENT@[422; 426)
+          NAME_REF@[422; 426)
+            IDENT@[422; 426) "Cell"
+    SEMI@[426; 427)
+  WHITESPACE@[427; 428)
+  USE_ITEM@[428; 447)
+    USE_KW@[428; 431)
+    WHITESPACE@[431; 432)
+    USE_TREE@[432; 446)
+      PATH@[432; 446)
+        PATH@[432; 440)
+          PATH@[432; 435)
+            PATH_SEGMENT@[432; 435)
+              NAME_REF@[432; 435)
+                IDENT@[432; 435) "std"
+          COLONCOLON@[435; 437)
+          PATH_SEGMENT@[437; 440)
+            NAME_REF@[437; 440)
+              IDENT@[437; 440) "mem"
+        COLONCOLON@[440; 442)
+        PATH_SEGMENT@[442; 446)
+          NAME_REF@[442; 446)
+            IDENT@[442; 446) "swap"
+    SEMI@[446; 447)
+  WHITESPACE@[447; 449)
+  COMMENT@[449; 518)
+  WHITESPACE@[518; 520)
+  FN_DEF@[520; 572)
+    FN_KW@[520; 522)
+    WHITESPACE@[522; 523)
+    NAME@[523; 530)
+      IDENT@[523; 530) "strange"
+    PARAM_LIST@[530; 532)
+      L_PAREN@[530; 531)
+      R_PAREN@[531; 532)
+    WHITESPACE@[532; 533)
+    RET_TYPE@[533; 540)
+      THIN_ARROW@[533; 535)
+      WHITESPACE@[535; 536)
+      PATH_TYPE@[536; 540)
+        PATH@[536; 540)
+          PATH_SEGMENT@[536; 540)
+            NAME_REF@[536; 540)
+              IDENT@[536; 540) "bool"
+    WHITESPACE@[540; 541)
+    BLOCK@[541; 572)
+      L_CURLY@[541; 542)
+      WHITESPACE@[542; 543)
+      LET_STMT@[543; 570)
+        LET_KW@[543; 546)
+        WHITESPACE@[546; 547)
+        BIND_PAT@[547; 549)
+          NAME@[547; 549)
+            IDENT@[547; 549) "_x"
+        COLON@[549; 550)
+        WHITESPACE@[550; 551)
+        PATH_TYPE@[551; 555)
+          PATH@[551; 555)
+            PATH_SEGMENT@[551; 555)
+              NAME_REF@[551; 555)
+                IDENT@[551; 555) "bool"
+        WHITESPACE@[555; 556)
+        EQ@[556; 557)
+        WHITESPACE@[557; 558)
+        RETURN_EXPR@[558; 569)
+          RETURN_KW@[558; 564)
+          WHITESPACE@[564; 565)
+          LITERAL@[565; 569)
+            TRUE_KW@[565; 569)
+        SEMI@[569; 570)
+      WHITESPACE@[570; 571)
+      R_CURLY@[571; 572)
+  WHITESPACE@[572; 574)
+  FN_DEF@[574; 624)
+    FN_KW@[574; 576)
+    WHITESPACE@[576; 577)
+    NAME@[577; 582)
+      IDENT@[577; 582) "funny"
+    PARAM_LIST@[582; 584)
+      L_PAREN@[582; 583)
+      R_PAREN@[583; 584)
+    WHITESPACE@[584; 585)
+    BLOCK@[585; 624)
+      L_CURLY@[585; 586)
+      WHITESPACE@[586; 591)
+      FN_DEF@[591; 607)
+        FN_KW@[591; 593)
+        WHITESPACE@[593; 594)
+        NAME@[594; 595)
+          IDENT@[594; 595) "f"
+        PARAM_LIST@[595; 603)
+          L_PAREN@[595; 596)
+          PARAM@[596; 602)
+            BIND_PAT@[596; 598)
+              NAME@[596; 598)
+                IDENT@[596; 598) "_x"
+            COLON@[598; 599)
+            WHITESPACE@[599; 600)
+            TUPLE_TYPE@[600; 602)
+              L_PAREN@[600; 601)
+              R_PAREN@[601; 602)
+          R_PAREN@[602; 603)
+        WHITESPACE@[603; 604)
+        BLOCK@[604; 607)
+          L_CURLY@[604; 605)
+          WHITESPACE@[605; 606)
+          R_CURLY@[606; 607)
+      WHITESPACE@[607; 612)
+      EXPR_STMT@[612; 622)
+        CALL_EXPR@[612; 621)
+          PATH_EXPR@[612; 613)
+            PATH@[612; 613)
+              PATH_SEGMENT@[612; 613)
+                NAME_REF@[612; 613)
+                  IDENT@[612; 613) "f"
+          ARG_LIST@[613; 621)
+            L_PAREN@[613; 614)
+            RETURN_EXPR@[614; 620)
+              RETURN_KW@[614; 620)
+            R_PAREN@[620; 621)
+        SEMI@[621; 622)
+      WHITESPACE@[622; 623)
+      R_CURLY@[623; 624)
+  WHITESPACE@[624; 626)
+  FN_DEF@[626; 816)
+    FN_KW@[626; 628)
+    WHITESPACE@[628; 629)
+    NAME@[629; 633)
+      IDENT@[629; 633) "what"
+    PARAM_LIST@[633; 635)
+      L_PAREN@[633; 634)
+      R_PAREN@[634; 635)
+    WHITESPACE@[635; 636)
+    BLOCK@[636; 816)
+      L_CURLY@[636; 637)
+      WHITESPACE@[637; 642)
+      FN_DEF@[642; 720)
+        FN_KW@[642; 644)
+        WHITESPACE@[644; 645)
+        NAME@[645; 648)
+          IDENT@[645; 648) "the"
+        PARAM_LIST@[648; 664)
+          L_PAREN@[648; 649)
+          PARAM@[649; 663)
+            BIND_PAT@[649; 650)
+              NAME@[649; 650)
+                IDENT@[649; 650) "x"
+            COLON@[650; 651)
+            WHITESPACE@[651; 652)
+            REFERENCE_TYPE@[652; 663)
+              AMP@[652; 653)
+              PATH_TYPE@[653; 663)
+                PATH@[653; 663)
+                  PATH_SEGMENT@[653; 663)
+                    NAME_REF@[653; 657)
+                      IDENT@[653; 657) "Cell"
+                    TYPE_ARG_LIST@[657; 663)
+                      L_ANGLE@[657; 658)
+                      TYPE_ARG@[658; 662)
+                        PATH_TYPE@[658; 662)
+                          PATH@[658; 662)
+                            PATH_SEGMENT@[658; 662)
+                              NAME_REF@[658; 662)
+                                IDENT@[658; 662) "bool"
+                      R_ANGLE@[662; 663)
+          R_PAREN@[663; 664)
+        WHITESPACE@[664; 665)
+        BLOCK@[665; 720)
+          L_CURLY@[665; 666)
+          WHITESPACE@[666; 675)
+          EXPR_STMT@[675; 714)
+            RETURN_EXPR@[675; 713)
+              RETURN_KW@[675; 681)
+              WHITESPACE@[681; 682)
+              WHILE_EXPR@[682; 713)
+                WHILE_KW@[682; 687)
+                WHITESPACE@[687; 688)
+                CONDITION@[688; 696)
+                  PREFIX_EXPR@[688; 696)
+                    EXCL@[688; 689)
+                    METHOD_CALL_EXPR@[689; 696)
+                      PATH_EXPR@[689; 690)
+                        PATH@[689; 690)
+                          PATH_SEGMENT@[689; 690)
+                            NAME_REF@[689; 690)
+                              IDENT@[689; 690) "x"
+                      DOT@[690; 691)
+                      NAME_REF@[691; 694)
+                        IDENT@[691; 694) "get"
+                      ARG_LIST@[694; 696)
+                        L_PAREN@[694; 695)
+                        R_PAREN@[695; 696)
+                WHITESPACE@[696; 697)
+                BLOCK@[697; 713)
+                  L_CURLY@[697; 698)
+                  WHITESPACE@[698; 699)
+                  EXPR_STMT@[699; 711)
+                    METHOD_CALL_EXPR@[699; 710)
+                      PATH_EXPR@[699; 700)
+                        PATH@[699; 700)
+                          PATH_SEGMENT@[699; 700)
+                            NAME_REF@[699; 700)
+                              IDENT@[699; 700) "x"
+                      DOT@[700; 701)
+                      NAME_REF@[701; 704)
+                        IDENT@[701; 704) "set"
+                      ARG_LIST@[704; 710)
+                        L_PAREN@[704; 705)
+                        LITERAL@[705; 709)
+                          TRUE_KW@[705; 709)
+                        R_PAREN@[709; 710)
+                    SEMI@[710; 711)
+                  WHITESPACE@[711; 712)
+                  R_CURLY@[712; 713)
+            SEMI@[713; 714)
+          WHITESPACE@[714; 719)
+          R_CURLY@[719; 720)
+      WHITESPACE@[720; 725)
+      LET_STMT@[725; 751)
+        LET_KW@[725; 728)
+        WHITESPACE@[728; 729)
+        BIND_PAT@[729; 730)
+          NAME@[729; 730)
+            IDENT@[729; 730) "i"
+        WHITESPACE@[730; 731)
+        EQ@[731; 732)
+        WHITESPACE@[732; 733)
+        REF_EXPR@[733; 750)
+          AMP@[733; 734)
+          CALL_EXPR@[734; 750)
+            PATH_EXPR@[734; 743)
+              PATH@[734; 743)
+                PATH@[734; 738)
+                  PATH_SEGMENT@[734; 738)
+                    NAME_REF@[734; 738)
+                      IDENT@[734; 738) "Cell"
+                COLONCOLON@[738; 740)
+                PATH_SEGMENT@[740; 743)
+                  NAME_REF@[740; 743)
+                    IDENT@[740; 743) "new"
+            ARG_LIST@[743; 750)
+              L_PAREN@[743; 744)
+              LITERAL@[744; 749)
+                FALSE_KW@[744; 749)
+              R_PAREN@[749; 750)
+        SEMI@[750; 751)
+      WHITESPACE@[751; 756)
+      LET_STMT@[756; 778)
+        LET_KW@[756; 759)
+        WHITESPACE@[759; 760)
+        BIND_PAT@[760; 764)
+          NAME@[760; 764)
+            IDENT@[760; 764) "dont"
+        WHITESPACE@[764; 765)
+        EQ@[765; 766)
+        WHITESPACE@[766; 767)
+        BLOCK_EXPR@[767; 777)
+          BLOCK@[767; 777)
+            L_CURLY@[767; 768)
+            LAMBDA_EXPR@[768; 776)
+              PARAM_LIST@[768; 770)
+                PIPE@[768; 769)
+                PIPE@[769; 770)
+              CALL_EXPR@[770; 776)
+                PATH_EXPR@[770; 773)
+                  PATH@[770; 773)
+                    PATH_SEGMENT@[770; 773)
+                      NAME_REF@[770; 773)
+                        IDENT@[770; 773) "the"
+                ARG_LIST@[773; 776)
+                  L_PAREN@[773; 774)
+                  PATH_EXPR@[774; 775)
+                    PATH@[774; 775)
+                      PATH_SEGMENT@[774; 775)
+                        NAME_REF@[774; 775)
+                          IDENT@[774; 775) "i"
+                  R_PAREN@[775; 776)
+            R_CURLY@[776; 777)
+        SEMI@[777; 778)
+      WHITESPACE@[778; 783)
+      EXPR_STMT@[783; 790)
+        CALL_EXPR@[783; 789)
+          PATH_EXPR@[783; 787)
+            PATH@[783; 787)
+              PATH_SEGMENT@[783; 787)
+                NAME_REF@[783; 787)
+                  IDENT@[783; 787) "dont"
+          ARG_LIST@[787; 789)
+            L_PAREN@[787; 788)
+            R_PAREN@[788; 789)
+        SEMI@[789; 790)
+      WHITESPACE@[790; 795)
+      EXPR_STMT@[795; 814)
+        MACRO_CALL@[795; 813)
+          PATH@[795; 801)
+            PATH_SEGMENT@[795; 801)
+              NAME_REF@[795; 801)
+                IDENT@[795; 801) "assert"
+          EXCL@[801; 802)
+          TOKEN_TREE@[802; 813)
+            L_PAREN@[802; 803)
+            TOKEN_TREE@[803; 812)
+              L_PAREN@[803; 804)
+              IDENT@[804; 805) "i"
+              DOT@[805; 806)
+              IDENT@[806; 809) "get"
+              TOKEN_TREE@[809; 811)
+                L_PAREN@[809; 810)
+                R_PAREN@[810; 811)
+              R_PAREN@[811; 812)
+            R_PAREN@[812; 813)
+        SEMI@[813; 814)
+      WHITESPACE@[814; 815)
+      R_CURLY@[815; 816)
+  WHITESPACE@[816; 818)
+  FN_DEF@[818; 1322)
+    FN_KW@[818; 820)
+    WHITESPACE@[820; 821)
+    NAME@[821; 832)
+      IDENT@[821; 832) "zombiejesus"
+    PARAM_LIST@[832; 834)
+      L_PAREN@[832; 833)
+      R_PAREN@[833; 834)
+    WHITESPACE@[834; 835)
+    BLOCK@[835; 1322)
+      L_CURLY@[835; 836)
+      WHITESPACE@[836; 841)
+      LOOP_EXPR@[841; 1320)
+        LOOP_KW@[841; 845)
+        WHITESPACE@[845; 846)
+        BLOCK@[846; 1320)
+          L_CURLY@[846; 847)
+          WHITESPACE@[847; 856)
+          EXPR_STMT@[856; 1283)
+            WHILE_EXPR@[856; 1283)
+              WHILE_KW@[856; 861)
+              WHITESPACE@[861; 862)
+              CONDITION@[862; 870)
+                PAREN_EXPR@[862; 870)
+                  L_PAREN@[862; 863)
+                  RETURN_EXPR@[863; 869)
+                    RETURN_KW@[863; 869)
+                  R_PAREN@[869; 870)
+              WHITESPACE@[870; 871)
+              BLOCK@[871; 1283)
+                L_CURLY@[871; 872)
+                WHITESPACE@[872; 885)
+                IF_EXPR@[885; 1273)
+                  IF_KW@[885; 887)
+                  WHITESPACE@[887; 888)
+                  CONDITION@[888; 896)
+                    PAREN_EXPR@[888; 896)
+                      L_PAREN@[888; 889)
+                      RETURN_EXPR@[889; 895)
+                        RETURN_KW@[889; 895)
+                      R_PAREN@[895; 896)
+                  WHITESPACE@[896; 897)
+                  BLOCK@[897; 1216)
+                    L_CURLY@[897; 898)
+                    WHITESPACE@[898; 915)
+                    EXPR_STMT@[915; 1202)
+                      MATCH_EXPR@[915; 1201)
+                        MATCH_KW@[915; 920)
+                        WHITESPACE@[920; 921)
+                        PAREN_EXPR@[921; 929)
+                          L_PAREN@[921; 922)
+                          RETURN_EXPR@[922; 928)
+                            RETURN_KW@[922; 928)
+                          R_PAREN@[928; 929)
+                        WHITESPACE@[929; 930)
+                        MATCH_ARM_LIST@[930; 1201)
+                          L_CURLY@[930; 931)
+                          WHITESPACE@[931; 952)
+                          MATCH_ARM@[952; 1147)
+                            LITERAL@[952; 953)
+                              INT_NUMBER@[952; 953) "1"
+                            WHITESPACE@[953; 954)
+                            FAT_ARROW@[954; 956)
+                            WHITESPACE@[956; 957)
+                            BLOCK_EXPR@[957; 1147)
+                              BLOCK@[957; 1147)
+                                L_CURLY@[957; 958)
+                                WHITESPACE@[958; 983)
+                                IF_EXPR@[983; 1125)
+                                  IF_KW@[983; 985)
+                                  WHITESPACE@[985; 986)
+                                  CONDITION@[986; 994)
+                                    PAREN_EXPR@[986; 994)
+                                      L_PAREN@[986; 987)
+                                      RETURN_EXPR@[987; 993)
+                                        RETURN_KW@[987; 993)
+                                      R_PAREN@[993; 994)
+                                  WHITESPACE@[994; 995)
+                                  BLOCK@[995; 1057)
+                                    L_CURLY@[995; 996)
+                                    WHITESPACE@[996; 1025)
+                                    RETURN_EXPR@[1025; 1031)
+                                      RETURN_KW@[1025; 1031)
+                                    WHITESPACE@[1031; 1056)
+                                    R_CURLY@[1056; 1057)
+                                  WHITESPACE@[1057; 1058)
+                                  ELSE_KW@[1058; 1062)
+                                  WHITESPACE@[1062; 1063)
+                                  BLOCK@[1063; 1125)
+                                    L_CURLY@[1063; 1064)
+                                    WHITESPACE@[1064; 1093)
+                                    RETURN_EXPR@[1093; 1099)
+                                      RETURN_KW@[1093; 1099)
+                                    WHITESPACE@[1099; 1124)
+                                    R_CURLY@[1124; 1125)
+                                WHITESPACE@[1125; 1146)
+                                R_CURLY@[1146; 1147)
+                          WHITESPACE@[1147; 1168)
+                          MATCH_ARM@[1168; 1183)
+                            PLACEHOLDER_PAT@[1168; 1169)
+                              UNDERSCORE@[1168; 1169)
+                            WHITESPACE@[1169; 1170)
+                            FAT_ARROW@[1170; 1172)
+                            WHITESPACE@[1172; 1173)
+                            BLOCK_EXPR@[1173; 1183)
+                              BLOCK@[1173; 1183)
+                                L_CURLY@[1173; 1174)
+                                WHITESPACE@[1174; 1175)
+                                RETURN_EXPR@[1175; 1181)
+                                  RETURN_KW@[1175; 1181)
+                                WHITESPACE@[1181; 1182)
+                                R_CURLY@[1182; 1183)
+                          WHITESPACE@[1183; 1200)
+                          R_CURLY@[1200; 1201)
+                      SEMI@[1201; 1202)
+                    WHITESPACE@[1202; 1215)
+                    R_CURLY@[1215; 1216)
+                  WHITESPACE@[1216; 1217)
+                  ELSE_KW@[1217; 1221)
+                  WHITESPACE@[1221; 1222)
+                  IF_EXPR@[1222; 1273)
+                    IF_KW@[1222; 1224)
+                    WHITESPACE@[1224; 1225)
+                    CONDITION@[1225; 1233)
+                      PAREN_EXPR@[1225; 1233)
+                        L_PAREN@[1225; 1226)
+                        RETURN_EXPR@[1226; 1232)
+                          RETURN_KW@[1226; 1232)
+                        R_PAREN@[1232; 1233)
+                    WHITESPACE@[1233; 1234)
+                    BLOCK@[1234; 1273)
+                      L_CURLY@[1234; 1235)
+                      WHITESPACE@[1235; 1252)
+                      EXPR_STMT@[1252; 1259)
+                        RETURN_EXPR@[1252; 1258)
+                          RETURN_KW@[1252; 1258)
+                        SEMI@[1258; 1259)
+                      WHITESPACE@[1259; 1272)
+                      R_CURLY@[1272; 1273)
+                WHITESPACE@[1273; 1282)
+                R_CURLY@[1282; 1283)
+          WHITESPACE@[1283; 1292)
+          IF_EXPR@[1292; 1314)
+            IF_KW@[1292; 1294)
+            WHITESPACE@[1294; 1295)
+            CONDITION@[1295; 1303)
+              PAREN_EXPR@[1295; 1303)
+                L_PAREN@[1295; 1296)
+                RETURN_EXPR@[1296; 1302)
+                  RETURN_KW@[1296; 1302)
+                R_PAREN@[1302; 1303)
+            WHITESPACE@[1303; 1304)
+            BLOCK@[1304; 1314)
+              L_CURLY@[1304; 1305)
+              WHITESPACE@[1305; 1306)
+              EXPR_STMT@[1306; 1312)
+                BREAK_EXPR@[1306; 1311)
+                  BREAK_KW@[1306; 1311)
+                SEMI@[1311; 1312)
+              WHITESPACE@[1312; 1313)
+              R_CURLY@[1313; 1314)
+          WHITESPACE@[1314; 1319)
+          R_CURLY@[1319; 1320)
+      WHITESPACE@[1320; 1321)
+      R_CURLY@[1321; 1322)
+  WHITESPACE@[1322; 1324)
+  FN_DEF@[1324; 1539)
+    FN_KW@[1324; 1326)
+    WHITESPACE@[1326; 1327)
+    NAME@[1327; 1334)
+      IDENT@[1327; 1334) "notsure"
+    PARAM_LIST@[1334; 1336)
+      L_PAREN@[1334; 1335)
+      R_PAREN@[1335; 1336)
+    WHITESPACE@[1336; 1337)
+    BLOCK@[1337; 1539)
+      L_CURLY@[1337; 1338)
+      WHITESPACE@[1338; 1343)
+      LET_STMT@[1343; 1361)
+        LET_KW@[1343; 1346)
+        WHITESPACE@[1346; 1347)
+        BIND_PAT@[1347; 1353)
+          MUT_KW@[1347; 1350)
+          WHITESPACE@[1350; 1351)
+          NAME@[1351; 1353)
+            IDENT@[1351; 1353) "_x"
+        COLON@[1353; 1354)
+        WHITESPACE@[1354; 1355)
+        PATH_TYPE@[1355; 1360)
+          PATH@[1355; 1360)
+            PATH_SEGMENT@[1355; 1360)
+              NAME_REF@[1355; 1360)
+                IDENT@[1355; 1360) "isize"
+        SEMI@[1360; 1361)
+      WHITESPACE@[1361; 1366)
+      LET_STMT@[1366; 1400)
+        LET_KW@[1366; 1369)
+        WHITESPACE@[1369; 1370)
+        BIND_PAT@[1370; 1376)
+          MUT_KW@[1370; 1373)
+          WHITESPACE@[1373; 1374)
+          NAME@[1374; 1376)
+            IDENT@[1374; 1376) "_y"
+        WHITESPACE@[1376; 1377)
+        EQ@[1377; 1378)
+        WHITESPACE@[1378; 1379)
+        BIN_EXPR@[1379; 1399)
+          PAREN_EXPR@[1379; 1387)
+            L_PAREN@[1379; 1380)
+            BIN_EXPR@[1380; 1386)
+              PATH_EXPR@[1380; 1382)
+                PATH@[1380; 1382)
+                  PATH_SEGMENT@[1380; 1382)
+                    NAME_REF@[1380; 1382)
+                      IDENT@[1380; 1382) "_x"
+              WHITESPACE@[1382; 1383)
+              EQ@[1383; 1384)
+              WHITESPACE@[1384; 1385)
+              LITERAL@[1385; 1386)
+                INT_NUMBER@[1385; 1386) "0"
+            R_PAREN@[1386; 1387)
+          WHITESPACE@[1387; 1388)
+          EQEQ@[1388; 1390)
+          WHITESPACE@[1390; 1391)
+          PAREN_EXPR@[1391; 1399)
+            L_PAREN@[1391; 1392)
+            BIN_EXPR@[1392; 1398)
+              PATH_EXPR@[1392; 1394)
+                PATH@[1392; 1394)
+                  PATH_SEGMENT@[1392; 1394)
+                    NAME_REF@[1392; 1394)
+                      IDENT@[1392; 1394) "_x"
+              WHITESPACE@[1394; 1395)
+              EQ@[1395; 1396)
+              WHITESPACE@[1396; 1397)
+              LITERAL@[1397; 1398)
+                INT_NUMBER@[1397; 1398) "0"
+            R_PAREN@[1398; 1399)
+        SEMI@[1399; 1400)
+      WHITESPACE@[1400; 1405)
+      LET_STMT@[1405; 1438)
+        LET_KW@[1405; 1408)
+        WHITESPACE@[1408; 1409)
+        BIND_PAT@[1409; 1415)
+          MUT_KW@[1409; 1412)
+          WHITESPACE@[1412; 1413)
+          NAME@[1413; 1415)
+            IDENT@[1413; 1415) "_z"
+        WHITESPACE@[1415; 1416)
+        EQ@[1416; 1417)
+        WHITESPACE@[1417; 1418)
+        BIN_EXPR@[1418; 1437)
+          PAREN_EXPR@[1418; 1426)
+            L_PAREN@[1418; 1419)
+            BIN_EXPR@[1419; 1425)
+              PATH_EXPR@[1419; 1421)
+                PATH@[1419; 1421)
+                  PATH_SEGMENT@[1419; 1421)
+                    NAME_REF@[1419; 1421)
+                      IDENT@[1419; 1421) "_x"
+              WHITESPACE@[1421; 1422)
+              EQ@[1422; 1423)
+              WHITESPACE@[1423; 1424)
+              LITERAL@[1424; 1425)
+                INT_NUMBER@[1424; 1425) "0"
+            R_PAREN@[1425; 1426)
+          WHITESPACE@[1426; 1427)
+          L_ANGLE@[1427; 1428)
+          WHITESPACE@[1428; 1429)
+          PAREN_EXPR@[1429; 1437)
+            L_PAREN@[1429; 1430)
+            BIN_EXPR@[1430; 1436)
+              PATH_EXPR@[1430; 1432)
+                PATH@[1430; 1432)
+                  PATH_SEGMENT@[1430; 1432)
+                    NAME_REF@[1430; 1432)
+                      IDENT@[1430; 1432) "_x"
+              WHITESPACE@[1432; 1433)
+              EQ@[1433; 1434)
+              WHITESPACE@[1434; 1435)
+              LITERAL@[1435; 1436)
+                INT_NUMBER@[1435; 1436) "0"
+            R_PAREN@[1436; 1437)
+        SEMI@[1437; 1438)
+      WHITESPACE@[1438; 1443)
+      LET_STMT@[1443; 1474)
+        LET_KW@[1443; 1446)
+        WHITESPACE@[1446; 1447)
+        BIND_PAT@[1447; 1449)
+          NAME@[1447; 1449)
+            IDENT@[1447; 1449) "_a"
+        WHITESPACE@[1449; 1450)
+        EQ@[1450; 1451)
+        WHITESPACE@[1451; 1452)
+        BIN_EXPR@[1452; 1473)
+          PAREN_EXPR@[1452; 1461)
+            L_PAREN@[1452; 1453)
+            BIN_EXPR@[1453; 1460)
+              PATH_EXPR@[1453; 1455)
+                PATH@[1453; 1455)
+                  PATH_SEGMENT@[1453; 1455)
+                    NAME_REF@[1453; 1455)
+                      IDENT@[1453; 1455) "_x"
+              WHITESPACE@[1455; 1456)
+              PLUSEQ@[1456; 1458)
+              WHITESPACE@[1458; 1459)
+              LITERAL@[1459; 1460)
+                INT_NUMBER@[1459; 1460) "0"
+            R_PAREN@[1460; 1461)
+          WHITESPACE@[1461; 1462)
+          EQEQ@[1462; 1464)
+          WHITESPACE@[1464; 1465)
+          PAREN_EXPR@[1465; 1473)
+            L_PAREN@[1465; 1466)
+            BIN_EXPR@[1466; 1472)
+              PATH_EXPR@[1466; 1468)
+                PATH@[1466; 1468)
+                  PATH_SEGMENT@[1466; 1468)
+                    NAME_REF@[1466; 1468)
+                      IDENT@[1466; 1468) "_x"
+              WHITESPACE@[1468; 1469)
+              EQ@[1469; 1470)
+              WHITESPACE@[1470; 1471)
+              LITERAL@[1471; 1472)
+                INT_NUMBER@[1471; 1472) "0"
+            R_PAREN@[1472; 1473)
+        SEMI@[1473; 1474)
+      WHITESPACE@[1474; 1479)
+      LET_STMT@[1479; 1537)
+        LET_KW@[1479; 1482)
+        WHITESPACE@[1482; 1483)
+        BIND_PAT@[1483; 1485)
+          NAME@[1483; 1485)
+            IDENT@[1483; 1485) "_b"
+        WHITESPACE@[1485; 1486)
+        EQ@[1486; 1487)
+        WHITESPACE@[1487; 1488)
+        BIN_EXPR@[1488; 1536)
+          CALL_EXPR@[1488; 1510)
+            PATH_EXPR@[1488; 1492)
+              PATH@[1488; 1492)
+                PATH_SEGMENT@[1488; 1492)
+                  NAME_REF@[1488; 1492)
+                    IDENT@[1488; 1492) "swap"
+            ARG_LIST@[1492; 1510)
+              L_PAREN@[1492; 1493)
+              REF_EXPR@[1493; 1500)
+                AMP@[1493; 1494)
+                MUT_KW@[1494; 1497)
+                WHITESPACE@[1497; 1498)
+                PATH_EXPR@[1498; 1500)
+                  PATH@[1498; 1500)
+                    PATH_SEGMENT@[1498; 1500)
+                      NAME_REF@[1498; 1500)
+                        IDENT@[1498; 1500) "_y"
+              COMMA@[1500; 1501)
+              WHITESPACE@[1501; 1502)
+              REF_EXPR@[1502; 1509)
+                AMP@[1502; 1503)
+                MUT_KW@[1503; 1506)
+                WHITESPACE@[1506; 1507)
+                PATH_EXPR@[1507; 1509)
+                  PATH@[1507; 1509)
+                    PATH_SEGMENT@[1507; 1509)
+                      NAME_REF@[1507; 1509)
+                        IDENT@[1507; 1509) "_z"
+              R_PAREN@[1509; 1510)
+          WHITESPACE@[1510; 1511)
+          EQEQ@[1511; 1513)
+          WHITESPACE@[1513; 1514)
+          CALL_EXPR@[1514; 1536)
+            PATH_EXPR@[1514; 1518)
+              PATH@[1514; 1518)
+                PATH_SEGMENT@[1514; 1518)
+                  NAME_REF@[1514; 1518)
+                    IDENT@[1514; 1518) "swap"
+            ARG_LIST@[1518; 1536)
+              L_PAREN@[1518; 1519)
+              REF_EXPR@[1519; 1526)
+                AMP@[1519; 1520)
+                MUT_KW@[1520; 1523)
+                WHITESPACE@[1523; 1524)
+                PATH_EXPR@[1524; 1526)
+                  PATH@[1524; 1526)
+                    PATH_SEGMENT@[1524; 1526)
+                      NAME_REF@[1524; 1526)
+                        IDENT@[1524; 1526) "_y"
+              COMMA@[1526; 1527)
+              WHITESPACE@[1527; 1528)
+              REF_EXPR@[1528; 1535)
+                AMP@[1528; 1529)
+                MUT_KW@[1529; 1532)
+                WHITESPACE@[1532; 1533)
+                PATH_EXPR@[1533; 1535)
+                  PATH@[1533; 1535)
+                    PATH_SEGMENT@[1533; 1535)
+                      NAME_REF@[1533; 1535)
+                        IDENT@[1533; 1535) "_z"
+              R_PAREN@[1535; 1536)
+        SEMI@[1536; 1537)
+      WHITESPACE@[1537; 1538)
+      R_CURLY@[1538; 1539)
+  WHITESPACE@[1539; 1541)
+  FN_DEF@[1541; 1741)
+    FN_KW@[1541; 1543)
+    WHITESPACE@[1543; 1544)
+    NAME@[1544; 1557)
+      IDENT@[1544; 1557) "canttouchthis"
+    PARAM_LIST@[1557; 1559)
+      L_PAREN@[1557; 1558)
+      R_PAREN@[1558; 1559)
+    WHITESPACE@[1559; 1560)
+    RET_TYPE@[1560; 1568)
+      THIN_ARROW@[1560; 1562)
+      WHITESPACE@[1562; 1563)
+      PATH_TYPE@[1563; 1568)
+        PATH@[1563; 1568)
+          PATH_SEGMENT@[1563; 1568)
+            NAME_REF@[1563; 1568)
+              IDENT@[1563; 1568) "usize"
+    WHITESPACE@[1568; 1569)
+    BLOCK@[1569; 1741)
+      L_CURLY@[1569; 1570)
+      WHITESPACE@[1570; 1575)
+      FN_DEF@[1575; 1598)
+        FN_KW@[1575; 1577)
+        WHITESPACE@[1577; 1578)
+        NAME@[1578; 1579)
+          IDENT@[1578; 1579) "p"
+        PARAM_LIST@[1579; 1581)
+          L_PAREN@[1579; 1580)
+          R_PAREN@[1580; 1581)
+        WHITESPACE@[1581; 1582)
+        RET_TYPE@[1582; 1589)
+          THIN_ARROW@[1582; 1584)
+          WHITESPACE@[1584; 1585)
+          PATH_TYPE@[1585; 1589)
+            PATH@[1585; 1589)
+              PATH_SEGMENT@[1585; 1589)
+                NAME_REF@[1585; 1589)
+                  IDENT@[1585; 1589) "bool"
+        WHITESPACE@[1589; 1590)
+        BLOCK@[1590; 1598)
+          L_CURLY@[1590; 1591)
+          WHITESPACE@[1591; 1592)
+          LITERAL@[1592; 1596)
+            TRUE_KW@[1592; 1596)
+          WHITESPACE@[1596; 1597)
+          R_CURLY@[1597; 1598)
+      WHITESPACE@[1598; 1603)
+      LET_STMT@[1603; 1648)
+        LET_KW@[1603; 1606)
+        WHITESPACE@[1606; 1607)
+        BIND_PAT@[1607; 1609)
+          NAME@[1607; 1609)
+            IDENT@[1607; 1609) "_a"
+        WHITESPACE@[1609; 1610)
+        EQ@[1610; 1611)
+        WHITESPACE@[1611; 1612)
+        PAREN_EXPR@[1612; 1647)
+          L_PAREN@[1612; 1613)
+          BIN_EXPR@[1613; 1646)
+            MACRO_CALL@[1613; 1628)
+              PATH@[1613; 1619)
+                PATH_SEGMENT@[1613; 1619)
+                  NAME_REF@[1613; 1619)
+                    IDENT@[1613; 1619) "assert"
+              EXCL@[1619; 1620)
+              TOKEN_TREE@[1620; 1628)
+                L_PAREN@[1620; 1621)
+                TOKEN_TREE@[1621; 1627)
+                  L_PAREN@[1621; 1622)
+                  TRUE_KW@[1622; 1626)
+                  R_PAREN@[1626; 1627)
+                R_PAREN@[1627; 1628)
+            WHITESPACE@[1628; 1629)
+            EQEQ@[1629; 1631)
+            WHITESPACE@[1631; 1632)
+            PAREN_EXPR@[1632; 1646)
+              L_PAREN@[1632; 1633)
+              MACRO_CALL@[1633; 1645)
+                PATH@[1633; 1639)
+                  PATH_SEGMENT@[1633; 1639)
+                    NAME_REF@[1633; 1639)
+                      IDENT@[1633; 1639) "assert"
+                EXCL@[1639; 1640)
+                TOKEN_TREE@[1640; 1645)
+                  L_PAREN@[1640; 1641)
+                  IDENT@[1641; 1642) "p"
+                  TOKEN_TREE@[1642; 1644)
+                    L_PAREN@[1642; 1643)
+                    R_PAREN@[1643; 1644)
+                  R_PAREN@[1644; 1645)
+              R_PAREN@[1645; 1646)
+          R_PAREN@[1646; 1647)
+        SEMI@[1647; 1648)
+      WHITESPACE@[1648; 1653)
+      LET_STMT@[1653; 1685)
+        LET_KW@[1653; 1656)
+        WHITESPACE@[1656; 1657)
+        BIND_PAT@[1657; 1659)
+          NAME@[1657; 1659)
+            IDENT@[1657; 1659) "_c"
+        WHITESPACE@[1659; 1660)
+        EQ@[1660; 1661)
+        WHITESPACE@[1661; 1662)
+        PAREN_EXPR@[1662; 1684)
+          L_PAREN@[1662; 1663)
+          BIN_EXPR@[1663; 1683)
+            MACRO_CALL@[1663; 1677)
+              PATH@[1663; 1669)
+                PATH_SEGMENT@[1663; 1669)
+                  NAME_REF@[1663; 1669)
+                    IDENT@[1663; 1669) "assert"
+              EXCL@[1669; 1670)
+              TOKEN_TREE@[1670; 1677)
+                L_PAREN@[1670; 1671)
+                TOKEN_TREE@[1671; 1676)
+                  L_PAREN@[1671; 1672)
+                  IDENT@[1672; 1673) "p"
+                  TOKEN_TREE@[1673; 1675)
+                    L_PAREN@[1673; 1674)
+                    R_PAREN@[1674; 1675)
+                  R_PAREN@[1675; 1676)
+                R_PAREN@[1676; 1677)
+            WHITESPACE@[1677; 1678)
+            EQEQ@[1678; 1680)
+            WHITESPACE@[1680; 1681)
+            TUPLE_EXPR@[1681; 1683)
+              L_PAREN@[1681; 1682)
+              R_PAREN@[1682; 1683)
+          R_PAREN@[1683; 1684)
+        SEMI@[1684; 1685)
+      WHITESPACE@[1685; 1690)
+      LET_STMT@[1690; 1739)
+        LET_KW@[1690; 1693)
+        WHITESPACE@[1693; 1694)
+        BIND_PAT@[1694; 1696)
+          NAME@[1694; 1696)
+            IDENT@[1694; 1696) "_b"
+        COLON@[1696; 1697)
+        WHITESPACE@[1697; 1698)
+        PATH_TYPE@[1698; 1702)
+          PATH@[1698; 1702)
+            PATH_SEGMENT@[1698; 1702)
+              NAME_REF@[1698; 1702)
+                IDENT@[1698; 1702) "bool"
+        WHITESPACE@[1702; 1703)
+        EQ@[1703; 1704)
+        WHITESPACE@[1704; 1705)
+        PAREN_EXPR@[1705; 1738)
+          L_PAREN@[1705; 1706)
+          BIN_EXPR@[1706; 1737)
+            MACRO_CALL@[1706; 1723)
+              PATH@[1706; 1713)
+                PATH_SEGMENT@[1706; 1713)
+                  NAME_REF@[1706; 1713)
+                    IDENT@[1706; 1713) "println"
+              EXCL@[1713; 1714)
+              TOKEN_TREE@[1714; 1723)
+                L_PAREN@[1714; 1715)
+                STRING@[1715; 1719)
+                COMMA@[1719; 1720)
+                WHITESPACE@[1720; 1721)
+                INT_NUMBER@[1721; 1722) "0"
+                R_PAREN@[1722; 1723)
+            WHITESPACE@[1723; 1724)
+            EQEQ@[1724; 1726)
+            WHITESPACE@[1726; 1727)
+            PAREN_EXPR@[1727; 1737)
+              L_PAREN@[1727; 1728)
+              RETURN_EXPR@[1728; 1736)
+                RETURN_KW@[1728; 1734)
+                WHITESPACE@[1734; 1735)
+                LITERAL@[1735; 1736)
+                  INT_NUMBER@[1735; 1736) "0"
+              R_PAREN@[1736; 1737)
+          R_PAREN@[1737; 1738)
+        SEMI@[1738; 1739)
+      WHITESPACE@[1739; 1740)
+      R_CURLY@[1740; 1741)
+  WHITESPACE@[1741; 1743)
+  FN_DEF@[1743; 1904)
+    FN_KW@[1743; 1745)
+    WHITESPACE@[1745; 1746)
+    NAME@[1746; 1755)
+      IDENT@[1746; 1755) "angrydome"
+    PARAM_LIST@[1755; 1757)
+      L_PAREN@[1755; 1756)
+      R_PAREN@[1756; 1757)
+    WHITESPACE@[1757; 1758)
+    BLOCK@[1758; 1904)
+      L_CURLY@[1758; 1759)
+      WHITESPACE@[1759; 1764)
+      EXPR_STMT@[1764; 1785)
+        LOOP_EXPR@[1764; 1785)
+          LOOP_KW@[1764; 1768)
+          WHITESPACE@[1768; 1769)
+          BLOCK@[1769; 1785)
+            L_CURLY@[1769; 1770)
+            WHITESPACE@[1770; 1771)
+            IF_EXPR@[1771; 1783)
+              IF_KW@[1771; 1773)
+              WHITESPACE@[1773; 1774)
+              CONDITION@[1774; 1779)
+                BREAK_EXPR@[1774; 1779)
+                  BREAK_KW@[1774; 1779)
+              WHITESPACE@[1779; 1780)
+              BLOCK@[1780; 1783)
+                L_CURLY@[1780; 1781)
+                WHITESPACE@[1781; 1782)
+                R_CURLY@[1782; 1783)
+            WHITESPACE@[1783; 1784)
+            R_CURLY@[1784; 1785)
+      WHITESPACE@[1785; 1790)
+      LET_STMT@[1790; 1804)
+        LET_KW@[1790; 1793)
+        WHITESPACE@[1793; 1794)
+        BIND_PAT@[1794; 1799)
+          MUT_KW@[1794; 1797)
+          WHITESPACE@[1797; 1798)
+          NAME@[1798; 1799)
+            IDENT@[1798; 1799) "i"
+        WHITESPACE@[1799; 1800)
+        EQ@[1800; 1801)
+        WHITESPACE@[1801; 1802)
+        LITERAL@[1802; 1803)
+          INT_NUMBER@[1802; 1803) "0"
+        SEMI@[1803; 1804)
+      WHITESPACE@[1804; 1809)
+      LOOP_EXPR@[1809; 1902)
+        LOOP_KW@[1809; 1813)
+        WHITESPACE@[1813; 1814)
+        BLOCK@[1814; 1902)
+          L_CURLY@[1814; 1815)
+          WHITESPACE@[1815; 1816)
+          EXPR_STMT@[1816; 1823)
+            BIN_EXPR@[1816; 1822)
+              PATH_EXPR@[1816; 1817)
+                PATH@[1816; 1817)
+                  PATH_SEGMENT@[1816; 1817)
+                    NAME_REF@[1816; 1817)
+                      IDENT@[1816; 1817) "i"
+              WHITESPACE@[1817; 1818)
+              PLUSEQ@[1818; 1820)
+              WHITESPACE@[1820; 1821)
+              LITERAL@[1821; 1822)
+                INT_NUMBER@[1821; 1822) "1"
+            SEMI@[1822; 1823)
+          WHITESPACE@[1823; 1824)
+          EXPR_STMT@[1824; 1887)
+            IF_EXPR@[1824; 1887)
+              IF_KW@[1824; 1826)
+              WHITESPACE@[1826; 1827)
+              CONDITION@[1827; 1833)
+                BIN_EXPR@[1827; 1833)
+                  PATH_EXPR@[1827; 1828)
+                    PATH@[1827; 1828)
+                      PATH_SEGMENT@[1827; 1828)
+                        NAME_REF@[1827; 1828)
+                          IDENT@[1827; 1828) "i"
+                  WHITESPACE@[1828; 1829)
+                  EQEQ@[1829; 1831)
+                  WHITESPACE@[1831; 1832)
+                  LITERAL@[1832; 1833)
+                    INT_NUMBER@[1832; 1833) "1"
+              WHITESPACE@[1833; 1834)
+              BLOCK@[1834; 1887)
+                L_CURLY@[1834; 1835)
+                WHITESPACE@[1835; 1836)
+                MATCH_EXPR@[1836; 1885)
+                  MATCH_KW@[1836; 1841)
+                  WHITESPACE@[1841; 1842)
+                  PAREN_EXPR@[1842; 1852)
+                    L_PAREN@[1842; 1843)
+                    CONTINUE_EXPR@[1843; 1851)
+                      CONTINUE_KW@[1843; 1851)
+                    R_PAREN@[1851; 1852)
+                  WHITESPACE@[1852; 1853)
+                  MATCH_ARM_LIST@[1853; 1885)
+                    L_CURLY@[1853; 1854)
+                    WHITESPACE@[1854; 1855)
+                    MATCH_ARM@[1855; 1863)
+                      LITERAL@[1855; 1856)
+                        INT_NUMBER@[1855; 1856) "1"
+                      WHITESPACE@[1856; 1857)
+                      FAT_ARROW@[1857; 1859)
+                      WHITESPACE@[1859; 1860)
+                      BLOCK_EXPR@[1860; 1863)
+                        BLOCK@[1860; 1863)
+                          L_CURLY@[1860; 1861)
+                          WHITESPACE@[1861; 1862)
+                          R_CURLY@[1862; 1863)
+                    COMMA@[1863; 1864)
+                    WHITESPACE@[1864; 1865)
+                    MATCH_ARM@[1865; 1883)
+                      PLACEHOLDER_PAT@[1865; 1866)
+                        UNDERSCORE@[1865; 1866)
+                      WHITESPACE@[1866; 1867)
+                      FAT_ARROW@[1867; 1869)
+                      WHITESPACE@[1869; 1870)
+                      MACRO_CALL@[1870; 1883)
+                        PATH@[1870; 1875)
+                          PATH_SEGMENT@[1870; 1875)
+                            NAME_REF@[1870; 1875)
+                              IDENT@[1870; 1875) "panic"
+                        EXCL@[1875; 1876)
+                        TOKEN_TREE@[1876; 1883)
+                          L_PAREN@[1876; 1877)
+                          STRING@[1877; 1882)
+                          R_PAREN@[1882; 1883)
+                    WHITESPACE@[1883; 1884)
+                    R_CURLY@[1884; 1885)
+                WHITESPACE@[1885; 1886)
+                R_CURLY@[1886; 1887)
+          WHITESPACE@[1887; 1894)
+          EXPR_STMT@[1894; 1900)
+            BREAK_EXPR@[1894; 1899)
+              BREAK_KW@[1894; 1899)
+            SEMI@[1899; 1900)
+          WHITESPACE@[1900; 1901)
+          R_CURLY@[1901; 1902)
+      WHITESPACE@[1902; 1903)
+      R_CURLY@[1903; 1904)
+  WHITESPACE@[1904; 1906)
+  FN_DEF@[1906; 1960)
+    FN_KW@[1906; 1908)
+    WHITESPACE@[1908; 1909)
+    NAME@[1909; 1921)
+      IDENT@[1909; 1921) "evil_lincoln"
+    PARAM_LIST@[1921; 1923)
+      L_PAREN@[1921; 1922)
+      R_PAREN@[1922; 1923)
+    WHITESPACE@[1923; 1924)
+    BLOCK@[1924; 1960)
+      L_CURLY@[1924; 1925)
       WHITESPACE@[1925; 1926)
-      R_CURLY@[1926; 1927)
-  WHITESPACE@[1927; 1929)
-  FN_DEF@[1929; 2422)
-    FN_KW@[1929; 1931)
-    WHITESPACE@[1931; 1932)
-    NAME@[1932; 1934)
-      IDENT@[1932; 1934) "u8"
-    PARAM_LIST@[1934; 1942)
-      L_PAREN@[1934; 1935)
-      PARAM@[1935; 1941)
-        BIND_PAT@[1935; 1937)
-          NAME@[1935; 1937)
-            IDENT@[1935; 1937) "u8"
-        COLON@[1937; 1938)
-        WHITESPACE@[1938; 1939)
-        PATH_TYPE@[1939; 1941)
-          PATH@[1939; 1941)
-            PATH_SEGMENT@[1939; 1941)
-              NAME_REF@[1939; 1941)
-                IDENT@[1939; 1941) "u8"
-      R_PAREN@[1941; 1942)
-    WHITESPACE@[1942; 1943)
-    BLOCK@[1943; 2422)
-      L_CURLY@[1943; 1944)
-      WHITESPACE@[1944; 1949)
-      IF_EXPR@[1949; 2420)
-        IF_KW@[1949; 1951)
-        WHITESPACE@[1951; 1952)
-        CONDITION@[1952; 1961)
-          BIN_EXPR@[1952; 1961)
-            PATH_EXPR@[1952; 1954)
-              PATH@[1952; 1954)
-                PATH_SEGMENT@[1952; 1954)
-                  NAME_REF@[1952; 1954)
-                    IDENT@[1952; 1954) "u8"
-            WHITESPACE@[1954; 1955)
-            NEQ@[1955; 1957)
-            WHITESPACE@[1957; 1958)
-            LITERAL@[1958; 1961)
-              INT_NUMBER@[1958; 1961) "0u8"
-        WHITESPACE@[1961; 1962)
-        BLOCK@[1962; 2420)
-          L_CURLY@[1962; 1963)
-          WHITESPACE@[1963; 1972)
-          EXPR_STMT@[1972; 2414)
-            MACRO_CALL@[1972; 2413)
-              PATH@[1972; 1981)
-                PATH_SEGMENT@[1972; 1981)
-                  NAME_REF@[1972; 1981)
-                    IDENT@[1972; 1981) "assert_eq"
-              EXCL@[1981; 1982)
-              TOKEN_TREE@[1982; 2413)
-                L_PAREN@[1982; 1983)
-                INT_NUMBER@[1983; 1986) "8u8"
-                COMMA@[1986; 1987)
-                WHITESPACE@[1987; 1988)
-                TOKEN_TREE@[1988; 2412)
-                  L_CURLY@[1988; 1989)
-                  WHITESPACE@[1989; 2002)
-                  IDENT@[2002; 2013) "macro_rules"
-                  EXCL@[2013; 2014)
-                  WHITESPACE@[2014; 2015)
-                  IDENT@[2015; 2017) "u8"
-                  WHITESPACE@[2017; 2018)
-                  TOKEN_TREE@[2018; 2296)
-                    L_CURLY@[2018; 2019)
-                    WHITESPACE@[2019; 2036)
-                    TOKEN_TREE@[2036; 2040)
-                      L_PAREN@[2036; 2037)
-                      IDENT@[2037; 2039) "u8"
-                      R_PAREN@[2039; 2040)
-                    WHITESPACE@[2040; 2041)
-                    FAT_ARROW@[2041; 2043)
-                    WHITESPACE@[2043; 2044)
-                    TOKEN_TREE@[2044; 2281)
-                      L_CURLY@[2044; 2045)
-                      WHITESPACE@[2045; 2066)
-                      MOD_KW@[2066; 2069)
-                      WHITESPACE@[2069; 2070)
-                      IDENT@[2070; 2072) "u8"
-                      WHITESPACE@[2072; 2073)
-                      TOKEN_TREE@[2073; 2263)
-                        L_CURLY@[2073; 2074)
-                        WHITESPACE@[2074; 2099)
-                        PUB_KW@[2099; 2102)
-                        WHITESPACE@[2102; 2103)
-                        FN_KW@[2103; 2105)
-                        WHITESPACE@[2105; 2106)
-                        IDENT@[2106; 2108) "u8"
-                        L_ANGLE@[2108; 2109)
-                        LIFETIME@[2109; 2112) "'u8"
-                        COLON@[2112; 2113)
-                        WHITESPACE@[2113; 2114)
-                        LIFETIME@[2114; 2117) "'u8"
-                        WHITESPACE@[2117; 2118)
-                        PLUS@[2118; 2119)
-                        WHITESPACE@[2119; 2120)
-                        LIFETIME@[2120; 2123) "'u8"
-                        R_ANGLE@[2123; 2124)
-                        TOKEN_TREE@[2124; 2137)
-                          L_PAREN@[2124; 2125)
-                          IDENT@[2125; 2127) "u8"
-                          COLON@[2127; 2128)
-                          WHITESPACE@[2128; 2129)
-                          AMP@[2129; 2130)
-                          LIFETIME@[2130; 2133) "'u8"
-                          WHITESPACE@[2133; 2134)
-                          IDENT@[2134; 2136) "u8"
-                          R_PAREN@[2136; 2137)
-                        WHITESPACE@[2137; 2138)
-                        THIN_ARROW@[2138; 2140)
-                        WHITESPACE@[2140; 2141)
-                        AMP@[2141; 2142)
-                        LIFETIME@[2142; 2145) "'u8"
-                        WHITESPACE@[2145; 2146)
-                        IDENT@[2146; 2148) "u8"
-                        WHITESPACE@[2148; 2149)
-                        TOKEN_TREE@[2149; 2241)
-                          L_CURLY@[2149; 2150)
-                          WHITESPACE@[2150; 2179)
-                          STRING@[2179; 2183)
-                          SEMI@[2183; 2184)
-                          WHITESPACE@[2184; 2213)
-                          IDENT@[2213; 2215) "u8"
-                          WHITESPACE@[2215; 2240)
-                          R_CURLY@[2240; 2241)
-                        WHITESPACE@[2241; 2262)
-                        R_CURLY@[2262; 2263)
-                      WHITESPACE@[2263; 2280)
-                      R_CURLY@[2280; 2281)
-                    SEMI@[2281; 2282)
-                    WHITESPACE@[2282; 2295)
-                    R_CURLY@[2295; 2296)
-                  WHITESPACE@[2296; 2310)
-                  IDENT@[2310; 2312) "u8"
-                  EXCL@[2312; 2313)
-                  TOKEN_TREE@[2313; 2317)
-                    L_PAREN@[2313; 2314)
-                    IDENT@[2314; 2316) "u8"
-                    R_PAREN@[2316; 2317)
-                  SEMI@[2317; 2318)
-                  WHITESPACE@[2318; 2331)
-                  LET_KW@[2331; 2334)
-                  WHITESPACE@[2334; 2335)
-                  AMP@[2335; 2336)
-                  IDENT@[2336; 2338) "u8"
-                  COLON@[2338; 2339)
-                  WHITESPACE@[2339; 2340)
-                  AMP@[2340; 2341)
-                  IDENT@[2341; 2343) "u8"
-                  WHITESPACE@[2343; 2344)
-                  EQ@[2344; 2345)
-                  WHITESPACE@[2345; 2346)
-                  IDENT@[2346; 2348) "u8"
-                  COLONCOLON@[2348; 2350)
-                  IDENT@[2350; 2352) "u8"
-                  TOKEN_TREE@[2352; 2358)
-                    L_PAREN@[2352; 2353)
-                    AMP@[2353; 2354)
-                    INT_NUMBER@[2354; 2357) "8u8"
-                    R_PAREN@[2357; 2358)
-                  SEMI@[2358; 2359)
-                  WHITESPACE@[2359; 2372)
-                  CRATE_KW@[2372; 2377)
-                  COLONCOLON@[2377; 2379)
-                  IDENT@[2379; 2381) "u8"
-                  TOKEN_TREE@[2381; 2386)
-                    L_PAREN@[2381; 2382)
-                    INT_NUMBER@[2382; 2385) "0u8"
-                    R_PAREN@[2385; 2386)
-                  SEMI@[2386; 2387)
-                  WHITESPACE@[2387; 2400)
-                  IDENT@[2400; 2402) "u8"
-                  WHITESPACE@[2402; 2411)
-                  R_CURLY@[2411; 2412)
-                R_PAREN@[2412; 2413)
-            SEMI@[2413; 2414)
-          WHITESPACE@[2414; 2419)
-          R_CURLY@[2419; 2420)
-      WHITESPACE@[2420; 2421)
-      R_CURLY@[2421; 2422)
-  WHITESPACE@[2422; 2424)
-  FN_DEF@[2424; 2561)
-    FN_KW@[2424; 2426)
-    WHITESPACE@[2426; 2427)
-    NAME@[2427; 2432)
-      IDENT@[2427; 2432) "fishy"
-    PARAM_LIST@[2432; 2434)
-      L_PAREN@[2432; 2433)
-      R_PAREN@[2433; 2434)
-    WHITESPACE@[2434; 2435)
-    BLOCK@[2435; 2561)
-      L_CURLY@[2435; 2436)
-      WHITESPACE@[2436; 2441)
-      EXPR_STMT@[2441; 2559)
-        MACRO_CALL@[2441; 2558)
-          PATH@[2441; 2450)
-            PATH_SEGMENT@[2441; 2450)
-              NAME_REF@[2441; 2450)
-                IDENT@[2441; 2450) "assert_eq"
-          EXCL@[2450; 2451)
-          TOKEN_TREE@[2451; 2558)
-            L_PAREN@[2451; 2452)
-            IDENT@[2452; 2458) "String"
-            COLONCOLON@[2458; 2460)
-            IDENT@[2460; 2464) "from"
-            TOKEN_TREE@[2464; 2471)
-              L_PAREN@[2464; 2465)
-              STRING@[2465; 2470)
-              R_PAREN@[2470; 2471)
-            COMMA@[2471; 2472)
-            WHITESPACE@[2472; 2488)
-            IDENT@[2488; 2494) "String"
-            COLONCOLON@[2494; 2496)
-            L_ANGLE@[2496; 2497)
-            R_ANGLE@[2497; 2498)
-            COLONCOLON@[2498; 2500)
-            IDENT@[2500; 2504) "from"
-            COLONCOLON@[2504; 2506)
-            L_ANGLE@[2506; 2507)
-            R_ANGLE@[2507; 2508)
-            TOKEN_TREE@[2508; 2515)
-              L_PAREN@[2508; 2509)
-              STRING@[2509; 2514)
-              R_PAREN@[2514; 2515)
-            DOT@[2515; 2516)
-            IDENT@[2516; 2521) "chars"
-            COLONCOLON@[2521; 2523)
-            L_ANGLE@[2523; 2524)
-            R_ANGLE@[2524; 2525)
-            TOKEN_TREE@[2525; 2527)
-              L_PAREN@[2525; 2526)
-              R_PAREN@[2526; 2527)
-            DOT@[2527; 2528)
-            IDENT@[2528; 2531) "rev"
-            COLONCOLON@[2531; 2533)
-            L_ANGLE@[2533; 2534)
-            R_ANGLE@[2534; 2535)
-            TOKEN_TREE@[2535; 2537)
-              L_PAREN@[2535; 2536)
-              R_PAREN@[2536; 2537)
-            DOT@[2537; 2538)
-            IDENT@[2538; 2545) "collect"
-            COLONCOLON@[2545; 2547)
-            L_ANGLE@[2547; 2548)
-            IDENT@[2548; 2554) "String"
-            R_ANGLE@[2554; 2555)
-            TOKEN_TREE@[2555; 2557)
-              L_PAREN@[2555; 2556)
-              R_PAREN@[2556; 2557)
-            R_PAREN@[2557; 2558)
-        SEMI@[2558; 2559)
-      WHITESPACE@[2559; 2560)
-      R_CURLY@[2560; 2561)
-  WHITESPACE@[2561; 2563)
-  FN_DEF@[2563; 2635)
-    FN_KW@[2563; 2565)
-    WHITESPACE@[2565; 2566)
-    NAME@[2566; 2571)
-      IDENT@[2566; 2571) "union"
-    PARAM_LIST@[2571; 2573)
-      L_PAREN@[2571; 2572)
-      R_PAREN@[2572; 2573)
-    WHITESPACE@[2573; 2574)
-    BLOCK@[2574; 2635)
-      L_CURLY@[2574; 2575)
-      WHITESPACE@[2575; 2580)
-      STRUCT_DEF@[2580; 2633)
-        UNION_KW@[2580; 2585)
-        WHITESPACE@[2585; 2586)
-        NAME@[2586; 2591)
-          IDENT@[2586; 2591) "union"
-        TYPE_PARAM_LIST@[2591; 2599)
-          L_ANGLE@[2591; 2592)
-          LIFETIME_PARAM@[2592; 2598)
-            LIFETIME@[2592; 2598) "'union"
-          R_ANGLE@[2598; 2599)
-        WHITESPACE@[2599; 2600)
-        NAMED_FIELD_DEF_LIST@[2600; 2633)
-          L_CURLY@[2600; 2601)
-          WHITESPACE@[2601; 2602)
-          NAMED_FIELD_DEF@[2602; 2630)
-            NAME@[2602; 2607)
-              IDENT@[2602; 2607) "union"
-            COLON@[2607; 2608)
-            WHITESPACE@[2608; 2609)
-            REFERENCE_TYPE@[2609; 2630)
-              AMP@[2609; 2610)
-              LIFETIME@[2610; 2616) "'union"
-              WHITESPACE@[2616; 2617)
-              PATH_TYPE@[2617; 2630)
-                PATH@[2617; 2630)
-                  PATH_SEGMENT@[2617; 2630)
-                    NAME_REF@[2617; 2622)
-                      IDENT@[2617; 2622) "union"
-                    TYPE_ARG_LIST@[2622; 2630)
-                      L_ANGLE@[2622; 2623)
-                      LIFETIME_ARG@[2623; 2629)
-                        LIFETIME@[2623; 2629) "'union"
-                      R_ANGLE@[2629; 2630)
-          COMMA@[2630; 2631)
-          WHITESPACE@[2631; 2632)
-          R_CURLY@[2632; 2633)
-      WHITESPACE@[2633; 2634)
-      R_CURLY@[2634; 2635)
-  WHITESPACE@[2635; 2637)
-  FN_DEF@[2637; 2771)
-    FN_KW@[2637; 2639)
-    WHITESPACE@[2639; 2640)
-    NAME@[2640; 2658)
-      IDENT@[2640; 2658) "special_characters"
-    PARAM_LIST@[2658; 2660)
-      L_PAREN@[2658; 2659)
-      R_PAREN@[2659; 2660)
-    WHITESPACE@[2660; 2661)
-    BLOCK@[2661; 2771)
-      L_CURLY@[2661; 2662)
-      WHITESPACE@[2662; 2667)
-      LET_STMT@[2667; 2750)
-        LET_KW@[2667; 2670)
-        WHITESPACE@[2670; 2671)
-        BIND_PAT@[2671; 2674)
-          NAME@[2671; 2674)
-            IDENT@[2671; 2674) "val"
-        WHITESPACE@[2674; 2675)
-        EQ@[2675; 2676)
-        WHITESPACE@[2676; 2677)
-        PREFIX_EXPR@[2677; 2742)
-          EXCL@[2677; 2678)
-          PAREN_EXPR@[2678; 2742)
-            L_PAREN@[2678; 2679)
-            BIN_EXPR@[2679; 2741)
-              CALL_EXPR@[2679; 2724)
-                PAREN_EXPR@[2679; 2700)
-                  L_PAREN@[2679; 2680)
-                  LAMBDA_EXPR@[2680; 2699)
-                    PARAM_LIST@[2680; 2697)
-                      PIPE@[2680; 2681)
-                      PARAM@[2681; 2691)
-                        TUPLE_PAT@[2681; 2685)
-                          L_PAREN@[2681; 2682)
-                          DOTDOT@[2682; 2684)
-                          R_PAREN@[2684; 2685)
-                        COLON@[2685; 2686)
-                        TUPLE_TYPE@[2686; 2691)
-                          L_PAREN@[2686; 2687)
-                          PLACEHOLDER_TYPE@[2687; 2688)
-                            UNDERSCORE@[2687; 2688)
-                          COMMA@[2688; 2689)
-                          PLACEHOLDER_TYPE@[2689; 2690)
-                            UNDERSCORE@[2689; 2690)
-                          R_PAREN@[2690; 2691)
-                      COMMA@[2691; 2692)
-                      PARAM@[2692; 2696)
-                        BIND_PAT@[2692; 2696)
-                          NAME@[2692; 2694)
-                            IDENT@[2692; 2694) "__"
-                          AT@[2694; 2695)
-                          PLACEHOLDER_PAT@[2695; 2696)
-                            UNDERSCORE@[2695; 2696)
-                      PIPE@[2696; 2697)
-                    PATH_EXPR@[2697; 2699)
-                      PATH@[2697; 2699)
-                        PATH_SEGMENT@[2697; 2699)
-                          NAME_REF@[2697; 2699)
-                            IDENT@[2697; 2699) "__"
-                  R_PAREN@[2699; 2700)
-                ARG_LIST@[2700; 2724)
-                  L_PAREN@[2700; 2701)
-                  TUPLE_EXPR@[2701; 2716)
-                    L_PAREN@[2701; 2702)
-                    REF_EXPR@[2702; 2708)
-                      AMP@[2702; 2703)
-                      PREFIX_EXPR@[2703; 2708)
-                        STAR@[2703; 2704)
-                        LITERAL@[2704; 2708)
-                          STRING@[2704; 2708)
-                    COMMA@[2708; 2709)
-                    LITERAL@[2709; 2715)
-                      CHAR@[2709; 2715)
-                    R_PAREN@[2715; 2716)
-                  COMMENT@[2716; 2720)
-                  COMMA@[2720; 2721)
-                  BLOCK_EXPR@[2721; 2723)
-                    BLOCK@[2721; 2723)
-                      L_CURLY@[2721; 2722)
-                      R_CURLY@[2722; 2723)
-                  R_PAREN@[2723; 2724)
-              EQEQ@[2724; 2726)
-              BLOCK_EXPR@[2726; 2741)
-                BLOCK@[2726; 2741)
-                  L_CURLY@[2726; 2727)
-                  EXPR_STMT@[2727; 2740)
-                    REF_EXPR@[2727; 2739)
-                      AMP@[2727; 2728)
-                      INDEX_EXPR@[2728; 2739)
-                        ARRAY_EXPR@[2728; 2735)
-                          L_BRACK@[2728; 2729)
-                          RANGE_EXPR@[2729; 2734)
-                            DOTDOTEQ@[2729; 2732)
-                            RANGE_EXPR@[2732; 2734)
-                              DOTDOT@[2732; 2734)
-                          R_BRACK@[2734; 2735)
-                        L_BRACK@[2735; 2736)
-                        RANGE_EXPR@[2736; 2738)
-                          DOTDOT@[2736; 2738)
-                        R_BRACK@[2738; 2739)
-                    SEMI@[2739; 2740)
-                  R_CURLY@[2740; 2741)
-            R_PAREN@[2741; 2742)
-        COMMENT@[2742; 2744)
-        WHITESPACE@[2744; 2749)
-        SEMI@[2749; 2750)
-      WHITESPACE@[2750; 2755)
-      EXPR_STMT@[2755; 2769)
-        MACRO_CALL@[2755; 2768)
-          PATH@[2755; 2761)
-            PATH_SEGMENT@[2755; 2761)
-              NAME_REF@[2755; 2761)
-                IDENT@[2755; 2761) "assert"
-          EXCL@[2761; 2762)
-          TOKEN_TREE@[2762; 2768)
-            L_PAREN@[2762; 2763)
-            EXCL@[2763; 2764)
-            IDENT@[2764; 2767) "val"
-            R_PAREN@[2767; 2768)
-        SEMI@[2768; 2769)
-      WHITESPACE@[2769; 2770)
-      R_CURLY@[2770; 2771)
-  WHITESPACE@[2771; 2773)
-  FN_DEF@[2773; 3243)
-    FN_KW@[2773; 2775)
-    WHITESPACE@[2775; 2776)
-    NAME@[2776; 2786)
-      IDENT@[2776; 2786) "punch_card"
-    PARAM_LIST@[2786; 2788)
-      L_PAREN@[2786; 2787)
-      R_PAREN@[2787; 2788)
-    WHITESPACE@[2788; 2789)
-    RET_TYPE@[2789; 2812)
-      THIN_ARROW@[2789; 2791)
-      WHITESPACE@[2791; 2792)
-      IMPL_TRAIT_TYPE@[2792; 2812)
-        IMPL_KW@[2792; 2796)
-        WHITESPACE@[2796; 2797)
-        PATH_TYPE@[2797; 2812)
-          PATH@[2797; 2812)
-            PATH@[2797; 2805)
-              PATH@[2797; 2800)
-                PATH_SEGMENT@[2797; 2800)
-                  NAME_REF@[2797; 2800)
-                    IDENT@[2797; 2800) "std"
-              COLONCOLON@[2800; 2802)
-              PATH_SEGMENT@[2802; 2805)
-                NAME_REF@[2802; 2805)
-                  IDENT@[2802; 2805) "fmt"
-            COLONCOLON@[2805; 2807)
-            PATH_SEGMENT@[2807; 2812)
-              NAME_REF@[2807; 2812)
-                IDENT@[2807; 2812) "Debug"
-    WHITESPACE@[2812; 2813)
-    BLOCK@[2813; 3243)
-      L_CURLY@[2813; 2814)
-      WHITESPACE@[2814; 2819)
-      RANGE_EXPR@[2819; 3241)
-        DOTDOTEQ@[2819; 2822)
-        RANGE_EXPR@[2822; 3241)
-          DOTDOTEQ@[2822; 2825)
-          RANGE_EXPR@[2825; 3241)
-            DOTDOT@[2825; 2827)
-            WHITESPACE@[2827; 2828)
-            RANGE_EXPR@[2828; 3241)
-              DOTDOT@[2828; 2830)
-              WHITESPACE@[2830; 2834)
-              RANGE_EXPR@[2834; 3241)
-                DOTDOT@[2834; 2836)
-                WHITESPACE@[2836; 2837)
-                RANGE_EXPR@[2837; 3241)
-                  DOTDOT@[2837; 2839)
-                  WHITESPACE@[2839; 2840)
-                  RANGE_EXPR@[2840; 3241)
-                    DOTDOT@[2840; 2842)
-                    WHITESPACE@[2842; 2843)
-                    RANGE_EXPR@[2843; 3241)
-                      DOTDOT@[2843; 2845)
-                      WHITESPACE@[2845; 2849)
-                      RANGE_EXPR@[2849; 3241)
-                        DOTDOT@[2849; 2851)
-                        WHITESPACE@[2851; 2852)
-                        RANGE_EXPR@[2852; 3241)
-                          DOTDOT@[2852; 2854)
-                          WHITESPACE@[2854; 2855)
-                          RANGE_EXPR@[2855; 3241)
-                            DOTDOT@[2855; 2857)
-                            WHITESPACE@[2857; 2858)
-                            RANGE_EXPR@[2858; 3241)
-                              DOTDOT@[2858; 2860)
-                              WHITESPACE@[2860; 2864)
-                              RANGE_EXPR@[2864; 3241)
-                                DOTDOT@[2864; 2866)
-                                WHITESPACE@[2866; 2867)
-                                RANGE_EXPR@[2867; 3241)
-                                  DOTDOTEQ@[2867; 2870)
-                                  RANGE_EXPR@[2870; 3241)
-                                    DOTDOT@[2870; 2872)
-                                    WHITESPACE@[2872; 2873)
-                                    RANGE_EXPR@[2873; 3241)
-                                      DOTDOT@[2873; 2875)
-                                      WHITESPACE@[2875; 2880)
-                                      RANGE_EXPR@[2880; 3241)
-                                        DOTDOTEQ@[2880; 2883)
-                                        RANGE_EXPR@[2883; 3241)
-                                          DOTDOT@[2883; 2885)
-                                          WHITESPACE@[2885; 2886)
-                                          RANGE_EXPR@[2886; 3241)
-                                            DOTDOTEQ@[2886; 2889)
-                                            RANGE_EXPR@[2889; 3241)
-                                              DOTDOT@[2889; 2891)
-                                              WHITESPACE@[2891; 2895)
-                                              RANGE_EXPR@[2895; 3241)
-                                                DOTDOT@[2895; 2897)
-                                                WHITESPACE@[2897; 2898)
-                                                RANGE_EXPR@[2898; 3241)
-                                                  DOTDOT@[2898; 2900)
-                                                  WHITESPACE@[2900; 2901)
-                                                  RANGE_EXPR@[2901; 3241)
-                                                    DOTDOT@[2901; 2903)
-                                                    WHITESPACE@[2903; 2904)
-                                                    RANGE_EXPR@[2904; 3241)
-                                                      DOTDOT@[2904; 2906)
-                                                      WHITESPACE@[2906; 2910)
-                                                      RANGE_EXPR@[2910; 3241)
-                                                        DOTDOT@[2910; 2912)
-                                                        WHITESPACE@[2912; 2913)
-                                                        RANGE_EXPR@[2913; 3241)
-                                                          DOTDOT@[2913; 2915)
-                                                          WHITESPACE@[2915; 2916)
-                                                          RANGE_EXPR@[2916; 3241)
-                                                            DOTDOT@[2916; 2918)
-                                                            WHITESPACE@[2918; 2919)
-                                                            RANGE_EXPR@[2919; 3241)
-                                                              DOTDOT@[2919; 2921)
-                                                              WHITESPACE@[2921; 2925)
-                                                              RANGE_EXPR@[2925; 3241)
-                                                                DOTDOTEQ@[2925; 2928)
-                                                                RANGE_EXPR@[2928; 3241)
-                                                                  DOTDOTEQ@[2928; 2931)
-                                                                  RANGE_EXPR@[2931; 3241)
-                                                                    DOTDOTEQ@[2931; 2934)
-                                                                    RANGE_EXPR@[2934; 3241)
-                                                                      DOTDOT@[2934; 2936)
-                                                                      WHITESPACE@[2936; 2941)
-                                                                      RANGE_EXPR@[2941; 3241)
-                                                                        DOTDOTEQ@[2941; 2944)
-                                                                        RANGE_EXPR@[2944; 3241)
-                                                                          DOTDOT@[2944; 2946)
-                                                                          WHITESPACE@[2946; 2947)
-                                                                          RANGE_EXPR@[2947; 3241)
-                                                                            DOTDOTEQ@[2947; 2950)
-                                                                            RANGE_EXPR@[2950; 3241)
-                                                                              DOTDOT@[2950; 2952)
-                                                                              WHITESPACE@[2952; 2956)
-                                                                              RANGE_EXPR@[2956; 3241)
-                                                                                DOTDOTEQ@[2956; 2959)
-                                                                                RANGE_EXPR@[2959; 3241)
-                                                                                  DOTDOT@[2959; 2961)
-                                                                                  WHITESPACE@[2961; 2962)
-                                                                                  RANGE_EXPR@[2962; 3241)
-                                                                                    DOTDOTEQ@[2962; 2965)
-                                                                                    RANGE_EXPR@[2965; 3241)
-                                                                                      DOTDOT@[2965; 2967)
-                                                                                      WHITESPACE@[2967; 2971)
-                                                                                      RANGE_EXPR@[2971; 3241)
-                                                                                        DOTDOT@[2971; 2973)
-                                                                                        WHITESPACE@[2973; 2974)
-                                                                                        RANGE_EXPR@[2974; 3241)
-                                                                                          DOTDOTEQ@[2974; 2977)
-                                                                                          RANGE_EXPR@[2977; 3241)
-                                                                                            DOTDOTEQ@[2977; 2980)
-                                                                                            RANGE_EXPR@[2980; 3241)
-                                                                                              DOTDOT@[2980; 2982)
-                                                                                              WHITESPACE@[2982; 2986)
-                                                                                              RANGE_EXPR@[2986; 3241)
-                                                                                                DOTDOT@[2986; 2988)
-                                                                                                WHITESPACE@[2988; 2989)
-                                                                                                RANGE_EXPR@[2989; 3241)
-                                                                                                  DOTDOTEQ@[2989; 2992)
-                                                                                                  RANGE_EXPR@[2992; 3241)
-                                                                                                    DOTDOT@[2992; 2994)
-                                                                                                    WHITESPACE@[2994; 2995)
-                                                                                                    RANGE_EXPR@[2995; 3241)
-                                                                                                      DOTDOT@[2995; 2997)
-                                                                                                      WHITESPACE@[2997; 3002)
-                                                                                                      RANGE_EXPR@[3002; 3241)
-                                                                                                        DOTDOTEQ@[3002; 3005)
-                                                                                                        RANGE_EXPR@[3005; 3241)
-                                                                                                          DOTDOTEQ@[3005; 3008)
-                                                                                                          RANGE_EXPR@[3008; 3241)
-                                                                                                            DOTDOT@[3008; 3010)
-                                                                                                            WHITESPACE@[3010; 3011)
-                                                                                                            RANGE_EXPR@[3011; 3241)
-                                                                                                              DOTDOT@[3011; 3013)
-                                                                                                              WHITESPACE@[3013; 3017)
-                                                                                                              RANGE_EXPR@[3017; 3241)
-                                                                                                                DOTDOTEQ@[3017; 3020)
-                                                                                                                RANGE_EXPR@[3020; 3241)
-                                                                                                                  DOTDOT@[3020; 3022)
-                                                                                                                  WHITESPACE@[3022; 3023)
-                                                                                                                  RANGE_EXPR@[3023; 3241)
-                                                                                                                    DOTDOTEQ@[3023; 3026)
-                                                                                                                    RANGE_EXPR@[3026; 3241)
-                                                                                                                      DOTDOT@[3026; 3028)
-                                                                                                                      WHITESPACE@[3028; 3032)
-                                                                                                                      RANGE_EXPR@[3032; 3241)
-                                                                                                                        DOTDOTEQ@[3032; 3035)
-                                                                                                                        RANGE_EXPR@[3035; 3241)
-                                                                                                                          DOTDOT@[3035; 3037)
-                                                                                                                          WHITESPACE@[3037; 3038)
-                                                                                                                          RANGE_EXPR@[3038; 3241)
-                                                                                                                            DOTDOT@[3038; 3040)
-                                                                                                                            WHITESPACE@[3040; 3041)
-                                                                                                                            RANGE_EXPR@[3041; 3241)
-                                                                                                                              DOTDOT@[3041; 3043)
-                                                                                                                              WHITESPACE@[3043; 3047)
-                                                                                                                              RANGE_EXPR@[3047; 3241)
-                                                                                                                                DOTDOT@[3047; 3049)
-                                                                                                                                WHITESPACE@[3049; 3050)
-                                                                                                                                RANGE_EXPR@[3050; 3241)
-                                                                                                                                  DOTDOTEQ@[3050; 3053)
-                                                                                                                                  RANGE_EXPR@[3053; 3241)
-                                                                                                                                    DOTDOT@[3053; 3055)
-                                                                                                                                    WHITESPACE@[3055; 3056)
-                                                                                                                                    RANGE_EXPR@[3056; 3241)
-                                                                                                                                      DOTDOT@[3056; 3058)
-                                                                                                                                      WHITESPACE@[3058; 3063)
-                                                                                                                                      RANGE_EXPR@[3063; 3241)
-                                                                                                                                        DOTDOTEQ@[3063; 3066)
-                                                                                                                                        RANGE_EXPR@[3066; 3241)
-                                                                                                                                          DOTDOT@[3066; 3068)
-                                                                                                                                          WHITESPACE@[3068; 3069)
-                                                                                                                                          RANGE_EXPR@[3069; 3241)
-                                                                                                                                            DOTDOTEQ@[3069; 3072)
-                                                                                                                                            RANGE_EXPR@[3072; 3241)
-                                                                                                                                              DOTDOT@[3072; 3074)
-                                                                                                                                              WHITESPACE@[3074; 3078)
-                                                                                                                                              RANGE_EXPR@[3078; 3241)
-                                                                                                                                                DOTDOTEQ@[3078; 3081)
-                                                                                                                                                RANGE_EXPR@[3081; 3241)
-                                                                                                                                                  DOTDOT@[3081; 3083)
-                                                                                                                                                  WHITESPACE@[3083; 3084)
-                                                                                                                                                  RANGE_EXPR@[3084; 3241)
-                                                                                                                                                    DOTDOTEQ@[3084; 3087)
-                                                                                                                                                    RANGE_EXPR@[3087; 3241)
-                                                                                                                                                      DOTDOT@[3087; 3089)
-                                                                                                                                                      WHITESPACE@[3089; 3093)
-                                                                                                                                                      RANGE_EXPR@[3093; 3241)
-                                                                                                                                                        DOTDOT@[3093; 3095)
-                                                                                                                                                        WHITESPACE@[3095; 3096)
-                                                                                                                                                        RANGE_EXPR@[3096; 3241)
-                                                                                                                                                          DOTDOTEQ@[3096; 3099)
-                                                                                                                                                          RANGE_EXPR@[3099; 3241)
-                                                                                                                                                            DOTDOT@[3099; 3101)
-                                                                                                                                                            WHITESPACE@[3101; 3102)
-                                                                                                                                                            RANGE_EXPR@[3102; 3241)
-                                                                                                                                                              DOTDOT@[3102; 3104)
-                                                                                                                                                              WHITESPACE@[3104; 3108)
-                                                                                                                                                              RANGE_EXPR@[3108; 3241)
-                                                                                                                                                                DOTDOT@[3108; 3110)
-                                                                                                                                                                WHITESPACE@[3110; 3111)
-                                                                                                                                                                RANGE_EXPR@[3111; 3241)
-                                                                                                                                                                  DOTDOTEQ@[3111; 3114)
-                                                                                                                                                                  RANGE_EXPR@[3114; 3241)
-                                                                                                                                                                    DOTDOT@[3114; 3116)
-                                                                                                                                                                    WHITESPACE@[3116; 3117)
-                                                                                                                                                                    RANGE_EXPR@[3117; 3241)
-                                                                                                                                                                      DOTDOT@[3117; 3119)
-                                                                                                                                                                      WHITESPACE@[3119; 3124)
-                                                                                                                                                                      RANGE_EXPR@[3124; 3241)
-                                                                                                                                                                        DOTDOTEQ@[3124; 3127)
-                                                                                                                                                                        RANGE_EXPR@[3127; 3241)
-                                                                                                                                                                          DOTDOT@[3127; 3129)
-                                                                                                                                                                          WHITESPACE@[3129; 3130)
-                                                                                                                                                                          RANGE_EXPR@[3130; 3241)
-                                                                                                                                                                            DOTDOTEQ@[3130; 3133)
-                                                                                                                                                                            RANGE_EXPR@[3133; 3241)
-                                                                                                                                                                              DOTDOT@[3133; 3135)
-                                                                                                                                                                              WHITESPACE@[3135; 3139)
-                                                                                                                                                                              RANGE_EXPR@[3139; 3241)
-                                                                                                                                                                                DOTDOTEQ@[3139; 3142)
-                                                                                                                                                                                RANGE_EXPR@[3142; 3241)
-                                                                                                                                                                                  DOTDOT@[3142; 3144)
-                                                                                                                                                                                  WHITESPACE@[3144; 3145)
-                                                                                                                                                                                  RANGE_EXPR@[3145; 3241)
-                                                                                                                                                                                    DOTDOTEQ@[3145; 3148)
-                                                                                                                                                                                    RANGE_EXPR@[3148; 3241)
-                                                                                                                                                                                      DOTDOT@[3148; 3150)
-                                                                                                                                                                                      WHITESPACE@[3150; 3154)
-                                                                                                                                                                                      RANGE_EXPR@[3154; 3241)
-                                                                                                                                                                                        DOTDOT@[3154; 3156)
-                                                                                                                                                                                        WHITESPACE@[3156; 3157)
-                                                                                                                                                                                        RANGE_EXPR@[3157; 3241)
-                                                                                                                                                                                          DOTDOT@[3157; 3159)
-                                                                                                                                                                                          WHITESPACE@[3159; 3160)
-                                                                                                                                                                                          RANGE_EXPR@[3160; 3241)
-                                                                                                                                                                                            DOTDOTEQ@[3160; 3163)
-                                                                                                                                                                                            RANGE_EXPR@[3163; 3241)
-                                                                                                                                                                                              DOTDOT@[3163; 3165)
-                                                                                                                                                                                              WHITESPACE@[3165; 3169)
-                                                                                                                                                                                              RANGE_EXPR@[3169; 3241)
-                                                                                                                                                                                                DOTDOT@[3169; 3171)
-                                                                                                                                                                                                WHITESPACE@[3171; 3172)
-                                                                                                                                                                                                RANGE_EXPR@[3172; 3241)
-                                                                                                                                                                                                  DOTDOTEQ@[3172; 3175)
-                                                                                                                                                                                                  RANGE_EXPR@[3175; 3241)
-                                                                                                                                                                                                    DOTDOT@[3175; 3177)
-                                                                                                                                                                                                    WHITESPACE@[3177; 3178)
-                                                                                                                                                                                                    RANGE_EXPR@[3178; 3241)
-                                                                                                                                                                                                      DOTDOT@[3178; 3180)
-                                                                                                                                                                                                      WHITESPACE@[3180; 3185)
-                                                                                                                                                                                                      RANGE_EXPR@[3185; 3241)
-                                                                                                                                                                                                        DOTDOTEQ@[3185; 3188)
-                                                                                                                                                                                                        RANGE_EXPR@[3188; 3241)
-                                                                                                                                                                                                          DOTDOT@[3188; 3190)
-                                                                                                                                                                                                          WHITESPACE@[3190; 3191)
-                                                                                                                                                                                                          RANGE_EXPR@[3191; 3241)
-                                                                                                                                                                                                            DOTDOTEQ@[3191; 3194)
-                                                                                                                                                                                                            RANGE_EXPR@[3194; 3241)
-                                                                                                                                                                                                              DOTDOT@[3194; 3196)
-                                                                                                                                                                                                              WHITESPACE@[3196; 3200)
-                                                                                                                                                                                                              RANGE_EXPR@[3200; 3241)
-                                                                                                                                                                                                                DOTDOT@[3200; 3202)
-                                                                                                                                                                                                                WHITESPACE@[3202; 3203)
-                                                                                                                                                                                                                RANGE_EXPR@[3203; 3241)
-                                                                                                                                                                                                                  DOTDOTEQ@[3203; 3206)
-                                                                                                                                                                                                                  RANGE_EXPR@[3206; 3241)
-                                                                                                                                                                                                                    DOTDOTEQ@[3206; 3209)
-                                                                                                                                                                                                                    RANGE_EXPR@[3209; 3241)
-                                                                                                                                                                                                                      DOTDOT@[3209; 3211)
-                                                                                                                                                                                                                      WHITESPACE@[3211; 3215)
-                                                                                                                                                                                                                      RANGE_EXPR@[3215; 3241)
-                                                                                                                                                                                                                        DOTDOTEQ@[3215; 3218)
-                                                                                                                                                                                                                        RANGE_EXPR@[3218; 3241)
-                                                                                                                                                                                                                          DOTDOTEQ@[3218; 3221)
-                                                                                                                                                                                                                          RANGE_EXPR@[3221; 3241)
-                                                                                                                                                                                                                            DOTDOT@[3221; 3223)
-                                                                                                                                                                                                                            WHITESPACE@[3223; 3224)
-                                                                                                                                                                                                                            RANGE_EXPR@[3224; 3241)
-                                                                                                                                                                                                                              DOTDOT@[3224; 3226)
-                                                                                                                                                                                                                              WHITESPACE@[3226; 3230)
-                                                                                                                                                                                                                              RANGE_EXPR@[3230; 3241)
-                                                                                                                                                                                                                                DOTDOT@[3230; 3232)
-                                                                                                                                                                                                                                WHITESPACE@[3232; 3233)
-                                                                                                                                                                                                                                RANGE_EXPR@[3233; 3241)
-                                                                                                                                                                                                                                  DOTDOTEQ@[3233; 3236)
-                                                                                                                                                                                                                                  RANGE_EXPR@[3236; 3241)
-                                                                                                                                                                                                                                    DOTDOT@[3236; 3238)
-                                                                                                                                                                                                                                    WHITESPACE@[3238; 3239)
-                                                                                                                                                                                                                                    RANGE_EXPR@[3239; 3241)
-                                                                                                                                                                                                                                      DOTDOT@[3239; 3241)
-      WHITESPACE@[3241; 3242)
-      R_CURLY@[3242; 3243)
-  WHITESPACE@[3243; 3245)
-  FN_DEF@[3245; 3281)
-    FN_KW@[3245; 3247)
-    WHITESPACE@[3247; 3248)
-    NAME@[3248; 3254)
-      IDENT@[3248; 3254) "ktulhu"
-    PARAM_LIST@[3254; 3256)
-      L_PAREN@[3254; 3255)
-      R_PAREN@[3255; 3256)
-    WHITESPACE@[3256; 3257)
-    BLOCK@[3257; 3281)
-      L_CURLY@[3257; 3258)
-      WHITESPACE@[3258; 3263)
-      SEMI@[3263; 3264)
-      SEMI@[3264; 3265)
-      SEMI@[3265; 3266)
-      EXPR_STMT@[3266; 3269)
-        TUPLE_EXPR@[3266; 3268)
-          L_PAREN@[3266; 3267)
-          R_PAREN@[3267; 3268)
-        SEMI@[3268; 3269)
-      SEMI@[3269; 3270)
-      SEMI@[3270; 3271)
-      SEMI@[3271; 3272)
-      SEMI@[3272; 3273)
-      SEMI@[3273; 3274)
-      SEMI@[3274; 3275)
-      SEMI@[3275; 3276)
-      SEMI@[3276; 3277)
-      TUPLE_EXPR@[3277; 3279)
-        L_PAREN@[3277; 3278)
-        R_PAREN@[3278; 3279)
-      WHITESPACE@[3279; 3280)
-      R_CURLY@[3280; 3281)
-  WHITESPACE@[3281; 3283)
-  FN_DEF@[3283; 3541)
-    VISIBILITY@[3283; 3286)
-      PUB_KW@[3283; 3286)
-    WHITESPACE@[3286; 3287)
-    FN_KW@[3287; 3289)
-    WHITESPACE@[3289; 3290)
-    NAME@[3290; 3294)
-      IDENT@[3290; 3294) "main"
-    PARAM_LIST@[3294; 3296)
-      L_PAREN@[3294; 3295)
-      R_PAREN@[3295; 3296)
-    WHITESPACE@[3296; 3297)
-    BLOCK@[3297; 3541)
-      L_CURLY@[3297; 3298)
-      WHITESPACE@[3298; 3303)
-      EXPR_STMT@[3303; 3313)
-        CALL_EXPR@[3303; 3312)
-          PATH_EXPR@[3303; 3310)
-            PATH@[3303; 3310)
-              PATH_SEGMENT@[3303; 3310)
-                NAME_REF@[3303; 3310)
-                  IDENT@[3303; 3310) "strange"
-          ARG_LIST@[3310; 3312)
-            L_PAREN@[3310; 3311)
-            R_PAREN@[3311; 3312)
-        SEMI@[3312; 3313)
-      WHITESPACE@[3313; 3318)
-      EXPR_STMT@[3318; 3326)
-        CALL_EXPR@[3318; 3325)
-          PATH_EXPR@[3318; 3323)
-            PATH@[3318; 3323)
-              PATH_SEGMENT@[3318; 3323)
-                NAME_REF@[3318; 3323)
-                  IDENT@[3318; 3323) "funny"
-          ARG_LIST@[3323; 3325)
-            L_PAREN@[3323; 3324)
-            R_PAREN@[3324; 3325)
-        SEMI@[3325; 3326)
-      WHITESPACE@[3326; 3331)
-      EXPR_STMT@[3331; 3338)
-        CALL_EXPR@[3331; 3337)
-          PATH_EXPR@[3331; 3335)
-            PATH@[3331; 3335)
-              PATH_SEGMENT@[3331; 3335)
-                NAME_REF@[3331; 3335)
-                  IDENT@[3331; 3335) "what"
-          ARG_LIST@[3335; 3337)
-            L_PAREN@[3335; 3336)
-            R_PAREN@[3336; 3337)
-        SEMI@[3337; 3338)
-      WHITESPACE@[3338; 3343)
-      EXPR_STMT@[3343; 3357)
-        CALL_EXPR@[3343; 3356)
-          PATH_EXPR@[3343; 3354)
-            PATH@[3343; 3354)
-              PATH_SEGMENT@[3343; 3354)
-                NAME_REF@[3343; 3354)
-                  IDENT@[3343; 3354) "zombiejesus"
-          ARG_LIST@[3354; 3356)
-            L_PAREN@[3354; 3355)
-            R_PAREN@[3355; 3356)
-        SEMI@[3356; 3357)
-      WHITESPACE@[3357; 3362)
-      EXPR_STMT@[3362; 3372)
-        CALL_EXPR@[3362; 3371)
-          PATH_EXPR@[3362; 3369)
-            PATH@[3362; 3369)
-              PATH_SEGMENT@[3362; 3369)
-                NAME_REF@[3362; 3369)
-                  IDENT@[3362; 3369) "notsure"
-          ARG_LIST@[3369; 3371)
-            L_PAREN@[3369; 3370)
-            R_PAREN@[3370; 3371)
-        SEMI@[3371; 3372)
-      WHITESPACE@[3372; 3377)
-      EXPR_STMT@[3377; 3393)
-        CALL_EXPR@[3377; 3392)
-          PATH_EXPR@[3377; 3390)
-            PATH@[3377; 3390)
-              PATH_SEGMENT@[3377; 3390)
-                NAME_REF@[3377; 3390)
-                  IDENT@[3377; 3390) "canttouchthis"
-          ARG_LIST@[3390; 3392)
-            L_PAREN@[3390; 3391)
-            R_PAREN@[3391; 3392)
-        SEMI@[3392; 3393)
-      WHITESPACE@[3393; 3398)
-      EXPR_STMT@[3398; 3410)
-        CALL_EXPR@[3398; 3409)
-          PATH_EXPR@[3398; 3407)
-            PATH@[3398; 3407)
-              PATH_SEGMENT@[3398; 3407)
-                NAME_REF@[3398; 3407)
-                  IDENT@[3398; 3407) "angrydome"
-          ARG_LIST@[3407; 3409)
-            L_PAREN@[3407; 3408)
-            R_PAREN@[3408; 3409)
-        SEMI@[3409; 3410)
-      WHITESPACE@[3410; 3415)
-      EXPR_STMT@[3415; 3430)
-        CALL_EXPR@[3415; 3429)
-          PATH_EXPR@[3415; 3427)
-            PATH@[3415; 3427)
-              PATH_SEGMENT@[3415; 3427)
-                NAME_REF@[3415; 3427)
-                  IDENT@[3415; 3427) "evil_lincoln"
-          ARG_LIST@[3427; 3429)
-            L_PAREN@[3427; 3428)
-            R_PAREN@[3428; 3429)
-        SEMI@[3429; 3430)
-      WHITESPACE@[3430; 3435)
-      EXPR_STMT@[3435; 3442)
-        CALL_EXPR@[3435; 3441)
-          PATH_EXPR@[3435; 3439)
-            PATH@[3435; 3439)
-              PATH_SEGMENT@[3435; 3439)
-                NAME_REF@[3435; 3439)
-                  IDENT@[3435; 3439) "dots"
-          ARG_LIST@[3439; 3441)
-            L_PAREN@[3439; 3440)
-            R_PAREN@[3440; 3441)
-        SEMI@[3441; 3442)
-      WHITESPACE@[3442; 3447)
-      EXPR_STMT@[3447; 3455)
-        CALL_EXPR@[3447; 3454)
-          PATH_EXPR@[3447; 3449)
-            PATH@[3447; 3449)
-              PATH_SEGMENT@[3447; 3449)
-                NAME_REF@[3447; 3449)
-                  IDENT@[3447; 3449) "u8"
-          ARG_LIST@[3449; 3454)
-            L_PAREN@[3449; 3450)
-            LITERAL@[3450; 3453)
-              INT_NUMBER@[3450; 3453) "8u8"
-            R_PAREN@[3453; 3454)
-        SEMI@[3454; 3455)
-      WHITESPACE@[3455; 3460)
-      EXPR_STMT@[3460; 3468)
-        CALL_EXPR@[3460; 3467)
-          PATH_EXPR@[3460; 3465)
-            PATH@[3460; 3465)
-              PATH_SEGMENT@[3460; 3465)
-                NAME_REF@[3460; 3465)
-                  IDENT@[3460; 3465) "fishy"
-          ARG_LIST@[3465; 3467)
-            L_PAREN@[3465; 3466)
-            R_PAREN@[3466; 3467)
-        SEMI@[3467; 3468)
-      WHITESPACE@[3468; 3473)
-      EXPR_STMT@[3473; 3481)
-        CALL_EXPR@[3473; 3480)
-          PATH_EXPR@[3473; 3478)
-            PATH@[3473; 3478)
-              PATH_SEGMENT@[3473; 3478)
-                NAME_REF@[3473; 3478)
-                  IDENT@[3473; 3478) "union"
-          ARG_LIST@[3478; 3480)
-            L_PAREN@[3478; 3479)
-            R_PAREN@[3479; 3480)
-        SEMI@[3480; 3481)
-      WHITESPACE@[3481; 3486)
-      EXPR_STMT@[3486; 3507)
-        CALL_EXPR@[3486; 3506)
-          PATH_EXPR@[3486; 3504)
-            PATH@[3486; 3504)
-              PATH_SEGMENT@[3486; 3504)
-                NAME_REF@[3486; 3504)
-                  IDENT@[3486; 3504) "special_characters"
-          ARG_LIST@[3504; 3506)
-            L_PAREN@[3504; 3505)
-            R_PAREN@[3505; 3506)
-        SEMI@[3506; 3507)
-      WHITESPACE@[3507; 3512)
-      EXPR_STMT@[3512; 3525)
-        CALL_EXPR@[3512; 3524)
-          PATH_EXPR@[3512; 3522)
-            PATH@[3512; 3522)
-              PATH_SEGMENT@[3512; 3522)
-                NAME_REF@[3512; 3522)
-                  IDENT@[3512; 3522) "punch_card"
-          ARG_LIST@[3522; 3524)
-            L_PAREN@[3522; 3523)
-            R_PAREN@[3523; 3524)
-        SEMI@[3524; 3525)
-      WHITESPACE@[3525; 3530)
-      EXPR_STMT@[3530; 3539)
-        CALL_EXPR@[3530; 3538)
-          PATH_EXPR@[3530; 3536)
-            PATH@[3530; 3536)
-              PATH_SEGMENT@[3530; 3536)
-                NAME_REF@[3530; 3536)
-                  IDENT@[3530; 3536) "ktulhu"
-          ARG_LIST@[3536; 3538)
-            L_PAREN@[3536; 3537)
-            R_PAREN@[3537; 3538)
-        SEMI@[3538; 3539)
-      WHITESPACE@[3539; 3540)
-      R_CURLY@[3540; 3541)
-  WHITESPACE@[3541; 3542)
+      LET_STMT@[1926; 1958)
+        LET_KW@[1926; 1929)
+        WHITESPACE@[1929; 1930)
+        BIND_PAT@[1930; 1935)
+          NAME@[1930; 1935)
+            IDENT@[1930; 1935) "_evil"
+        WHITESPACE@[1935; 1936)
+        EQ@[1936; 1937)
+        WHITESPACE@[1937; 1938)
+        MACRO_CALL@[1938; 1957)
+          PATH@[1938; 1945)
+            PATH_SEGMENT@[1938; 1945)
+              NAME_REF@[1938; 1945)
+                IDENT@[1938; 1945) "println"
+          EXCL@[1945; 1946)
+          TOKEN_TREE@[1946; 1957)
+            L_PAREN@[1946; 1947)
+            STRING@[1947; 1956)
+            R_PAREN@[1956; 1957)
+        SEMI@[1957; 1958)
+      WHITESPACE@[1958; 1959)
+      R_CURLY@[1959; 1960)
+  WHITESPACE@[1960; 1962)
+  FN_DEF@[1962; 2198)
+    FN_KW@[1962; 1964)
+    WHITESPACE@[1964; 1965)
+    NAME@[1965; 1969)
+      IDENT@[1965; 1969) "dots"
+    PARAM_LIST@[1969; 1971)
+      L_PAREN@[1969; 1970)
+      R_PAREN@[1970; 1971)
+    WHITESPACE@[1971; 1972)
+    BLOCK@[1972; 2198)
+      L_CURLY@[1972; 1973)
+      WHITESPACE@[1973; 1978)
+      EXPR_STMT@[1978; 2196)
+        MACRO_CALL@[1978; 2195)
+          PATH@[1978; 1987)
+            PATH_SEGMENT@[1978; 1987)
+              NAME_REF@[1978; 1987)
+                IDENT@[1978; 1987) "assert_eq"
+          EXCL@[1987; 1988)
+          TOKEN_TREE@[1988; 2195)
+            L_PAREN@[1988; 1989)
+            IDENT@[1989; 1995) "String"
+            COLONCOLON@[1995; 1997)
+            IDENT@[1997; 2001) "from"
+            TOKEN_TREE@[2001; 2055)
+              L_PAREN@[2001; 2002)
+              STRING@[2002; 2054)
+              R_PAREN@[2054; 2055)
+            COMMA@[2055; 2056)
+            WHITESPACE@[2056; 2072)
+            IDENT@[2072; 2078) "format"
+            EXCL@[2078; 2079)
+            TOKEN_TREE@[2079; 2194)
+              L_PAREN@[2079; 2080)
+              STRING@[2080; 2086)
+              COMMA@[2086; 2087)
+              WHITESPACE@[2087; 2088)
+              DOTDOT@[2088; 2090)
+              WHITESPACE@[2090; 2091)
+              DOTDOT@[2091; 2093)
+              WHITESPACE@[2093; 2094)
+              DOTDOT@[2094; 2096)
+              WHITESPACE@[2096; 2097)
+              DOTDOT@[2097; 2099)
+              WHITESPACE@[2099; 2100)
+              DOTDOT@[2100; 2102)
+              WHITESPACE@[2102; 2103)
+              DOTDOT@[2103; 2105)
+              WHITESPACE@[2105; 2106)
+              DOTDOT@[2106; 2108)
+              WHITESPACE@[2108; 2109)
+              DOTDOT@[2109; 2111)
+              WHITESPACE@[2111; 2112)
+              DOTDOT@[2112; 2114)
+              WHITESPACE@[2114; 2115)
+              DOTDOT@[2115; 2117)
+              WHITESPACE@[2117; 2118)
+              DOTDOT@[2118; 2120)
+              WHITESPACE@[2120; 2121)
+              DOTDOT@[2121; 2123)
+              WHITESPACE@[2123; 2124)
+              DOTDOT@[2124; 2126)
+              WHITESPACE@[2126; 2158)
+              DOTDOT@[2158; 2160)
+              WHITESPACE@[2160; 2161)
+              DOTDOT@[2161; 2163)
+              WHITESPACE@[2163; 2164)
+              DOTDOT@[2164; 2166)
+              WHITESPACE@[2166; 2167)
+              DOTDOT@[2167; 2169)
+              WHITESPACE@[2169; 2170)
+              DOTDOT@[2170; 2172)
+              WHITESPACE@[2172; 2173)
+              DOTDOT@[2173; 2175)
+              WHITESPACE@[2175; 2176)
+              DOTDOT@[2176; 2178)
+              WHITESPACE@[2178; 2179)
+              DOTDOT@[2179; 2181)
+              WHITESPACE@[2181; 2182)
+              DOTDOT@[2182; 2184)
+              WHITESPACE@[2184; 2185)
+              DOTDOT@[2185; 2187)
+              WHITESPACE@[2187; 2188)
+              DOTDOT@[2188; 2190)
+              WHITESPACE@[2190; 2191)
+              DOTDOT@[2191; 2193)
+              R_PAREN@[2193; 2194)
+            R_PAREN@[2194; 2195)
+        SEMI@[2195; 2196)
+      WHITESPACE@[2196; 2197)
+      R_CURLY@[2197; 2198)
+  WHITESPACE@[2198; 2200)
+  FN_DEF@[2200; 2693)
+    FN_KW@[2200; 2202)
+    WHITESPACE@[2202; 2203)
+    NAME@[2203; 2205)
+      IDENT@[2203; 2205) "u8"
+    PARAM_LIST@[2205; 2213)
+      L_PAREN@[2205; 2206)
+      PARAM@[2206; 2212)
+        BIND_PAT@[2206; 2208)
+          NAME@[2206; 2208)
+            IDENT@[2206; 2208) "u8"
+        COLON@[2208; 2209)
+        WHITESPACE@[2209; 2210)
+        PATH_TYPE@[2210; 2212)
+          PATH@[2210; 2212)
+            PATH_SEGMENT@[2210; 2212)
+              NAME_REF@[2210; 2212)
+                IDENT@[2210; 2212) "u8"
+      R_PAREN@[2212; 2213)
+    WHITESPACE@[2213; 2214)
+    BLOCK@[2214; 2693)
+      L_CURLY@[2214; 2215)
+      WHITESPACE@[2215; 2220)
+      IF_EXPR@[2220; 2691)
+        IF_KW@[2220; 2222)
+        WHITESPACE@[2222; 2223)
+        CONDITION@[2223; 2232)
+          BIN_EXPR@[2223; 2232)
+            PATH_EXPR@[2223; 2225)
+              PATH@[2223; 2225)
+                PATH_SEGMENT@[2223; 2225)
+                  NAME_REF@[2223; 2225)
+                    IDENT@[2223; 2225) "u8"
+            WHITESPACE@[2225; 2226)
+            NEQ@[2226; 2228)
+            WHITESPACE@[2228; 2229)
+            LITERAL@[2229; 2232)
+              INT_NUMBER@[2229; 2232) "0u8"
+        WHITESPACE@[2232; 2233)
+        BLOCK@[2233; 2691)
+          L_CURLY@[2233; 2234)
+          WHITESPACE@[2234; 2243)
+          EXPR_STMT@[2243; 2685)
+            MACRO_CALL@[2243; 2684)
+              PATH@[2243; 2252)
+                PATH_SEGMENT@[2243; 2252)
+                  NAME_REF@[2243; 2252)
+                    IDENT@[2243; 2252) "assert_eq"
+              EXCL@[2252; 2253)
+              TOKEN_TREE@[2253; 2684)
+                L_PAREN@[2253; 2254)
+                INT_NUMBER@[2254; 2257) "8u8"
+                COMMA@[2257; 2258)
+                WHITESPACE@[2258; 2259)
+                TOKEN_TREE@[2259; 2683)
+                  L_CURLY@[2259; 2260)
+                  WHITESPACE@[2260; 2273)
+                  IDENT@[2273; 2284) "macro_rules"
+                  EXCL@[2284; 2285)
+                  WHITESPACE@[2285; 2286)
+                  IDENT@[2286; 2288) "u8"
+                  WHITESPACE@[2288; 2289)
+                  TOKEN_TREE@[2289; 2567)
+                    L_CURLY@[2289; 2290)
+                    WHITESPACE@[2290; 2307)
+                    TOKEN_TREE@[2307; 2311)
+                      L_PAREN@[2307; 2308)
+                      IDENT@[2308; 2310) "u8"
+                      R_PAREN@[2310; 2311)
+                    WHITESPACE@[2311; 2312)
+                    FAT_ARROW@[2312; 2314)
+                    WHITESPACE@[2314; 2315)
+                    TOKEN_TREE@[2315; 2552)
+                      L_CURLY@[2315; 2316)
+                      WHITESPACE@[2316; 2337)
+                      MOD_KW@[2337; 2340)
+                      WHITESPACE@[2340; 2341)
+                      IDENT@[2341; 2343) "u8"
+                      WHITESPACE@[2343; 2344)
+                      TOKEN_TREE@[2344; 2534)
+                        L_CURLY@[2344; 2345)
+                        WHITESPACE@[2345; 2370)
+                        PUB_KW@[2370; 2373)
+                        WHITESPACE@[2373; 2374)
+                        FN_KW@[2374; 2376)
+                        WHITESPACE@[2376; 2377)
+                        IDENT@[2377; 2379) "u8"
+                        L_ANGLE@[2379; 2380)
+                        LIFETIME@[2380; 2383) "'u8"
+                        COLON@[2383; 2384)
+                        WHITESPACE@[2384; 2385)
+                        LIFETIME@[2385; 2388) "'u8"
+                        WHITESPACE@[2388; 2389)
+                        PLUS@[2389; 2390)
+                        WHITESPACE@[2390; 2391)
+                        LIFETIME@[2391; 2394) "'u8"
+                        R_ANGLE@[2394; 2395)
+                        TOKEN_TREE@[2395; 2408)
+                          L_PAREN@[2395; 2396)
+                          IDENT@[2396; 2398) "u8"
+                          COLON@[2398; 2399)
+                          WHITESPACE@[2399; 2400)
+                          AMP@[2400; 2401)
+                          LIFETIME@[2401; 2404) "'u8"
+                          WHITESPACE@[2404; 2405)
+                          IDENT@[2405; 2407) "u8"
+                          R_PAREN@[2407; 2408)
+                        WHITESPACE@[2408; 2409)
+                        THIN_ARROW@[2409; 2411)
+                        WHITESPACE@[2411; 2412)
+                        AMP@[2412; 2413)
+                        LIFETIME@[2413; 2416) "'u8"
+                        WHITESPACE@[2416; 2417)
+                        IDENT@[2417; 2419) "u8"
+                        WHITESPACE@[2419; 2420)
+                        TOKEN_TREE@[2420; 2512)
+                          L_CURLY@[2420; 2421)
+                          WHITESPACE@[2421; 2450)
+                          STRING@[2450; 2454)
+                          SEMI@[2454; 2455)
+                          WHITESPACE@[2455; 2484)
+                          IDENT@[2484; 2486) "u8"
+                          WHITESPACE@[2486; 2511)
+                          R_CURLY@[2511; 2512)
+                        WHITESPACE@[2512; 2533)
+                        R_CURLY@[2533; 2534)
+                      WHITESPACE@[2534; 2551)
+                      R_CURLY@[2551; 2552)
+                    SEMI@[2552; 2553)
+                    WHITESPACE@[2553; 2566)
+                    R_CURLY@[2566; 2567)
+                  WHITESPACE@[2567; 2581)
+                  IDENT@[2581; 2583) "u8"
+                  EXCL@[2583; 2584)
+                  TOKEN_TREE@[2584; 2588)
+                    L_PAREN@[2584; 2585)
+                    IDENT@[2585; 2587) "u8"
+                    R_PAREN@[2587; 2588)
+                  SEMI@[2588; 2589)
+                  WHITESPACE@[2589; 2602)
+                  LET_KW@[2602; 2605)
+                  WHITESPACE@[2605; 2606)
+                  AMP@[2606; 2607)
+                  IDENT@[2607; 2609) "u8"
+                  COLON@[2609; 2610)
+                  WHITESPACE@[2610; 2611)
+                  AMP@[2611; 2612)
+                  IDENT@[2612; 2614) "u8"
+                  WHITESPACE@[2614; 2615)
+                  EQ@[2615; 2616)
+                  WHITESPACE@[2616; 2617)
+                  IDENT@[2617; 2619) "u8"
+                  COLONCOLON@[2619; 2621)
+                  IDENT@[2621; 2623) "u8"
+                  TOKEN_TREE@[2623; 2629)
+                    L_PAREN@[2623; 2624)
+                    AMP@[2624; 2625)
+                    INT_NUMBER@[2625; 2628) "8u8"
+                    R_PAREN@[2628; 2629)
+                  SEMI@[2629; 2630)
+                  WHITESPACE@[2630; 2643)
+                  CRATE_KW@[2643; 2648)
+                  COLONCOLON@[2648; 2650)
+                  IDENT@[2650; 2652) "u8"
+                  TOKEN_TREE@[2652; 2657)
+                    L_PAREN@[2652; 2653)
+                    INT_NUMBER@[2653; 2656) "0u8"
+                    R_PAREN@[2656; 2657)
+                  SEMI@[2657; 2658)
+                  WHITESPACE@[2658; 2671)
+                  IDENT@[2671; 2673) "u8"
+                  WHITESPACE@[2673; 2682)
+                  R_CURLY@[2682; 2683)
+                R_PAREN@[2683; 2684)
+            SEMI@[2684; 2685)
+          WHITESPACE@[2685; 2690)
+          R_CURLY@[2690; 2691)
+      WHITESPACE@[2691; 2692)
+      R_CURLY@[2692; 2693)
+  WHITESPACE@[2693; 2695)
+  FN_DEF@[2695; 2832)
+    FN_KW@[2695; 2697)
+    WHITESPACE@[2697; 2698)
+    NAME@[2698; 2703)
+      IDENT@[2698; 2703) "fishy"
+    PARAM_LIST@[2703; 2705)
+      L_PAREN@[2703; 2704)
+      R_PAREN@[2704; 2705)
+    WHITESPACE@[2705; 2706)
+    BLOCK@[2706; 2832)
+      L_CURLY@[2706; 2707)
+      WHITESPACE@[2707; 2712)
+      EXPR_STMT@[2712; 2830)
+        MACRO_CALL@[2712; 2829)
+          PATH@[2712; 2721)
+            PATH_SEGMENT@[2712; 2721)
+              NAME_REF@[2712; 2721)
+                IDENT@[2712; 2721) "assert_eq"
+          EXCL@[2721; 2722)
+          TOKEN_TREE@[2722; 2829)
+            L_PAREN@[2722; 2723)
+            IDENT@[2723; 2729) "String"
+            COLONCOLON@[2729; 2731)
+            IDENT@[2731; 2735) "from"
+            TOKEN_TREE@[2735; 2742)
+              L_PAREN@[2735; 2736)
+              STRING@[2736; 2741)
+              R_PAREN@[2741; 2742)
+            COMMA@[2742; 2743)
+            WHITESPACE@[2743; 2759)
+            IDENT@[2759; 2765) "String"
+            COLONCOLON@[2765; 2767)
+            L_ANGLE@[2767; 2768)
+            R_ANGLE@[2768; 2769)
+            COLONCOLON@[2769; 2771)
+            IDENT@[2771; 2775) "from"
+            COLONCOLON@[2775; 2777)
+            L_ANGLE@[2777; 2778)
+            R_ANGLE@[2778; 2779)
+            TOKEN_TREE@[2779; 2786)
+              L_PAREN@[2779; 2780)
+              STRING@[2780; 2785)
+              R_PAREN@[2785; 2786)
+            DOT@[2786; 2787)
+            IDENT@[2787; 2792) "chars"
+            COLONCOLON@[2792; 2794)
+            L_ANGLE@[2794; 2795)
+            R_ANGLE@[2795; 2796)
+            TOKEN_TREE@[2796; 2798)
+              L_PAREN@[2796; 2797)
+              R_PAREN@[2797; 2798)
+            DOT@[2798; 2799)
+            IDENT@[2799; 2802) "rev"
+            COLONCOLON@[2802; 2804)
+            L_ANGLE@[2804; 2805)
+            R_ANGLE@[2805; 2806)
+            TOKEN_TREE@[2806; 2808)
+              L_PAREN@[2806; 2807)
+              R_PAREN@[2807; 2808)
+            DOT@[2808; 2809)
+            IDENT@[2809; 2816) "collect"
+            COLONCOLON@[2816; 2818)
+            L_ANGLE@[2818; 2819)
+            IDENT@[2819; 2825) "String"
+            R_ANGLE@[2825; 2826)
+            TOKEN_TREE@[2826; 2828)
+              L_PAREN@[2826; 2827)
+              R_PAREN@[2827; 2828)
+            R_PAREN@[2828; 2829)
+        SEMI@[2829; 2830)
+      WHITESPACE@[2830; 2831)
+      R_CURLY@[2831; 2832)
+  WHITESPACE@[2832; 2834)
+  FN_DEF@[2834; 2906)
+    FN_KW@[2834; 2836)
+    WHITESPACE@[2836; 2837)
+    NAME@[2837; 2842)
+      IDENT@[2837; 2842) "union"
+    PARAM_LIST@[2842; 2844)
+      L_PAREN@[2842; 2843)
+      R_PAREN@[2843; 2844)
+    WHITESPACE@[2844; 2845)
+    BLOCK@[2845; 2906)
+      L_CURLY@[2845; 2846)
+      WHITESPACE@[2846; 2851)
+      STRUCT_DEF@[2851; 2904)
+        UNION_KW@[2851; 2856)
+        WHITESPACE@[2856; 2857)
+        NAME@[2857; 2862)
+          IDENT@[2857; 2862) "union"
+        TYPE_PARAM_LIST@[2862; 2870)
+          L_ANGLE@[2862; 2863)
+          LIFETIME_PARAM@[2863; 2869)
+            LIFETIME@[2863; 2869) "'union"
+          R_ANGLE@[2869; 2870)
+        WHITESPACE@[2870; 2871)
+        NAMED_FIELD_DEF_LIST@[2871; 2904)
+          L_CURLY@[2871; 2872)
+          WHITESPACE@[2872; 2873)
+          NAMED_FIELD_DEF@[2873; 2901)
+            NAME@[2873; 2878)
+              IDENT@[2873; 2878) "union"
+            COLON@[2878; 2879)
+            WHITESPACE@[2879; 2880)
+            REFERENCE_TYPE@[2880; 2901)
+              AMP@[2880; 2881)
+              LIFETIME@[2881; 2887) "'union"
+              WHITESPACE@[2887; 2888)
+              PATH_TYPE@[2888; 2901)
+                PATH@[2888; 2901)
+                  PATH_SEGMENT@[2888; 2901)
+                    NAME_REF@[2888; 2893)
+                      IDENT@[2888; 2893) "union"
+                    TYPE_ARG_LIST@[2893; 2901)
+                      L_ANGLE@[2893; 2894)
+                      LIFETIME_ARG@[2894; 2900)
+                        LIFETIME@[2894; 2900) "'union"
+                      R_ANGLE@[2900; 2901)
+          COMMA@[2901; 2902)
+          WHITESPACE@[2902; 2903)
+          R_CURLY@[2903; 2904)
+      WHITESPACE@[2904; 2905)
+      R_CURLY@[2905; 2906)
+  WHITESPACE@[2906; 2908)
+  FN_DEF@[2908; 3042)
+    FN_KW@[2908; 2910)
+    WHITESPACE@[2910; 2911)
+    NAME@[2911; 2929)
+      IDENT@[2911; 2929) "special_characters"
+    PARAM_LIST@[2929; 2931)
+      L_PAREN@[2929; 2930)
+      R_PAREN@[2930; 2931)
+    WHITESPACE@[2931; 2932)
+    BLOCK@[2932; 3042)
+      L_CURLY@[2932; 2933)
+      WHITESPACE@[2933; 2938)
+      LET_STMT@[2938; 3021)
+        LET_KW@[2938; 2941)
+        WHITESPACE@[2941; 2942)
+        BIND_PAT@[2942; 2945)
+          NAME@[2942; 2945)
+            IDENT@[2942; 2945) "val"
+        WHITESPACE@[2945; 2946)
+        EQ@[2946; 2947)
+        WHITESPACE@[2947; 2948)
+        PREFIX_EXPR@[2948; 3013)
+          EXCL@[2948; 2949)
+          PAREN_EXPR@[2949; 3013)
+            L_PAREN@[2949; 2950)
+            BIN_EXPR@[2950; 3012)
+              CALL_EXPR@[2950; 2995)
+                PAREN_EXPR@[2950; 2971)
+                  L_PAREN@[2950; 2951)
+                  LAMBDA_EXPR@[2951; 2970)
+                    PARAM_LIST@[2951; 2968)
+                      PIPE@[2951; 2952)
+                      PARAM@[2952; 2962)
+                        TUPLE_PAT@[2952; 2956)
+                          L_PAREN@[2952; 2953)
+                          DOTDOT@[2953; 2955)
+                          R_PAREN@[2955; 2956)
+                        COLON@[2956; 2957)
+                        TUPLE_TYPE@[2957; 2962)
+                          L_PAREN@[2957; 2958)
+                          PLACEHOLDER_TYPE@[2958; 2959)
+                            UNDERSCORE@[2958; 2959)
+                          COMMA@[2959; 2960)
+                          PLACEHOLDER_TYPE@[2960; 2961)
+                            UNDERSCORE@[2960; 2961)
+                          R_PAREN@[2961; 2962)
+                      COMMA@[2962; 2963)
+                      PARAM@[2963; 2967)
+                        BIND_PAT@[2963; 2967)
+                          NAME@[2963; 2965)
+                            IDENT@[2963; 2965) "__"
+                          AT@[2965; 2966)
+                          PLACEHOLDER_PAT@[2966; 2967)
+                            UNDERSCORE@[2966; 2967)
+                      PIPE@[2967; 2968)
+                    PATH_EXPR@[2968; 2970)
+                      PATH@[2968; 2970)
+                        PATH_SEGMENT@[2968; 2970)
+                          NAME_REF@[2968; 2970)
+                            IDENT@[2968; 2970) "__"
+                  R_PAREN@[2970; 2971)
+                ARG_LIST@[2971; 2995)
+                  L_PAREN@[2971; 2972)
+                  TUPLE_EXPR@[2972; 2987)
+                    L_PAREN@[2972; 2973)
+                    REF_EXPR@[2973; 2979)
+                      AMP@[2973; 2974)
+                      PREFIX_EXPR@[2974; 2979)
+                        STAR@[2974; 2975)
+                        LITERAL@[2975; 2979)
+                          STRING@[2975; 2979)
+                    COMMA@[2979; 2980)
+                    LITERAL@[2980; 2986)
+                      CHAR@[2980; 2986)
+                    R_PAREN@[2986; 2987)
+                  COMMENT@[2987; 2991)
+                  COMMA@[2991; 2992)
+                  BLOCK_EXPR@[2992; 2994)
+                    BLOCK@[2992; 2994)
+                      L_CURLY@[2992; 2993)
+                      R_CURLY@[2993; 2994)
+                  R_PAREN@[2994; 2995)
+              EQEQ@[2995; 2997)
+              BLOCK_EXPR@[2997; 3012)
+                BLOCK@[2997; 3012)
+                  L_CURLY@[2997; 2998)
+                  EXPR_STMT@[2998; 3011)
+                    REF_EXPR@[2998; 3010)
+                      AMP@[2998; 2999)
+                      INDEX_EXPR@[2999; 3010)
+                        ARRAY_EXPR@[2999; 3006)
+                          L_BRACK@[2999; 3000)
+                          RANGE_EXPR@[3000; 3005)
+                            DOTDOTEQ@[3000; 3003)
+                            RANGE_EXPR@[3003; 3005)
+                              DOTDOT@[3003; 3005)
+                          R_BRACK@[3005; 3006)
+                        L_BRACK@[3006; 3007)
+                        RANGE_EXPR@[3007; 3009)
+                          DOTDOT@[3007; 3009)
+                        R_BRACK@[3009; 3010)
+                    SEMI@[3010; 3011)
+                  R_CURLY@[3011; 3012)
+            R_PAREN@[3012; 3013)
+        COMMENT@[3013; 3015)
+        WHITESPACE@[3015; 3020)
+        SEMI@[3020; 3021)
+      WHITESPACE@[3021; 3026)
+      EXPR_STMT@[3026; 3040)
+        MACRO_CALL@[3026; 3039)
+          PATH@[3026; 3032)
+            PATH_SEGMENT@[3026; 3032)
+              NAME_REF@[3026; 3032)
+                IDENT@[3026; 3032) "assert"
+          EXCL@[3032; 3033)
+          TOKEN_TREE@[3033; 3039)
+            L_PAREN@[3033; 3034)
+            EXCL@[3034; 3035)
+            IDENT@[3035; 3038) "val"
+            R_PAREN@[3038; 3039)
+        SEMI@[3039; 3040)
+      WHITESPACE@[3040; 3041)
+      R_CURLY@[3041; 3042)
+  WHITESPACE@[3042; 3044)
+  FN_DEF@[3044; 3514)
+    FN_KW@[3044; 3046)
+    WHITESPACE@[3046; 3047)
+    NAME@[3047; 3057)
+      IDENT@[3047; 3057) "punch_card"
+    PARAM_LIST@[3057; 3059)
+      L_PAREN@[3057; 3058)
+      R_PAREN@[3058; 3059)
+    WHITESPACE@[3059; 3060)
+    RET_TYPE@[3060; 3083)
+      THIN_ARROW@[3060; 3062)
+      WHITESPACE@[3062; 3063)
+      IMPL_TRAIT_TYPE@[3063; 3083)
+        IMPL_KW@[3063; 3067)
+        WHITESPACE@[3067; 3068)
+        PATH_TYPE@[3068; 3083)
+          PATH@[3068; 3083)
+            PATH@[3068; 3076)
+              PATH@[3068; 3071)
+                PATH_SEGMENT@[3068; 3071)
+                  NAME_REF@[3068; 3071)
+                    IDENT@[3068; 3071) "std"
+              COLONCOLON@[3071; 3073)
+              PATH_SEGMENT@[3073; 3076)
+                NAME_REF@[3073; 3076)
+                  IDENT@[3073; 3076) "fmt"
+            COLONCOLON@[3076; 3078)
+            PATH_SEGMENT@[3078; 3083)
+              NAME_REF@[3078; 3083)
+                IDENT@[3078; 3083) "Debug"
+    WHITESPACE@[3083; 3084)
+    BLOCK@[3084; 3514)
+      L_CURLY@[3084; 3085)
+      WHITESPACE@[3085; 3090)
+      RANGE_EXPR@[3090; 3512)
+        DOTDOTEQ@[3090; 3093)
+        RANGE_EXPR@[3093; 3512)
+          DOTDOTEQ@[3093; 3096)
+          RANGE_EXPR@[3096; 3512)
+            DOTDOT@[3096; 3098)
+            WHITESPACE@[3098; 3099)
+            RANGE_EXPR@[3099; 3512)
+              DOTDOT@[3099; 3101)
+              WHITESPACE@[3101; 3105)
+              RANGE_EXPR@[3105; 3512)
+                DOTDOT@[3105; 3107)
+                WHITESPACE@[3107; 3108)
+                RANGE_EXPR@[3108; 3512)
+                  DOTDOT@[3108; 3110)
+                  WHITESPACE@[3110; 3111)
+                  RANGE_EXPR@[3111; 3512)
+                    DOTDOT@[3111; 3113)
+                    WHITESPACE@[3113; 3114)
+                    RANGE_EXPR@[3114; 3512)
+                      DOTDOT@[3114; 3116)
+                      WHITESPACE@[3116; 3120)
+                      RANGE_EXPR@[3120; 3512)
+                        DOTDOT@[3120; 3122)
+                        WHITESPACE@[3122; 3123)
+                        RANGE_EXPR@[3123; 3512)
+                          DOTDOT@[3123; 3125)
+                          WHITESPACE@[3125; 3126)
+                          RANGE_EXPR@[3126; 3512)
+                            DOTDOT@[3126; 3128)
+                            WHITESPACE@[3128; 3129)
+                            RANGE_EXPR@[3129; 3512)
+                              DOTDOT@[3129; 3131)
+                              WHITESPACE@[3131; 3135)
+                              RANGE_EXPR@[3135; 3512)
+                                DOTDOT@[3135; 3137)
+                                WHITESPACE@[3137; 3138)
+                                RANGE_EXPR@[3138; 3512)
+                                  DOTDOTEQ@[3138; 3141)
+                                  RANGE_EXPR@[3141; 3512)
+                                    DOTDOT@[3141; 3143)
+                                    WHITESPACE@[3143; 3144)
+                                    RANGE_EXPR@[3144; 3512)
+                                      DOTDOT@[3144; 3146)
+                                      WHITESPACE@[3146; 3151)
+                                      RANGE_EXPR@[3151; 3512)
+                                        DOTDOTEQ@[3151; 3154)
+                                        RANGE_EXPR@[3154; 3512)
+                                          DOTDOT@[3154; 3156)
+                                          WHITESPACE@[3156; 3157)
+                                          RANGE_EXPR@[3157; 3512)
+                                            DOTDOTEQ@[3157; 3160)
+                                            RANGE_EXPR@[3160; 3512)
+                                              DOTDOT@[3160; 3162)
+                                              WHITESPACE@[3162; 3166)
+                                              RANGE_EXPR@[3166; 3512)
+                                                DOTDOT@[3166; 3168)
+                                                WHITESPACE@[3168; 3169)
+                                                RANGE_EXPR@[3169; 3512)
+                                                  DOTDOT@[3169; 3171)
+                                                  WHITESPACE@[3171; 3172)
+                                                  RANGE_EXPR@[3172; 3512)
+                                                    DOTDOT@[3172; 3174)
+                                                    WHITESPACE@[3174; 3175)
+                                                    RANGE_EXPR@[3175; 3512)
+                                                      DOTDOT@[3175; 3177)
+                                                      WHITESPACE@[3177; 3181)
+                                                      RANGE_EXPR@[3181; 3512)
+                                                        DOTDOT@[3181; 3183)
+                                                        WHITESPACE@[3183; 3184)
+                                                        RANGE_EXPR@[3184; 3512)
+                                                          DOTDOT@[3184; 3186)
+                                                          WHITESPACE@[3186; 3187)
+                                                          RANGE_EXPR@[3187; 3512)
+                                                            DOTDOT@[3187; 3189)
+                                                            WHITESPACE@[3189; 3190)
+                                                            RANGE_EXPR@[3190; 3512)
+                                                              DOTDOT@[3190; 3192)
+                                                              WHITESPACE@[3192; 3196)
+                                                              RANGE_EXPR@[3196; 3512)
+                                                                DOTDOTEQ@[3196; 3199)
+                                                                RANGE_EXPR@[3199; 3512)
+                                                                  DOTDOTEQ@[3199; 3202)
+                                                                  RANGE_EXPR@[3202; 3512)
+                                                                    DOTDOTEQ@[3202; 3205)
+                                                                    RANGE_EXPR@[3205; 3512)
+                                                                      DOTDOT@[3205; 3207)
+                                                                      WHITESPACE@[3207; 3212)
+                                                                      RANGE_EXPR@[3212; 3512)
+                                                                        DOTDOTEQ@[3212; 3215)
+                                                                        RANGE_EXPR@[3215; 3512)
+                                                                          DOTDOT@[3215; 3217)
+                                                                          WHITESPACE@[3217; 3218)
+                                                                          RANGE_EXPR@[3218; 3512)
+                                                                            DOTDOTEQ@[3218; 3221)
+                                                                            RANGE_EXPR@[3221; 3512)
+                                                                              DOTDOT@[3221; 3223)
+                                                                              WHITESPACE@[3223; 3227)
+                                                                              RANGE_EXPR@[3227; 3512)
+                                                                                DOTDOTEQ@[3227; 3230)
+                                                                                RANGE_EXPR@[3230; 3512)
+                                                                                  DOTDOT@[3230; 3232)
+                                                                                  WHITESPACE@[3232; 3233)
+                                                                                  RANGE_EXPR@[3233; 3512)
+                                                                                    DOTDOTEQ@[3233; 3236)
+                                                                                    RANGE_EXPR@[3236; 3512)
+                                                                                      DOTDOT@[3236; 3238)
+                                                                                      WHITESPACE@[3238; 3242)
+                                                                                      RANGE_EXPR@[3242; 3512)
+                                                                                        DOTDOT@[3242; 3244)
+                                                                                        WHITESPACE@[3244; 3245)
+                                                                                        RANGE_EXPR@[3245; 3512)
+                                                                                          DOTDOTEQ@[3245; 3248)
+                                                                                          RANGE_EXPR@[3248; 3512)
+                                                                                            DOTDOTEQ@[3248; 3251)
+                                                                                            RANGE_EXPR@[3251; 3512)
+                                                                                              DOTDOT@[3251; 3253)
+                                                                                              WHITESPACE@[3253; 3257)
+                                                                                              RANGE_EXPR@[3257; 3512)
+                                                                                                DOTDOT@[3257; 3259)
+                                                                                                WHITESPACE@[3259; 3260)
+                                                                                                RANGE_EXPR@[3260; 3512)
+                                                                                                  DOTDOTEQ@[3260; 3263)
+                                                                                                  RANGE_EXPR@[3263; 3512)
+                                                                                                    DOTDOT@[3263; 3265)
+                                                                                                    WHITESPACE@[3265; 3266)
+                                                                                                    RANGE_EXPR@[3266; 3512)
+                                                                                                      DOTDOT@[3266; 3268)
+                                                                                                      WHITESPACE@[3268; 3273)
+                                                                                                      RANGE_EXPR@[3273; 3512)
+                                                                                                        DOTDOTEQ@[3273; 3276)
+                                                                                                        RANGE_EXPR@[3276; 3512)
+                                                                                                          DOTDOTEQ@[3276; 3279)
+                                                                                                          RANGE_EXPR@[3279; 3512)
+                                                                                                            DOTDOT@[3279; 3281)
+                                                                                                            WHITESPACE@[3281; 3282)
+                                                                                                            RANGE_EXPR@[3282; 3512)
+                                                                                                              DOTDOT@[3282; 3284)
+                                                                                                              WHITESPACE@[3284; 3288)
+                                                                                                              RANGE_EXPR@[3288; 3512)
+                                                                                                                DOTDOTEQ@[3288; 3291)
+                                                                                                                RANGE_EXPR@[3291; 3512)
+                                                                                                                  DOTDOT@[3291; 3293)
+                                                                                                                  WHITESPACE@[3293; 3294)
+                                                                                                                  RANGE_EXPR@[3294; 3512)
+                                                                                                                    DOTDOTEQ@[3294; 3297)
+                                                                                                                    RANGE_EXPR@[3297; 3512)
+                                                                                                                      DOTDOT@[3297; 3299)
+                                                                                                                      WHITESPACE@[3299; 3303)
+                                                                                                                      RANGE_EXPR@[3303; 3512)
+                                                                                                                        DOTDOTEQ@[3303; 3306)
+                                                                                                                        RANGE_EXPR@[3306; 3512)
+                                                                                                                          DOTDOT@[3306; 3308)
+                                                                                                                          WHITESPACE@[3308; 3309)
+                                                                                                                          RANGE_EXPR@[3309; 3512)
+                                                                                                                            DOTDOT@[3309; 3311)
+                                                                                                                            WHITESPACE@[3311; 3312)
+                                                                                                                            RANGE_EXPR@[3312; 3512)
+                                                                                                                              DOTDOT@[3312; 3314)
+                                                                                                                              WHITESPACE@[3314; 3318)
+                                                                                                                              RANGE_EXPR@[3318; 3512)
+                                                                                                                                DOTDOT@[3318; 3320)
+                                                                                                                                WHITESPACE@[3320; 3321)
+                                                                                                                                RANGE_EXPR@[3321; 3512)
+                                                                                                                                  DOTDOTEQ@[3321; 3324)
+                                                                                                                                  RANGE_EXPR@[3324; 3512)
+                                                                                                                                    DOTDOT@[3324; 3326)
+                                                                                                                                    WHITESPACE@[3326; 3327)
+                                                                                                                                    RANGE_EXPR@[3327; 3512)
+                                                                                                                                      DOTDOT@[3327; 3329)
+                                                                                                                                      WHITESPACE@[3329; 3334)
+                                                                                                                                      RANGE_EXPR@[3334; 3512)
+                                                                                                                                        DOTDOTEQ@[3334; 3337)
+                                                                                                                                        RANGE_EXPR@[3337; 3512)
+                                                                                                                                          DOTDOT@[3337; 3339)
+                                                                                                                                          WHITESPACE@[3339; 3340)
+                                                                                                                                          RANGE_EXPR@[3340; 3512)
+                                                                                                                                            DOTDOTEQ@[3340; 3343)
+                                                                                                                                            RANGE_EXPR@[3343; 3512)
+                                                                                                                                              DOTDOT@[3343; 3345)
+                                                                                                                                              WHITESPACE@[3345; 3349)
+                                                                                                                                              RANGE_EXPR@[3349; 3512)
+                                                                                                                                                DOTDOTEQ@[3349; 3352)
+                                                                                                                                                RANGE_EXPR@[3352; 3512)
+                                                                                                                                                  DOTDOT@[3352; 3354)
+                                                                                                                                                  WHITESPACE@[3354; 3355)
+                                                                                                                                                  RANGE_EXPR@[3355; 3512)
+                                                                                                                                                    DOTDOTEQ@[3355; 3358)
+                                                                                                                                                    RANGE_EXPR@[3358; 3512)
+                                                                                                                                                      DOTDOT@[3358; 3360)
+                                                                                                                                                      WHITESPACE@[3360; 3364)
+                                                                                                                                                      RANGE_EXPR@[3364; 3512)
+                                                                                                                                                        DOTDOT@[3364; 3366)
+                                                                                                                                                        WHITESPACE@[3366; 3367)
+                                                                                                                                                        RANGE_EXPR@[3367; 3512)
+                                                                                                                                                          DOTDOTEQ@[3367; 3370)
+                                                                                                                                                          RANGE_EXPR@[3370; 3512)
+                                                                                                                                                            DOTDOT@[3370; 3372)
+                                                                                                                                                            WHITESPACE@[3372; 3373)
+                                                                                                                                                            RANGE_EXPR@[3373; 3512)
+                                                                                                                                                              DOTDOT@[3373; 3375)
+                                                                                                                                                              WHITESPACE@[3375; 3379)
+                                                                                                                                                              RANGE_EXPR@[3379; 3512)
+                                                                                                                                                                DOTDOT@[3379; 3381)
+                                                                                                                                                                WHITESPACE@[3381; 3382)
+                                                                                                                                                                RANGE_EXPR@[3382; 3512)
+                                                                                                                                                                  DOTDOTEQ@[3382; 3385)
+                                                                                                                                                                  RANGE_EXPR@[3385; 3512)
+                                                                                                                                                                    DOTDOT@[3385; 3387)
+                                                                                                                                                                    WHITESPACE@[3387; 3388)
+                                                                                                                                                                    RANGE_EXPR@[3388; 3512)
+                                                                                                                                                                      DOTDOT@[3388; 3390)
+                                                                                                                                                                      WHITESPACE@[3390; 3395)
+                                                                                                                                                                      RANGE_EXPR@[3395; 3512)
+                                                                                                                                                                        DOTDOTEQ@[3395; 3398)
+                                                                                                                                                                        RANGE_EXPR@[3398; 3512)
+                                                                                                                                                                          DOTDOT@[3398; 3400)
+                                                                                                                                                                          WHITESPACE@[3400; 3401)
+                                                                                                                                                                          RANGE_EXPR@[3401; 3512)
+                                                                                                                                                                            DOTDOTEQ@[3401; 3404)
+                                                                                                                                                                            RANGE_EXPR@[3404; 3512)
+                                                                                                                                                                              DOTDOT@[3404; 3406)
+                                                                                                                                                                              WHITESPACE@[3406; 3410)
+                                                                                                                                                                              RANGE_EXPR@[3410; 3512)
+                                                                                                                                                                                DOTDOTEQ@[3410; 3413)
+                                                                                                                                                                                RANGE_EXPR@[3413; 3512)
+                                                                                                                                                                                  DOTDOT@[3413; 3415)
+                                                                                                                                                                                  WHITESPACE@[3415; 3416)
+                                                                                                                                                                                  RANGE_EXPR@[3416; 3512)
+                                                                                                                                                                                    DOTDOTEQ@[3416; 3419)
+                                                                                                                                                                                    RANGE_EXPR@[3419; 3512)
+                                                                                                                                                                                      DOTDOT@[3419; 3421)
+                                                                                                                                                                                      WHITESPACE@[3421; 3425)
+                                                                                                                                                                                      RANGE_EXPR@[3425; 3512)
+                                                                                                                                                                                        DOTDOT@[3425; 3427)
+                                                                                                                                                                                        WHITESPACE@[3427; 3428)
+                                                                                                                                                                                        RANGE_EXPR@[3428; 3512)
+                                                                                                                                                                                          DOTDOT@[3428; 3430)
+                                                                                                                                                                                          WHITESPACE@[3430; 3431)
+                                                                                                                                                                                          RANGE_EXPR@[3431; 3512)
+                                                                                                                                                                                            DOTDOTEQ@[3431; 3434)
+                                                                                                                                                                                            RANGE_EXPR@[3434; 3512)
+                                                                                                                                                                                              DOTDOT@[3434; 3436)
+                                                                                                                                                                                              WHITESPACE@[3436; 3440)
+                                                                                                                                                                                              RANGE_EXPR@[3440; 3512)
+                                                                                                                                                                                                DOTDOT@[3440; 3442)
+                                                                                                                                                                                                WHITESPACE@[3442; 3443)
+                                                                                                                                                                                                RANGE_EXPR@[3443; 3512)
+                                                                                                                                                                                                  DOTDOTEQ@[3443; 3446)
+                                                                                                                                                                                                  RANGE_EXPR@[3446; 3512)
+                                                                                                                                                                                                    DOTDOT@[3446; 3448)
+                                                                                                                                                                                                    WHITESPACE@[3448; 3449)
+                                                                                                                                                                                                    RANGE_EXPR@[3449; 3512)
+                                                                                                                                                                                                      DOTDOT@[3449; 3451)
+                                                                                                                                                                                                      WHITESPACE@[3451; 3456)
+                                                                                                                                                                                                      RANGE_EXPR@[3456; 3512)
+                                                                                                                                                                                                        DOTDOTEQ@[3456; 3459)
+                                                                                                                                                                                                        RANGE_EXPR@[3459; 3512)
+                                                                                                                                                                                                          DOTDOT@[3459; 3461)
+                                                                                                                                                                                                          WHITESPACE@[3461; 3462)
+                                                                                                                                                                                                          RANGE_EXPR@[3462; 3512)
+                                                                                                                                                                                                            DOTDOTEQ@[3462; 3465)
+                                                                                                                                                                                                            RANGE_EXPR@[3465; 3512)
+                                                                                                                                                                                                              DOTDOT@[3465; 3467)
+                                                                                                                                                                                                              WHITESPACE@[3467; 3471)
+                                                                                                                                                                                                              RANGE_EXPR@[3471; 3512)
+                                                                                                                                                                                                                DOTDOT@[3471; 3473)
+                                                                                                                                                                                                                WHITESPACE@[3473; 3474)
+                                                                                                                                                                                                                RANGE_EXPR@[3474; 3512)
+                                                                                                                                                                                                                  DOTDOTEQ@[3474; 3477)
+                                                                                                                                                                                                                  RANGE_EXPR@[3477; 3512)
+                                                                                                                                                                                                                    DOTDOTEQ@[3477; 3480)
+                                                                                                                                                                                                                    RANGE_EXPR@[3480; 3512)
+                                                                                                                                                                                                                      DOTDOT@[3480; 3482)
+                                                                                                                                                                                                                      WHITESPACE@[3482; 3486)
+                                                                                                                                                                                                                      RANGE_EXPR@[3486; 3512)
+                                                                                                                                                                                                                        DOTDOTEQ@[3486; 3489)
+                                                                                                                                                                                                                        RANGE_EXPR@[3489; 3512)
+                                                                                                                                                                                                                          DOTDOTEQ@[3489; 3492)
+                                                                                                                                                                                                                          RANGE_EXPR@[3492; 3512)
+                                                                                                                                                                                                                            DOTDOT@[3492; 3494)
+                                                                                                                                                                                                                            WHITESPACE@[3494; 3495)
+                                                                                                                                                                                                                            RANGE_EXPR@[3495; 3512)
+                                                                                                                                                                                                                              DOTDOT@[3495; 3497)
+                                                                                                                                                                                                                              WHITESPACE@[3497; 3501)
+                                                                                                                                                                                                                              RANGE_EXPR@[3501; 3512)
+                                                                                                                                                                                                                                DOTDOT@[3501; 3503)
+                                                                                                                                                                                                                                WHITESPACE@[3503; 3504)
+                                                                                                                                                                                                                                RANGE_EXPR@[3504; 3512)
+                                                                                                                                                                                                                                  DOTDOTEQ@[3504; 3507)
+                                                                                                                                                                                                                                  RANGE_EXPR@[3507; 3512)
+                                                                                                                                                                                                                                    DOTDOT@[3507; 3509)
+                                                                                                                                                                                                                                    WHITESPACE@[3509; 3510)
+                                                                                                                                                                                                                                    RANGE_EXPR@[3510; 3512)
+                                                                                                                                                                                                                                      DOTDOT@[3510; 3512)
+      WHITESPACE@[3512; 3513)
+      R_CURLY@[3513; 3514)
+  WHITESPACE@[3514; 3516)
+  FN_DEF@[3516; 3552)
+    FN_KW@[3516; 3518)
+    WHITESPACE@[3518; 3519)
+    NAME@[3519; 3525)
+      IDENT@[3519; 3525) "ktulhu"
+    PARAM_LIST@[3525; 3527)
+      L_PAREN@[3525; 3526)
+      R_PAREN@[3526; 3527)
+    WHITESPACE@[3527; 3528)
+    BLOCK@[3528; 3552)
+      L_CURLY@[3528; 3529)
+      WHITESPACE@[3529; 3534)
+      SEMI@[3534; 3535)
+      SEMI@[3535; 3536)
+      SEMI@[3536; 3537)
+      EXPR_STMT@[3537; 3540)
+        TUPLE_EXPR@[3537; 3539)
+          L_PAREN@[3537; 3538)
+          R_PAREN@[3538; 3539)
+        SEMI@[3539; 3540)
+      SEMI@[3540; 3541)
+      SEMI@[3541; 3542)
+      SEMI@[3542; 3543)
+      SEMI@[3543; 3544)
+      SEMI@[3544; 3545)
+      SEMI@[3545; 3546)
+      SEMI@[3546; 3547)
+      SEMI@[3547; 3548)
+      TUPLE_EXPR@[3548; 3550)
+        L_PAREN@[3548; 3549)
+        R_PAREN@[3549; 3550)
+      WHITESPACE@[3550; 3551)
+      R_CURLY@[3551; 3552)
+  WHITESPACE@[3552; 3554)
+  FN_DEF@[3554; 3812)
+    VISIBILITY@[3554; 3557)
+      PUB_KW@[3554; 3557)
+    WHITESPACE@[3557; 3558)
+    FN_KW@[3558; 3560)
+    WHITESPACE@[3560; 3561)
+    NAME@[3561; 3565)
+      IDENT@[3561; 3565) "main"
+    PARAM_LIST@[3565; 3567)
+      L_PAREN@[3565; 3566)
+      R_PAREN@[3566; 3567)
+    WHITESPACE@[3567; 3568)
+    BLOCK@[3568; 3812)
+      L_CURLY@[3568; 3569)
+      WHITESPACE@[3569; 3574)
+      EXPR_STMT@[3574; 3584)
+        CALL_EXPR@[3574; 3583)
+          PATH_EXPR@[3574; 3581)
+            PATH@[3574; 3581)
+              PATH_SEGMENT@[3574; 3581)
+                NAME_REF@[3574; 3581)
+                  IDENT@[3574; 3581) "strange"
+          ARG_LIST@[3581; 3583)
+            L_PAREN@[3581; 3582)
+            R_PAREN@[3582; 3583)
+        SEMI@[3583; 3584)
+      WHITESPACE@[3584; 3589)
+      EXPR_STMT@[3589; 3597)
+        CALL_EXPR@[3589; 3596)
+          PATH_EXPR@[3589; 3594)
+            PATH@[3589; 3594)
+              PATH_SEGMENT@[3589; 3594)
+                NAME_REF@[3589; 3594)
+                  IDENT@[3589; 3594) "funny"
+          ARG_LIST@[3594; 3596)
+            L_PAREN@[3594; 3595)
+            R_PAREN@[3595; 3596)
+        SEMI@[3596; 3597)
+      WHITESPACE@[3597; 3602)
+      EXPR_STMT@[3602; 3609)
+        CALL_EXPR@[3602; 3608)
+          PATH_EXPR@[3602; 3606)
+            PATH@[3602; 3606)
+              PATH_SEGMENT@[3602; 3606)
+                NAME_REF@[3602; 3606)
+                  IDENT@[3602; 3606) "what"
+          ARG_LIST@[3606; 3608)
+            L_PAREN@[3606; 3607)
+            R_PAREN@[3607; 3608)
+        SEMI@[3608; 3609)
+      WHITESPACE@[3609; 3614)
+      EXPR_STMT@[3614; 3628)
+        CALL_EXPR@[3614; 3627)
+          PATH_EXPR@[3614; 3625)
+            PATH@[3614; 3625)
+              PATH_SEGMENT@[3614; 3625)
+                NAME_REF@[3614; 3625)
+                  IDENT@[3614; 3625) "zombiejesus"
+          ARG_LIST@[3625; 3627)
+            L_PAREN@[3625; 3626)
+            R_PAREN@[3626; 3627)
+        SEMI@[3627; 3628)
+      WHITESPACE@[3628; 3633)
+      EXPR_STMT@[3633; 3643)
+        CALL_EXPR@[3633; 3642)
+          PATH_EXPR@[3633; 3640)
+            PATH@[3633; 3640)
+              PATH_SEGMENT@[3633; 3640)
+                NAME_REF@[3633; 3640)
+                  IDENT@[3633; 3640) "notsure"
+          ARG_LIST@[3640; 3642)
+            L_PAREN@[3640; 3641)
+            R_PAREN@[3641; 3642)
+        SEMI@[3642; 3643)
+      WHITESPACE@[3643; 3648)
+      EXPR_STMT@[3648; 3664)
+        CALL_EXPR@[3648; 3663)
+          PATH_EXPR@[3648; 3661)
+            PATH@[3648; 3661)
+              PATH_SEGMENT@[3648; 3661)
+                NAME_REF@[3648; 3661)
+                  IDENT@[3648; 3661) "canttouchthis"
+          ARG_LIST@[3661; 3663)
+            L_PAREN@[3661; 3662)
+            R_PAREN@[3662; 3663)
+        SEMI@[3663; 3664)
+      WHITESPACE@[3664; 3669)
+      EXPR_STMT@[3669; 3681)
+        CALL_EXPR@[3669; 3680)
+          PATH_EXPR@[3669; 3678)
+            PATH@[3669; 3678)
+              PATH_SEGMENT@[3669; 3678)
+                NAME_REF@[3669; 3678)
+                  IDENT@[3669; 3678) "angrydome"
+          ARG_LIST@[3678; 3680)
+            L_PAREN@[3678; 3679)
+            R_PAREN@[3679; 3680)
+        SEMI@[3680; 3681)
+      WHITESPACE@[3681; 3686)
+      EXPR_STMT@[3686; 3701)
+        CALL_EXPR@[3686; 3700)
+          PATH_EXPR@[3686; 3698)
+            PATH@[3686; 3698)
+              PATH_SEGMENT@[3686; 3698)
+                NAME_REF@[3686; 3698)
+                  IDENT@[3686; 3698) "evil_lincoln"
+          ARG_LIST@[3698; 3700)
+            L_PAREN@[3698; 3699)
+            R_PAREN@[3699; 3700)
+        SEMI@[3700; 3701)
+      WHITESPACE@[3701; 3706)
+      EXPR_STMT@[3706; 3713)
+        CALL_EXPR@[3706; 3712)
+          PATH_EXPR@[3706; 3710)
+            PATH@[3706; 3710)
+              PATH_SEGMENT@[3706; 3710)
+                NAME_REF@[3706; 3710)
+                  IDENT@[3706; 3710) "dots"
+          ARG_LIST@[3710; 3712)
+            L_PAREN@[3710; 3711)
+            R_PAREN@[3711; 3712)
+        SEMI@[3712; 3713)
+      WHITESPACE@[3713; 3718)
+      EXPR_STMT@[3718; 3726)
+        CALL_EXPR@[3718; 3725)
+          PATH_EXPR@[3718; 3720)
+            PATH@[3718; 3720)
+              PATH_SEGMENT@[3718; 3720)
+                NAME_REF@[3718; 3720)
+                  IDENT@[3718; 3720) "u8"
+          ARG_LIST@[3720; 3725)
+            L_PAREN@[3720; 3721)
+            LITERAL@[3721; 3724)
+              INT_NUMBER@[3721; 3724) "8u8"
+            R_PAREN@[3724; 3725)
+        SEMI@[3725; 3726)
+      WHITESPACE@[3726; 3731)
+      EXPR_STMT@[3731; 3739)
+        CALL_EXPR@[3731; 3738)
+          PATH_EXPR@[3731; 3736)
+            PATH@[3731; 3736)
+              PATH_SEGMENT@[3731; 3736)
+                NAME_REF@[3731; 3736)
+                  IDENT@[3731; 3736) "fishy"
+          ARG_LIST@[3736; 3738)
+            L_PAREN@[3736; 3737)
+            R_PAREN@[3737; 3738)
+        SEMI@[3738; 3739)
+      WHITESPACE@[3739; 3744)
+      EXPR_STMT@[3744; 3752)
+        CALL_EXPR@[3744; 3751)
+          PATH_EXPR@[3744; 3749)
+            PATH@[3744; 3749)
+              PATH_SEGMENT@[3744; 3749)
+                NAME_REF@[3744; 3749)
+                  IDENT@[3744; 3749) "union"
+          ARG_LIST@[3749; 3751)
+            L_PAREN@[3749; 3750)
+            R_PAREN@[3750; 3751)
+        SEMI@[3751; 3752)
+      WHITESPACE@[3752; 3757)
+      EXPR_STMT@[3757; 3778)
+        CALL_EXPR@[3757; 3777)
+          PATH_EXPR@[3757; 3775)
+            PATH@[3757; 3775)
+              PATH_SEGMENT@[3757; 3775)
+                NAME_REF@[3757; 3775)
+                  IDENT@[3757; 3775) "special_characters"
+          ARG_LIST@[3775; 3777)
+            L_PAREN@[3775; 3776)
+            R_PAREN@[3776; 3777)
+        SEMI@[3777; 3778)
+      WHITESPACE@[3778; 3783)
+      EXPR_STMT@[3783; 3796)
+        CALL_EXPR@[3783; 3795)
+          PATH_EXPR@[3783; 3793)
+            PATH@[3783; 3793)
+              PATH_SEGMENT@[3783; 3793)
+                NAME_REF@[3783; 3793)
+                  IDENT@[3783; 3793) "punch_card"
+          ARG_LIST@[3793; 3795)
+            L_PAREN@[3793; 3794)
+            R_PAREN@[3794; 3795)
+        SEMI@[3795; 3796)
+      WHITESPACE@[3796; 3801)
+      EXPR_STMT@[3801; 3810)
+        CALL_EXPR@[3801; 3809)
+          PATH_EXPR@[3801; 3807)
+            PATH@[3801; 3807)
+              PATH_SEGMENT@[3801; 3807)
+                NAME_REF@[3801; 3807)
+                  IDENT@[3801; 3807) "ktulhu"
+          ARG_LIST@[3807; 3809)
+            L_PAREN@[3807; 3808)
+            R_PAREN@[3808; 3809)
+        SEMI@[3809; 3810)
+      WHITESPACE@[3810; 3811)
+      R_CURLY@[3811; 3812)
+  WHITESPACE@[3812; 3813)