use crate::data::caniuse::features::Feature;
static KEYS: &[&str] = &[
"aac",
"abortcontroller",
"accelerometer",
"addeventlistener",
"ambient-light",
"apng",
"array-find",
"array-find-index",
"array-flat",
"array-includes",
"arrow-functions",
"asmjs",
"async-clipboard",
"async-functions",
"atob-btoa",
"audio",
"audio-api",
"audiotracks",
"autofocus",
"auxclick",
"av1",
"avif",
"background-attachment",
"background-clip-text",
"background-img-opts",
"background-position-x-y",
"background-repeat-round-space",
"background-sync",
"battery-status",
"beacon",
"beforeafterprint",
"bigint",
"blobbuilder",
"bloburls",
"border-image",
"border-radius",
"broadcastchannel",
"brotli",
"calc",
"canvas",
"canvas-blending",
"canvas-text",
"ch-unit",
"chacha20-poly1305",
"channel-messaging",
"childnode-remove",
"classlist",
"client-hints-dpr-width-viewport",
"clipboard",
"colr",
"colr-v1",
"comparedocumentposition",
"console-basic",
"console-time",
"const",
"constraint-validation",
"contenteditable",
"contentsecuritypolicy",
"contentsecuritypolicy2",
"cookie-store-api",
"cors",
"createimagebitmap",
"credential-management",
"cross-document-view-transitions",
"cryptography",
"css-all",
"css-anchor-positioning",
"css-animation",
"css-any-link",
"css-appearance",
"css-at-counter-style",
"css-backdrop-filter",
"css-background-offsets",
"css-backgroundblendmode",
"css-boxdecorationbreak",
"css-boxshadow",
"css-canvas",
"css-caret-color",
"css-cascade-layers",
"css-cascade-scope",
"css-case-insensitive",
"css-clip-path",
"css-color-adjust",
"css-color-function",
"css-conic-gradients",
"css-container-queries",
"css-container-queries-style",
"css-container-query-units",
"css-containment",
"css-content-visibility",
"css-counters",
"css-crisp-edges",
"css-cross-fade",
"css-default-pseudo",
"css-descendant-gtgt",
"css-deviceadaptation",
"css-dir-pseudo",
"css-display-contents",
"css-element-function",
"css-env-function",
"css-exclusions",
"css-featurequeries",
"css-filter-function",
"css-filters",
"css-first-letter",
"css-first-line",
"css-fixed",
"css-focus-visible",
"css-focus-within",
"css-font-palette",
"css-font-rendering-controls",
"css-font-stretch",
"css-gencontent",
"css-gradients",
"css-grid",
"css-grid-lanes",
"css-hanging-punctuation",
"css-has",
"css-hyphens",
"css-if",
"css-image-orientation",
"css-image-set",
"css-in-out-of-range",
"css-indeterminate-pseudo",
"css-initial-letter",
"css-initial-value",
"css-lch-lab",
"css-letter-spacing",
"css-line-clamp",
"css-logical-props",
"css-marker-pseudo",
"css-masks",
"css-matches-pseudo",
"css-math-functions",
"css-media-interaction",
"css-media-range-syntax",
"css-media-resolution",
"css-mediaqueries",
"css-mixblendmode",
"css-motion-paths",
"css-namespaces",
"css-nesting",
"css-not-sel-list",
"css-nth-child-of",
"css-opacity",
"css-optional-pseudo",
"css-overflow",
"css-overflow-anchor",
"css-overflow-overlay",
"css-overscroll-behavior",
"css-page-break",
"css-paged-media",
"css-paint-api",
"css-placeholder",
"css-placeholder-shown",
"css-read-only-write",
"css-rebeccapurple",
"css-reflections",
"css-regions",
"css-relative-colors",
"css-repeating-gradients",
"css-resize",
"css-revert-value",
"css-rrggbbaa",
"css-scroll-behavior",
"css-scrollbar",
"css-sel2",
"css-sel3",
"css-selection",
"css-shapes",
"css-snappoints",
"css-sticky",
"css-subgrid",
"css-supports-api",
"css-table",
"css-text-align-last",
"css-text-box-trim",
"css-text-indent",
"css-text-justify",
"css-text-orientation",
"css-text-wrap-balance",
"css-textshadow",
"css-touch-action",
"css-transitions",
"css-unset-value",
"css-variables",
"css-when-else",
"css-widows-orphans",
"css-writing-mode",
"css-zoom",
"css3-attr",
"css3-boxsizing",
"css3-colors",
"css3-cursors",
"css3-cursors-grab",
"css3-cursors-newer",
"css3-tabsize",
"currentcolor",
"custom-elements",
"custom-elementsv1",
"customevent",
"customizable-select",
"datalist",
"dataset",
"datauri",
"date-tolocaledatestring",
"declarative-shadow-dom",
"decorators",
"details",
"deviceorientation",
"devicepixelratio",
"dialog",
"dispatchevent",
"dnssec",
"do-not-track",
"document-currentscript",
"document-evaluate-xpath",
"document-execcommand",
"document-policy",
"document-scrollingelement",
"documenthead",
"dom-manip-convenience",
"dom-range",
"domcontentloaded",
"dommatrix",
"download",
"dragndrop",
"element-closest",
"element-from-point",
"element-scroll-methods",
"eme",
"eot",
"es5",
"es6",
"es6-class",
"es6-generators",
"es6-module",
"es6-module-dynamic-import",
"es6-number",
"es6-string-includes",
"eventsource",
"extended-system-fonts",
"feature-policy",
"fetch",
"fieldset-disabled",
"fileapi",
"filereader",
"filereadersync",
"filesystem",
"flac",
"flexbox",
"flexbox-gap",
"flow-root",
"focusin-focusout-events",
"font-family-system-ui",
"font-feature",
"font-kerning",
"font-loading",
"font-size-adjust",
"font-smooth",
"font-unicode-range",
"font-variant-alternates",
"font-variant-numeric",
"fontface",
"form-attribute",
"form-submit-attributes",
"form-validation",
"fullscreen",
"gamepad",
"geolocation",
"getboundingclientrect",
"getcomputedstyle",
"getelementsbyclassname",
"getrandomvalues",
"gyroscope",
"hardwareconcurrency",
"hashchange",
"heif",
"hevc",
"hidden",
"high-resolution-time",
"history",
"html-media-capture",
"html5semantic",
"http-live-streaming",
"http2",
"http3",
"iframe-sandbox",
"iframe-seamless",
"iframe-srcdoc",
"imagecapture",
"ime",
"img-naturalwidth-naturalheight",
"import-maps",
"imports",
"indeterminate-checkbox",
"indexeddb",
"indexeddb2",
"inline-block",
"innertext",
"input-autocomplete-onoff",
"input-color",
"input-datetime",
"input-email-tel-url",
"input-event",
"input-file-accept",
"input-file-directory",
"input-file-multiple",
"input-inputmode",
"input-minlength",
"input-number",
"input-pattern",
"input-placeholder",
"input-range",
"input-search",
"input-selection",
"insert-adjacent",
"insertadjacenthtml",
"internationalization",
"intersectionobserver",
"intersectionobserver-v2",
"intl-pluralrules",
"intrinsic-width",
"jpeg2000",
"jpegxl",
"jpegxr",
"js-regexp-lookbehind",
"json",
"justify-content-space-evenly",
"kerning-pairs-ligatures",
"keyboardevent-charcode",
"keyboardevent-code",
"keyboardevent-getmodifierstate",
"keyboardevent-key",
"keyboardevent-location",
"keyboardevent-which",
"lazyload",
"let",
"link-icon-png",
"link-icon-svg",
"link-rel-dns-prefetch",
"link-rel-modulepreload",
"link-rel-preconnect",
"link-rel-prefetch",
"link-rel-preload",
"link-rel-prerender",
"loading-lazy-attr",
"loading-lazy-media",
"localecompare",
"magnetometer",
"matchesselector",
"matchmedia",
"mathml",
"maxlength",
"media-fragments",
"mediacapture-fromelement",
"mediarecorder",
"mediasource",
"menu",
"meta-theme-color",
"meter",
"midi",
"minmaxwh",
"mp3",
"mpeg-dash",
"mpeg4",
"multibackgrounds",
"multicolumn",
"mutation-events",
"mutationobserver",
"namevalue-storage",
"native-filesystem-api",
"nav-timing",
"netinfo",
"notifications",
"object-entries",
"object-fit",
"object-observe",
"object-values",
"objectrtc",
"offline-apps",
"offscreencanvas",
"ogg-vorbis",
"ogv",
"ol-reversed",
"once-event-listener",
"online-status",
"opus",
"orientation-sensor",
"outline",
"pad-start-end",
"page-transition-events",
"pagevisibility",
"passive-event-listener",
"passkeys",
"path2d",
"payment-request",
"pdf-viewer",
"permissions-api",
"permissions-policy",
"picture",
"picture-in-picture",
"ping",
"png-alpha",
"pointer",
"pointer-events",
"pointerlock",
"portals",
"prefers-color-scheme",
"prefers-reduced-motion",
"progress",
"promise-finally",
"promises",
"proximity",
"proxy",
"publickeypinning",
"push-api",
"queryselector",
"readonly-attr",
"referrer-policy",
"registerprotocolhandler",
"rel-noopener",
"rel-noreferrer",
"rellist",
"rem",
"requestanimationframe",
"requestidlecallback",
"resizeobserver",
"resource-timing",
"rest-parameters",
"rtcpeerconnection",
"ruby",
"run-in",
"same-site-cookie-attribute",
"screen-orientation",
"script-async",
"script-defer",
"scrollintoview",
"scrollintoviewifneeded",
"sdch",
"selection-api",
"server-timing",
"serviceworkers",
"setimmediate",
"shadowdom",
"shadowdomv1",
"sharedarraybuffer",
"sharedworkers",
"sni",
"spdy",
"speech-recognition",
"speech-synthesis",
"spellcheck-attribute",
"sql-storage",
"srcset",
"stream",
"streams",
"stricttransportsecurity",
"style-scoped",
"subresource-integrity",
"svg",
"svg-css",
"svg-filters",
"svg-fonts",
"svg-fragment",
"svg-html",
"svg-html5",
"svg-img",
"svg-smil",
"sxg",
"tabindex-attr",
"template",
"template-literals",
"temporal",
"text-decoration",
"text-emphasis",
"text-overflow",
"text-size-adjust",
"text-stroke",
"textcontent",
"textencoder",
"tls1-1",
"tls1-2",
"tls1-3",
"touch",
"transforms2d",
"transforms3d",
"trusted-types",
"ttf",
"typedarrays",
"u2f",
"unhandledrejection",
"upgradeinsecurerequests",
"url",
"url-scroll-to-text-fragment",
"urlsearchparams",
"use-strict",
"user-select-none",
"user-timing",
"variable-fonts",
"vector-effect",
"vibration",
"video",
"videotracks",
"view-transitions",
"viewport-unit-variants",
"viewport-units",
"wai-aria",
"wake-lock",
"wasm",
"wasm-bigint",
"wasm-bulk-memory",
"wasm-multi-value",
"wasm-mutable-globals",
"wasm-nontrapping-fptoint",
"wasm-reference-types",
"wasm-signext",
"wasm-simd",
"wasm-threads",
"wav",
"wbr-element",
"web-animation",
"web-bluetooth",
"web-serial",
"web-share",
"webauthn",
"webcodecs",
"webgl",
"webgl2",
"webgpu",
"webhid",
"webkit-user-drag",
"webm",
"webnfc",
"webp",
"websockets",
"webtransport",
"webusb",
"webvr",
"webvtt",
"webworkers",
"webxr",
"will-change",
"woff",
"woff2",
"word-break",
"wordwrap",
"x-doc-messaging",
"x-frame-options",
"xhr2",
"xhtml",
"xhtmlsmil",
"xml-serializer",
"zstd",
];
static RANGES: &[u32] = &[
0u32, 2413u32, 4208u32, 5067u32, 7674u32, 7832u32, 9992u32, 12123u32, 14263u32, 16005u32,
18056u32, 20171u32, 21878u32, 23578u32, 25498u32, 28075u32, 30658u32, 32969u32, 33567u32,
35740u32, 37277u32, 38592u32, 39797u32, 42323u32, 44663u32, 47252u32, 49636u32, 51895u32,
52964u32, 54255u32, 56338u32, 58200u32, 59874u32, 62320u32, 64755u32, 67325u32, 69902u32,
71694u32, 73677u32, 76072u32, 78679u32, 80953u32, 83518u32, 85886u32, 87904u32, 90298u32,
92593u32, 95093u32, 96198u32, 98585u32, 100449u32, 101298u32, 103780u32, 106298u32, 108808u32,
111387u32, 113837u32, 116394u32, 118814u32, 120948u32, 121895u32, 124421u32, 126271u32,
127517u32, 127976u32, 130150u32, 132298u32, 132713u32, 135222u32, 137588u32, 140092u32,
141487u32, 143105u32, 145510u32, 147675u32, 149984u32, 152557u32, 153411u32, 155283u32,
156487u32, 157099u32, 159111u32, 161436u32, 163332u32, 164491u32, 166157u32, 167198u32,
167828u32, 168869u32, 170581u32, 171649u32, 174258u32, 176547u32, 178389u32, 180789u32,
180796u32, 180870u32, 181990u32, 183854u32, 184391u32, 186152u32, 186195u32, 188460u32,
188986u32, 191364u32, 193925u32, 196542u32, 199126u32, 200760u32, 202632u32, 203753u32,
205584u32, 207721u32, 210330u32, 212872u32, 214821u32, 214851u32, 215359u32, 216391u32,
218577u32, 218737u32, 220582u32, 222667u32, 225083u32, 227509u32, 228536u32, 231020u32,
232047u32, 234626u32, 236846u32, 239321u32, 240919u32, 243387u32, 245761u32, 247402u32,
249428u32, 250599u32, 253178u32, 255779u32, 257897u32, 259612u32, 262199u32, 263076u32,
264654u32, 265844u32, 268461u32, 270979u32, 273594u32, 274984u32, 276014u32, 277681u32,
280287u32, 282228u32, 283191u32, 285626u32, 287782u32, 290252u32, 292435u32, 294370u32,
294518u32, 295269u32, 297760u32, 299807u32, 301461u32, 303334u32, 305078u32, 307134u32,
309745u32, 312346u32, 314544u32, 316597u32, 318493u32, 320550u32, 321582u32, 323851u32,
326460u32, 328405u32, 328704u32, 331320u32, 331796u32, 333811u32, 334578u32, 337177u32,
339061u32, 341627u32, 343757u32, 345819u32, 345820u32, 347722u32, 350082u32, 352186u32,
352406u32, 355013u32, 357618u32, 359640u32, 361597u32, 363563u32, 365960u32, 368553u32,
368930u32, 370829u32, 373325u32, 373504u32, 375816u32, 378433u32, 381042u32, 383529u32,
384654u32, 384655u32, 386914u32, 389241u32, 391733u32, 393450u32, 396039u32, 398656u32,
400607u32, 402914u32, 405497u32, 408002u32, 408734u32, 410790u32, 413328u32, 415280u32,
417887u32, 420494u32, 422878u32, 425107u32, 427270u32, 429378u32, 431894u32, 433825u32,
435946u32, 435964u32, 438571u32, 440930u32, 443008u32, 445146u32, 446997u32, 448793u32,
451102u32, 453206u32, 455703u32, 456109u32, 457892u32, 459968u32, 462443u32, 464933u32,
467422u32, 469845u32, 471108u32, 473073u32, 475607u32, 477152u32, 478975u32, 481294u32,
483275u32, 485664u32, 487877u32, 489975u32, 491025u32, 492840u32, 495230u32, 496675u32,
498690u32, 501282u32, 503787u32, 506277u32, 508820u32, 511118u32, 513286u32, 515841u32,
518426u32, 521031u32, 523634u32, 525990u32, 526849u32, 528753u32, 531299u32, 531514u32,
532732u32, 535228u32, 537555u32, 540061u32, 540605u32, 543209u32, 544082u32, 546204u32,
547586u32, 550038u32, 550039u32, 552333u32, 553366u32, 553403u32, 556010u32, 557212u32,
557563u32, 559864u32, 562257u32, 564253u32, 566870u32, 569335u32, 571885u32, 574101u32,
576351u32, 578923u32, 581406u32, 583748u32, 585448u32, 587869u32, 589522u32, 591547u32,
594033u32, 596539u32, 599099u32, 601614u32, 604066u32, 606629u32, 609093u32, 611656u32,
613889u32, 615791u32, 616694u32, 618464u32, 620809u32, 621256u32, 621471u32, 621516u32,
623053u32, 625626u32, 627537u32, 629981u32, 632457u32, 634306u32, 636567u32, 638666u32,
641118u32, 643666u32, 643703u32, 645789u32, 648247u32, 649698u32, 651813u32, 653150u32,
655015u32, 656876u32, 658708u32, 659974u32, 661488u32, 661508u32, 664049u32, 664050u32,
666578u32, 669041u32, 670748u32, 673341u32, 675590u32, 677289u32, 679193u32, 681314u32,
681547u32, 682288u32, 684669u32, 685981u32, 688592u32, 691109u32, 691134u32, 693583u32,
696162u32, 698728u32, 700812u32, 703178u32, 705749u32, 706443u32, 708845u32, 709893u32,
711884u32, 713842u32, 716087u32, 716183u32, 718141u32, 718163u32, 719376u32, 720768u32,
722954u32, 724238u32, 726563u32, 728509u32, 730977u32, 733156u32, 734015u32, 736617u32,
738556u32, 741030u32, 743426u32, 745407u32, 746343u32, 748518u32, 750313u32, 752499u32,
754309u32, 754944u32, 757059u32, 758769u32, 760619u32, 763230u32, 765100u32, 767596u32,
769401u32, 769402u32, 771058u32, 772797u32, 775265u32, 777081u32, 779306u32, 779804u32,
781907u32, 782299u32, 784048u32, 786643u32, 789117u32, 791352u32, 792977u32, 794939u32,
797296u32, 799359u32, 801885u32, 804305u32, 805782u32, 807483u32, 809682u32, 811806u32,
814000u32, 816375u32, 816695u32, 818579u32, 820494u32, 822954u32, 825430u32, 827947u32,
829823u32, 830284u32, 832798u32, 834361u32, 836386u32, 836429u32, 836848u32, 838766u32,
840285u32, 842235u32, 844824u32, 845773u32, 846744u32, 848836u32, 851384u32, 852666u32,
854825u32, 857065u32, 858961u32, 861377u32, 861490u32, 863493u32, 866088u32, 868665u32,
871192u32, 872061u32, 874336u32, 876887u32, 879373u32, 881951u32, 884478u32, 885384u32,
887721u32, 889993u32, 892107u32, 892246u32, 894330u32, 896534u32, 899129u32, 900553u32,
902900u32, 905489u32, 907623u32, 909006u32, 911293u32, 913022u32, 915132u32, 917705u32,
920161u32, 921090u32, 923660u32, 926148u32, 927278u32, 929169u32, 931209u32, 933438u32,
934643u32, 936684u32, 939160u32, 941678u32, 943868u32, 945694u32, 948067u32, 949693u32,
952266u32, 952846u32, 953526u32, 954602u32, 956954u32, 959517u32, 960670u32, 962567u32,
964030u32, 965564u32, 967065u32, 968753u32, 970332u32, 971663u32, 973266u32, 974504u32,
976056u32, 978585u32, 981146u32, 983160u32, 984189u32, 984860u32, 985976u32, 987656u32,
988711u32, 991117u32, 992892u32, 993475u32, 994139u32, 995480u32, 997805u32, 997822u32,
999909u32, 1002412u32, 1003283u32, 1004259u32, 1004751u32, 1007045u32, 1009559u32, 1010393u32,
1012505u32, 1014999u32, 1017112u32, 1019602u32, 1022194u32, 1024791u32, 1027195u32, 1029675u32,
1032282u32, 1032292u32, 1034895u32, 1035406u32,
];
pub fn get_feature_stat(name: &str) -> Option<Feature> {
match KEYS.binary_search(&name) {
Ok(idx) => {
let start = RANGES[idx];
let end = RANGES[idx + 1];
Some(Feature::new(start, end))
}
Err(_) => None,
}
}