summaryrefslogtreecommitdiff
path: root/vendor/golang.org/x/net/html/atom
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/golang.org/x/net/html/atom')
-rw-r--r--vendor/golang.org/x/net/html/atom/atom.go78
-rw-r--r--vendor/golang.org/x/net/html/atom/gen.go709
-rw-r--r--vendor/golang.org/x/net/html/atom/table.go777
3 files changed, 1564 insertions, 0 deletions
diff --git a/vendor/golang.org/x/net/html/atom/atom.go b/vendor/golang.org/x/net/html/atom/atom.go
new file mode 100644
index 0000000..cd0a8ac
--- /dev/null
+++ b/vendor/golang.org/x/net/html/atom/atom.go
@@ -0,0 +1,78 @@
+// Copyright 2012 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// Package atom provides integer codes (also known as atoms) for a fixed set of
+// frequently occurring HTML strings: tag names and attribute keys such as "p"
+// and "id".
+//
+// Sharing an atom's name between all elements with the same tag can result in
+// fewer string allocations when tokenizing and parsing HTML. Integer
+// comparisons are also generally faster than string comparisons.
+//
+// The value of an atom's particular code is not guaranteed to stay the same
+// between versions of this package. Neither is any ordering guaranteed:
+// whether atom.H1 < atom.H2 may also change. The codes are not guaranteed to
+// be dense. The only guarantees are that e.g. looking up "div" will yield
+// atom.Div, calling atom.Div.String will return "div", and atom.Div != 0.
+package atom // import "golang.org/x/net/html/atom"
+
+// Atom is an integer code for a string. The zero value maps to "".
+type Atom uint32
+
+// String returns the atom's name.
+func (a Atom) String() string {
+ start := uint32(a >> 8)
+ n := uint32(a & 0xff)
+ if start+n > uint32(len(atomText)) {
+ return ""
+ }
+ return atomText[start : start+n]
+}
+
+func (a Atom) string() string {
+ return atomText[a>>8 : a>>8+a&0xff]
+}
+
+// fnv computes the FNV hash with an arbitrary starting value h.
+func fnv(h uint32, s []byte) uint32 {
+ for i := range s {
+ h ^= uint32(s[i])
+ h *= 16777619
+ }
+ return h
+}
+
+func match(s string, t []byte) bool {
+ for i, c := range t {
+ if s[i] != c {
+ return false
+ }
+ }
+ return true
+}
+
+// Lookup returns the atom whose name is s. It returns zero if there is no
+// such atom. The lookup is case sensitive.
+func Lookup(s []byte) Atom {
+ if len(s) == 0 || len(s) > maxAtomLen {
+ return 0
+ }
+ h := fnv(hash0, s)
+ if a := table[h&uint32(len(table)-1)]; int(a&0xff) == len(s) && match(a.string(), s) {
+ return a
+ }
+ if a := table[(h>>16)&uint32(len(table)-1)]; int(a&0xff) == len(s) && match(a.string(), s) {
+ return a
+ }
+ return 0
+}
+
+// String returns a string whose contents are equal to s. In that sense, it is
+// equivalent to string(s) but may be more efficient.
+func String(s []byte) string {
+ if a := Lookup(s); a != 0 {
+ return a.String()
+ }
+ return string(s)
+}
diff --git a/vendor/golang.org/x/net/html/atom/gen.go b/vendor/golang.org/x/net/html/atom/gen.go
new file mode 100644
index 0000000..cc5dc5d
--- /dev/null
+++ b/vendor/golang.org/x/net/html/atom/gen.go
@@ -0,0 +1,709 @@
+// Copyright 2012 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// +build ignore
+
+//go:generate go run gen.go
+//go:generate go run gen.go -test
+
+package main
+
+import (
+ "bytes"
+ "flag"
+ "fmt"
+ "go/format"
+ "io/ioutil"
+ "math/rand"
+ "os"
+ "sort"
+ "strings"
+)
+
+// identifier converts s to a Go exported identifier.
+// It converts "div" to "Div" and "accept-charset" to "AcceptCharset".
+func identifier(s string) string {
+ b := make([]byte, 0, len(s))
+ cap := true
+ for _, c := range s {
+ if c == '-' {
+ cap = true
+ continue
+ }
+ if cap && 'a' <= c && c <= 'z' {
+ c -= 'a' - 'A'
+ }
+ cap = false
+ b = append(b, byte(c))
+ }
+ return string(b)
+}
+
+var test = flag.Bool("test", false, "generate table_test.go")
+
+func genFile(name string, buf *bytes.Buffer) {
+ b, err := format.Source(buf.Bytes())
+ if err != nil {
+ fmt.Fprintln(os.Stderr, err)
+ os.Exit(1)
+ }
+ if err := ioutil.WriteFile(name, b, 0644); err != nil {
+ fmt.Fprintln(os.Stderr, err)
+ os.Exit(1)
+ }
+}
+
+func main() {
+ flag.Parse()
+
+ var all []string
+ all = append(all, elements...)
+ all = append(all, attributes...)
+ all = append(all, eventHandlers...)
+ all = append(all, extra...)
+ sort.Strings(all)
+
+ // uniq - lists have dups
+ w := 0
+ for _, s := range all {
+ if w == 0 || all[w-1] != s {
+ all[w] = s
+ w++
+ }
+ }
+ all = all[:w]
+
+ if *test {
+ var buf bytes.Buffer
+ fmt.Fprintln(&buf, "// Code generated by go generate gen.go; DO NOT EDIT.\n")
+ fmt.Fprintln(&buf, "//go:generate go run gen.go -test\n")
+ fmt.Fprintln(&buf, "package atom\n")
+ fmt.Fprintln(&buf, "var testAtomList = []string{")
+ for _, s := range all {
+ fmt.Fprintf(&buf, "\t%q,\n", s)
+ }
+ fmt.Fprintln(&buf, "}")
+
+ genFile("table_test.go", &buf)
+ return
+ }
+
+ // Find hash that minimizes table size.
+ var best *table
+ for i := 0; i < 1000000; i++ {
+ if best != nil && 1<<(best.k-1) < len(all) {
+ break
+ }
+ h := rand.Uint32()
+ for k := uint(0); k <= 16; k++ {
+ if best != nil && k >= best.k {
+ break
+ }
+ var t table
+ if t.init(h, k, all) {
+ best = &t
+ break
+ }
+ }
+ }
+ if best == nil {
+ fmt.Fprintf(os.Stderr, "failed to construct string table\n")
+ os.Exit(1)
+ }
+
+ // Lay out strings, using overlaps when possible.
+ layout := append([]string{}, all...)
+
+ // Remove strings that are substrings of other strings
+ for changed := true; changed; {
+ changed = false
+ for i, s := range layout {
+ if s == "" {
+ continue
+ }
+ for j, t := range layout {
+ if i != j && t != "" && strings.Contains(s, t) {
+ changed = true
+ layout[j] = ""
+ }
+ }
+ }
+ }
+
+ // Join strings where one suffix matches another prefix.
+ for {
+ // Find best i, j, k such that layout[i][len-k:] == layout[j][:k],
+ // maximizing overlap length k.
+ besti := -1
+ bestj := -1
+ bestk := 0
+ for i, s := range layout {
+ if s == "" {
+ continue
+ }
+ for j, t := range layout {
+ if i == j {
+ continue
+ }
+ for k := bestk + 1; k <= len(s) && k <= len(t); k++ {
+ if s[len(s)-k:] == t[:k] {
+ besti = i
+ bestj = j
+ bestk = k
+ }
+ }
+ }
+ }
+ if bestk > 0 {
+ layout[besti] += layout[bestj][bestk:]
+ layout[bestj] = ""
+ continue
+ }
+ break
+ }
+
+ text := strings.Join(layout, "")
+
+ atom := map[string]uint32{}
+ for _, s := range all {
+ off := strings.Index(text, s)
+ if off < 0 {
+ panic("lost string " + s)
+ }
+ atom[s] = uint32(off<<8 | len(s))
+ }
+
+ var buf bytes.Buffer
+ // Generate the Go code.
+ fmt.Fprintln(&buf, "// Code generated by go generate gen.go; DO NOT EDIT.\n")
+ fmt.Fprintln(&buf, "//go:generate go run gen.go\n")
+ fmt.Fprintln(&buf, "package atom\n\nconst (")
+
+ // compute max len
+ maxLen := 0
+ for _, s := range all {
+ if maxLen < len(s) {
+ maxLen = len(s)
+ }
+ fmt.Fprintf(&buf, "\t%s Atom = %#x\n", identifier(s), atom[s])
+ }
+ fmt.Fprintln(&buf, ")\n")
+
+ fmt.Fprintf(&buf, "const hash0 = %#x\n\n", best.h0)
+ fmt.Fprintf(&buf, "const maxAtomLen = %d\n\n", maxLen)
+
+ fmt.Fprintf(&buf, "var table = [1<<%d]Atom{\n", best.k)
+ for i, s := range best.tab {
+ if s == "" {
+ continue
+ }
+ fmt.Fprintf(&buf, "\t%#x: %#x, // %s\n", i, atom[s], s)
+ }
+ fmt.Fprintf(&buf, "}\n")
+ datasize := (1 << best.k) * 4
+
+ fmt.Fprintln(&buf, "const atomText =")
+ textsize := len(text)
+ for len(text) > 60 {
+ fmt.Fprintf(&buf, "\t%q +\n", text[:60])
+ text = text[60:]
+ }
+ fmt.Fprintf(&buf, "\t%q\n\n", text)
+
+ genFile("table.go", &buf)
+
+ fmt.Fprintf(os.Stdout, "%d atoms; %d string bytes + %d tables = %d total data\n", len(all), textsize, datasize, textsize+datasize)
+}
+
+type byLen []string
+
+func (x byLen) Less(i, j int) bool { return len(x[i]) > len(x[j]) }
+func (x byLen) Swap(i, j int) { x[i], x[j] = x[j], x[i] }
+func (x byLen) Len() int { return len(x) }
+
+// fnv computes the FNV hash with an arbitrary starting value h.
+func fnv(h uint32, s string) uint32 {
+ for i := 0; i < len(s); i++ {
+ h ^= uint32(s[i])
+ h *= 16777619
+ }
+ return h
+}
+
+// A table represents an attempt at constructing the lookup table.
+// The lookup table uses cuckoo hashing, meaning that each string
+// can be found in one of two positions.
+type table struct {
+ h0 uint32
+ k uint
+ mask uint32
+ tab []string
+}
+
+// hash returns the two hashes for s.
+func (t *table) hash(s string) (h1, h2 uint32) {
+ h := fnv(t.h0, s)
+ h1 = h & t.mask
+ h2 = (h >> 16) & t.mask
+ return
+}
+
+// init initializes the table with the given parameters.
+// h0 is the initial hash value,
+// k is the number of bits of hash value to use, and
+// x is the list of strings to store in the table.
+// init returns false if the table cannot be constructed.
+func (t *table) init(h0 uint32, k uint, x []string) bool {
+ t.h0 = h0
+ t.k = k
+ t.tab = make([]string, 1<<k)
+ t.mask = 1<<k - 1
+ for _, s := range x {
+ if !t.insert(s) {
+ return false
+ }
+ }
+ return true
+}
+
+// insert inserts s in the table.
+func (t *table) insert(s string) bool {
+ h1, h2 := t.hash(s)
+ if t.tab[h1] == "" {
+ t.tab[h1] = s
+ return true
+ }
+ if t.tab[h2] == "" {
+ t.tab[h2] = s
+ return true
+ }
+ if t.push(h1, 0) {
+ t.tab[h1] = s
+ return true
+ }
+ if t.push(h2, 0) {
+ t.tab[h2] = s
+ return true
+ }
+ return false
+}
+
+// push attempts to push aside the entry in slot i.
+func (t *table) push(i uint32, depth int) bool {
+ if depth > len(t.tab) {
+ return false
+ }
+ s := t.tab[i]
+ h1, h2 := t.hash(s)
+ j := h1 + h2 - i
+ if t.tab[j] != "" && !t.push(j, depth+1) {
+ return false
+ }
+ t.tab[j] = s
+ return true
+}
+
+// The lists of element names and attribute keys were taken from
+// https://html.spec.whatwg.org/multipage/indices.html#index
+// as of the "HTML Living Standard - Last Updated 18 September 2017" version.
+
+// "command", "keygen" and "menuitem" have been removed from the spec,
+// but are kept here for backwards compatibility.
+var elements = []string{
+ "a",
+ "abbr",
+ "address",
+ "area",
+ "article",
+ "aside",
+ "audio",
+ "b",
+ "base",
+ "bdi",
+ "bdo",
+ "blockquote",
+ "body",
+ "br",
+ "button",
+ "canvas",
+ "caption",
+ "cite",
+ "code",
+ "col",
+ "colgroup",
+ "command",
+ "data",
+ "datalist",
+ "dd",
+ "del",
+ "details",
+ "dfn",
+ "dialog",
+ "div",
+ "dl",
+ "dt",
+ "em",
+ "embed",
+ "fieldset",
+ "figcaption",
+ "figure",
+ "footer",
+ "form",
+ "h1",
+ "h2",
+ "h3",
+ "h4",
+ "h5",
+ "h6",
+ "head",
+ "header",
+ "hgroup",
+ "hr",
+ "html",
+ "i",
+ "iframe",
+ "img",
+ "input",
+ "ins",
+ "kbd",
+ "keygen",
+ "label",
+ "legend",
+ "li",
+ "link",
+ "main",
+ "map",
+ "mark",
+ "menu",
+ "menuitem",
+ "meta",
+ "meter",
+ "nav",
+ "noscript",
+ "object",
+ "ol",
+ "optgroup",
+ "option",
+ "output",
+ "p",
+ "param",
+ "picture",
+ "pre",
+ "progress",
+ "q",
+ "rp",
+ "rt",
+ "ruby",
+ "s",
+ "samp",
+ "script",
+ "section",
+ "select",
+ "slot",
+ "small",
+ "source",
+ "span",
+ "strong",
+ "style",
+ "sub",
+ "summary",
+ "sup",
+ "table",
+ "tbody",
+ "td",
+ "template",
+ "textarea",
+ "tfoot",
+ "th",
+ "thead",
+ "time",
+ "title",
+ "tr",
+ "track",
+ "u",
+ "ul",
+ "var",
+ "video",
+ "wbr",
+}
+
+// https://html.spec.whatwg.org/multipage/indices.html#attributes-3
+//
+// "challenge", "command", "contextmenu", "dropzone", "icon", "keytype", "mediagroup",
+// "radiogroup", "spellcheck", "scoped", "seamless", "sortable" and "sorted" have been removed from the spec,
+// but are kept here for backwards compatibility.
+var attributes = []string{
+ "abbr",
+ "accept",
+ "accept-charset",
+ "accesskey",
+ "action",
+ "allowfullscreen",
+ "allowpaymentrequest",
+ "allowusermedia",
+ "alt",
+ "as",
+ "async",
+ "autocomplete",
+ "autofocus",
+ "autoplay",
+ "challenge",
+ "charset",
+ "checked",
+ "cite",
+ "class",
+ "color",
+ "cols",
+ "colspan",
+ "command",
+ "content",
+ "contenteditable",
+ "contextmenu",
+ "controls",
+ "coords",
+ "crossorigin",
+ "data",
+ "datetime",
+ "default",
+ "defer",
+ "dir",
+ "dirname",
+ "disabled",
+ "download",
+ "draggable",
+ "dropzone",
+ "enctype",
+ "for",
+ "form",
+ "formaction",
+ "formenctype",
+ "formmethod",
+ "formnovalidate",
+ "formtarget",
+ "headers",
+ "height",
+ "hidden",
+ "high",
+ "href",
+ "hreflang",
+ "http-equiv",
+ "icon",
+ "id",
+ "inputmode",
+ "integrity",
+ "is",
+ "ismap",
+ "itemid",
+ "itemprop",
+ "itemref",
+ "itemscope",
+ "itemtype",
+ "keytype",
+ "kind",
+ "label",
+ "lang",
+ "list",
+ "loop",
+ "low",
+ "manifest",
+ "max",
+ "maxlength",
+ "media",
+ "mediagroup",
+ "method",
+ "min",
+ "minlength",
+ "multiple",
+ "muted",
+ "name",
+ "nomodule",
+ "nonce",
+ "novalidate",
+ "open",
+ "optimum",
+ "pattern",
+ "ping",
+ "placeholder",
+ "playsinline",
+ "poster",
+ "preload",
+ "radiogroup",
+ "readonly",
+ "referrerpolicy",
+ "rel",
+ "required",
+ "reversed",
+ "rows",
+ "rowspan",
+ "sandbox",
+ "spellcheck",
+ "scope",
+ "scoped",
+ "seamless",
+ "selected",
+ "shape",
+ "size",
+ "sizes",
+ "sortable",
+ "sorted",
+ "slot",
+ "span",
+ "spellcheck",
+ "src",
+ "srcdoc",
+ "srclang",
+ "srcset",
+ "start",
+ "step",
+ "style",
+ "tabindex",
+ "target",
+ "title",
+ "translate",
+ "type",
+ "typemustmatch",
+ "updateviacache",
+ "usemap",
+ "value",
+ "width",
+ "workertype",
+ "wrap",
+}
+
+// "onautocomplete", "onautocompleteerror", "onmousewheel",
+// "onshow" and "onsort" have been removed from the spec,
+// but are kept here for backwards compatibility.
+var eventHandlers = []string{
+ "onabort",
+ "onautocomplete",
+ "onautocompleteerror",
+ "onauxclick",
+ "onafterprint",
+ "onbeforeprint",
+ "onbeforeunload",
+ "onblur",
+ "oncancel",
+ "oncanplay",
+ "oncanplaythrough",
+ "onchange",
+ "onclick",
+ "onclose",
+ "oncontextmenu",
+ "oncopy",
+ "oncuechange",
+ "oncut",
+ "ondblclick",
+ "ondrag",
+ "ondragend",
+ "ondragenter",
+ "ondragexit",
+ "ondragleave",
+ "ondragover",
+ "ondragstart",
+ "ondrop",
+ "ondurationchange",
+ "onemptied",
+ "onended",
+ "onerror",
+ "onfocus",
+ "onhashchange",
+ "oninput",
+ "oninvalid",
+ "onkeydown",
+ "onkeypress",
+ "onkeyup",
+ "onlanguagechange",
+ "onload",
+ "onloadeddata",
+ "onloadedmetadata",
+ "onloadend",
+ "onloadstart",
+ "onmessage",
+ "onmessageerror",
+ "onmousedown",
+ "onmouseenter",
+ "onmouseleave",
+ "onmousemove",
+ "onmouseout",
+ "onmouseover",
+ "onmouseup",
+ "onmousewheel",
+ "onwheel",
+ "onoffline",
+ "ononline",
+ "onpagehide",
+ "onpageshow",
+ "onpaste",
+ "onpause",
+ "onplay",
+ "onplaying",
+ "onpopstate",
+ "onprogress",
+ "onratechange",
+ "onreset",
+ "onresize",
+ "onrejectionhandled",
+ "onscroll",
+ "onsecuritypolicyviolation",
+ "onseeked",
+ "onseeking",
+ "onselect",
+ "onshow",
+ "onsort",
+ "onstalled",
+ "onstorage",
+ "onsubmit",
+ "onsuspend",
+ "ontimeupdate",
+ "ontoggle",
+ "onunhandledrejection",
+ "onunload",
+ "onvolumechange",
+ "onwaiting",
+}
+
+// extra are ad-hoc values not covered by any of the lists above.
+var extra = []string{
+ "align",
+ "annotation",
+ "annotation-xml",
+ "applet",
+ "basefont",
+ "bgsound",
+ "big",
+ "blink",
+ "center",
+ "color",
+ "desc",
+ "face",
+ "font",
+ "foreignObject", // HTML is case-insensitive, but SVG-embedded-in-HTML is case-sensitive.
+ "foreignobject",
+ "frame",
+ "frameset",
+ "image",
+ "isindex",
+ "listing",
+ "malignmark",
+ "marquee",
+ "math",
+ "mglyph",
+ "mi",
+ "mn",
+ "mo",
+ "ms",
+ "mtext",
+ "nobr",
+ "noembed",
+ "noframes",
+ "plaintext",
+ "prompt",
+ "public",
+ "spacer",
+ "strike",
+ "svg",
+ "system",
+ "tt",
+ "xmp",
+}
diff --git a/vendor/golang.org/x/net/html/atom/table.go b/vendor/golang.org/x/net/html/atom/table.go
new file mode 100644
index 0000000..f74018e
--- /dev/null
+++ b/vendor/golang.org/x/net/html/atom/table.go
@@ -0,0 +1,777 @@
+// Code generated by go generate gen.go; DO NOT EDIT.
+
+//go:generate go run gen.go
+
+package atom
+
+const (
+ A Atom = 0x1
+ Abbr Atom = 0x4
+ Accept Atom = 0x1a06
+ AcceptCharset Atom = 0x1a0e
+ Accesskey Atom = 0x2c09
+ Action Atom = 0x25a06
+ Address Atom = 0x6ed07
+ Align Atom = 0x6d405
+ Allowfullscreen Atom = 0x1f00f
+ Allowpaymentrequest Atom = 0x6913
+ Allowusermedia Atom = 0x850e
+ Alt Atom = 0xb003
+ Annotation Atom = 0x1b90a
+ AnnotationXml Atom = 0x1b90e
+ Applet Atom = 0x30106
+ Area Atom = 0x34a04
+ Article Atom = 0x3f007
+ As Atom = 0xb902
+ Aside Atom = 0xc105
+ Async Atom = 0xb905
+ Audio Atom = 0xcf05
+ Autocomplete Atom = 0x2600c
+ Autofocus Atom = 0xeb09
+ Autoplay Atom = 0x10608
+ B Atom = 0x101
+ Base Atom = 0x11504
+ Basefont Atom = 0x11508
+ Bdi Atom = 0x16103
+ Bdo Atom = 0x13403
+ Bgsound Atom = 0x14707
+ Big Atom = 0x15903
+ Blink Atom = 0x15c05
+ Blockquote Atom = 0x1680a
+ Body Atom = 0x2804
+ Br Atom = 0x202
+ Button Atom = 0x17206
+ Canvas Atom = 0xbd06
+ Caption Atom = 0x21907
+ Center Atom = 0x20806
+ Challenge Atom = 0x28309
+ Charset Atom = 0x2107
+ Checked Atom = 0x46d07
+ Cite Atom = 0x55804
+ Class Atom = 0x5b905
+ Code Atom = 0x19004
+ Col Atom = 0x19703
+ Colgroup Atom = 0x19708
+ Color Atom = 0x1af05
+ Cols Atom = 0x1b404
+ Colspan Atom = 0x1b407
+ Command Atom = 0x1c707
+ Content Atom = 0x57f07
+ Contenteditable Atom = 0x57f0f
+ Contextmenu Atom = 0x3740b
+ Controls Atom = 0x1ce08
+ Coords Atom = 0x1da06
+ Crossorigin Atom = 0x1e30b
+ Data Atom = 0x49904
+ Datalist Atom = 0x49908
+ Datetime Atom = 0x2a008
+ Dd Atom = 0x2bf02
+ Default Atom = 0xc407
+ Defer Atom = 0x19205
+ Del Atom = 0x44603
+ Desc Atom = 0x55504
+ Details Atom = 0x4607
+ Dfn Atom = 0x5f03
+ Dialog Atom = 0x16206
+ Dir Atom = 0xa303
+ Dirname Atom = 0xa307
+ Disabled Atom = 0x14d08
+ Div Atom = 0x15403
+ Dl Atom = 0x5e202
+ Download Atom = 0x45708
+ Draggable Atom = 0x18309
+ Dropzone Atom = 0x3f908
+ Dt Atom = 0x64702
+ Em Atom = 0x4202
+ Embed Atom = 0x4205
+ Enctype Atom = 0x27507
+ Face Atom = 0x20604
+ Fieldset Atom = 0x20e08
+ Figcaption Atom = 0x2160a
+ Figure Atom = 0x23006
+ Font Atom = 0x11904
+ Footer Atom = 0xb306
+ For Atom = 0x23c03
+ ForeignObject Atom = 0x23c0d
+ Foreignobject Atom = 0x2490d
+ Form Atom = 0x25604
+ Formaction Atom = 0x2560a
+ Formenctype Atom = 0x2710b
+ Formmethod Atom = 0x28c0a
+ Formnovalidate Atom = 0x2960e
+ Formtarget Atom = 0x2a80a
+ Frame Atom = 0x5705
+ Frameset Atom = 0x5708
+ H1 Atom = 0x14502
+ H2 Atom = 0x2c602
+ H3 Atom = 0x2f502
+ H4 Atom = 0x33902
+ H5 Atom = 0x34302
+ H6 Atom = 0x64902
+ Head Atom = 0x32504
+ Header Atom = 0x32506
+ Headers Atom = 0x32507
+ Height Atom = 0x12c06
+ Hgroup Atom = 0x2b206
+ Hidden Atom = 0x2bd06
+ High Atom = 0x2c304
+ Hr Atom = 0x14002
+ Href Atom = 0x2c804
+ Hreflang Atom = 0x2c808
+ Html Atom = 0x13004
+ HttpEquiv Atom = 0x2d00a
+ I Atom = 0x601
+ Icon Atom = 0x57e04
+ Id Atom = 0xc302
+ Iframe Atom = 0x2e406
+ Image Atom = 0x2ea05
+ Img Atom = 0x2ef03
+ Input Atom = 0x43f05
+ Inputmode Atom = 0x43f09
+ Ins Atom = 0x1ec03
+ Integrity Atom = 0x22709
+ Is Atom = 0x14e02
+ Isindex Atom = 0x2f707
+ Ismap Atom = 0x2fe05
+ Itemid Atom = 0x37f06
+ Itemprop Atom = 0x55908
+ Itemref Atom = 0x3c107
+ Itemscope Atom = 0x66d09
+ Itemtype Atom = 0x30708
+ Kbd Atom = 0x16003
+ Keygen Atom = 0x3206
+ Keytype Atom = 0x7e07
+ Kind Atom = 0x18004
+ Label Atom = 0xda05
+ Lang Atom = 0x2cc04
+ Legend Atom = 0x18a06
+ Li Atom = 0x11102
+ Link Atom = 0x15d04
+ List Atom = 0x49d04
+ Listing Atom = 0x49d07
+ Loop Atom = 0xde04
+ Low Atom = 0x6b03
+ Main Atom = 0x1004
+ Malignmark Atom = 0x6d30a
+ Manifest Atom = 0x30f08
+ Map Atom = 0x30003
+ Mark Atom = 0x6d904
+ Marquee Atom = 0x31b07
+ Math Atom = 0x32204
+ Max Atom = 0x33103
+ Maxlength Atom = 0x33109
+ Media Atom = 0x8e05
+ Mediagroup Atom = 0x8e0a
+ Menu Atom = 0x37b04
+ Menuitem Atom = 0x37b08
+ Meta Atom = 0x4ac04
+ Meter Atom = 0xa805
+ Method Atom = 0x29006
+ Mglyph Atom = 0x2f006
+ Mi Atom = 0x33b02
+ Min Atom = 0x33b03
+ Minlength Atom = 0x33b09
+ Mn Atom = 0x29902
+ Mo Atom = 0x6302
+ Ms Atom = 0x67002
+ Mtext Atom = 0x34505
+ Multiple Atom = 0x35308
+ Muted Atom = 0x35b05
+ Name Atom = 0xa604
+ Nav Atom = 0x1303
+ Nobr Atom = 0x3704
+ Noembed Atom = 0x4007
+ Noframes Atom = 0x5508
+ Nomodule Atom = 0x6108
+ Nonce Atom = 0x56205
+ Noscript Atom = 0x1fe08
+ Novalidate Atom = 0x29a0a
+ Object Atom = 0x25006
+ Ol Atom = 0x10102
+ Onabort Atom = 0x17607
+ Onafterprint Atom = 0x21e0c
+ Onautocomplete Atom = 0x25e0e
+ Onautocompleteerror Atom = 0x25e13
+ Onauxclick Atom = 0x61b0a
+ Onbeforeprint Atom = 0x69a0d
+ Onbeforeunload Atom = 0x6e10e
+ Onblur Atom = 0x5c206
+ Oncancel Atom = 0xd308
+ Oncanplay Atom = 0x13609
+ Oncanplaythrough Atom = 0x13610
+ Onchange Atom = 0x40f08
+ Onclick Atom = 0x2dd07
+ Onclose Atom = 0x36007
+ Oncontextmenu Atom = 0x3720d
+ Oncopy Atom = 0x38506
+ Oncuechange Atom = 0x38b0b
+ Oncut Atom = 0x39605
+ Ondblclick Atom = 0x39b0a
+ Ondrag Atom = 0x3a506
+ Ondragend Atom = 0x3a509
+ Ondragenter Atom = 0x3ae0b
+ Ondragexit Atom = 0x3b90a
+ Ondragleave Atom = 0x3d30b
+ Ondragover Atom = 0x3de0a
+ Ondragstart Atom = 0x3e80b
+ Ondrop Atom = 0x3f706
+ Ondurationchange Atom = 0x40710
+ Onemptied Atom = 0x3fe09
+ Onended Atom = 0x41707
+ Onerror Atom = 0x41e07
+ Onfocus Atom = 0x42507
+ Onhashchange Atom = 0x4310c
+ Oninput Atom = 0x43d07
+ Oninvalid Atom = 0x44909
+ Onkeydown Atom = 0x45209
+ Onkeypress Atom = 0x45f0a
+ Onkeyup Atom = 0x47407
+ Onlanguagechange Atom = 0x48110
+ Onload Atom = 0x49106
+ Onloadeddata Atom = 0x4910c
+ Onloadedmetadata Atom = 0x4a410
+ Onloadend Atom = 0x4ba09
+ Onloadstart Atom = 0x4c30b
+ Onmessage Atom = 0x4ce09
+ Onmessageerror Atom = 0x4ce0e
+ Onmousedown Atom = 0x4dc0b
+ Onmouseenter Atom = 0x4e70c
+ Onmouseleave Atom = 0x4f30c
+ Onmousemove Atom = 0x4ff0b
+ Onmouseout Atom = 0x50a0a
+ Onmouseover Atom = 0x5170b
+ Onmouseup Atom = 0x52209
+ Onmousewheel Atom = 0x5300c
+ Onoffline Atom = 0x53c09
+ Ononline Atom = 0x54508
+ Onpagehide Atom = 0x54d0a
+ Onpageshow Atom = 0x5670a
+ Onpaste Atom = 0x57307
+ Onpause Atom = 0x58e07
+ Onplay Atom = 0x59806
+ Onplaying Atom = 0x59809
+ Onpopstate Atom = 0x5a10a
+ Onprogress Atom = 0x5ab0a
+ Onratechange Atom = 0x5c80c
+ Onrejectionhandled Atom = 0x5d412
+ Onreset Atom = 0x5e607
+ Onresize Atom = 0x5ed08
+ Onscroll Atom = 0x5fc08
+ Onsecuritypolicyviolation Atom = 0x60419
+ Onseeked Atom = 0x62508
+ Onseeking Atom = 0x62d09
+ Onselect Atom = 0x63608
+ Onshow Atom = 0x64006
+ Onsort Atom = 0x64b06
+ Onstalled Atom = 0x65509
+ Onstorage Atom = 0x65e09
+ Onsubmit Atom = 0x66708
+ Onsuspend Atom = 0x67709
+ Ontimeupdate Atom = 0x11a0c
+ Ontoggle Atom = 0x68008
+ Onunhandledrejection Atom = 0x68814
+ Onunload Atom = 0x6a708
+ Onvolumechange Atom = 0x6af0e
+ Onwaiting Atom = 0x6bd09
+ Onwheel Atom = 0x6c607
+ Open Atom = 0x55f04
+ Optgroup Atom = 0xe008
+ Optimum Atom = 0x6cd07
+ Option Atom = 0x6dd06
+ Output Atom = 0x51106
+ P Atom = 0xc01
+ Param Atom = 0xc05
+ Pattern Atom = 0x4f07
+ Picture Atom = 0x9707
+ Ping Atom = 0xe704
+ Placeholder Atom = 0xfb0b
+ Plaintext Atom = 0x19e09
+ Playsinline Atom = 0x10a0b
+ Poster Atom = 0x2b706
+ Pre Atom = 0x46403
+ Preload Atom = 0x47a07
+ Progress Atom = 0x5ad08
+ Prompt Atom = 0x52a06
+ Public Atom = 0x57a06
+ Q Atom = 0x7701
+ Radiogroup Atom = 0x30a
+ Readonly Atom = 0x34b08
+ Referrerpolicy Atom = 0x3c50e
+ Rel Atom = 0x47b03
+ Required Atom = 0x23408
+ Reversed Atom = 0x9c08
+ Rows Atom = 0x3a04
+ Rowspan Atom = 0x3a07
+ Rp Atom = 0x22402
+ Rt Atom = 0x17b02
+ Ruby Atom = 0xac04
+ S Atom = 0x2501
+ Samp Atom = 0x4c04
+ Sandbox Atom = 0xf307
+ Scope Atom = 0x67105
+ Scoped Atom = 0x67106
+ Script Atom = 0x20006
+ Seamless Atom = 0x36508
+ Section Atom = 0x5bd07
+ Select Atom = 0x63806
+ Selected Atom = 0x63808
+ Shape Atom = 0x1d505
+ Size Atom = 0x5f104
+ Sizes Atom = 0x5f105
+ Slot Atom = 0x1df04
+ Small Atom = 0x1ee05
+ Sortable Atom = 0x64d08
+ Sorted Atom = 0x32b06
+ Source Atom = 0x36c06
+ Spacer Atom = 0x42b06
+ Span Atom = 0x3d04
+ Spellcheck Atom = 0x4680a
+ Src Atom = 0x5b403
+ Srcdoc Atom = 0x5b406
+ Srclang Atom = 0x5f507
+ Srcset Atom = 0x6f306
+ Start Atom = 0x3ee05
+ Step Atom = 0x57704
+ Strike Atom = 0x7a06
+ Strong Atom = 0x31506
+ Style Atom = 0x6f905
+ Sub Atom = 0x66903
+ Summary Atom = 0x6fe07
+ Sup Atom = 0x70503
+ Svg Atom = 0x70803
+ System Atom = 0x70b06
+ Tabindex Atom = 0x4b208
+ Table Atom = 0x58905
+ Target Atom = 0x2ac06
+ Tbody Atom = 0x2705
+ Td Atom = 0x5e02
+ Template Atom = 0x70e08
+ Textarea Atom = 0x34608
+ Tfoot Atom = 0xb205
+ Th Atom = 0x13f02
+ Thead Atom = 0x32405
+ Time Atom = 0x11c04
+ Title Atom = 0xca05
+ Tr Atom = 0x7402
+ Track Atom = 0x17c05
+ Translate Atom = 0x1a609
+ Tt Atom = 0x5102
+ Type Atom = 0x8104
+ Typemustmatch Atom = 0x2780d
+ U Atom = 0xb01
+ Ul Atom = 0x6602
+ Updateviacache Atom = 0x1200e
+ Usemap Atom = 0x59206
+ Value Atom = 0x1505
+ Var Atom = 0x15603
+ Video Atom = 0x2d905
+ Wbr Atom = 0x57003
+ Width Atom = 0x64505
+ Workertype Atom = 0x7160a
+ Wrap Atom = 0x72004
+ Xmp Atom = 0xf903
+)
+
+const hash0 = 0x81cdf10e
+
+const maxAtomLen = 25
+
+var table = [1 << 9]Atom{
+ 0x1: 0x8e0a, // mediagroup
+ 0x2: 0x2cc04, // lang
+ 0x4: 0x2c09, // accesskey
+ 0x5: 0x5708, // frameset
+ 0x7: 0x63608, // onselect
+ 0x8: 0x70b06, // system
+ 0xa: 0x64505, // width
+ 0xc: 0x2710b, // formenctype
+ 0xd: 0x10102, // ol
+ 0xe: 0x38b0b, // oncuechange
+ 0x10: 0x13403, // bdo
+ 0x11: 0xcf05, // audio
+ 0x12: 0x18309, // draggable
+ 0x14: 0x2d905, // video
+ 0x15: 0x29902, // mn
+ 0x16: 0x37b04, // menu
+ 0x17: 0x2b706, // poster
+ 0x19: 0xb306, // footer
+ 0x1a: 0x29006, // method
+ 0x1b: 0x2a008, // datetime
+ 0x1c: 0x17607, // onabort
+ 0x1d: 0x1200e, // updateviacache
+ 0x1e: 0xb905, // async
+ 0x1f: 0x49106, // onload
+ 0x21: 0xd308, // oncancel
+ 0x22: 0x62508, // onseeked
+ 0x23: 0x2ea05, // image
+ 0x24: 0x5d412, // onrejectionhandled
+ 0x26: 0x15d04, // link
+ 0x27: 0x51106, // output
+ 0x28: 0x32504, // head
+ 0x29: 0x4f30c, // onmouseleave
+ 0x2a: 0x57307, // onpaste
+ 0x2b: 0x59809, // onplaying
+ 0x2c: 0x1b407, // colspan
+ 0x2f: 0x1af05, // color
+ 0x30: 0x5f104, // size
+ 0x31: 0x2d00a, // http-equiv
+ 0x33: 0x601, // i
+ 0x34: 0x54d0a, // onpagehide
+ 0x35: 0x68814, // onunhandledrejection
+ 0x37: 0x41e07, // onerror
+ 0x3a: 0x11508, // basefont
+ 0x3f: 0x1303, // nav
+ 0x40: 0x18004, // kind
+ 0x41: 0x34b08, // readonly
+ 0x42: 0x2f006, // mglyph
+ 0x44: 0x11102, // li
+ 0x46: 0x2bd06, // hidden
+ 0x47: 0x70803, // svg
+ 0x48: 0x57704, // step
+ 0x49: 0x22709, // integrity
+ 0x4a: 0x57a06, // public
+ 0x4c: 0x19703, // col
+ 0x4d: 0x1680a, // blockquote
+ 0x4e: 0x34302, // h5
+ 0x50: 0x5ad08, // progress
+ 0x51: 0x5f105, // sizes
+ 0x52: 0x33902, // h4
+ 0x56: 0x32405, // thead
+ 0x57: 0x7e07, // keytype
+ 0x58: 0x5ab0a, // onprogress
+ 0x59: 0x43f09, // inputmode
+ 0x5a: 0x3a509, // ondragend
+ 0x5d: 0x39605, // oncut
+ 0x5e: 0x42b06, // spacer
+ 0x5f: 0x19708, // colgroup
+ 0x62: 0x14e02, // is
+ 0x65: 0xb902, // as
+ 0x66: 0x53c09, // onoffline
+ 0x67: 0x32b06, // sorted
+ 0x69: 0x48110, // onlanguagechange
+ 0x6c: 0x4310c, // onhashchange
+ 0x6d: 0xa604, // name
+ 0x6e: 0xb205, // tfoot
+ 0x6f: 0x55504, // desc
+ 0x70: 0x33103, // max
+ 0x72: 0x1da06, // coords
+ 0x73: 0x2f502, // h3
+ 0x74: 0x6e10e, // onbeforeunload
+ 0x75: 0x3a04, // rows
+ 0x76: 0x63806, // select
+ 0x77: 0xa805, // meter
+ 0x78: 0x37f06, // itemid
+ 0x79: 0x5300c, // onmousewheel
+ 0x7a: 0x5b406, // srcdoc
+ 0x7d: 0x17c05, // track
+ 0x7f: 0x30708, // itemtype
+ 0x82: 0x6302, // mo
+ 0x83: 0x40f08, // onchange
+ 0x84: 0x32507, // headers
+ 0x85: 0x5c80c, // onratechange
+ 0x86: 0x60419, // onsecuritypolicyviolation
+ 0x88: 0x49908, // datalist
+ 0x89: 0x4dc0b, // onmousedown
+ 0x8a: 0x1df04, // slot
+ 0x8b: 0x4a410, // onloadedmetadata
+ 0x8c: 0x1a06, // accept
+ 0x8d: 0x25006, // object
+ 0x91: 0x6af0e, // onvolumechange
+ 0x92: 0x2107, // charset
+ 0x93: 0x25e13, // onautocompleteerror
+ 0x94: 0x6913, // allowpaymentrequest
+ 0x95: 0x2804, // body
+ 0x96: 0xc407, // default
+ 0x97: 0x63808, // selected
+ 0x98: 0x20604, // face
+ 0x99: 0x1d505, // shape
+ 0x9b: 0x68008, // ontoggle
+ 0x9e: 0x64702, // dt
+ 0x9f: 0x6d904, // mark
+ 0xa1: 0xb01, // u
+ 0xa4: 0x6a708, // onunload
+ 0xa5: 0xde04, // loop
+ 0xa6: 0x14d08, // disabled
+ 0xaa: 0x41707, // onended
+ 0xab: 0x6d30a, // malignmark
+ 0xad: 0x67709, // onsuspend
+ 0xae: 0x34505, // mtext
+ 0xaf: 0x64b06, // onsort
+ 0xb0: 0x55908, // itemprop
+ 0xb3: 0x66d09, // itemscope
+ 0xb4: 0x15c05, // blink
+ 0xb6: 0x3a506, // ondrag
+ 0xb7: 0x6602, // ul
+ 0xb8: 0x25604, // form
+ 0xb9: 0xf307, // sandbox
+ 0xba: 0x5705, // frame
+ 0xbb: 0x1505, // value
+ 0xbc: 0x65e09, // onstorage
+ 0xc0: 0x17b02, // rt
+ 0xc2: 0x202, // br
+ 0xc3: 0x20e08, // fieldset
+ 0xc4: 0x2780d, // typemustmatch
+ 0xc5: 0x6108, // nomodule
+ 0xc6: 0x4007, // noembed
+ 0xc7: 0x69a0d, // onbeforeprint
+ 0xc8: 0x17206, // button
+ 0xc9: 0x2dd07, // onclick
+ 0xca: 0x6fe07, // summary
+ 0xcd: 0xac04, // ruby
+ 0xce: 0x5b905, // class
+ 0xcf: 0x3e80b, // ondragstart
+ 0xd0: 0x21907, // caption
+ 0xd4: 0x850e, // allowusermedia
+ 0xd5: 0x4c30b, // onloadstart
+ 0xd9: 0x15403, // div
+ 0xda: 0x49d04, // list
+ 0xdb: 0x32204, // math
+ 0xdc: 0x43f05, // input
+ 0xdf: 0x3de0a, // ondragover
+ 0xe0: 0x2c602, // h2
+ 0xe2: 0x19e09, // plaintext
+ 0xe4: 0x4e70c, // onmouseenter
+ 0xe7: 0x46d07, // checked
+ 0xe8: 0x46403, // pre
+ 0xea: 0x35308, // multiple
+ 0xeb: 0x16103, // bdi
+ 0xec: 0x33109, // maxlength
+ 0xed: 0x7701, // q
+ 0xee: 0x61b0a, // onauxclick
+ 0xf0: 0x57003, // wbr
+ 0xf2: 0x11504, // base
+ 0xf3: 0x6dd06, // option
+ 0xf5: 0x40710, // ondurationchange
+ 0xf7: 0x5508, // noframes
+ 0xf9: 0x3f908, // dropzone
+ 0xfb: 0x67105, // scope
+ 0xfc: 0x9c08, // reversed
+ 0xfd: 0x3ae0b, // ondragenter
+ 0xfe: 0x3ee05, // start
+ 0xff: 0xf903, // xmp
+ 0x100: 0x5f507, // srclang
+ 0x101: 0x2ef03, // img
+ 0x104: 0x101, // b
+ 0x105: 0x23c03, // for
+ 0x106: 0xc105, // aside
+ 0x107: 0x43d07, // oninput
+ 0x108: 0x34a04, // area
+ 0x109: 0x28c0a, // formmethod
+ 0x10a: 0x72004, // wrap
+ 0x10c: 0x22402, // rp
+ 0x10d: 0x45f0a, // onkeypress
+ 0x10e: 0x5102, // tt
+ 0x110: 0x33b02, // mi
+ 0x111: 0x35b05, // muted
+ 0x112: 0xb003, // alt
+ 0x113: 0x19004, // code
+ 0x114: 0x4202, // em
+ 0x115: 0x3b90a, // ondragexit
+ 0x117: 0x3d04, // span
+ 0x119: 0x30f08, // manifest
+ 0x11a: 0x37b08, // menuitem
+ 0x11b: 0x57f07, // content
+ 0x11d: 0x6bd09, // onwaiting
+ 0x11f: 0x4ba09, // onloadend
+ 0x121: 0x3720d, // oncontextmenu
+ 0x123: 0x5c206, // onblur
+ 0x124: 0x3f007, // article
+ 0x125: 0xa303, // dir
+ 0x126: 0xe704, // ping
+ 0x127: 0x23408, // required
+ 0x128: 0x44909, // oninvalid
+ 0x129: 0x6d405, // align
+ 0x12b: 0x57e04, // icon
+ 0x12c: 0x64902, // h6
+ 0x12d: 0x1b404, // cols
+ 0x12e: 0x2160a, // figcaption
+ 0x12f: 0x45209, // onkeydown
+ 0x130: 0x66708, // onsubmit
+ 0x131: 0x13609, // oncanplay
+ 0x132: 0x70503, // sup
+ 0x133: 0xc01, // p
+ 0x135: 0x3fe09, // onemptied
+ 0x136: 0x38506, // oncopy
+ 0x137: 0x55804, // cite
+ 0x138: 0x39b0a, // ondblclick
+ 0x13a: 0x4ff0b, // onmousemove
+ 0x13c: 0x66903, // sub
+ 0x13d: 0x47b03, // rel
+ 0x13e: 0xe008, // optgroup
+ 0x142: 0x3a07, // rowspan
+ 0x143: 0x36c06, // source
+ 0x144: 0x1fe08, // noscript
+ 0x145: 0x55f04, // open
+ 0x146: 0x1ec03, // ins
+ 0x147: 0x23c0d, // foreignObject
+ 0x148: 0x5a10a, // onpopstate
+ 0x14a: 0x27507, // enctype
+ 0x14b: 0x25e0e, // onautocomplete
+ 0x14c: 0x34608, // textarea
+ 0x14e: 0x2600c, // autocomplete
+ 0x14f: 0x14002, // hr
+ 0x150: 0x1ce08, // controls
+ 0x151: 0xc302, // id
+ 0x153: 0x21e0c, // onafterprint
+ 0x155: 0x2490d, // foreignobject
+ 0x156: 0x31b07, // marquee
+ 0x157: 0x58e07, // onpause
+ 0x158: 0x5e202, // dl
+ 0x159: 0x12c06, // height
+ 0x15a: 0x33b03, // min
+ 0x15b: 0xa307, // dirname
+ 0x15c: 0x1a609, // translate
+ 0x15d: 0x13004, // html
+ 0x15e: 0x33b09, // minlength
+ 0x15f: 0x47a07, // preload
+ 0x160: 0x70e08, // template
+ 0x161: 0x3d30b, // ondragleave
+ 0x164: 0x5b403, // src
+ 0x165: 0x31506, // strong
+ 0x167: 0x4c04, // samp
+ 0x168: 0x6ed07, // address
+ 0x169: 0x54508, // ononline
+ 0x16b: 0xfb0b, // placeholder
+ 0x16c: 0x2ac06, // target
+ 0x16d: 0x1ee05, // small
+ 0x16e: 0x6c607, // onwheel
+ 0x16f: 0x1b90a, // annotation
+ 0x170: 0x4680a, // spellcheck
+ 0x171: 0x4607, // details
+ 0x172: 0xbd06, // canvas
+ 0x173: 0xeb09, // autofocus
+ 0x174: 0xc05, // param
+ 0x176: 0x45708, // download
+ 0x177: 0x44603, // del
+ 0x178: 0x36007, // onclose
+ 0x179: 0x16003, // kbd
+ 0x17a: 0x30106, // applet
+ 0x17b: 0x2c804, // href
+ 0x17c: 0x5ed08, // onresize
+ 0x17e: 0x4910c, // onloadeddata
+ 0x180: 0x7402, // tr
+ 0x181: 0x2a80a, // formtarget
+ 0x182: 0xca05, // title
+ 0x183: 0x6f905, // style
+ 0x184: 0x7a06, // strike
+ 0x185: 0x59206, // usemap
+ 0x186: 0x2e406, // iframe
+ 0x187: 0x1004, // main
+ 0x189: 0x9707, // picture
+ 0x18c: 0x2fe05, // ismap
+ 0x18e: 0x49904, // data
+ 0x18f: 0xda05, // label
+ 0x191: 0x3c50e, // referrerpolicy
+ 0x192: 0x13f02, // th
+ 0x194: 0x52a06, // prompt
+ 0x195: 0x5bd07, // section
+ 0x197: 0x6cd07, // optimum
+ 0x198: 0x2c304, // high
+ 0x199: 0x14502, // h1
+ 0x19a: 0x65509, // onstalled
+ 0x19b: 0x15603, // var
+ 0x19c: 0x11c04, // time
+ 0x19e: 0x67002, // ms
+ 0x19f: 0x32506, // header
+ 0x1a0: 0x4ce09, // onmessage
+ 0x1a1: 0x56205, // nonce
+ 0x1a2: 0x2560a, // formaction
+ 0x1a3: 0x20806, // center
+ 0x1a4: 0x3704, // nobr
+ 0x1a5: 0x58905, // table
+ 0x1a6: 0x49d07, // listing
+ 0x1a7: 0x18a06, // legend
+ 0x1a9: 0x28309, // challenge
+ 0x1aa: 0x23006, // figure
+ 0x1ab: 0x8e05, // media
+ 0x1ae: 0x8104, // type
+ 0x1af: 0x11904, // font
+ 0x1b0: 0x4ce0e, // onmessageerror
+ 0x1b1: 0x36508, // seamless
+ 0x1b2: 0x5f03, // dfn
+ 0x1b3: 0x19205, // defer
+ 0x1b4: 0x6b03, // low
+ 0x1b5: 0x62d09, // onseeking
+ 0x1b6: 0x5170b, // onmouseover
+ 0x1b7: 0x29a0a, // novalidate
+ 0x1b8: 0x7160a, // workertype
+ 0x1ba: 0x3c107, // itemref
+ 0x1bd: 0x1, // a
+ 0x1be: 0x30003, // map
+ 0x1bf: 0x11a0c, // ontimeupdate
+ 0x1c0: 0x14707, // bgsound
+ 0x1c1: 0x3206, // keygen
+ 0x1c2: 0x2705, // tbody
+ 0x1c5: 0x64006, // onshow
+ 0x1c7: 0x2501, // s
+ 0x1c8: 0x4f07, // pattern
+ 0x1cc: 0x13610, // oncanplaythrough
+ 0x1ce: 0x2bf02, // dd
+ 0x1cf: 0x6f306, // srcset
+ 0x1d0: 0x15903, // big
+ 0x1d2: 0x64d08, // sortable
+ 0x1d3: 0x47407, // onkeyup
+ 0x1d5: 0x59806, // onplay
+ 0x1d7: 0x4ac04, // meta
+ 0x1d8: 0x3f706, // ondrop
+ 0x1da: 0x5fc08, // onscroll
+ 0x1db: 0x1e30b, // crossorigin
+ 0x1dc: 0x5670a, // onpageshow
+ 0x1dd: 0x4, // abbr
+ 0x1de: 0x5e02, // td
+ 0x1df: 0x57f0f, // contenteditable
+ 0x1e0: 0x25a06, // action
+ 0x1e1: 0x10a0b, // playsinline
+ 0x1e2: 0x42507, // onfocus
+ 0x1e3: 0x2c808, // hreflang
+ 0x1e5: 0x50a0a, // onmouseout
+ 0x1e6: 0x5e607, // onreset
+ 0x1e7: 0x10608, // autoplay
+ 0x1ea: 0x67106, // scoped
+ 0x1ec: 0x30a, // radiogroup
+ 0x1ee: 0x3740b, // contextmenu
+ 0x1ef: 0x52209, // onmouseup
+ 0x1f1: 0x2b206, // hgroup
+ 0x1f2: 0x1f00f, // allowfullscreen
+ 0x1f3: 0x4b208, // tabindex
+ 0x1f6: 0x2f707, // isindex
+ 0x1f7: 0x1a0e, // accept-charset
+ 0x1f8: 0x2960e, // formnovalidate
+ 0x1fb: 0x1b90e, // annotation-xml
+ 0x1fc: 0x4205, // embed
+ 0x1fd: 0x20006, // script
+ 0x1fe: 0x16206, // dialog
+ 0x1ff: 0x1c707, // command
+}
+
+const atomText = "abbradiogrouparamainavalueaccept-charsetbodyaccesskeygenobro" +
+ "wspanoembedetailsampatternoframesetdfnomoduleallowpaymentreq" +
+ "uestrikeytypeallowusermediagroupictureversedirnameterubyaltf" +
+ "ooterasyncanvasidefaultitleaudioncancelabelooptgroupingautof" +
+ "ocusandboxmplaceholderautoplaysinlinebasefontimeupdateviacac" +
+ "heightmlbdoncanplaythrough1bgsoundisabledivarbigblinkbdialog" +
+ "blockquotebuttonabortrackindraggablegendcodefercolgrouplaint" +
+ "extranslatecolorcolspannotation-xmlcommandcontrolshapecoords" +
+ "lotcrossoriginsmallowfullscreenoscriptfacenterfieldsetfigcap" +
+ "tionafterprintegrityfigurequiredforeignObjectforeignobjectfo" +
+ "rmactionautocompleteerrorformenctypemustmatchallengeformmeth" +
+ "odformnovalidatetimeformtargethgrouposterhiddenhigh2hreflang" +
+ "http-equivideonclickiframeimageimglyph3isindexismappletitemt" +
+ "ypemanifestrongmarqueematheadersortedmaxlength4minlength5mte" +
+ "xtareadonlymultiplemutedoncloseamlessourceoncontextmenuitemi" +
+ "doncopyoncuechangeoncutondblclickondragendondragenterondrage" +
+ "xitemreferrerpolicyondragleaveondragoverondragstarticleondro" +
+ "pzonemptiedondurationchangeonendedonerroronfocuspaceronhashc" +
+ "hangeoninputmodeloninvalidonkeydownloadonkeypresspellchecked" +
+ "onkeyupreloadonlanguagechangeonloadeddatalistingonloadedmeta" +
+ "databindexonloadendonloadstartonmessageerroronmousedownonmou" +
+ "seenteronmouseleaveonmousemoveonmouseoutputonmouseoveronmous" +
+ "eupromptonmousewheelonofflineononlineonpagehidescitempropeno" +
+ "nceonpageshowbronpastepublicontenteditableonpausemaponplayin" +
+ "gonpopstateonprogressrcdoclassectionbluronratechangeonreject" +
+ "ionhandledonresetonresizesrclangonscrollonsecuritypolicyviol" +
+ "ationauxclickonseekedonseekingonselectedonshowidth6onsortabl" +
+ "eonstalledonstorageonsubmitemscopedonsuspendontoggleonunhand" +
+ "ledrejectionbeforeprintonunloadonvolumechangeonwaitingonwhee" +
+ "loptimumalignmarkoptionbeforeunloaddressrcsetstylesummarysup" +
+ "svgsystemplateworkertypewrap"