Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | initial implementation of backlinks |
---|---|
Downloads: | Tarball | ZIP archive | SQL archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA3-256: |
c533bccea56a37c51b328a1d8d99ac58 |
User & Date: | dnc 2022-02-22 03:04:49 |
Context
2022-03-22
| ||
11:03 | use embed package for static resources, replaces vfsgen check-in: 5077b680ac user: dnc tags: trunk | |
2022-02-22
| ||
03:04 | initial implementation of backlinks check-in: c533bccea5 user: dnc tags: trunk | |
2022-02-14
| ||
08:56 | more verbose, troubleshooting "go run" directory check-in: a16b439942 user: dnc tags: trunk | |
Changes
Changes to internal/tome/_tmpl/toc.html.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
{{ define "toc" }} <ul id="toc" class="toc-list-h1"> {{ range $index, $entry := .Child }} <li><a href="#{{ $entry.Id }}" class="toc-h{{$entry.Level}} toc-link" data-title="{{ $entry.Title }}">{{ $entry.Title }}</a> {{/* TODO(dnc): clean this up and make depth configurable */}} <ul class="toc-list-h2"> {{ range $index, $entry := $entry.Child }} <li><a href="#{{ $entry.Id }}" class="toc-h{{$entry.Level}} toc-link" data-title="{{ $entry.Title }}">{{ $entry.Title }}</a></li> {{/* note that slate supports only two levels in TOC */}} {{ end }} </ul> </li> {{ end }} </ul> {{ end }} |
| |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
{{ define "toc" }} <ul id="toc" class="toc-list-h1"> {{ range $index, $entry := .Child }} <li> {{- if $entry.Id -}} <a href="#{{ $entry.Id }}" class="toc-h{{$entry.Level}} toc-link" data-title="{{ $entry.Title }}">{{ $entry.Title }}</a> {{- end -}} {{/* TODO(dnc): clean this up and make depth configurable */}} <ul class="toc-list-h2"> {{ range $index, $entry := $entry.Child }} <li><a href="#{{ $entry.Id }}" class="toc-h{{$entry.Level}} toc-link" data-title="{{ $entry.Title }}">{{ $entry.Title }}</a></li> {{/* note that slate supports only two levels in TOC */}} {{ end }} </ul> </li> {{ end }} </ul> {{ end }} |
Added internal/tome/backlink.go.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 |
// Copyright (C) 2022 David N. Cohen // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU Affero General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU Affero General Public License for more details. // You should have received a copy of the GNU Affero General Public License // along with this program. If not, see <https://www.gnu.org/licenses/>. package tome import ( "fmt" "github.com/yuin/goldmark" "github.com/yuin/goldmark/ast" "github.com/yuin/goldmark/parser" "github.com/yuin/goldmark/text" "github.com/yuin/goldmark/util" ) // section exists for historical reasons. Code here should be refactored. type section struct { *ast.Heading } type sectionID string // backlink implements a goldmark AST transformation which introduces // backlinks. If section B links to section A, then this extension // will append a backlink to B at the end of A. type backlink struct { } func (bl *backlink) Transform(node *ast.Document, reader text.Reader, pc parser.Context) { // map key is the section linked to backlink := map[sectionID][]*section{} target := map[sectionID]*section{} ancestry := []*section{} // first pass, gather backlinks ast.Walk(node, func(node ast.Node, entering bool) (ast.WalkStatus, error) { switch v := node.(type) { case *ast.Heading: if entering { attr, ok := v.AttributeString("id") if !ok { break } id := sectionID(attr.([]byte)) sec := §ion{Heading: v} target[id] = sec for len(ancestry) > 0 && ancestry[0].Level >= v.Level { ancestry = ancestry[:len(ancestry)-1] } ancestry = append(ancestry, sec) } case *ast.Link: if len(v.Destination) == 0 || v.Destination[0] != '#' { break } id := sectionID(v.Destination[1:]) backlink[id] = append(backlink[id], ancestry[len(ancestry)-1]) } // // debug // parents := []string{} // for n := node; n != nil; n = n.Parent() { // parents = append([]string{fmt.Sprintf("%T", n)}, parents...) // prepend // } // log.Println(strings.Join(parents, "->")) return ast.WalkContinue, nil }) // second pass, transformation for id, link := range backlink { if len(link) == 0 { continue } dest := target[id] // append backlink tail := ast.Node(dest.Heading) for { n := tail.NextSibling() if n == nil { break } if _, ok := n.(*ast.Heading); ok { break } tail = n } // build the ast nodes that will label and contain the backlinks txt := fmt.Sprintf("Links to %q", dest.Text(reader.Source())) head := ast.NewHeading(dest.Level + 1) head.AppendChild(head, ast.NewString([]byte(txt))) list := ast.NewList('-') if len(link) > 0 { // append backlinks header tail.AppendChild(tail, head) tail.AppendChild(tail, list) } already := map[sectionID]bool{} for i := range link { src, _ := link[i].Heading.AttributeString("id") srcID := sectionID(src.([]byte)) if already[srcID] { continue } item := ast.NewListItem(i) list.AppendChild(list, item) back := ast.NewLink() back.Destination = []byte("#" + srcID) back.AppendChild(back, ast.NewString(link[i].Heading.Text(reader.Source()))) item.AppendChild(tail, back) already[srcID] = true } } } func (bl *backlink) Extend(m goldmark.Markdown) { m.Parser().AddOptions(parser.WithASTTransformers( util.Prioritized(bl, 10000+1), )) } var Backlink = &backlink{} |
Changes to internal/tome/extend.go.
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
...
116
117
118
119
120
121
122
123
124
125
126
127
128
129
|
ast.Walk(node, func(node ast.Node, entering bool) (ast.WalkStatus, error) { status := ast.WalkContinue if !entering { return status, nil } if node.Kind() == ast.KindHeading { heading := node.(*ast.Heading) id, _ := heading.AttributeString("id") b := heading.Text(reader.Source()) entry := &TocEntry{ Id: string(id.([]uint8)), // TODO(dnc): this should be cleaner Title: string(b), Level: heading.Level, } // We expect documents to start with a top level heading. But // if they don't, let's build the TOC as if it did. _, ok := parent[entry.Level-1] for !ok { log.Printf("heading %d %q %q is missing parent", entry.Level, id, string(b)) // debug entry.Level = entry.Level - 1 _, ok = parent[entry.Level-1] } // the heading we're visiting now will be parent to sub-headings that follow ................................................................................ type tomeExtension struct{} var Extension = &tomeExtension{} func (e *tomeExtension) Extend(m goldmark.Markdown) { m.Parser().AddOptions( parser.WithASTTransformers( util.Prioritized(Toc, 10000+1), ), ) m.Renderer().AddOptions(renderer.WithNodeRenderers( util.Prioritized(&taskKeywordRender{}, 499), // preempt normal task extension (500) )) } |
|
>
>
>
|
|
|
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
...
119
120
121
122
123
124
125
126
127
128
129
130
131
132
|
ast.Walk(node, func(node ast.Node, entering bool) (ast.WalkStatus, error) { status := ast.WalkContinue if !entering { return status, nil } if node.Kind() == ast.KindHeading { heading := node.(*ast.Heading) id, ok := heading.AttributeString("id") if !ok || len(id.([]byte)) == 0 { return status, nil } b := heading.Text(reader.Source()) entry := &TocEntry{ Id: string(id.([]uint8)), // TODO(dnc): this should be cleaner Title: string(b), Level: heading.Level, } // We expect documents to start with a top level heading. But // if they don't, let's build the TOC as if it did. _, ok = parent[entry.Level-1] for !ok { log.Printf("heading %d %q %q is missing parent", entry.Level, id, string(b)) // debug entry.Level = entry.Level - 1 _, ok = parent[entry.Level-1] } // the heading we're visiting now will be parent to sub-headings that follow ................................................................................ type tomeExtension struct{} var Extension = &tomeExtension{} func (e *tomeExtension) Extend(m goldmark.Markdown) { m.Parser().AddOptions( parser.WithASTTransformers( util.Prioritized(Toc, 10000+2), ), ) m.Renderer().AddOptions(renderer.WithNodeRenderers( util.Prioritized(&taskKeywordRender{}, 499), // preempt normal task extension (500) )) } |
Changes to internal/tome/internal.go.
102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 |
markup := bytes.Buffer{} converter := goldmark.New( goldmark.WithExtensions( //FIXME highlighting.Highlighting, // syntax highlight code blocks extension.GFM, // github flavored markdown extension.Footnote, extension.Typographer, Extension, // our custom extension Wiki, ), goldmark.WithParserOptions( parser.WithAutoHeadingID(), ), goldmark.WithRendererOptions( //html.WithHardWraps(), // Render newlines as <br> html.WithXHTML(), |
> > |
102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 |
markup := bytes.Buffer{}
converter := goldmark.New(
goldmark.WithExtensions(
//FIXME highlighting.Highlighting, // syntax highlight code blocks
extension.GFM, // github flavored markdown
extension.Footnote,
extension.Typographer,
Extension, // our custom extension
Wiki,
Backlink,
),
goldmark.WithParserOptions(
parser.WithAutoHeadingID(),
),
goldmark.WithRendererOptions(
//html.WithHardWraps(), // Render newlines as <br>
html.WithXHTML(),
|
Changes to internal/tome/tmpl_vfsdata.go.
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
..
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
|
) // Tmpl statically implements the virtual filesystem provided to vfsgen. var Tmpl = func() http.FileSystem { fs := vfsgen۰FS{ "/": &vfsgen۰DirInfo{ name: "/", modTime: time.Date(2020, 11, 27, 7, 52, 21, 685000000, time.UTC), }, "/index.html": &vfsgen۰CompressedFileInfo{ name: "index.html", modTime: time.Date(2020, 11, 27, 7, 52, 21, 685000000, time.UTC), uncompressedSize: 5696, compressedContent: []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x02\xff\xb4\x98\xcd\x6e\xe3\x36\x10\xc7\xcf\xf5\x53\x70\xb5\x05\x36\x59\x44\x96\x65\xc7\x8e\x9d\x58\x06\x16\x69\x0f\x3d\xf4\x03\xe8\xb6\x28\x50\xf4\x40\x91\x23\x89\x6b\x8a\x54\x49\xca\x1f\x30\xfc\xee\x85\x2c\xdb\x31\xa9\x64\xcd\xa2\xa8\x2e\xd1\x50\x3f\xfe\x49\xce\x90\xe1\x78\x76\xbb\xe8\x23\xfa\x59\xb1\x9c\x09\xcc\xf9\x16\x55\x4a\xd2\x9a\x00\x45\xe9\x16\x69\x8e\x0d\xf4\x11\xfa\x51\x52\x96\x31\xa0\xe8\xa6\xc4\xa2\x6e\xb0\x5b\x64\x24\x4a\x01\x15\xa6\xe4\x91\x81\xb2\x6a\xc9\x8f\xd1\x7e\xdf\x9b\xbf\xa3\x92\x98\x6d\xd5\x7e\x5d\xf4\xe6\xed\x1f\x84\xe6\x05\x60\xda\xbc\x20\x34\x2f\xc1\x60\x44\x0a\xac\x34\x98\x24\xa8\x4d\x16\x4e\x03\xeb\x93\x14\x06\x84\x49\x82\x1f\xbe\x4f\x80\xe6\x70\x47\x0a\x25\x4b\x48\xe2\x00\x15\xc6\x54\x21\xfc\x5d\xb3\x55\x12\xfc\x11\xfe\xf6\x29\x7c\x96\x65\x85\x0d\x4b\x39\x58\x12\x02\x97\x90\x04\x2b\x06\xeb\x4a\x2a\x13\xbc\x48\xae\x19\x35\x45\x42\x61\xc5\x08\x84\x07\xe3\x0e\x31\xc1\x0c\xc3\x3c\xd4\x04\x73\x48\xe2\x3b\x54\xe2\x0d\x2b\xeb\xf2\xd4\x70\x52\x36\xcc\x70\x58\xec\x76\xa8\xff\xb9\x79\x43\xfb\xfd\x3c\x6a\xdb\x7a\x2d\xa0\xcd\x96\x03\x2a\x81\x32\x9c\x04\x9a\x28\x00\x71\xec\x8b\x50\xbf\x60\x79\xc1\x59\x5e\x18\x64\x70\xca\x01\x19\x8a\x76\xa8\xc2\x94\x32\x91\x3f\xa2\x71\xb5\x79\x42\xfb\x5e\x87\xaa\x14\xa0\x1d\x2a\xb1\xca\x99\x78\x44\x03\x87\xe9\xe7\x05\xda\xf5\x10\x22\x92\x4b\xf5\x88\xde\xcf\x0e\xcf\x53\xcf\x86\xb4\xb2\xa0\x6c\x82\x71\x1c\xbb\x50\x2e\x2d\x68\x7a\x78\x3a\x50\x65\x41\xe3\xc3\xd3\x81\x34\xda\xb9\x4d\xb5\xd5\x0f\x1f\x1e\xb7\x9f\x48\x3d\xa6\x49\x4a\x0b\x7a\x18\x3f\xc4\x63\xe8\x40\x95\x0f\x14\xfb\x40\xda\x07\xba\x43\x96\x59\x38\x36\x75\xec\x2a\xf3\x10\x05\x65\x47\x6d\x36\x19\x0c\xc6\x83\x8e\xaf\xbd\x20\xe3\x03\x51\x0b\xba\x9f\xdd\x4f\x47\x9d\x49\xe5\xcc\x07\x02\x0f\x68\x49\x2c\x68\x32\xa1\x33\xc8\x3a\x10\xf5\x81\x94\x07\x24\xa4\x8f\x92\xf1\x80\x4a\x3b\x78\x18\xa6\x71\xd6\x85\x0a\x0f\x88\x71\x1f\x25\xe6\x03\x49\x1f\xc8\xde\x85\x65\xea\xd8\x1b\x0f\x0d\x4d\x7c\x20\xf0\x81\xb4\x0f\x64\xc7\x1f\x26\x34\x7d\xb8\xef\x40\x43\x1f\x28\xf5\x81\x0a\x1f\x88\xf9\x40\x1b\x1f\x28\xf6\x81\xec\x28\x69\x6c\xdb\x94\x7b\x68\x08\x6c\xfb\x7a\x02\xc3\x61\xe7\x40\x0a\xe2\x03\x51\x1f\x08\x7c\xa0\xcc\x5e\x48\x56\x7a\x74\x5a\xd9\x73\xcc\x0e\x4f\x47\x59\xf8\x40\xcc\x03\x4a\x2b\x0f\x68\x95\xfb\x40\x3e\xc3\x89\x95\xed\x92\x55\xe9\xd1\x69\x7d\x9d\xf1\x18\xd9\x1e\xb8\xda\xda\xb6\xd8\xf8\x68\xd8\x3b\x31\x9b\x0d\x27\x0f\x43\x17\x92\x6b\x0f\x48\x18\x0f\x68\x69\x4f\x71\xb9\xf2\xe9\x23\x7c\xa0\xca\x67\x1d\x6f\x30\x87\x2c\x30\x3a\xa4\x81\x8b\x57\x52\xc2\x4a\x31\x61\xce\x19\xe1\xc7\x83\x48\xfb\x84\x6b\x48\x97\xcc\x84\x46\x61\xa1\x99\x61\x52\x3c\x0a\x29\xe0\x1d\x2b\x9b\xfc\x15\x0b\xf3\x74\x46\xaf\x22\xfb\xff\x31\xe3\xb4\xbd\x6e\x47\x73\x3c\x9d\xc0\xc3\xf8\x5a\x1e\x33\x18\x0c\xd3\xd1\xa4\x99\x6b\x8a\xc9\x32\x57\xb2\x16\x34\x3c\x7d\xa4\x64\x34\x1c\x66\xff\x35\xbf\x2a\x3b\xf9\x96\xd3\x10\x3b\xb6\x7d\x17\x4d\xc6\x0f\xe9\x74\x74\x25\xa7\x4c\xc7\xd3\xd9\x60\x70\x65\xeb\xbe\x0e\x49\x7b\x74\xe7\x4c\xcc\x46\x38\xc6\x9d\xb4\xb7\x72\x4e\x28\xf3\xe8\xe3\x24\x6b\xd3\xf1\xec\x95\xc9\x38\x69\xdf\xeb\x01\x70\x7e\x65\x0c\x27\xd3\x94\x0e\xdf\x08\xe1\x4b\x7c\x33\x29\x4c\xb8\x86\x46\xe2\x11\xa5\x92\xd3\x6b\x67\xd8\xf9\x37\xb4\x74\x16\xbd\x54\x5f\x3d\xf3\x13\xf2\x10\x93\xfb\x2b\x79\x26\x49\xef\xd3\x78\x72\x25\xf1\x7b\x03\xa2\x1e\xd0\x95\xeb\x5a\x3b\x49\x97\x26\xee\x75\xee\x7c\x77\xb6\xb6\x1e\x3a\xb6\x73\x14\xf4\xc6\xb1\x63\x8f\x2d\xe0\xfc\x3c\x1c\x62\x1c\xcf\xa6\x57\xd2\x1e\x3a\x1a\x4d\xa6\xc3\x2b\x99\xdf\xeb\x90\x73\x3f\xbf\x71\x90\x88\x0f\x24\x7d\x20\xfc\xea\xde\xfd\x77\xb9\xb1\xf3\x0f\xa4\x74\xdc\x5e\x32\xdb\x66\x4e\x18\x4b\xf9\xd5\x5c\xfb\x8d\xb0\xe8\x37\xa0\xee\x25\xc3\x99\x58\xa2\x42\x41\x96\x04\x87\x66\x5d\x00\x18\x1d\xb5\x15\x88\x90\xcc\xe8\x34\xc3\xd3\x51\x9f\x68\x1d\x20\x05\xfc\x92\x0a\x9c\x72\x05\x8a\xbe\xae\x79\xb8\xc2\xc2\xd9\x78\x04\xa3\xd1\xf8\x8a\x64\x7b\xdd\x9d\x14\x9b\xcb\x90\x28\x56\x19\xa4\x15\x49\x82\x2f\x78\x85\x5b\x5b\x47\x98\xf3\x10\x66\x29\x85\x61\x3c\xe9\x7f\xd1\xc1\x62\x1e\xb5\x9f\xce\x85\x95\xa3\xd5\xea\x7c\x7b\x93\xd5\x82\x34\x37\xe0\xcd\x2d\xda\x21\x0d\xa6\xae\x9e\x25\x85\x67\x59\x6d\x6f\x6e\x9f\xd0\xfe\xf6\xe9\xe4\xa4\x73\xbf\x79\xd4\x16\xa0\x9a\xd7\x54\xd2\x2d\x22\x1c\x6b\x9d\x04\xa7\xfa\x55\x80\x28\x36\x38\xe4\x58\xe4\x35\xce\x41\x27\xc1\x9f\x7f\x9d\xea\x3e\xf8\xe8\x87\xf7\x01\x62\x34\x09\x04\x5e\x85\x69\x6d\x8c\x7c\x29\xee\xcc\x75\x85\xc5\xe2\x7c\x45\xff\xf4\xe9\xf7\xf3\xfb\x9c\x95\x79\xbb\x62\x56\x36\xc2\x91\xc0\xab\x14\xab\x90\x60\x3a\x25\x94\xa4\xfd\x4a\xe4\x01\xc2\xdc\x24\xc1\xa5\xab\xa2\x17\xc5\x79\x84\x8f\x2f\x94\xad\xce\xf3\x96\x24\x5c\x2b\x5c\x55\xa0\x5e\x66\xe1\x0e\xc5\x65\x2e\x5b\xfd\x63\xaf\xa6\xe1\x62\x30\x74\x28\x00\x9e\x28\xa4\xa0\x94\x2b\xd0\x6d\xe9\x0f\xa5\x0a\x0b\xda\x56\xf5\xce\x6b\xb9\x98\x80\x06\xac\x48\x11\xbc\x2c\xba\x19\x5f\x54\xb5\x41\x66\x5b\x41\xe3\xd8\x8d\x09\x1c\xf8\xe0\xbe\x03\x14\x9e\x5a\x2a\x8e\x09\x14\x92\x53\x50\x49\xf0\xab\xab\x39\x8f\x28\x5b\x5d\x98\x35\xb7\x15\x43\x05\xba\xe6\xe6\xb0\x63\x6a\xbe\xe8\xf5\xbe\xd9\xed\xd0\x29\xa4\xa8\x71\x52\x80\xfa\x9f\x25\x41\xfb\x7d\xef\x35\x95\xc6\x8b\x99\x94\xe6\xc2\x89\x47\x86\xb3\xc5\x29\xee\x1f\x0a\x63\x2a\xfd\x18\x45\x5a\x91\x3e\x8d\x07\x7d\x0a\xab\xc8\xc8\x12\x3e\x2c\xbe\x93\xa4\x2e\x41\x18\xf4\x8b\x5c\x83\x6a\x0b\xa7\x9f\x65\x09\x4d\xc8\xe6\x11\x67\x97\x2b\xa9\xf9\x29\x9c\xe7\x35\x5d\xfa\xb3\xc2\x39\x74\x23\x7a\x01\x50\xac\x96\x61\x2a\x37\xcd\x5a\x2f\xbc\x72\x89\x1c\xab\x9c\xc1\xd1\x11\xfd\xe7\xd6\xbe\x58\xfd\x9b\x5d\x5f\xd4\xbb\xe4\xf9\x75\x1e\x35\x47\x67\xd1\x9b\x47\x6d\x59\xf7\x9f\x00\x00\x00\xff\xff\xc1\xc9\xfc\x63\x40\x16\x00\x00"), ................................................................................ modTime: time.Date(2020, 10, 6, 4, 40, 58, 230000000, time.UTC), uncompressedSize: 7107, compressedContent: []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x02\xff\xcc\x99\x5b\x8f\xe3\xb6\x15\x80\x9f\xe3\x5f\xc1\xd5\x16\xdd\x0b\x46\xd6\xc8\x1e\x7b\xec\x19\x59\x40\xb0\x49\x81\xa0\xe8\x05\xd8\xa4\x08\x50\xf4\x81\x22\x8f\x25\xc6\x14\xc9\x88\x94\xc7\x86\xe1\xff\x5e\x48\xf2\x8d\x94\x67\xcd\x66\x13\xa0\x7a\x18\x91\xd4\xc7\xc3\xa3\x73\x11\x8f\x39\xbb\x5d\xf4\x11\xfd\xa3\x62\x39\x13\x98\xf3\x2d\x22\x15\x60\x03\x14\x65\x5b\xf4\x99\x63\x03\x77\xc8\x14\x20\x50\x89\x45\xdd\x3d\x97\x62\x0d\x55\x43\x30\x61\x24\xc2\xa8\x30\x25\x8f\x0c\x94\xaa\xa1\x87\xe8\x63\xb4\xdf\x0f\x92\x37\x54\x12\xb3\x55\xd0\x3e\x4d\x07\x49\x77\x43\x28\x29\x00\xd3\xa6\x81\x50\x52\x82\xc1\x88\x14\xb8\xd2\x60\x16\x41\x6d\x96\xe1\x2c\xb0\x1e\x49\x61\x40\x98\x45\xf0\xc3\xf7\x0b\xa0\x39\xdc\x91\xa2\x92\x25\x2c\xe2\x00\x15\xc6\xa8\x10\x7e\xad\xd9\x7a\x11\xfc\x1c\xfe\xf4\x6d\xf8\x49\x96\x0a\x1b\x96\x71\xb0\x44\x08\x5c\xc2\x22\x58\x33\x78\x51\xb2\x32\xc1\x59\xe4\x0b\xa3\xa6\x58\x50\x58\x33\x02\x61\xdb\xb9\x43\x4c\x30\xc3\x30\x0f\x35\xc1\x1c\x16\xf1\x1d\x2a\xf1\x86\x95\x75\x79\x1c\x38\x4a\x36\xcc\x70\x48\x77\x3b\x34\xfc\xb1\x69\xa1\xfd\x3e\x89\xba\xb1\x41\x07\x68\xb3\xe5\x80\x4a\xa0\x0c\x2f\x02\x4d\x2a\x00\x71\x98\x8b\xd0\xb0\x60\x79\xc1\x59\x5e\x18\x64\x70\xc6\x01\x19\x8a\x76\x48\x61\x4a\x99\xc8\x9f\xd0\x44\x6d\x9e\xd1\x7e\xd0\xa3\x54\x05\x68\x87\x4a\x5c\xe5\x4c\x3c\xa1\x7b\x87\x19\xe6\x05\xda\x0d\x10\x22\x92\xcb\xea\x09\xbd\x9d\xb7\xd7\xf3\xc0\x86\x74\x65\x41\xcb\x29\xc6\x71\xec\x42\xb9\xb4\xa0\x59\x7b\xf5\x20\x65\x41\x93\xf6\xea\x41\x1a\xed\xdc\xa1\xda\x9a\x87\xdb\xcb\x9d\x27\x32\x0f\x35\x49\x69\x41\x8f\x93\xc7\x78\x02\x3d\x48\xf9\x40\xb1\x0f\xa4\x7d\xa0\x3b\x64\x75\x0b\xa7\x4f\x9d\xbe\x5a\x7a\x08\x85\xca\xf6\xda\x7c\x7a\x7f\x3f\xb9\xef\xd9\xda\x0b\x32\x3e\x10\xb5\xa0\x87\xf9\xc3\x6c\xdc\x53\x2a\x67\x3e\x10\x78\x40\x2b\x62\x41\xd3\x29\x9d\xc3\xb2\x07\x51\x1f\xa8\xf2\x80\x84\xf4\x91\x64\x3c\xa0\xd2\x76\x1e\x86\x59\xbc\xec\x43\x85\x07\xc4\xb8\x8f\x24\xe6\x03\x49\x1f\xc8\x8e\xc2\x32\x73\xfa\x1b\x0f\x19\x9a\xf8\x40\xe0\x03\x69\x1f\xc8\xf6\x3f\x4c\x69\xf6\xf8\xd0\x83\x46\x3e\x50\xe6\x03\x15\x3e\x10\xf3\x81\x36\x3e\x50\xec\x03\xd9\x5e\xd2\xd8\xee\x53\xee\x21\x43\x60\xdb\xd6\x53\x18\x8d\x7a\x09\x29\x88\x0f\x44\x7d\x20\xf0\x81\x96\xf6\x8b\x2c\x4b\x8f\x49\x6b\x5b\xc7\x65\x7b\xf5\x24\x0b\x1f\x88\x79\x40\x99\xf2\x80\xd6\xb9\x0f\xe4\xb3\x9c\x58\xdb\x26\x59\x97\x1e\x93\x5e\x6e\x33\x1e\x2b\xdb\x0b\xab\xad\xdd\x17\x1b\x1f\x19\x76\x24\x2e\xe7\xa3\xe9\xe3\xc8\x85\xe4\x8b\x07\x24\x8c\x07\xb4\xb2\x55\x5c\xad\x7d\xe6\x08\x1f\x48\xf9\xbc\xc7\x2b\x4c\x5b\x05\x46\x6d\x19\x98\x5e\x29\x09\x55\xc5\x84\x39\x55\x84\x1f\x5b\x21\xdd\x15\xbe\x40\xb6\x62\x26\x34\x15\x16\x9a\x19\x26\xc5\x93\x90\x02\xde\xb0\xb2\xa9\x5f\xb1\x30\xcf\x27\xf4\x26\xb2\xff\x03\x2b\x4e\xdb\xea\xb6\x37\x27\xb3\x29\x3c\x4e\x6e\xd5\x31\xf7\xf7\xa3\x6c\x3c\x6d\x74\xcd\x30\x59\xe5\x95\xac\x05\x0d\x8f\x0f\x29\x19\x8f\x46\xcb\xaf\xad\xaf\xca\x5e\xbd\xe5\x0c\xc4\x4e\xdf\xde\x8b\xa6\x93\xc7\x6c\x36\xbe\x51\x53\x66\x93\xd9\xfc\xfe\xfe\x46\xe8\x5e\x87\xa4\xbd\xba\x93\x13\xf3\x31\x8e\x71\xaf\xec\x55\x4e\x86\x32\x8f\x39\x4e\xb1\x36\x9b\xcc\xaf\x28\xe3\x94\x7d\xd7\x1d\xe0\xfc\xca\x18\x4d\x67\x19\x1d\xbd\xe2\xc2\xb3\x7f\x97\x52\x98\xf0\x05\x1a\x11\x4f\x28\x93\x9c\xde\xca\x61\xe7\x33\xb4\x72\x5e\x7a\x55\x7d\x31\xe7\xa7\xe4\x31\x26\x0f\x37\xea\x4c\x92\x3d\x64\xf1\xf4\x46\xe1\xf7\x0a\x44\x3d\xa0\x1b\xdb\xb5\x76\x8a\x2e\x4d\xdc\xed\xdc\x79\xee\x84\xb6\x1e\x39\x7d\x27\x15\xf4\xc6\xe9\xc7\x1e\x21\xe0\xfc\x3c\x1c\x61\x1c\xcf\x67\x37\xca\x1e\x3a\x1e\x4f\x67\xa3\x1b\x95\xdf\x75\xc8\xd9\x9f\x5f\x49\x24\xe2\x03\x49\x1f\x08\x5f\x8d\xdd\xff\xad\x36\x76\x3e\x20\xa5\x63\xf6\x92\xd9\x7d\xe6\xb8\xb1\x94\x5f\xac\xb5\x5f\x71\x8b\x7e\x05\xea\x6f\x32\x9c\x89\x15\x2a\x2a\x58\x2e\x82\x76\x58\x17\x00\x46\x47\xdd\x09\x44\x48\xe6\x74\xb6\xc4\xb3\xf1\x90\x68\x1d\xa0\x0a\xf8\x25\x15\x38\xc7\x15\x28\xfa\xb2\xcc\x76\x0b\x0b\xe7\x93\x31\x8c\xc7\x93\x1b\x22\xbb\xed\xee\x28\xb1\xd9\x0c\x49\xc5\x94\x41\xba\x22\x8b\xe0\x17\xbc\xc6\x5d\x5f\x47\x98\xf3\x10\xe6\x19\x85\x51\x3c\x1d\xfe\xa2\x83\x34\x89\xba\x47\xa7\x83\x95\x43\xaf\x93\xf3\xa7\xf7\xcb\x5a\x90\x66\x07\x7c\xff\x01\xed\x90\x06\x53\xab\x4f\x92\xc2\x27\xa9\xb6\xef\x3f\x3c\xa3\xfd\x87\xe7\xa3\x91\x4e\xf3\x92\xa8\x3b\x80\x6a\x9a\x99\xa4\x5b\x44\x38\xd6\x7a\x11\x1c\xcf\xaf\x02\x44\xb1\xc1\x21\xc7\x22\xaf\x71\x0e\x7a\x11\xfc\xfb\xcf\xbf\xd6\xd2\x3c\xeb\x02\x38\xef\x9a\x77\xdd\xad\xaa\xb3\xad\x35\xa0\xb6\xa6\x90\xc2\x1a\x3a\xbf\x5d\xd7\xff\xcf\xf1\x0c\x09\x1f\x6c\xfa\x36\x40\x8c\x2e\x02\x81\xd7\x61\x56\x1b\x23\xcf\x07\x45\x89\x56\x58\xa4\xa7\xed\xfe\xef\xdf\xfe\xeb\xd4\x4e\x58\x99\x77\xd6\x63\x65\xa3\x64\x24\xf0\x3a\xc3\x55\x48\x30\x9d\x11\x4a\xb2\xa1\x12\x79\x80\x30\x37\x8b\xe0\xd2\xec\xd1\x59\x62\x12\xe1\x43\x83\xb2\xf5\xc9\x06\x92\x84\x2f\x15\x56\x0a\xaa\xb3\x16\xee\x52\x5c\xe6\x32\x8c\x61\x16\x4f\xf0\xec\xa1\x5b\xe8\x30\xbd\x79\xd2\x5f\xd5\x5e\xa2\xb1\x6b\xa8\x81\x03\x31\xf2\xbc\xc8\x89\xbc\xb0\x8a\xe5\x86\xb0\x3b\xc7\x6b\x7d\x10\xa4\xed\xed\xf4\x06\xfe\xd3\x1b\x87\x05\x69\xf3\xf7\x37\x4c\xee\x9c\x1b\xa4\xdd\xfd\x37\x08\x38\x87\x42\x90\x9e\xdb\x96\xa0\x24\xa2\x6c\x7d\xdd\x70\x1a\x70\x45\x0a\xcb\x62\x09\x13\xaa\x36\xc8\x6c\x15\x34\xf1\xbb\x31\x81\x03\xb7\x91\xd5\x42\xe1\x71\x44\x71\x4c\xa0\x90\x9c\x42\xb5\x08\x3e\xbb\x32\xdd\xf5\x6b\x6e\x4b\x0c\x2b\xd0\x35\x37\x6d\x62\xd6\xfc\x14\x22\x6f\xc2\xb0\x41\x9b\xd5\x8c\x24\xc1\x65\x38\x71\xa6\x4d\x58\xc4\xb6\xde\x9c\xd9\xb6\x3b\x5b\x6e\xc9\x36\x25\x84\x1a\xda\xa4\xb6\x04\x15\x31\xea\xe4\x89\xd5\xc1\xbc\xed\x89\xeb\x22\xf8\xcb\x0f\x3f\xff\xed\x7b\xf4\xf9\x30\x25\xb5\xba\x8e\x97\x92\xc8\x5e\xd9\x57\x91\x70\xf4\x07\xa9\xf2\x4d\x6b\xc6\x30\x4c\x07\x83\x6f\x76\x3b\x74\xfc\x06\xa1\xce\x8c\xc3\x1f\x25\x41\xfb\xfd\xe0\x9a\x3f\x1a\x05\x96\x52\x1a\x70\x93\xa8\x79\xa7\xe3\x6b\xbc\x7b\xfb\x2e\xfd\xcc\x72\x81\x7e\x52\x68\x29\x2b\x84\xd1\x77\xb0\x06\x2e\x15\x54\xe8\xaf\xd0\x26\x81\x6b\x12\x47\x40\x61\x8c\xd2\x4f\x51\x94\x33\x53\xd4\xd9\x90\xc8\x32\xd2\x8d\x86\x54\x12\xdd\xb5\xde\xa5\xdf\x49\x52\x97\x20\x0c\x6e\x5e\x13\xfd\x53\xbe\x40\x75\xf1\xdf\x83\xfe\x22\xe7\xd0\xb9\x08\xb7\xcb\x50\x57\x4d\xce\xf4\xbe\x43\x17\x00\xc5\xd5\x2a\xcc\xe4\xa6\x09\xc3\x8b\x80\xbd\x44\x0e\xe7\xfc\x97\xb1\x5d\xc4\x4d\x84\xbe\xb3\x3c\xfb\xce\x75\x52\x11\xa7\x97\x62\x4e\xdb\x70\x90\x26\xcd\xef\x21\x77\xb8\xc9\x27\x26\xda\xdc\x4b\x13\x22\x29\x1c\xe4\x35\xcd\x41\x12\xb5\x23\x49\xa4\x2a\x38\x6a\x9a\xa8\x03\xd1\xcc\x49\x22\x95\x0e\xae\xea\x15\x8e\xfe\x0f\x34\x1b\xec\x76\x68\xf8\xa9\x33\xe4\x45\x1c\xbe\x6a\xf3\xb3\x5b\x2e\x03\xdd\xfb\xe3\xff\xd5\x9f\xff\xaf\xdc\x00\x7e\x87\x2d\xe0\x77\xd9\x04\x5c\x0b\x5f\x24\xc9\xb1\x99\x44\x4d\xe9\x92\x0e\x92\xa8\xfb\xb7\xda\x7f\x03\x00\x00\xff\xff\x93\xf5\x21\xac\xc3\x1b\x00\x00"), }, "/toc.html": &vfsgen۰CompressedFileInfo{ name: "toc.html", modTime: time.Date(2020, 11, 27, 7, 52, 21, 685000000, time.UTC), uncompressedSize: 582, compressedContent: []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x02\xff\xcc\x90\xc1\x4a\xc3\x40\x10\x86\xef\x7d\x8a\x9f\xd8\x83\x16\xdb\xa0\xc7\x92\xe4\x52\x2f\x82\xd0\x4b\x5f\x60\xcd\x4e\xbb\x4b\xc7\xd9\x90\x9d\xa8\x65\xc9\xbb\x4b\x9a\x48\x29\x05\xcf\xde\x76\xfe\x59\xbe\x99\x6f\x52\x82\xa5\xbd\x17\x42\xa6\xa1\xce\xd0\xf7\xb3\xa2\x63\x78\x5b\x8e\x75\xcd\x26\xc6\xf3\x7b\xc9\x3e\xea\xd2\x3d\x65\xd5\x2c\x25\xb4\x46\x0e\x84\xb9\x17\x4b\xdf\x8f\x98\x93\x68\x7b\xc2\xba\xc4\x6a\xe3\x3c\xdb\x33\x86\x7d\x55\x18\xb8\x96\xf6\x65\x76\x97\xd2\xf4\x69\xf5\x3a\x74\xaf\xc0\x2e\xa5\xa9\xf7\x46\x9f\xc4\x7d\x8f\x71\x9c\x1c\x33\x58\xa3\x66\xa9\x5e\x99\xca\xec\xc2\xd8\x0d\xc1\x80\xa9\x6e\xb3\x22\x37\xc3\x86\xf9\x02\xbb\xed\xcb\xf6\xde\x4a\xfd\xb0\x46\xcd\x64\x04\xea\x7c\x44\xd7\xc0\x88\xc5\x87\x39\x12\x2c\x35\xea\x50\x07\xd9\xfb\x43\xd7\x9a\x77\x26\x2c\xf2\xe9\x04\x37\xe6\xcf\x7f\x9b\x4f\x6b\xfc\x0b\xff\x22\x67\x3f\x1d\x41\x82\x12\xd4\x19\x45\x64\xa3\x84\xd8\x35\x4d\x68\x35\x22\x08\x9f\xa0\x5f\x01\x3c\x0c\x8d\xf0\x82\xdd\x76\x33\xfa\xa7\x04\x92\xd1\x22\xef\xb8\x9a\xfd\xf2\xae\xd3\x4b\xfd\x13\x00\x00\xff\xff\xf2\xaf\xc0\x9e\x46\x02\x00\x00"), }, "/toc.html~": &vfsgen۰FileInfo{ name: "toc.html~", modTime: time.Date(2020, 10, 6, 4, 35, 34, 292000000, time.UTC), content: []byte("\x7b\x7b\x20\x64\x65\x66\x69\x6e\x65\x20\x22\x74\x6f\x63\x22\x20\x7d\x7d\x0a\x0a\x7b\x7b\x20\x65\x6e\x64\x20\x7d\x7d\x0a"), }, } |
|
|
|
|
|
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
..
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
|
) // Tmpl statically implements the virtual filesystem provided to vfsgen. var Tmpl = func() http.FileSystem { fs := vfsgen۰FS{ "/": &vfsgen۰DirInfo{ name: "/", modTime: time.Date(2022, 2, 15, 12, 24, 17, 515000000, time.UTC), }, "/index.html": &vfsgen۰CompressedFileInfo{ name: "index.html", modTime: time.Date(2020, 11, 27, 7, 52, 21, 685000000, time.UTC), uncompressedSize: 5696, compressedContent: []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x02\xff\xb4\x98\xcd\x6e\xe3\x36\x10\xc7\xcf\xf5\x53\x70\xb5\x05\x36\x59\x44\x96\x65\xc7\x8e\x9d\x58\x06\x16\x69\x0f\x3d\xf4\x03\xe8\xb6\x28\x50\xf4\x40\x91\x23\x89\x6b\x8a\x54\x49\xca\x1f\x30\xfc\xee\x85\x2c\xdb\x31\xa9\x64\xcd\xa2\xa8\x2e\xd1\x50\x3f\xfe\x49\xce\x90\xe1\x78\x76\xbb\xe8\x23\xfa\x59\xb1\x9c\x09\xcc\xf9\x16\x55\x4a\xd2\x9a\x00\x45\xe9\x16\x69\x8e\x0d\xf4\x11\xfa\x51\x52\x96\x31\xa0\xe8\xa6\xc4\xa2\x6e\xb0\x5b\x64\x24\x4a\x01\x15\xa6\xe4\x91\x81\xb2\x6a\xc9\x8f\xd1\x7e\xdf\x9b\xbf\xa3\x92\x98\x6d\xd5\x7e\x5d\xf4\xe6\xed\x1f\x84\xe6\x05\x60\xda\xbc\x20\x34\x2f\xc1\x60\x44\x0a\xac\x34\x98\x24\xa8\x4d\x16\x4e\x03\xeb\x93\x14\x06\x84\x49\x82\x1f\xbe\x4f\x80\xe6\x70\x47\x0a\x25\x4b\x48\xe2\x00\x15\xc6\x54\x21\xfc\x5d\xb3\x55\x12\xfc\x11\xfe\xf6\x29\x7c\x96\x65\x85\x0d\x4b\x39\x58\x12\x02\x97\x90\x04\x2b\x06\xeb\x4a\x2a\x13\xbc\x48\xae\x19\x35\x45\x42\x61\xc5\x08\x84\x07\xe3\x0e\x31\xc1\x0c\xc3\x3c\xd4\x04\x73\x48\xe2\x3b\x54\xe2\x0d\x2b\xeb\xf2\xd4\x70\x52\x36\xcc\x70\x58\xec\x76\xa8\xff\xb9\x79\x43\xfb\xfd\x3c\x6a\xdb\x7a\x2d\xa0\xcd\x96\x03\x2a\x81\x32\x9c\x04\x9a\x28\x00\x71\xec\x8b\x50\xbf\x60\x79\xc1\x59\x5e\x18\x64\x70\xca\x01\x19\x8a\x76\xa8\xc2\x94\x32\x91\x3f\xa2\x71\xb5\x79\x42\xfb\x5e\x87\xaa\x14\xa0\x1d\x2a\xb1\xca\x99\x78\x44\x03\x87\xe9\xe7\x05\xda\xf5\x10\x22\x92\x4b\xf5\x88\xde\xcf\x0e\xcf\x53\xcf\x86\xb4\xb2\xa0\x6c\x82\x71\x1c\xbb\x50\x2e\x2d\x68\x7a\x78\x3a\x50\x65\x41\xe3\xc3\xd3\x81\x34\xda\xb9\x4d\xb5\xd5\x0f\x1f\x1e\xb7\x9f\x48\x3d\xa6\x49\x4a\x0b\x7a\x18\x3f\xc4\x63\xe8\x40\x95\x0f\x14\xfb\x40\xda\x07\xba\x43\x96\x59\x38\x36\x75\xec\x2a\xf3\x10\x05\x65\x47\x6d\x36\x19\x0c\xc6\x83\x8e\xaf\xbd\x20\xe3\x03\x51\x0b\xba\x9f\xdd\x4f\x47\x9d\x49\xe5\xcc\x07\x02\x0f\x68\x49\x2c\x68\x32\xa1\x33\xc8\x3a\x10\xf5\x81\x94\x07\x24\xa4\x8f\x92\xf1\x80\x4a\x3b\x78\x18\xa6\x71\xd6\x85\x0a\x0f\x88\x71\x1f\x25\xe6\x03\x49\x1f\xc8\xde\x85\x65\xea\xd8\x1b\x0f\x0d\x4d\x7c\x20\xf0\x81\xb4\x0f\x64\xc7\x1f\x26\x34\x7d\xb8\xef\x40\x43\x1f\x28\xf5\x81\x0a\x1f\x88\xf9\x40\x1b\x1f\x28\xf6\x81\xec\x28\x69\x6c\xdb\x94\x7b\x68\x08\x6c\xfb\x7a\x02\xc3\x61\xe7\x40\x0a\xe2\x03\x51\x1f\x08\x7c\xa0\xcc\x5e\x48\x56\x7a\x74\x5a\xd9\x73\xcc\x0e\x4f\x47\x59\xf8\x40\xcc\x03\x4a\x2b\x0f\x68\x95\xfb\x40\x3e\xc3\x89\x95\xed\x92\x55\xe9\xd1\x69\x7d\x9d\xf1\x18\xd9\x1e\xb8\xda\xda\xb6\xd8\xf8\x68\xd8\x3b\x31\x9b\x0d\x27\x0f\x43\x17\x92\x6b\x0f\x48\x18\x0f\x68\x69\x4f\x71\xb9\xf2\xe9\x23\x7c\xa0\xca\x67\x1d\x6f\x30\x87\x2c\x30\x3a\xa4\x81\x8b\x57\x52\xc2\x4a\x31\x61\xce\x19\xe1\xc7\x83\x48\xfb\x84\x6b\x48\x97\xcc\x84\x46\x61\xa1\x99\x61\x52\x3c\x0a\x29\xe0\x1d\x2b\x9b\xfc\x15\x0b\xf3\x74\x46\xaf\x22\xfb\xff\x31\xe3\xb4\xbd\x6e\x47\x73\x3c\x9d\xc0\xc3\xf8\x5a\x1e\x33\x18\x0c\xd3\xd1\xa4\x99\x6b\x8a\xc9\x32\x57\xb2\x16\x34\x3c\x7d\xa4\x64\x34\x1c\x66\xff\x35\xbf\x2a\x3b\xf9\x96\xd3\x10\x3b\xb6\x7d\x17\x4d\xc6\x0f\xe9\x74\x74\x25\xa7\x4c\xc7\xd3\xd9\x60\x70\x65\xeb\xbe\x0e\x49\x7b\x74\xe7\x4c\xcc\x46\x38\xc6\x9d\xb4\xb7\x72\x4e\x28\xf3\xe8\xe3\x24\x6b\xd3\xf1\xec\x95\xc9\x38\x69\xdf\xeb\x01\x70\x7e\x65\x0c\x27\xd3\x94\x0e\xdf\x08\xe1\x4b\x7c\x33\x29\x4c\xb8\x86\x46\xe2\x11\xa5\x92\xd3\x6b\x67\xd8\xf9\x37\xb4\x74\x16\xbd\x54\x5f\x3d\xf3\x13\xf2\x10\x93\xfb\x2b\x79\x26\x49\xef\xd3\x78\x72\x25\xf1\x7b\x03\xa2\x1e\xd0\x95\xeb\x5a\x3b\x49\x97\x26\xee\x75\xee\x7c\x77\xb6\xb6\x1e\x3a\xb6\x73\x14\xf4\xc6\xb1\x63\x8f\x2d\xe0\xfc\x3c\x1c\x62\x1c\xcf\xa6\x57\xd2\x1e\x3a\x1a\x4d\xa6\xc3\x2b\x99\xdf\xeb\x90\x73\x3f\xbf\x71\x90\x88\x0f\x24\x7d\x20\xfc\xea\xde\xfd\x77\xb9\xb1\xf3\x0f\xa4\x74\xdc\x5e\x32\xdb\x66\x4e\x18\x4b\xf9\xd5\x5c\xfb\x8d\xb0\xe8\x37\xa0\xee\x25\xc3\x99\x58\xa2\x42\x41\x96\x04\x87\x66\x5d\x00\x18\x1d\xb5\x15\x88\x90\xcc\xe8\x34\xc3\xd3\x51\x9f\x68\x1d\x20\x05\xfc\x92\x0a\x9c\x72\x05\x8a\xbe\xae\x79\xb8\xc2\xc2\xd9\x78\x04\xa3\xd1\xf8\x8a\x64\x7b\xdd\x9d\x14\x9b\xcb\x90\x28\x56\x19\xa4\x15\x49\x82\x2f\x78\x85\x5b\x5b\x47\x98\xf3\x10\x66\x29\x85\x61\x3c\xe9\x7f\xd1\xc1\x62\x1e\xb5\x9f\xce\x85\x95\xa3\xd5\xea\x7c\x7b\x93\xd5\x82\x34\x37\xe0\xcd\x2d\xda\x21\x0d\xa6\xae\x9e\x25\x85\x67\x59\x6d\x6f\x6e\x9f\xd0\xfe\xf6\xe9\xe4\xa4\x73\xbf\x79\xd4\x16\xa0\x9a\xd7\x54\xd2\x2d\x22\x1c\x6b\x9d\x04\xa7\xfa\x55\x80\x28\x36\x38\xe4\x58\xe4\x35\xce\x41\x27\xc1\x9f\x7f\x9d\xea\x3e\xf8\xe8\x87\xf7\x01\x62\x34\x09\x04\x5e\x85\x69\x6d\x8c\x7c\x29\xee\xcc\x75\x85\xc5\xe2\x7c\x45\xff\xf4\xe9\xf7\xf3\xfb\x9c\x95\x79\xbb\x62\x56\x36\xc2\x91\xc0\xab\x14\xab\x90\x60\x3a\x25\x94\xa4\xfd\x4a\xe4\x01\xc2\xdc\x24\xc1\xa5\xab\xa2\x17\xc5\x79\x84\x8f\x2f\x94\xad\xce\xf3\x96\x24\x5c\x2b\x5c\x55\xa0\x5e\x66\xe1\x0e\xc5\x65\x2e\x5b\xfd\x63\xaf\xa6\xe1\x62\x30\x74\x28\x00\x9e\x28\xa4\xa0\x94\x2b\xd0\x6d\xe9\x0f\xa5\x0a\x0b\xda\x56\xf5\xce\x6b\xb9\x98\x80\x06\xac\x48\x11\xbc\x2c\xba\x19\x5f\x54\xb5\x41\x66\x5b\x41\xe3\xd8\x8d\x09\x1c\xf8\xe0\xbe\x03\x14\x9e\x5a\x2a\x8e\x09\x14\x92\x53\x50\x49\xf0\xab\xab\x39\x8f\x28\x5b\x5d\x98\x35\xb7\x15\x43\x05\xba\xe6\xe6\xb0\x63\x6a\xbe\xe8\xf5\xbe\xd9\xed\xd0\x29\xa4\xa8\x71\x52\x80\xfa\x9f\x25\x41\xfb\x7d\xef\x35\x95\xc6\x8b\x99\x94\xe6\xc2\x89\x47\x86\xb3\xc5\x29\xee\x1f\x0a\x63\x2a\xfd\x18\x45\x5a\x91\x3e\x8d\x07\x7d\x0a\xab\xc8\xc8\x12\x3e\x2c\xbe\x93\xa4\x2e\x41\x18\xf4\x8b\x5c\x83\x6a\x0b\xa7\x9f\x65\x09\x4d\xc8\xe6\x11\x67\x97\x2b\xa9\xf9\x29\x9c\xe7\x35\x5d\xfa\xb3\xc2\x39\x74\x23\x7a\x01\x50\xac\x96\x61\x2a\x37\xcd\x5a\x2f\xbc\x72\x89\x1c\xab\x9c\xc1\xd1\x11\xfd\xe7\xd6\xbe\x58\xfd\x9b\x5d\x5f\xd4\xbb\xe4\xf9\x75\x1e\x35\x47\x67\xd1\x9b\x47\x6d\x59\xf7\x9f\x00\x00\x00\xff\xff\xc1\xc9\xfc\x63\x40\x16\x00\x00"), ................................................................................ modTime: time.Date(2020, 10, 6, 4, 40, 58, 230000000, time.UTC), uncompressedSize: 7107, compressedContent: []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x02\xff\xcc\x99\x5b\x8f\xe3\xb6\x15\x80\x9f\xe3\x5f\xc1\xd5\x16\xdd\x0b\x46\xd6\xc8\x1e\x7b\xec\x19\x59\x40\xb0\x49\x81\xa0\xe8\x05\xd8\xa4\x08\x50\xf4\x81\x22\x8f\x25\xc6\x14\xc9\x88\x94\xc7\x86\xe1\xff\x5e\x48\xf2\x8d\x94\x67\xcd\x66\x13\xa0\x7a\x18\x91\xd4\xc7\xc3\xa3\x73\x11\x8f\x39\xbb\x5d\xf4\x11\xfd\xa3\x62\x39\x13\x98\xf3\x2d\x22\x15\x60\x03\x14\x65\x5b\xf4\x99\x63\x03\x77\xc8\x14\x20\x50\x89\x45\xdd\x3d\x97\x62\x0d\x55\x43\x30\x61\x24\xc2\xa8\x30\x25\x8f\x0c\x94\xaa\xa1\x87\xe8\x63\xb4\xdf\x0f\x92\x37\x54\x12\xb3\x55\xd0\x3e\x4d\x07\x49\x77\x43\x28\x29\x00\xd3\xa6\x81\x50\x52\x82\xc1\x88\x14\xb8\xd2\x60\x16\x41\x6d\x96\xe1\x2c\xb0\x1e\x49\x61\x40\x98\x45\xf0\xc3\xf7\x0b\xa0\x39\xdc\x91\xa2\x92\x25\x2c\xe2\x00\x15\xc6\xa8\x10\x7e\xad\xd9\x7a\x11\xfc\x1c\xfe\xf4\x6d\xf8\x49\x96\x0a\x1b\x96\x71\xb0\x44\x08\x5c\xc2\x22\x58\x33\x78\x51\xb2\x32\xc1\x59\xe4\x0b\xa3\xa6\x58\x50\x58\x33\x02\x61\xdb\xb9\x43\x4c\x30\xc3\x30\x0f\x35\xc1\x1c\x16\xf1\x1d\x2a\xf1\x86\x95\x75\x79\x1c\x38\x4a\x36\xcc\x70\x48\x77\x3b\x34\xfc\xb1\x69\xa1\xfd\x3e\x89\xba\xb1\x41\x07\x68\xb3\xe5\x80\x4a\xa0\x0c\x2f\x02\x4d\x2a\x00\x71\x98\x8b\xd0\xb0\x60\x79\xc1\x59\x5e\x18\x64\x70\xc6\x01\x19\x8a\x76\x48\x61\x4a\x99\xc8\x9f\xd0\x44\x6d\x9e\xd1\x7e\xd0\xa3\x54\x05\x68\x87\x4a\x5c\xe5\x4c\x3c\xa1\x7b\x87\x19\xe6\x05\xda\x0d\x10\x22\x92\xcb\xea\x09\xbd\x9d\xb7\xd7\xf3\xc0\x86\x74\x65\x41\xcb\x29\xc6\x71\xec\x42\xb9\xb4\xa0\x59\x7b\xf5\x20\x65\x41\x93\xf6\xea\x41\x1a\xed\xdc\xa1\xda\x9a\x87\xdb\xcb\x9d\x27\x32\x0f\x35\x49\x69\x41\x8f\x93\xc7\x78\x02\x3d\x48\xf9\x40\xb1\x0f\xa4\x7d\xa0\x3b\x64\x75\x0b\xa7\x4f\x9d\xbe\x5a\x7a\x08\x85\xca\xf6\xda\x7c\x7a\x7f\x3f\xb9\xef\xd9\xda\x0b\x32\x3e\x10\xb5\xa0\x87\xf9\xc3\x6c\xdc\x53\x2a\x67\x3e\x10\x78\x40\x2b\x62\x41\xd3\x29\x9d\xc3\xb2\x07\x51\x1f\xa8\xf2\x80\x84\xf4\x91\x64\x3c\xa0\xd2\x76\x1e\x86\x59\xbc\xec\x43\x85\x07\xc4\xb8\x8f\x24\xe6\x03\x49\x1f\xc8\x8e\xc2\x32\x73\xfa\x1b\x0f\x19\x9a\xf8\x40\xe0\x03\x69\x1f\xc8\xf6\x3f\x4c\x69\xf6\xf8\xd0\x83\x46\x3e\x50\xe6\x03\x15\x3e\x10\xf3\x81\x36\x3e\x50\xec\x03\xd9\x5e\xd2\xd8\xee\x53\xee\x21\x43\x60\xdb\xd6\x53\x18\x8d\x7a\x09\x29\x88\x0f\x44\x7d\x20\xf0\x81\x96\xf6\x8b\x2c\x4b\x8f\x49\x6b\x5b\xc7\x65\x7b\xf5\x24\x0b\x1f\x88\x79\x40\x99\xf2\x80\xd6\xb9\x0f\xe4\xb3\x9c\x58\xdb\x26\x59\x97\x1e\x93\x5e\x6e\x33\x1e\x2b\xdb\x0b\xab\xad\xdd\x17\x1b\x1f\x19\x76\x24\x2e\xe7\xa3\xe9\xe3\xc8\x85\xe4\x8b\x07\x24\x8c\x07\xb4\xb2\x55\x5c\xad\x7d\xe6\x08\x1f\x48\xf9\xbc\xc7\x2b\x4c\x5b\x05\x46\x6d\x19\x98\x5e\x29\x09\x55\xc5\x84\x39\x55\x84\x1f\x5b\x21\xdd\x15\xbe\x40\xb6\x62\x26\x34\x15\x16\x9a\x19\x26\xc5\x93\x90\x02\xde\xb0\xb2\xa9\x5f\xb1\x30\xcf\x27\xf4\x26\xb2\xff\x03\x2b\x4e\xdb\xea\xb6\x37\x27\xb3\x29\x3c\x4e\x6e\xd5\x31\xf7\xf7\xa3\x6c\x3c\x6d\x74\xcd\x30\x59\xe5\x95\xac\x05\x0d\x8f\x0f\x29\x19\x8f\x46\xcb\xaf\xad\xaf\xca\x5e\xbd\xe5\x0c\xc4\x4e\xdf\xde\x8b\xa6\x93\xc7\x6c\x36\xbe\x51\x53\x66\x93\xd9\xfc\xfe\xfe\x46\xe8\x5e\x87\xa4\xbd\xba\x93\x13\xf3\x31\x8e\x71\xaf\xec\x55\x4e\x86\x32\x8f\x39\x4e\xb1\x36\x9b\xcc\xaf\x28\xe3\x94\x7d\xd7\x1d\xe0\xfc\xca\x18\x4d\x67\x19\x1d\xbd\xe2\xc2\xb3\x7f\x97\x52\x98\xf0\x05\x1a\x11\x4f\x28\x93\x9c\xde\xca\x61\xe7\x33\xb4\x72\x5e\x7a\x55\x7d\x31\xe7\xa7\xe4\x31\x26\x0f\x37\xea\x4c\x92\x3d\x64\xf1\xf4\x46\xe1\xf7\x0a\x44\x3d\xa0\x1b\xdb\xb5\x76\x8a\x2e\x4d\xdc\xed\xdc\x79\xee\x84\xb6\x1e\x39\x7d\x27\x15\xf4\xc6\xe9\xc7\x1e\x21\xe0\xfc\x3c\x1c\x61\x1c\xcf\x67\x37\xca\x1e\x3a\x1e\x4f\x67\xa3\x1b\x95\xdf\x75\xc8\xd9\x9f\x5f\x49\x24\xe2\x03\x49\x1f\x08\x5f\x8d\xdd\xff\xad\x36\x76\x3e\x20\xa5\x63\xf6\x92\xd9\x7d\xe6\xb8\xb1\x94\x5f\xac\xb5\x5f\x71\x8b\x7e\x05\xea\x6f\x32\x9c\x89\x15\x2a\x2a\x58\x2e\x82\x76\x58\x17\x00\x46\x47\xdd\x09\x44\x48\xe6\x74\xb6\xc4\xb3\xf1\x90\x68\x1d\xa0\x0a\xf8\x25\x15\x38\xc7\x15\x28\xfa\xb2\xcc\x76\x0b\x0b\xe7\x93\x31\x8c\xc7\x93\x1b\x22\xbb\xed\xee\x28\xb1\xd9\x0c\x49\xc5\x94\x41\xba\x22\x8b\xe0\x17\xbc\xc6\x5d\x5f\x47\x98\xf3\x10\xe6\x19\x85\x51\x3c\x1d\xfe\xa2\x83\x34\x89\xba\x47\xa7\x83\x95\x43\xaf\x93\xf3\xa7\xf7\xcb\x5a\x90\x66\x07\x7c\xff\x01\xed\x90\x06\x53\xab\x4f\x92\xc2\x27\xa9\xb6\xef\x3f\x3c\xa3\xfd\x87\xe7\xa3\x91\x4e\xf3\x92\xa8\x3b\x80\x6a\x9a\x99\xa4\x5b\x44\x38\xd6\x7a\x11\x1c\xcf\xaf\x02\x44\xb1\xc1\x21\xc7\x22\xaf\x71\x0e\x7a\x11\xfc\xfb\xcf\xbf\xd6\xd2\x3c\xeb\x02\x38\xef\x9a\x77\xdd\xad\xaa\xb3\xad\x35\xa0\xb6\xa6\x90\xc2\x1a\x3a\xbf\x5d\xd7\xff\xcf\xf1\x0c\x09\x1f\x6c\xfa\x36\x40\x8c\x2e\x02\x81\xd7\x61\x56\x1b\x23\xcf\x07\x45\x89\x56\x58\xa4\xa7\xed\xfe\xef\xdf\xfe\xeb\xd4\x4e\x58\x99\x77\xd6\x63\x65\xa3\x64\x24\xf0\x3a\xc3\x55\x48\x30\x9d\x11\x4a\xb2\xa1\x12\x79\x80\x30\x37\x8b\xe0\xd2\xec\xd1\x59\x62\x12\xe1\x43\x83\xb2\xf5\xc9\x06\x92\x84\x2f\x15\x56\x0a\xaa\xb3\x16\xee\x52\x5c\xe6\x32\x8c\x61\x16\x4f\xf0\xec\xa1\x5b\xe8\x30\xbd\x79\xd2\x5f\xd5\x5e\xa2\xb1\x6b\xa8\x81\x03\x31\xf2\xbc\xc8\x89\xbc\xb0\x8a\xe5\x86\xb0\x3b\xc7\x6b\x7d\x10\xa4\xed\xed\xf4\x06\xfe\xd3\x1b\x87\x05\x69\xf3\xf7\x37\x4c\xee\x9c\x1b\xa4\xdd\xfd\x37\x08\x38\x87\x42\x90\x9e\xdb\x96\xa0\x24\xa2\x6c\x7d\xdd\x70\x1a\x70\x45\x0a\xcb\x62\x09\x13\xaa\x36\xc8\x6c\x15\x34\xf1\xbb\x31\x81\x03\xb7\x91\xd5\x42\xe1\x71\x44\x71\x4c\xa0\x90\x9c\x42\xb5\x08\x3e\xbb\x32\xdd\xf5\x6b\x6e\x4b\x0c\x2b\xd0\x35\x37\x6d\x62\xd6\xfc\x14\x22\x6f\xc2\xb0\x41\x9b\xd5\x8c\x24\xc1\x65\x38\x71\xa6\x4d\x58\xc4\xb6\xde\x9c\xd9\xb6\x3b\x5b\x6e\xc9\x36\x25\x84\x1a\xda\xa4\xb6\x04\x15\x31\xea\xe4\x89\xd5\xc1\xbc\xed\x89\xeb\x22\xf8\xcb\x0f\x3f\xff\xed\x7b\xf4\xf9\x30\x25\xb5\xba\x8e\x97\x92\xc8\x5e\xd9\x57\x91\x70\xf4\x07\xa9\xf2\x4d\x6b\xc6\x30\x4c\x07\x83\x6f\x76\x3b\x74\xfc\x06\xa1\xce\x8c\xc3\x1f\x25\x41\xfb\xfd\xe0\x9a\x3f\x1a\x05\x96\x52\x1a\x70\x93\xa8\x79\xa7\xe3\x6b\xbc\x7b\xfb\x2e\xfd\xcc\x72\x81\x7e\x52\x68\x29\x2b\x84\xd1\x77\xb0\x06\x2e\x15\x54\xe8\xaf\xd0\x26\x81\x6b\x12\x47\x40\x61\x8c\xd2\x4f\x51\x94\x33\x53\xd4\xd9\x90\xc8\x32\xd2\x8d\x86\x54\x12\xdd\xb5\xde\xa5\xdf\x49\x52\x97\x20\x0c\x6e\x5e\x13\xfd\x53\xbe\x40\x75\xf1\xdf\x83\xfe\x22\xe7\xd0\xb9\x08\xb7\xcb\x50\x57\x4d\xce\xf4\xbe\x43\x17\x00\xc5\xd5\x2a\xcc\xe4\xa6\x09\xc3\x8b\x80\xbd\x44\x0e\xe7\xfc\x97\xb1\x5d\xc4\x4d\x84\xbe\xb3\x3c\xfb\xce\x75\x52\x11\xa7\x97\x62\x4e\xdb\x70\x90\x26\xcd\xef\x21\x77\xb8\xc9\x27\x26\xda\xdc\x4b\x13\x22\x29\x1c\xe4\x35\xcd\x41\x12\xb5\x23\x49\xa4\x2a\x38\x6a\x9a\xa8\x03\xd1\xcc\x49\x22\x95\x0e\xae\xea\x15\x8e\xfe\x0f\x34\x1b\xec\x76\x68\xf8\xa9\x33\xe4\x45\x1c\xbe\x6a\xf3\xb3\x5b\x2e\x03\xdd\xfb\xe3\xff\xd5\x9f\xff\xaf\xdc\x00\x7e\x87\x2d\xe0\x77\xd9\x04\x5c\x0b\x5f\x24\xc9\xb1\x99\x44\x4d\xe9\x92\x0e\x92\xa8\xfb\xb7\xda\x7f\x03\x00\x00\xff\xff\x93\xf5\x21\xac\xc3\x1b\x00\x00"), }, "/toc.html": &vfsgen۰CompressedFileInfo{ name: "toc.html", modTime: time.Date(2022, 2, 15, 12, 24, 17, 502000000, time.UTC), uncompressedSize: 616, compressedContent: []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x02\xff\xc4\x90\xbf\x6a\xf3\x40\x10\xc4\x7b\x3d\xc5\xa0\xcf\xc5\x17\x13\x59\x24\xa5\x91\xd4\x38\x4d\x20\xe0\xc6\x2f\x70\xd1\xad\x7c\x87\x2f\x27\xa1\x5b\x25\x31\xcb\xbd\x7b\xd0\x9f\xe0\x18\x43\xda\x74\xbb\x33\x30\x3b\xfb\x13\x81\xa6\xc6\x7a\x42\xca\x6d\x9d\x22\xc6\xa4\x18\x1c\xac\x2e\xe7\xbd\x76\x2a\x84\x69\xce\x9c\x0d\x9c\x99\x87\xb4\x4a\x44\xd0\x2b\x7f\x24\xac\xac\xd7\xf4\x79\x8f\x15\x79\xee\xcf\xd8\x96\xd8\xec\x8c\x75\x7a\x8a\x71\xb6\x82\x48\x06\xdb\x2c\xfe\xe6\x59\x23\x8b\x11\x85\x82\xe9\xa9\x29\xd3\x7f\x22\x3f\xac\x18\xaf\xce\x19\x91\xc5\x7b\xa1\x77\x72\x31\x62\x2e\xe1\x4f\x29\xb4\x62\x95\xb1\x65\x47\x65\x7a\xc9\x38\x8c\xc2\x18\x53\xdd\x6a\x45\xae\xe6\x36\xe4\xa7\x12\x89\x48\xbe\xc6\x61\xff\xb4\xff\xaf\x7d\x7d\xb7\x45\xed\x48\x79\xb0\xb1\x01\x43\x07\xe5\x35\xde\xd4\x89\xa0\xa9\x63\x83\xba\xf5\x8d\x3d\x0e\xbd\x7a\x75\x84\x75\xbe\x40\xba\x61\xf3\xf8\x3b\x9b\xa5\xd2\x15\xa1\xbf\x62\x51\xe4\xce\x56\x33\x04\xdf\x32\x81\x8d\x62\x04\xa7\x98\x10\x86\xae\x6b\x7b\x0e\x68\xbd\x3b\x83\x3f\x5a\xb8\xf1\x68\x80\xf5\x38\xec\x77\xf3\xff\x22\x13\xc9\xf1\x8b\x7c\x70\x55\xf2\x9d\x77\xad\x5e\xf6\xaf\x00\x00\x00\xff\xff\x95\x42\xb0\xfb\x68\x02\x00\x00"), }, "/toc.html~": &vfsgen۰FileInfo{ name: "toc.html~", modTime: time.Date(2020, 10, 6, 4, 35, 34, 292000000, time.UTC), content: []byte("\x7b\x7b\x20\x64\x65\x66\x69\x6e\x65\x20\x22\x74\x6f\x63\x22\x20\x7d\x7d\x0a\x0a\x7b\x7b\x20\x65\x6e\x64\x20\x7d\x7d\x0a"), }, } |