aboutsummaryrefslogtreecommitdiff
path: root/internal/testing/sample
diff options
context:
space:
mode:
authorJonathan Amsterdam <jba@google.com>2020-10-26 10:31:27 -0400
committerJonathan Amsterdam <jba@google.com>2020-10-27 13:19:30 +0000
commit90295cd6899f032ee9832f91c200c8e96c437ee8 (patch)
tree6e0598e0edd84ec260416941575f3593c1763095 /internal/testing/sample
parent8520d59c35f6c7c3c032a111dc8691b3be7c81ae (diff)
downloadgo-x-pkgsite-90295cd6899f032ee9832f91c200c8e96c437ee8.tar.xz
internal/testing/sample,etc.: add package source
Add encoded source to the sample Documentation value, and render it to get the documentation HTML. Use the package in internal/godoc/testdata. I had hoped to use the godoc package in an init function to create the needed values, but that caused an import cycle between sample and the godoc test package. So instead, a small program invoked with `go generate` uses godoc to generate the values and embed them in a Go file. This change required a few other changes: internal/postgres: Always insert source when comparing Documentation. internal/frontend: Change the strings we look for in doc to match the one in the sample package. internal/frontend: Remove the check on HTML ids. This was added when I was doing safehtml, when I was being strict about HTML ids. The safehtml package wants ids to conform to some strict rules to avoid certain attacks, and I tried to follow those rules. But in the end I had to be more forgiving, or I would have broken anchor tags to Go symbols, like pkg.go.dev/fmt#Println. (safehtml does not consider "Println" a safe identifier unless it is a constant string.) The checkIDs function was added somewhere in the middle of that process, and it worked until now because the value of sample.DocumentationHTML was an ordinary text string with no ids, not real HTML doc. It was actually only checking the ids for license files, and those do contain a hyphen. I don't think its loss is important. Change-Id: I4019c56b216aaf1a4e92a6167c2af1eef4cfbf89 Reviewed-on: https://go-review.googlesource.com/c/pkgsite/+/265297 Trust: Jonathan Amsterdam <jba@google.com> Run-TryBot: Jonathan Amsterdam <jba@google.com> TryBot-Result: kokoro <noreply+kokoro@google.com> Reviewed-by: Jamal Carvalho <jamal@golang.org>
Diffstat (limited to 'internal/testing/sample')
-rw-r--r--internal/testing/sample/documentation.gen.go362
-rw-r--r--internal/testing/sample/gen_documentation.go85
-rw-r--r--internal/testing/sample/sample.go31
3 files changed, 460 insertions, 18 deletions
diff --git a/internal/testing/sample/documentation.gen.go b/internal/testing/sample/documentation.gen.go
new file mode 100644
index 00000000..3ee3c776
--- /dev/null
+++ b/internal/testing/sample/documentation.gen.go
@@ -0,0 +1,362 @@
+
+// Copyright 2020 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 sample
+
+import (
+ "github.com/google/safehtml/testconversions"
+ "golang.org/x/pkgsite/internal"
+)
+
+
+
+var (
+ DocumentationHTML = testconversions.MakeHTMLForTest(`
+ <nav class="DocNav js-sideNav">
+ <ul role="tree" aria-label="Outline">
+
+ <li class="DocNav-overview" role="none">
+ <a href="#pkg-overview" role="treeitem" aria-level="1" tabindex="0">Overview</a>
+ </li>
+ <li class="DocNav-index" role="none">
+ <a href="#pkg-index" role="treeitem" aria-level="1" tabindex="0">Index</a>
+ </li>
+
+
+ <li class="DocNav-examples" role="none">
+ <a href="#pkg-examples" role="treeitem" aria-level="1" tabindex="-1">Examples</a>
+ </li>
+
+
+ <li class="DocNav-constants" role="none">
+ <a href="#pkg-constants" role="treeitem" aria-level="1" tabindex="-1">Constants</a>
+ </li>
+
+
+ <li class="DocNav-variables" role="none">
+ <a href="#pkg-variables" role="treeitem" aria-level="1" tabindex="-1">Variables</a>
+ </li>
+
+
+
+ <li class="DocNav-functions" role="none">
+ <span class="DocNav-groupLabel" role="treeitem" aria-expanded="true" aria-level="1" aria-owns="nav-group-functions" tabindex="-1">Functions</span>
+ <ul role="group" id="nav-group-functions">
+
+ <li role="none">
+ <a href="#F" title="F(t)" role="treeitem" aria-level="2" tabindex="-1">F(t)</a>
+ </li>
+
+ </ul>
+ </li>
+
+
+
+ <li class="DocNav-types" role="none">
+ <span class="DocNav-groupLabel" role="treeitem" aria-expanded="true" aria-level="1" aria-owns="nav-group-types" tabindex="-1">Types</span>
+ <ul role="group" id="nav-group-types">
+
+
+ <li role="none">
+
+ <a href="#I" role="treeitem" aria-level="2" tabindex="-1">type I</a>
+
+ </li>
+
+
+ <li role="none">
+
+ <a href="#S1" role="treeitem" aria-level="2" tabindex="-1">type S1</a>
+
+ </li>
+
+
+ <li role="none">
+
+ <a href="#S2" role="treeitem" aria-level="2" tabindex="-1">type S2</a>
+
+ </li>
+
+
+ <li role="none">
+
+
+
+ <a class="DocNav-groupLabel" href="#T" role="treeitem" aria-expanded="true" aria-level="2" data-aria-owns="nav.group.T" tabindex="-1">type T</a>
+ <ul role="group" id="nav.group.T">
+
+ <li role="none">
+ <a href="#TF" title="TF()" role="treeitem" aria-level="3" tabindex="-1">TF()</a>
+ </li>
+
+
+ <li role="none">
+ <a href="#T.M" title="M()" role="treeitem" aria-level="3" tabindex="-1">M()</a>
+ </li>
+
+ </ul>
+
+ </li>
+
+ </ul>
+ </li>
+
+
+
+ <li class="DocNav-notes" role="none">
+ <span class="DocNav-groupLabel" role="treeitem" aria-expanded="true" aria-level="1" aria-owns="nav-group-notes" tabindex="-1">Notes</span>
+ <ul role="group" id="nav-group-notes">
+
+ <li role="none">
+ <a href="#pkg-note-BUG" role="treeitem" aria-level="2" tabindex="-1">BUGs</a>
+ </li>
+
+ </ul>
+ </li>
+
+
+
+ <li class="DocNav-files" role="none">
+ <a href="#pkg-files" role="treeitem" aria-level="1" tabindex="-1">Package Files</a>
+ </li>
+
+ </ul>
+ </nav>
+ <nav class="DocNavMobile js-mobileNav">
+ <label for="DocNavMobile-select" class="DocNavMobile-label">
+ <svg class="DocNavMobile-selectIcon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="black" width="18px" height="18px">
+ <path d="M0 0h24v24H0z" fill="none"/><path d="M3 9h14V7H3v2zm0 4h14v-2H3v2zm0 4h14v-2H3v2zm16 0h2v-2h-2v2zm0-10v2h2V7h-2zm0 6h2v-2h-2v2z"/>
+ </svg>
+ <span class="DocNavMobile-selectText js-mobileNavSelectText">Outline</span>
+ </label>
+ <select id="DocNavMobile-select" class="DocNavMobile-select">
+ <option value="">Outline</option>
+
+ <option value="pkg-overview">Overview</option>
+
+
+ <option value="pkg-examples">Examples</option>
+
+
+ <option value="pkg-constants">Constants</option>
+
+
+ <option value="pkg-variables">Variables</option>
+
+
+
+ <optgroup label="Functions">
+
+ <option value="F">F(t)</option>
+
+ </optgroup>
+
+
+
+ <optgroup label="Types">
+
+
+ <option value="I">type I</option>
+
+
+
+
+ <option value="S1">type S1</option>
+
+
+
+
+ <option value="S2">type S2</option>
+
+
+
+
+ <option value="T">type T</option>
+
+ <option value="TF">TF()</option>
+
+
+ <option value="T.M">M()</option>
+
+
+ </optgroup>
+
+
+
+ <optgroup label="Notes">
+
+ <option value="pkg-note-BUG">BUGs</option>
+
+ </optgroup>
+
+ </select>
+ </nav>
+
+
+<div class="Documentation-content js-docContent"> <section class="Documentation-overview">
+ <h2 tabindex="-1" id="pkg-overview" class="Documentation-overviewHeader">Overview <a href="#pkg-overview">¶</a></h2>
+
+<p>Package p is for testing godoc.Render. There are a lot
+of other things to say, but that&#39;s the gist of it.
+</p>
+</section><section class="Documentation-index">
+ <h3 id="pkg-index" class="Documentation-indexHeader">Index <a href="#pkg-index">¶</a></h3>
+
+<ul class="Documentation-indexList">
+<li class="Documentation-indexConstants"><a href="#pkg-constants">Constants</a></li>
+<li class="Documentation-indexVariables"><a href="#pkg-variables">Variables</a></li>
+<li class="Documentation-indexFunction">
+ <a href="#F">func F(t time.Time)</a>
+ </li>
+<li class="Documentation-indexType"><a href="#I">type I</a></li>
+<li class="Documentation-indexType"><a href="#S1">type S1</a></li>
+<li class="Documentation-indexType"><a href="#S2">type S2</a></li>
+<li class="Documentation-indexType"><a href="#T">type T</a></li>
+<li><ul class="Documentation-indexTypeFunctions">
+<li><a href="#TF">func TF() T</a></li>
+
+ </ul></li>
+<li><ul class="Documentation-indexTypeMethods">
+<li><a href="#T.M">func (T) M()</a></li>
+
+ </ul></li>
+<li class="Documentation-indexNote"><a href="#pkg-note-BUG">BUGs</a></li></ul>
+</section><section class="Documentation-examples">
+ <h3 tabindex="-1" id="pkg-examples" class="Documentation-examplesHeader">Examples <a href="#pkg-examples">¶</a></h3>
+<ul class="Documentation-examplesList">
+<li><a href="#example-F" class="js-exampleHref">F</a></li>
+<li><a href="#example-TF" class="js-exampleHref">TF</a></li>
+</ul>
+</section><section class="Documentation-constants">
+ <h3 tabindex="-1" id="pkg-constants" class="Documentation-constantsHeader">Constants <a href="#pkg-constants">¶</a></h3>
+<pre>
+<span id="C" data-kind="constant"></span>const C = 1</pre>
+<p>const
+</p>
+</section><section class="Documentation-variables">
+ <h3 tabindex="-1" id="pkg-variables" class="Documentation-variablesHeader">Variables <a href="#pkg-variables">¶</a></h3>
+<pre>
+<span id="V" data-kind="variable"></span>var V = unexp()</pre>
+<p>var
+</p>
+</section><section class="Documentation-functions"><div class="Documentation-function"><h3 tabindex="-1" id="F" data-kind="function" class="Documentation-functionHeader">func <a class="Documentation-source" href="github.com/valid/module_name/blob/abcde/../godoc/testdata/p/p.go#L21">F</a> <a href="#F">¶</a></h3>
+<pre>
+func F(t <a href="/time">time</a>.<a href="/time#Time">Time</a>)</pre>
+<p>exported func
+</p>
+<details tabindex="-1" id="example-F" class="Documentation-exampleDetails js-exampleContainer">
+<summary class="Documentation-exampleDetailsHeader">Example <a href="#example-F">¶</a></summary>
+<div class="Documentation-exampleDetailsBody">
+<p>executable example
+</p>
+<p>Code:</p>
+
+<pre class="Documentation-exampleCode">
+package main
+
+import (
+ &#34;golang.org/x/pkgsite/internal/godoc/testdata/p&#34;
+)
+
+func main() {
+ <span class="comment">// example comment</span>
+ p.F()
+}
+</pre>
+
+<pre class="Documentation-exampleOutput">
+ok
+</pre>
+</div>
+<div class="Documentation-exampleButtonsContainer">
+ <p class="Documentation-exampleError" role="alert" aria-atomic="true"></p>
+ <button class="Documentation-examplePlayButton" aria-label="Play Code">Play</button>
+ </div></details>
+
+</div></section><section class="Documentation-types"><div class="Documentation-type"><h3 tabindex="-1" id="I" data-kind="type" class="Documentation-typeHeader">type <a class="Documentation-source" href="github.com/valid/module_name/blob/abcde/../godoc/testdata/p/p.go#L65">I</a> <a href="#I">¶</a></h3>
+<pre>
+type I interface {
+<span id="I.M1" data-kind="method"></span> M1()
+}</pre>
+<p>I is an interface.
+</p>
+</div><div class="Documentation-type"><h3 tabindex="-1" id="S1" data-kind="type" class="Documentation-typeHeader">type <a class="Documentation-source" href="github.com/valid/module_name/blob/abcde/../godoc/testdata/p/p.go#L50">S1</a> <a href="#S1">¶</a></h3>
+<pre>
+type S1 struct {
+<span id="S1.F" data-kind="field"></span> F <a href="/builtin#int">int</a> <span class="comment">// field</span>
+}</pre>
+
+</div><div class="Documentation-type"><h3 tabindex="-1" id="S2" data-kind="type" class="Documentation-typeHeader">type <a class="Documentation-source" href="github.com/valid/module_name/blob/abcde/../godoc/testdata/p/p.go#L58">S2</a> <a href="#S2">¶</a></h3>
+<pre>
+type S2 struct {
+<span id="S2.S1" data-kind="field"></span> <a href="#S1">S1</a> <span class="comment">// embedded struct</span>
+
+<span id="S2.H" data-kind="field"></span> H <a href="/builtin#int">int</a>
+ <span class="comment">// contains filtered or unexported fields</span>
+}</pre>
+
+</div><div class="Documentation-type"><h3 tabindex="-1" id="T" data-kind="type" class="Documentation-typeHeader">type <a class="Documentation-source" href="github.com/valid/module_name/blob/abcde/../godoc/testdata/p/p.go#L30">T</a> <a href="#T">¶</a></h3>
+<pre>
+type T <a href="/builtin#int">int</a></pre>
+<p>type
+</p>
+<div class="Documentation-typeConstant"><pre>
+<span id="CT" data-kind="constant"></span>const CT <a href="#T">T</a> = 3</pre>
+<p>typeConstant
+</p>
+
+ </div><div class="Documentation-typeVariable"><pre>
+<span id="VT" data-kind="variable"></span>var VT <a href="#T">T</a></pre>
+<p>typeVariable
+</p>
+
+ </div><div class="Documentation-typeFunc"><h3 tabindex="-1" id="TF" data-kind="function" class="Documentation-typeFuncHeader">func <a class="Documentation-source" href="github.com/valid/module_name/blob/abcde/../godoc/testdata/p/p.go#L39">TF</a> <a href="#TF">¶</a></h3>
+<pre>
+func TF() <a href="#T">T</a></pre>
+<p>typeFunc
+</p>
+<details tabindex="-1" id="example-TF" class="Documentation-exampleDetails js-exampleContainer">
+<summary class="Documentation-exampleDetailsHeader">Example <a href="#example-TF">¶</a></summary>
+<div class="Documentation-exampleDetailsBody">
+<p>non-executable example
+</p>
+<p>Code:</p>
+
+<pre class="Documentation-exampleCode">
+<span class="comment">// example comment</span>
+app := App{}
+app.Name = &#34;greet&#34;
+_ = app.Run([]string{&#34;greet&#34;})
+</pre>
+
+</div>
+</details>
+
+</div><div class="Documentation-typeMethod"><h3 tabindex="-1" id="T.M" data-kind="method" class="Documentation-typeMethodHeader">func (T) <a class="Documentation-source" href="github.com/valid/module_name/blob/abcde/../godoc/testdata/p/p.go#L45">M</a> <a href="#T.M">¶</a></h3>
+<pre>
+func (<a href="#T">T</a>) M()</pre>
+<p>method
+BUG(uid): this verifies that notes are rendered
+</p>
+</div></div></section>
+
+ <section class="Documentation-files">
+ <h3 tabindex="-1" id="pkg-files" class="Documentation-filesHeader">Package Files <a href="#pkg-files">¶</a></h3>
+ <ul class="Documentation-filesList"><li><a class="Documentation-file" href="github.com/valid/module_name/blob/abcde/../godoc/testdata/p/p.go">../../godoc/testdata/p/p.go</a></li></ul>
+ </section><section class="Documentation-notes"><div class="Documentation-note">
+ <h2 tabindex="-1" id="pkg-note-BUG" class="Documentation-noteHeader">BUGs <a href="#pkg-note-BUG">¶</a></h2>
+ <ul class="Documentation-noteList" style="padding-left: 20px; list-style: initial;">
+<li style="margin: 6px 0 6px 0;"><p>this verifies that notes are rendered
+</p></li></ul>
+</div></section></div> `)
+ DocumentationSource = []byte{0x41, 0x53, 0x54, 0x31, 0x33, 0xff, 0x81, 0x3, 0x1, 0x1, 0x11, 0x73, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x46, 0x69, 0x6c, 0x65, 0x53, 0x65, 0x74, 0x1, 0xff, 0x82, 0x0, 0x1, 0x2, 0x1, 0x4, 0x42, 0x61, 0x73, 0x65, 0x1, 0x4, 0x0, 0x1, 0x5, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x1, 0xff, 0x8c, 0x0, 0x0, 0x0, 0x25, 0xff, 0x8b, 0x2, 0x1, 0x1, 0x16, 0x5b, 0x5d, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x2e, 0x73, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x46, 0x69, 0x6c, 0x65, 0x1, 0xff, 0x8c, 0x0, 0x1, 0xff, 0x84, 0x0, 0x0, 0x4d, 0xff, 0x83, 0x3, 0x1, 0x1, 0xe, 0x73, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x46, 0x69, 0x6c, 0x65, 0x1, 0xff, 0x84, 0x0, 0x1, 0x5, 0x1, 0x4, 0x4e, 0x61, 0x6d, 0x65, 0x1, 0xc, 0x0, 0x1, 0x4, 0x42, 0x61, 0x73, 0x65, 0x1, 0x4, 0x0, 0x1, 0x4, 0x53, 0x69, 0x7a, 0x65, 0x1, 0x4, 0x0, 0x1, 0x5, 0x4c, 0x69, 0x6e, 0x65, 0x73, 0x1, 0xff, 0x86, 0x0, 0x1, 0x5, 0x49, 0x6e, 0x66, 0x6f, 0x73, 0x1, 0xff, 0x8a, 0x0, 0x0, 0x0, 0x13, 0xff, 0x85, 0x2, 0x1, 0x1, 0x5, 0x5b, 0x5d, 0x69, 0x6e, 0x74, 0x1, 0xff, 0x86, 0x0, 0x1, 0x4, 0x0, 0x0, 0x1f, 0xff, 0x89, 0x2, 0x1, 0x1, 0x10, 0x5b, 0x5d, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x2e, 0x6c, 0x69, 0x6e, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x1, 0xff, 0x8a, 0x0, 0x1, 0xff, 0x88, 0x0, 0x0, 0x42, 0xff, 0x87, 0x3, 0x1, 0x1, 0x8, 0x6c, 0x69, 0x6e, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x1, 0xff, 0x88, 0x0, 0x1, 0x4, 0x1, 0x6, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x1, 0x4, 0x0, 0x1, 0x8, 0x46, 0x69, 0x6c, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x1, 0xc, 0x0, 0x1, 0x4, 0x4c, 0x69, 0x6e, 0x65, 0x1, 0x4, 0x0, 0x1, 0x6, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x1, 0x4, 0x0, 0x0, 0x0, 0xfe, 0x1, 0x66, 0xff, 0x82, 0x1, 0xfe, 0xa, 0x8c, 0x1, 0x2, 0x1, 0x26, 0x2e, 0x2e, 0x2f, 0x2e, 0x2e, 0x2f, 0x67, 0x6f, 0x64, 0x6f, 0x63, 0x2f, 0x74, 0x65, 0x73, 0x74, 0x64, 0x61, 0x74, 0x61, 0x2f, 0x70, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x5f, 0x74, 0x65, 0x73, 0x74, 0x2e, 0x67, 0x6f, 0x1, 0x2, 0x1, 0xfe, 0x3, 0x8e, 0x1, 0x17, 0x0, 0x6e, 0xff, 0xda, 0xfe, 0x1, 0x3e, 0xfe, 0x1, 0x40, 0xfe, 0x1, 0x5e, 0xfe, 0x1, 0x60, 0xfe, 0x1, 0xd0, 0xfe, 0x1, 0xd2, 0xfe, 0x2, 0x6, 0xfe, 0x2, 0x2c, 0xfe, 0x2, 0x54, 0xfe, 0x2, 0x70, 0xfe, 0x2, 0x98, 0xfe, 0x2, 0xd8, 0xfe, 0x2, 0xdc, 0xfe, 0x2, 0xde, 0xfe, 0x3, 0xa, 0xfe, 0x3, 0x2e, 0xfe, 0x3, 0x56, 0xfe, 0x3, 0x64, 0xfe, 0x3, 0x7c, 0xfe, 0x3, 0x8a, 0x0, 0x1, 0x1b, 0x2e, 0x2e, 0x2f, 0x2e, 0x2e, 0x2f, 0x67, 0x6f, 0x64, 0x6f, 0x63, 0x2f, 0x74, 0x65, 0x73, 0x74, 0x64, 0x61, 0x74, 0x61, 0x2f, 0x70, 0x2f, 0x70, 0x2e, 0x67, 0x6f, 0x1, 0xfe, 0x3, 0x92, 0x1, 0xfe, 0x6, 0xf8, 0x1, 0x43, 0x0, 0x6e, 0xff, 0xda, 0xfe, 0x1, 0x3e, 0xfe, 0x1, 0x40, 0xfe, 0x1, 0xb4, 0xfe, 0x2, 0x20, 0xfe, 0x2, 0x34, 0xfe, 0x2, 0x36, 0xfe, 0x2, 0x48, 0xfe, 0x2, 0x56, 0xfe, 0x2, 0x66, 0xfe, 0x2, 0x6a, 0xfe, 0x2, 0x6c, 0xfe, 0x2, 0x7e, 0xfe, 0x2, 0x96, 0xfe, 0x2, 0x98, 0xfe, 0x2, 0xa6, 0xfe, 0x2, 0xc6, 0xfe, 0x2, 0xc8, 0xfe, 0x2, 0xea, 0xfe, 0x3, 0x16, 0xfe, 0x3, 0x36, 0xfe, 0x3, 0x3a, 0xfe, 0x3, 0x3c, 0xfe, 0x3, 0x62, 0xfe, 0x3, 0x80, 0xfe, 0x3, 0x84, 0xfe, 0x3, 0x86, 0xfe, 0x3, 0x96, 0xfe, 0x3, 0xac, 0xfe, 0x3, 0xae, 0xfe, 0x3, 0xce, 0xfe, 0x3, 0xec, 0xfe, 0x3, 0xee, 0xfe, 0x4, 0xe, 0xfe, 0x4, 0x20, 0xfe, 0x4, 0x22, 0xfe, 0x4, 0x3a, 0xfe, 0x4, 0x56, 0xfe, 0x4, 0x70, 0xfe, 0x4, 0x74, 0xfe, 0x4, 0x76, 0xfe, 0x4, 0x8a, 0xfe, 0x4, 0xf0, 0xfe, 0x5, 0x10, 0xfe, 0x5, 0x12, 0xfe, 0x5, 0x3c, 0xfe, 0x5, 0x5c, 0xfe, 0x5, 0x5e, 0xfe, 0x5, 0x80, 0xfe, 0x5, 0xa0, 0xfe, 0x5, 0xa4, 0xfe, 0x5, 0xa6, 0xfe, 0x5, 0xc8, 0xfe, 0x5, 0xd8, 0xfe, 0x5, 0xe6, 0xfe, 0x5, 0xea, 0xfe, 0x6, 0xc, 0xfe, 0x6, 0x3a, 0xfe, 0x6, 0x80, 0xfe, 0x6, 0x90, 0xfe, 0x6, 0x94, 0xfe, 0x6, 0x96, 0xfe, 0x6, 0xc2, 0xfe, 0x6, 0xe8, 0xfe, 0x6, 0xf4, 0x0, 0x0, 0x4f, 0xff, 0x8d, 0x3, 0x1, 0x1, 0xa, 0x65, 0x6e, 0x63, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x1, 0xff, 0x8e, 0x0, 0x1, 0x4, 0x1, 0x4, 0x47, 0x4f, 0x4f, 0x53, 0x1, 0xc, 0x0, 0x1, 0x6, 0x47, 0x4f, 0x41, 0x52, 0x43, 0x48, 0x1, 0xc, 0x0, 0x1, 0x5, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x1, 0xff, 0xb2, 0x0, 0x1, 0x12, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x50, 0x61, 0x74, 0x68, 0x73, 0x1, 0xff, 0xb4, 0x0, 0x0, 0x0, 0x1c, 0xff, 0xb1, 0x2, 0x1, 0x1, 0xd, 0x5b, 0x5d, 0x2a, 0x67, 0x6f, 0x64, 0x6f, 0x63, 0x2e, 0x46, 0x69, 0x6c, 0x65, 0x1, 0xff, 0xb2, 0x0, 0x1, 0xff, 0x90, 0x0, 0x0, 0x42, 0xff, 0x8f, 0x3, 0x1, 0x2, 0xff, 0x90, 0x0, 0x1, 0x4, 0x1, 0x4, 0x4e, 0x61, 0x6d, 0x65, 0x1, 0xc, 0x0, 0x1, 0x3, 0x41, 0x53, 0x54, 0x1, 0xff, 0x92, 0x0, 0x1, 0xe, 0x55, 0x6e, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x64, 0x4e, 0x75, 0x6d, 0x73, 0x1, 0xff, 0x86, 0x0, 0x1, 0xa, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x1, 0xff, 0xb0, 0x0, 0x0, 0x0, 0x72, 0xff, 0x91, 0x3, 0x1, 0x1, 0x4, 0x46, 0x69, 0x6c, 0x65, 0x1, 0xff, 0x92, 0x0, 0x1, 0x8, 0x1, 0x3, 0x44, 0x6f, 0x63, 0x1, 0xff, 0x94, 0x0, 0x1, 0x7, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x1, 0x4, 0x0, 0x1, 0x4, 0x4e, 0x61, 0x6d, 0x65, 0x1, 0xff, 0x9a, 0x0, 0x1, 0x5, 0x44, 0x65, 0x63, 0x6c, 0x73, 0x1, 0xff, 0x9e, 0x0, 0x1, 0x5, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x1, 0xff, 0xa0, 0x0, 0x1, 0x7, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x1, 0xff, 0xa8, 0x0, 0x1, 0xa, 0x55, 0x6e, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x64, 0x1, 0xff, 0xaa, 0x0, 0x1, 0x8, 0x43, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x1, 0xff, 0xac, 0x0, 0x0, 0x0, 0x24, 0xff, 0x93, 0x3, 0x1, 0x1, 0xc, 0x43, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x1, 0xff, 0x94, 0x0, 0x1, 0x1, 0x1, 0x4, 0x4c, 0x69, 0x73, 0x74, 0x1, 0xff, 0x98, 0x0, 0x0, 0x0, 0x1d, 0xff, 0x97, 0x2, 0x1, 0x1, 0xe, 0x5b, 0x5d, 0x2a, 0x61, 0x73, 0x74, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x1, 0xff, 0x98, 0x0, 0x1, 0xff, 0x96, 0x0, 0x0, 0x1f, 0xff, 0x95, 0x3, 0x1, 0x2, 0xff, 0x96, 0x0, 0x1, 0x2, 0x1, 0x5, 0x53, 0x6c, 0x61, 0x73, 0x68, 0x1, 0x4, 0x0, 0x1, 0x4, 0x54, 0x65, 0x78, 0x74, 0x1, 0xc, 0x0, 0x0, 0x0, 0x31, 0xff, 0x99, 0x3, 0x1, 0x1, 0x5, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x1, 0xff, 0x9a, 0x0, 0x1, 0x3, 0x1, 0x7, 0x4e, 0x61, 0x6d, 0x65, 0x50, 0x6f, 0x73, 0x1, 0x4, 0x0, 0x1, 0x4, 0x4e, 0x61, 0x6d, 0x65, 0x1, 0xc, 0x0, 0x1, 0x3, 0x4f, 0x62, 0x6a, 0x1, 0xff, 0x9c, 0x0, 0x0, 0x0, 0x41, 0xff, 0x9b, 0x3, 0x1, 0x1, 0x6, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x1, 0xff, 0x9c, 0x0, 0x1, 0x5, 0x1, 0x4, 0x4b, 0x69, 0x6e, 0x64, 0x1, 0x4, 0x0, 0x1, 0x4, 0x4e, 0x61, 0x6d, 0x65, 0x1, 0xc, 0x0, 0x1, 0x4, 0x44, 0x65, 0x63, 0x6c, 0x1, 0x10, 0x0, 0x1, 0x4, 0x44, 0x61, 0x74, 0x61, 0x1, 0x10, 0x0, 0x1, 0x4, 0x54, 0x79, 0x70, 0x65, 0x1, 0x10, 0x0, 0x0, 0x0, 0x18, 0xff, 0x9d, 0x2, 0x1, 0x1, 0xa, 0x5b, 0x5d, 0x61, 0x73, 0x74, 0x2e, 0x44, 0x65, 0x63, 0x6c, 0x1, 0xff, 0x9e, 0x0, 0x1, 0x10, 0x0, 0x0, 0x2b, 0xff, 0x9f, 0x3, 0x1, 0x1, 0x5, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x1, 0xff, 0xa0, 0x0, 0x1, 0x2, 0x1, 0x5, 0x4f, 0x75, 0x74, 0x65, 0x72, 0x1, 0xff, 0xa0, 0x0, 0x1, 0x7, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x1, 0xff, 0xa2, 0x0, 0x0, 0x0, 0x27, 0xff, 0xa1, 0x4, 0x1, 0x1, 0x16, 0x6d, 0x61, 0x70, 0x5b, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5d, 0x2a, 0x61, 0x73, 0x74, 0x2e, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x1, 0xff, 0xa2, 0x0, 0x1, 0xc, 0x1, 0xff, 0x9c, 0x0, 0x0, 0x20, 0xff, 0xa7, 0x2, 0x1, 0x1, 0x11, 0x5b, 0x5d, 0x2a, 0x61, 0x73, 0x74, 0x2e, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x53, 0x70, 0x65, 0x63, 0x1, 0xff, 0xa8, 0x0, 0x1, 0xff, 0xa4, 0x0, 0x0, 0x41, 0xff, 0xa3, 0x3, 0x1, 0x2, 0xff, 0xa4, 0x0, 0x1, 0x5, 0x1, 0x3, 0x44, 0x6f, 0x63, 0x1, 0xff, 0x94, 0x0, 0x1, 0x4, 0x4e, 0x61, 0x6d, 0x65, 0x1, 0xff, 0x9a, 0x0, 0x1, 0x4, 0x50, 0x61, 0x74, 0x68, 0x1, 0xff, 0xa6, 0x0, 0x1, 0x7, 0x43, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x1, 0xff, 0x94, 0x0, 0x1, 0x6, 0x45, 0x6e, 0x64, 0x50, 0x6f, 0x73, 0x1, 0x4, 0x0, 0x0, 0x0, 0x36, 0xff, 0xa5, 0x3, 0x1, 0x1, 0x8, 0x42, 0x61, 0x73, 0x69, 0x63, 0x4c, 0x69, 0x74, 0x1, 0xff, 0xa6, 0x0, 0x1, 0x3, 0x1, 0x8, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x50, 0x6f, 0x73, 0x1, 0x4, 0x0, 0x1, 0x4, 0x4b, 0x69, 0x6e, 0x64, 0x1, 0x4, 0x0, 0x1, 0x5, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x1, 0xc, 0x0, 0x0, 0x0, 0x1b, 0xff, 0xa9, 0x2, 0x1, 0x1, 0xc, 0x5b, 0x5d, 0x2a, 0x61, 0x73, 0x74, 0x2e, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x1, 0xff, 0xaa, 0x0, 0x1, 0xff, 0x9a, 0x0, 0x0, 0x22, 0xff, 0xab, 0x2, 0x1, 0x1, 0x13, 0x5b, 0x5d, 0x2a, 0x61, 0x73, 0x74, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x1, 0xff, 0xac, 0x0, 0x1, 0xff, 0x94, 0x0, 0x0, 0x20, 0xff, 0xaf, 0x2, 0x1, 0x1, 0x11, 0x5b, 0x5d, 0x67, 0x6f, 0x64, 0x6f, 0x63, 0x2e, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x49, 0x74, 0x65, 0x6d, 0x1, 0xff, 0xb0, 0x0, 0x1, 0xff, 0xae, 0x0, 0x0, 0x28, 0xff, 0xad, 0x3, 0x1, 0x1, 0x9, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x49, 0x74, 0x65, 0x6d, 0x1, 0xff, 0xae, 0x0, 0x1, 0x2, 0x1, 0x4, 0x4e, 0x61, 0x6d, 0x65, 0x1, 0xc, 0x0, 0x1, 0x3, 0x4e, 0x75, 0x6d, 0x1, 0x4, 0x0, 0x0, 0x0, 0x1f, 0xff, 0xb3, 0x4, 0x1, 0x1, 0xf, 0x6d, 0x61, 0x70, 0x5b, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5d, 0x62, 0x6f, 0x6f, 0x6c, 0x1, 0xff, 0xb4, 0x0, 0x1, 0xc, 0x1, 0x2, 0x0, 0x0, 0xff, 0xae, 0xff, 0x8e, 0x1, 0x5, 0x6c, 0x69, 0x6e, 0x75, 0x78, 0x1, 0x5, 0x61, 0x6d, 0x64, 0x36, 0x34, 0x1, 0x2, 0x1, 0x26, 0x2e, 0x2e, 0x2f, 0x2e, 0x2e, 0x2f, 0x67, 0x6f, 0x64, 0x6f, 0x63, 0x2f, 0x74, 0x65, 0x73, 0x74, 0x64, 0x61, 0x74, 0x61, 0x2f, 0x70, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x5f, 0x74, 0x65, 0x73, 0x74, 0x2e, 0x67, 0x6f, 0x1, 0x2, 0xfe, 0x1, 0x42, 0x1, 0x1, 0xfe, 0x1, 0x52, 0x1, 0x6, 0x70, 0x5f, 0x74, 0x65, 0x73, 0x74, 0x0, 0x1, 0x3, 0xc, 0x2a, 0x61, 0x73, 0x74, 0x2e, 0x47, 0x65, 0x6e, 0x44, 0x65, 0x63, 0x6c, 0xff, 0xb5, 0x3, 0x1, 0x1, 0x7, 0x47, 0x65, 0x6e, 0x44, 0x65, 0x63, 0x6c, 0x1, 0xff, 0xb6, 0x0, 0x1, 0x6, 0x1, 0x3, 0x44, 0x6f, 0x63, 0x1, 0xff, 0x94, 0x0, 0x1, 0x6, 0x54, 0x6f, 0x6b, 0x50, 0x6f, 0x73, 0x1, 0x4, 0x0, 0x1, 0x3, 0x54, 0x6f, 0x6b, 0x1, 0x4, 0x0, 0x1, 0x6, 0x4c, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x1, 0x4, 0x0, 0x1, 0x5, 0x53, 0x70, 0x65, 0x63, 0x73, 0x1, 0xff, 0xb8, 0x0, 0x1, 0x6, 0x52, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x1, 0x4, 0x0, 0x0, 0x0, 0x18, 0xff, 0xb7, 0x2, 0x1, 0x1, 0xa, 0x5b, 0x5d, 0x61, 0x73, 0x74, 0x2e, 0x53, 0x70, 0x65, 0x63, 0x1, 0xff, 0xb8, 0x0, 0x1, 0x10, 0x0, 0x0, 0xff, 0xb0, 0xff, 0xb6, 0x58, 0x2, 0xfe, 0x1, 0x62, 0x1, 0xff, 0x96, 0x2, 0x1, 0xf, 0x2a, 0x61, 0x73, 0x74, 0x2e, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x53, 0x70, 0x65, 0x63, 0xff, 0xa4, 0x3b, 0x3, 0x1, 0xfe, 0x1, 0x70, 0x1, 0x12, 0x1, 0x30, 0x22, 0x67, 0x6f, 0x6c, 0x61, 0x6e, 0x67, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x78, 0x2f, 0x70, 0x6b, 0x67, 0x73, 0x69, 0x74, 0x65, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x67, 0x6f, 0x64, 0x6f, 0x63, 0x2f, 0x74, 0x65, 0x73, 0x74, 0x64, 0x61, 0x74, 0x61, 0x2f, 0x70, 0x22, 0x0, 0x0, 0x0, 0xd, 0x2a, 0x61, 0x73, 0x74, 0x2e, 0x46, 0x75, 0x6e, 0x63, 0x44, 0x65, 0x63, 0x6c, 0xff, 0xb9, 0x3, 0x1, 0x1, 0x8, 0x46, 0x75, 0x6e, 0x63, 0x44, 0x65, 0x63, 0x6c, 0x1, 0xff, 0xba, 0x0, 0x1, 0x5, 0x1, 0x3, 0x44, 0x6f, 0x63, 0x1, 0xff, 0x94, 0x0, 0x1, 0x4, 0x52, 0x65, 0x63, 0x76, 0x1, 0xff, 0xbc, 0x0, 0x1, 0x4, 0x4e, 0x61, 0x6d, 0x65, 0x1, 0xff, 0x9a, 0x0, 0x1, 0x4, 0x54, 0x79, 0x70, 0x65, 0x1, 0xff, 0xc2, 0x0, 0x1, 0x4, 0x42, 0x6f, 0x64, 0x79, 0x1, 0xff, 0xc4, 0x0, 0x0, 0x0, 0x39, 0xff, 0xbb, 0x3, 0x1, 0x1, 0x9, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4c, 0x69, 0x73, 0x74, 0x1, 0xff, 0xbc, 0x0, 0x1, 0x3, 0x1, 0x7, 0x4f, 0x70, 0x65, 0x6e, 0x69, 0x6e, 0x67, 0x1, 0x4, 0x0, 0x1, 0x4, 0x4c, 0x69, 0x73, 0x74, 0x1, 0xff, 0xc0, 0x0, 0x1, 0x7, 0x43, 0x6c, 0x6f, 0x73, 0x69, 0x6e, 0x67, 0x1, 0x4, 0x0, 0x0, 0x0, 0x1b, 0xff, 0xbf, 0x2, 0x1, 0x1, 0xc, 0x5b, 0x5d, 0x2a, 0x61, 0x73, 0x74, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x1, 0xff, 0xc0, 0x0, 0x1, 0xff, 0xbe, 0x0, 0x0, 0x3f, 0xff, 0xbd, 0x3, 0x1, 0x2, 0xff, 0xbe, 0x0, 0x1, 0x5, 0x1, 0x3, 0x44, 0x6f, 0x63, 0x1, 0xff, 0x94, 0x0, 0x1, 0x5, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x1, 0xff, 0xaa, 0x0, 0x1, 0x4, 0x54, 0x79, 0x70, 0x65, 0x1, 0x10, 0x0, 0x1, 0x3, 0x54, 0x61, 0x67, 0x1, 0xff, 0xa6, 0x0, 0x1, 0x7, 0x43, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x1, 0xff, 0x94, 0x0, 0x0, 0x0, 0x38, 0xff, 0xc1, 0x3, 0x1, 0x1, 0x8, 0x46, 0x75, 0x6e, 0x63, 0x54, 0x79, 0x70, 0x65, 0x1, 0xff, 0xc2, 0x0, 0x1, 0x3, 0x1, 0x4, 0x46, 0x75, 0x6e, 0x63, 0x1, 0x4, 0x0, 0x1, 0x6, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x1, 0xff, 0xbc, 0x0, 0x1, 0x7, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x1, 0xff, 0xbc, 0x0, 0x0, 0x0, 0x37, 0xff, 0xc3, 0x3, 0x1, 0x1, 0x9, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x53, 0x74, 0x6d, 0x74, 0x1, 0xff, 0xc4, 0x0, 0x1, 0x3, 0x1, 0x6, 0x4c, 0x62, 0x72, 0x61, 0x63, 0x65, 0x1, 0x4, 0x0, 0x1, 0x4, 0x4c, 0x69, 0x73, 0x74, 0x1, 0xff, 0xc6, 0x0, 0x1, 0x6, 0x52, 0x62, 0x72, 0x61, 0x63, 0x65, 0x1, 0x4, 0x0, 0x0, 0x0, 0x18, 0xff, 0xc5, 0x2, 0x1, 0x1, 0xa, 0x5b, 0x5d, 0x61, 0x73, 0x74, 0x2e, 0x53, 0x74, 0x6d, 0x74, 0x1, 0xff, 0xc6, 0x0, 0x1, 0x10, 0x0, 0x0, 0xfe, 0x15, 0x37, 0xff, 0xba, 0xff, 0xba, 0x1, 0x1, 0x1, 0x1, 0xfe, 0x1, 0xd4, 0x1, 0x19, 0x2f, 0x2f, 0x20, 0x6e, 0x6f, 0x6e, 0x2d, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x0, 0x0, 0x2, 0x1, 0xfe, 0x2, 0x12, 0x1, 0x9, 0x45, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x54, 0x46, 0x1, 0x1, 0xa, 0x1, 0x9, 0x45, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x54, 0x46, 0x1, 0x3, 0x69, 0x6e, 0x74, 0x4, 0x2, 0x0, 0x6, 0x1, 0x3, 0x69, 0x6e, 0x74, 0x4, 0x2, 0x0, 0x0, 0x0, 0x0, 0x1, 0x1, 0xfe, 0x2, 0x8, 0x1, 0x1, 0xfe, 0x2, 0x24, 0x2, 0xfe, 0x2, 0x26, 0x0, 0x0, 0x1, 0x1, 0xfe, 0x2, 0x2a, 0x1, 0x3, 0xf, 0x2a, 0x61, 0x73, 0x74, 0x2e, 0x41, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x53, 0x74, 0x6d, 0x74, 0xff, 0xc7, 0x3, 0x1, 0x1, 0xa, 0x41, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x53, 0x74, 0x6d, 0x74, 0x1, 0xff, 0xc8, 0x0, 0x1, 0x4, 0x1, 0x3, 0x4c, 0x68, 0x73, 0x1, 0xff, 0xca, 0x0, 0x1, 0x6, 0x54, 0x6f, 0x6b, 0x50, 0x6f, 0x73, 0x1, 0x4, 0x0, 0x1, 0x3, 0x54, 0x6f, 0x6b, 0x1, 0x4, 0x0, 0x1, 0x3, 0x52, 0x68, 0x73, 0x1, 0xff, 0xca, 0x0, 0x0, 0x0, 0x18, 0xff, 0xc9, 0x2, 0x1, 0x1, 0xa, 0x5b, 0x5d, 0x61, 0x73, 0x74, 0x2e, 0x45, 0x78, 0x70, 0x72, 0x1, 0xff, 0xca, 0x0, 0x1, 0x10, 0x0, 0x0, 0xfe, 0x3, 0x2f, 0xff, 0xc8, 0xff, 0xa1, 0x1, 0x1, 0xa, 0x2a, 0x61, 0x73, 0x74, 0x2e, 0x49, 0x64, 0x65, 0x6e, 0x74, 0xff, 0x9a, 0x25, 0x1, 0xfe, 0x2, 0x58, 0x1, 0x3, 0x61, 0x70, 0x70, 0x1, 0x1, 0x8, 0x1, 0x3, 0x61, 0x70, 0x70, 0x1, 0x3, 0x69, 0x6e, 0x74, 0x4, 0x2, 0x0, 0x1, 0x1, 0x3, 0x69, 0x6e, 0x74, 0x4, 0x2, 0x0, 0x2, 0x0, 0x0, 0x1, 0xfe, 0x2, 0x60, 0x1, 0x5e, 0x1, 0x1, 0x11, 0x2a, 0x61, 0x73, 0x74, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x65, 0x4c, 0x69, 0x74, 0xff, 0xcb, 0x3, 0x1, 0x1, 0xc, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x65, 0x4c, 0x69, 0x74, 0x1, 0xff, 0xcc, 0x0, 0x1, 0x5, 0x1, 0x4, 0x54, 0x79, 0x70, 0x65, 0x1, 0x10, 0x0, 0x1, 0x6, 0x4c, 0x62, 0x72, 0x61, 0x63, 0x65, 0x1, 0x4, 0x0, 0x1, 0x4, 0x45, 0x6c, 0x74, 0x73, 0x1, 0xff, 0xca, 0x0, 0x1, 0x6, 0x52, 0x62, 0x72, 0x61, 0x63, 0x65, 0x1, 0x4, 0x0, 0x1, 0xa, 0x49, 0x6e, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x1, 0x2, 0x0, 0x0, 0x0, 0x26, 0xff, 0xcc, 0x22, 0x1, 0xa, 0x2a, 0x61, 0x73, 0x74, 0x2e, 0x49, 0x64, 0x65, 0x6e, 0x74, 0xff, 0x9a, 0xa, 0x1, 0xfe, 0x2, 0x66, 0x1, 0x3, 0x41, 0x70, 0x70, 0x0, 0x1, 0xfe, 0x2, 0x6c, 0x2, 0xfe, 0x2, 0x6e, 0x0, 0x0, 0xf, 0x2a, 0x61, 0x73, 0x74, 0x2e, 0x41, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x53, 0x74, 0x6d, 0x74, 0xff, 0xc8, 0x3d, 0x1, 0x1, 0x11, 0x2a, 0x61, 0x73, 0x74, 0x2e, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x45, 0x78, 0x70, 0x72, 0xff, 0xcd, 0x3, 0x1, 0x1, 0xc, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x45, 0x78, 0x70, 0x72, 0x1, 0xff, 0xce, 0x0, 0x1, 0x2, 0x1, 0x1, 0x58, 0x1, 0x10, 0x0, 0x1, 0x3, 0x53, 0x65, 0x6c, 0x1, 0xff, 0x9a, 0x0, 0x0, 0x0, 0x6e, 0xff, 0xce, 0x41, 0x1, 0xa, 0x2a, 0x61, 0x73, 0x74, 0x2e, 0x49, 0x64, 0x65, 0x6e, 0x74, 0xff, 0x9a, 0x25, 0x1, 0xfe, 0x2, 0x74, 0x1, 0x3, 0x61, 0x70, 0x70, 0x1, 0x1, 0x8, 0x1, 0x3, 0x61, 0x70, 0x70, 0x1, 0x3, 0x69, 0x6e, 0x74, 0x4, 0x2, 0x0, 0x1, 0x1, 0x3, 0x69, 0x6e, 0x74, 0x4, 0x2, 0x0, 0x2, 0x0, 0x0, 0x1, 0x1, 0xfe, 0x2, 0x7c, 0x1, 0x4, 0x4e, 0x61, 0x6d, 0x65, 0x0, 0x0, 0x1, 0xfe, 0x2, 0x86, 0x1, 0x54, 0x1, 0x1, 0xd, 0x2a, 0x61, 0x73, 0x74, 0x2e, 0x42, 0x61, 0x73, 0x69, 0x63, 0x4c, 0x69, 0x74, 0xff, 0xa6, 0x10, 0x1, 0xfe, 0x2, 0x8a, 0x1, 0x12, 0x1, 0x7, 0x22, 0x67, 0x72, 0x65, 0x65, 0x74, 0x22, 0x0, 0x0, 0xf, 0x2a, 0x61, 0x73, 0x74, 0x2e, 0x41, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x53, 0x74, 0x6d, 0x74, 0xff, 0xc8, 0x79, 0x1, 0x1, 0xa, 0x2a, 0x61, 0x73, 0x74, 0x2e, 0x49, 0x64, 0x65, 0x6e, 0x74, 0xff, 0x9a, 0x8, 0x1, 0xfe, 0x2, 0x9c, 0x1, 0x1, 0x5f, 0x0, 0x1, 0xfe, 0x2, 0xa0, 0x1, 0x54, 0x1, 0x1, 0xd, 0x2a, 0x61, 0x73, 0x74, 0x2e, 0x43, 0x61, 0x6c, 0x6c, 0x45, 0x78, 0x70, 0x72, 0xff, 0xcf, 0x3, 0x1, 0x1, 0x8, 0x43, 0x61, 0x6c, 0x6c, 0x45, 0x78, 0x70, 0x72, 0x1, 0xff, 0xd0, 0x0, 0x1, 0x5, 0x1, 0x3, 0x46, 0x75, 0x6e, 0x1, 0x10, 0x0, 0x1, 0x6, 0x4c, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x1, 0x4, 0x0, 0x1, 0x4, 0x41, 0x72, 0x67, 0x73, 0x1, 0xff, 0xca, 0x0, 0x1, 0x8, 0x45, 0x6c, 0x6c, 0x69, 0x70, 0x73, 0x69, 0x73, 0x1, 0x4, 0x0, 0x1, 0x6, 0x52, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x1, 0x4, 0x0, 0x0, 0x0, 0xfe, 0x1, 0xf, 0xff, 0xd0, 0xfe, 0x1, 0x9, 0x1, 0x11, 0x2a, 0x61, 0x73, 0x74, 0x2e, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x45, 0x78, 0x70, 0x72, 0xff, 0xce, 0x40, 0x1, 0xa, 0x2a, 0x61, 0x73, 0x74, 0x2e, 0x49, 0x64, 0x65, 0x6e, 0x74, 0xff, 0x9a, 0x25, 0x1, 0xfe, 0x2, 0xa4, 0x1, 0x3, 0x61, 0x70, 0x70, 0x1, 0x1, 0x8, 0x1, 0x3, 0x61, 0x70, 0x70, 0x1, 0x3, 0x69, 0x6e, 0x74, 0x4, 0x2, 0x0, 0x1, 0x1, 0x3, 0x69, 0x6e, 0x74, 0x4, 0x2, 0x0, 0x2, 0x0, 0x0, 0x1, 0x1, 0xfe, 0x2, 0xac, 0x1, 0x3, 0x52, 0x75, 0x6e, 0x0, 0x0, 0x1, 0xfe, 0x2, 0xb2, 0x1, 0x1, 0x11, 0x2a, 0x61, 0x73, 0x74, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x65, 0x4c, 0x69, 0x74, 0xff, 0xcc, 0x42, 0x1, 0xe, 0x2a, 0x61, 0x73, 0x74, 0x2e, 0x41, 0x72, 0x72, 0x61, 0x79, 0x54, 0x79, 0x70, 0x65, 0xff, 0xd1, 0x3, 0x1, 0x1, 0x9, 0x41, 0x72, 0x72, 0x61, 0x79, 0x54, 0x79, 0x70, 0x65, 0x1, 0xff, 0xd2, 0x0, 0x1, 0x3, 0x1, 0x6, 0x4c, 0x62, 0x72, 0x61, 0x63, 0x6b, 0x1, 0x4, 0x0, 0x1, 0x3, 0x4c, 0x65, 0x6e, 0x1, 0x10, 0x0, 0x1, 0x3, 0x45, 0x6c, 0x74, 0x1, 0x10, 0x0, 0x0, 0x0, 0x50, 0xff, 0xd2, 0x21, 0x1, 0xfe, 0x2, 0xb4, 0x2, 0xa, 0x2a, 0x61, 0x73, 0x74, 0x2e, 0x49, 0x64, 0x65, 0x6e, 0x74, 0xff, 0x9a, 0xd, 0x1, 0xfe, 0x2, 0xb8, 0x1, 0x6, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x0, 0x0, 0x1, 0xfe, 0x2, 0xc4, 0x1, 0x1, 0xd, 0x2a, 0x61, 0x73, 0x74, 0x2e, 0x42, 0x61, 0x73, 0x69, 0x63, 0x4c, 0x69, 0x74, 0xff, 0xa6, 0x10, 0x1, 0xfe, 0x2, 0xc6, 0x1, 0x12, 0x1, 0x7, 0x22, 0x67, 0x72, 0x65, 0x65, 0x74, 0x22, 0x0, 0x1, 0xfe, 0x2, 0xd4, 0x0, 0x2, 0xfe, 0x2, 0xd6, 0x0, 0x0, 0x1, 0xfe, 0x2, 0xda, 0x0, 0x0, 0xd, 0x2a, 0x61, 0x73, 0x74, 0x2e, 0x46, 0x75, 0x6e, 0x63, 0x44, 0x65, 0x63, 0x6c, 0xff, 0xba, 0xff, 0x91, 0x1, 0x1, 0x1, 0x1, 0xfe, 0x2, 0xe0, 0x1, 0x15, 0x2f, 0x2f, 0x20, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x0, 0x0, 0x2, 0x1, 0xfe, 0x3, 0x16, 0x1, 0x8, 0x45, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x46, 0x1, 0x1, 0xa, 0x1, 0x8, 0x45, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x46, 0x1, 0x3, 0x69, 0x6e, 0x74, 0x4, 0x2, 0x0, 0x1a, 0x1, 0x3, 0x69, 0x6e, 0x74, 0x4, 0x2, 0x0, 0x4, 0x0, 0x0, 0x1, 0x1, 0xfe, 0x3, 0xc, 0x1, 0x1, 0xfe, 0x3, 0x26, 0x2, 0xfe, 0x3, 0x28, 0x0, 0x0, 0x1, 0x1, 0xfe, 0x3, 0x2c, 0x1, 0x1, 0xd, 0x2a, 0x61, 0x73, 0x74, 0x2e, 0x45, 0x78, 0x70, 0x72, 0x53, 0x74, 0x6d, 0x74, 0xff, 0xd3, 0x3, 0x1, 0x1, 0x8, 0x45, 0x78, 0x70, 0x72, 0x53, 0x74, 0x6d, 0x74, 0x1, 0xff, 0xd4, 0x0, 0x1, 0x1, 0x1, 0x1, 0x58, 0x1, 0x10, 0x0, 0x0, 0x0, 0x5c, 0xff, 0xd4, 0x53, 0x1, 0xd, 0x2a, 0x61, 0x73, 0x74, 0x2e, 0x43, 0x61, 0x6c, 0x6c, 0x45, 0x78, 0x70, 0x72, 0xff, 0xd0, 0x40, 0x1, 0x11, 0x2a, 0x61, 0x73, 0x74, 0x2e, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x45, 0x78, 0x70, 0x72, 0xff, 0xce, 0x21, 0x1, 0xa, 0x2a, 0x61, 0x73, 0x74, 0x2e, 0x49, 0x64, 0x65, 0x6e, 0x74, 0xff, 0x9a, 0x8, 0x1, 0xfe, 0x3, 0x5a, 0x1, 0x1, 0x70, 0x0, 0x1, 0x1, 0xfe, 0x3, 0x5e, 0x1, 0x1, 0x46, 0x0, 0x0, 0x1, 0xfe, 0x3, 0x60, 0x3, 0xfe, 0x3, 0x62, 0x0, 0x0, 0x1, 0xfe, 0x3, 0x8c, 0x0, 0x0, 0x1, 0x0, 0x1, 0x1, 0x3, 0x1, 0xfe, 0x1, 0x70, 0x1, 0x12, 0x1, 0x30, 0x22, 0x67, 0x6f, 0x6c, 0x61, 0x6e, 0x67, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x78, 0x2f, 0x70, 0x6b, 0x67, 0x73, 0x69, 0x74, 0x65, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x67, 0x6f, 0x64, 0x6f, 0x63, 0x2f, 0x74, 0x65, 0x73, 0x74, 0x64, 0x61, 0x74, 0x61, 0x2f, 0x70, 0x22, 0x0, 0x0, 0x2, 0x6, 0x1, 0x3, 0x1, 0x2, 0x1, 0x36, 0x2f, 0x2f, 0x20, 0x43, 0x6f, 0x70, 0x79, 0x72, 0x69, 0x67, 0x68, 0x74, 0x20, 0x32, 0x30, 0x32, 0x30, 0x20, 0x54, 0x68, 0x65, 0x20, 0x47, 0x6f, 0x20, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x73, 0x2e, 0x20, 0x41, 0x6c, 0x6c, 0x20, 0x72, 0x69, 0x67, 0x68, 0x74, 0x73, 0x20, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x2e, 0x0, 0x1, 0x70, 0x1, 0x35, 0x2f, 0x2f, 0x20, 0x55, 0x73, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x63, 0x6f, 0x64, 0x65, 0x20, 0x69, 0x73, 0x20, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x65, 0x64, 0x20, 0x62, 0x79, 0x20, 0x61, 0x20, 0x42, 0x53, 0x44, 0x2d, 0x73, 0x74, 0x79, 0x6c, 0x65, 0x0, 0x1, 0xff, 0xdc, 0x1, 0x31, 0x2f, 0x2f, 0x20, 0x6c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x63, 0x61, 0x6e, 0x20, 0x62, 0x65, 0x20, 0x66, 0x6f, 0x75, 0x6e, 0x64, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x4c, 0x49, 0x43, 0x45, 0x4e, 0x53, 0x45, 0x20, 0x66, 0x69, 0x6c, 0x65, 0x2e, 0x0, 0x0, 0x1, 0x1, 0x1, 0xfe, 0x1, 0xd4, 0x1, 0x19, 0x2f, 0x2f, 0x20, 0x6e, 0x6f, 0x6e, 0x2d, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x0, 0x0, 0x1, 0x1, 0x1, 0xfe, 0x2, 0x30, 0x1, 0x12, 0x2f, 0x2f, 0x20, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x20, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x0, 0x0, 0x1, 0x1, 0x1, 0xfe, 0x2, 0xe0, 0x1, 0x15, 0x2f, 0x2f, 0x20, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x0, 0x0, 0x1, 0x1, 0x1, 0xfe, 0x3, 0x32, 0x1, 0x12, 0x2f, 0x2f, 0x20, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x20, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x0, 0x0, 0x1, 0x2, 0x1, 0xfe, 0x3, 0x68, 0x1, 0xa, 0x2f, 0x2f, 0x20, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x3a, 0x0, 0x1, 0xfe, 0x3, 0x80, 0x1, 0x5, 0x2f, 0x2f, 0x20, 0x6f, 0x6b, 0x0, 0x0, 0x0, 0x1, 0x3, 0xc, 0x18, 0x1e, 0x1, 0x2, 0x1, 0x8, 0x45, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x46, 0x1, 0x4, 0x0, 0x1, 0x9, 0x45, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x54, 0x46, 0x0, 0x0, 0x1, 0x1b, 0x2e, 0x2e, 0x2f, 0x2e, 0x2e, 0x2f, 0x67, 0x6f, 0x64, 0x6f, 0x63, 0x2f, 0x74, 0x65, 0x73, 0x74, 0x64, 0x61, 0x74, 0x61, 0x2f, 0x70, 0x2f, 0x70, 0x2e, 0x67, 0x6f, 0x1, 0x1, 0x1, 0x2, 0x1, 0xfe, 0x4, 0xd2, 0x1, 0x39, 0x2f, 0x2f, 0x20, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x20, 0x70, 0x20, 0x69, 0x73, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x74, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x67, 0x6f, 0x64, 0x6f, 0x63, 0x2e, 0x52, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x2e, 0x20, 0x54, 0x68, 0x65, 0x72, 0x65, 0x20, 0x61, 0x72, 0x65, 0x20, 0x61, 0x20, 0x6c, 0x6f, 0x74, 0x0, 0x1, 0xfe, 0x5, 0x46, 0x1, 0x35, 0x2f, 0x2f, 0x20, 0x6f, 0x66, 0x20, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x20, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x73, 0x20, 0x74, 0x6f, 0x20, 0x73, 0x61, 0x79, 0x2c, 0x20, 0x62, 0x75, 0x74, 0x20, 0x74, 0x68, 0x61, 0x74, 0x27, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x67, 0x69, 0x73, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x69, 0x74, 0x2e, 0x0, 0x0, 0x1, 0xfe, 0x5, 0xb2, 0x1, 0x1, 0xfe, 0x5, 0xc2, 0x1, 0x1, 0x70, 0x0, 0x1, 0xd, 0xc, 0x2a, 0x61, 0x73, 0x74, 0x2e, 0x47, 0x65, 0x6e, 0x44, 0x65, 0x63, 0x6c, 0xff, 0xb6, 0x59, 0x2, 0xfe, 0x5, 0xc8, 0x1, 0xff, 0x96, 0x1, 0xfe, 0x5, 0xd6, 0x1, 0x2, 0xf, 0x2a, 0x61, 0x73, 0x74, 0x2e, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x53, 0x70, 0x65, 0x63, 0xff, 0xa4, 0x10, 0x3, 0x1, 0xfe, 0x5, 0xdc, 0x1, 0x12, 0x1, 0x5, 0x22, 0x66, 0x6d, 0x74, 0x22, 0x0, 0x0, 0xf, 0x2a, 0x61, 0x73, 0x74, 0x2e, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x53, 0x70, 0x65, 0x63, 0xff, 0xa4, 0x11, 0x3, 0x1, 0xfe, 0x5, 0xea, 0x1, 0x12, 0x1, 0x6, 0x22, 0x74, 0x69, 0x6d, 0x65, 0x22, 0x0, 0x0, 0x1, 0xfe, 0x5, 0xf8, 0x0, 0xc, 0x2a, 0x61, 0x73, 0x74, 0x2e, 0x47, 0x65, 0x6e, 0x44, 0x65, 0x63, 0x6c, 0xff, 0xb6, 0x78, 0x1, 0x1, 0x1, 0x1, 0xfe, 0x5, 0xfe, 0x1, 0x8, 0x2f, 0x2f, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x0, 0x0, 0x1, 0xfe, 0x6, 0x10, 0x1, 0xff, 0x80, 0x2, 0x1, 0xe, 0x2a, 0x61, 0x73, 0x74, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x53, 0x70, 0x65, 0x63, 0xff, 0xd5, 0x3, 0x1, 0x1, 0x9, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x53, 0x70, 0x65, 0x63, 0x1, 0xff, 0xd6, 0x0, 0x1, 0x5, 0x1, 0x3, 0x44, 0x6f, 0x63, 0x1, 0xff, 0x94, 0x0, 0x1, 0x5, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x1, 0xff, 0xaa, 0x0, 0x1, 0x4, 0x54, 0x79, 0x70, 0x65, 0x1, 0x10, 0x0, 0x1, 0x6, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x1, 0xff, 0xca, 0x0, 0x1, 0x7, 0x43, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x1, 0xff, 0x94, 0x0, 0x0, 0x0, 0x45, 0xff, 0xd6, 0x41, 0x2, 0x1, 0x1, 0xfe, 0x6, 0x1c, 0x1, 0x1, 0x43, 0x1, 0x1, 0x4, 0x1, 0x1, 0x43, 0x1, 0x3, 0x69, 0x6e, 0x74, 0x4, 0x2, 0x0, 0xa, 0x1, 0x3, 0x69, 0x6e, 0x74, 0x4, 0x2, 0x0, 0x0, 0x0, 0x0, 0x2, 0x1, 0xd, 0x2a, 0x61, 0x73, 0x74, 0x2e, 0x42, 0x61, 0x73, 0x69, 0x63, 0x4c, 0x69, 0x74, 0xff, 0xa6, 0xa, 0x1, 0xfe, 0x6, 0x24, 0x1, 0xa, 0x1, 0x1, 0x31, 0x0, 0x0, 0x0, 0xc, 0x2a, 0x61, 0x73, 0x74, 0x2e, 0x47, 0x65, 0x6e, 0x44, 0x65, 0x63, 0x6c, 0xff, 0xb6, 0xff, 0xa5, 0x1, 0x1, 0x1, 0x1, 0xfe, 0x6, 0x2a, 0x1, 0x6, 0x2f, 0x2f, 0x20, 0x76, 0x61, 0x72, 0x0, 0x0, 0x1, 0xfe, 0x6, 0x38, 0x1, 0xff, 0xaa, 0x2, 0x1, 0xe, 0x2a, 0x61, 0x73, 0x74, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x53, 0x70, 0x65, 0x63, 0xff, 0xd6, 0x78, 0x2, 0x1, 0x1, 0xfe, 0x6, 0x40, 0x1, 0x1, 0x56, 0x1, 0x1, 0x8, 0x1, 0x1, 0x56, 0x1, 0x3, 0x69, 0x6e, 0x74, 0x4, 0x2, 0x0, 0x10, 0x1, 0x3, 0x69, 0x6e, 0x74, 0x4, 0x2, 0x0, 0x2, 0x0, 0x0, 0x2, 0x1, 0xd, 0x2a, 0x61, 0x73, 0x74, 0x2e, 0x43, 0x61, 0x6c, 0x6c, 0x45, 0x78, 0x70, 0x72, 0xff, 0xd0, 0x41, 0x1, 0xa, 0x2a, 0x61, 0x73, 0x74, 0x2e, 0x49, 0x64, 0x65, 0x6e, 0x74, 0xff, 0x9a, 0x29, 0x1, 0xfe, 0x6, 0x48, 0x1, 0x5, 0x75, 0x6e, 0x65, 0x78, 0x70, 0x1, 0x1, 0xa, 0x1, 0x5, 0x75, 0x6e, 0x65, 0x78, 0x70, 0x1, 0x3, 0x69, 0x6e, 0x74, 0x4, 0x2, 0x0, 0x1, 0x1, 0x3, 0x69, 0x6e, 0x74, 0x4, 0x2, 0x0, 0x4, 0x0, 0x0, 0x1, 0xfe, 0x6, 0x52, 0x3, 0xfe, 0x6, 0x54, 0x0, 0x0, 0x0, 0xd, 0x2a, 0x61, 0x73, 0x74, 0x2e, 0x46, 0x75, 0x6e, 0x63, 0x44, 0x65, 0x63, 0x6c, 0xff, 0xba, 0xff, 0xb1, 0x1, 0x1, 0x1, 0x1, 0xfe, 0x6, 0x5a, 0x1, 0x10, 0x2f, 0x2f, 0x20, 0x65, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x0, 0x0, 0x2, 0x1, 0xfe, 0x6, 0x86, 0x1, 0x1, 0x46, 0x1, 0x1, 0xa, 0x1, 0x1, 0x46, 0x1, 0x3, 0x69, 0x6e, 0x74, 0x4, 0x2, 0x0, 0x16, 0x1, 0x3, 0x69, 0x6e, 0x74, 0x4, 0x2, 0x0, 0x6, 0x0, 0x0, 0x1, 0x1, 0xfe, 0x6, 0x7c, 0x1, 0x1, 0xfe, 0x6, 0x88, 0x1, 0x1, 0x2, 0x1, 0x1, 0xfe, 0x6, 0x8a, 0x1, 0x1, 0x74, 0x1, 0x1, 0x8, 0x1, 0x1, 0x74, 0x1, 0x3, 0x69, 0x6e, 0x74, 0x4, 0x2, 0x0, 0x1, 0x1, 0x3, 0x69, 0x6e, 0x74, 0x4, 0x2, 0x0, 0x8, 0x0, 0x0, 0x1, 0x11, 0x2a, 0x61, 0x73, 0x74, 0x2e, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x45, 0x78, 0x70, 0x72, 0xff, 0xce, 0x27, 0x1, 0xa, 0x2a, 0x61, 0x73, 0x74, 0x2e, 0x49, 0x64, 0x65, 0x6e, 0x74, 0xff, 0x9a, 0xb, 0x1, 0xfe, 0x6, 0x8e, 0x1, 0x4, 0x74, 0x69, 0x6d, 0x65, 0x0, 0x1, 0x1, 0xfe, 0x6, 0x98, 0x1, 0x4, 0x54, 0x69, 0x6d, 0x65, 0x0, 0x0, 0x0, 0x1, 0xfe, 0x6, 0xa0, 0x0, 0x0, 0x0, 0xc, 0x2a, 0x61, 0x73, 0x74, 0x2e, 0x47, 0x65, 0x6e, 0x44, 0x65, 0x63, 0x6c, 0xff, 0xb6, 0x73, 0x1, 0x1, 0x1, 0x1, 0xfe, 0x7, 0x18, 0x1, 0x7, 0x2f, 0x2f, 0x20, 0x74, 0x79, 0x70, 0x65, 0x0, 0x0, 0x1, 0xfe, 0x7, 0x28, 0x1, 0xff, 0xa8, 0x2, 0x1, 0xd, 0x2a, 0x61, 0x73, 0x74, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x53, 0x70, 0x65, 0x63, 0xff, 0xd7, 0x3, 0x1, 0x1, 0x8, 0x54, 0x79, 0x70, 0x65, 0x53, 0x70, 0x65, 0x63, 0x1, 0xff, 0xd8, 0x0, 0x1, 0x5, 0x1, 0x3, 0x44, 0x6f, 0x63, 0x1, 0xff, 0x94, 0x0, 0x1, 0x4, 0x4e, 0x61, 0x6d, 0x65, 0x1, 0xff, 0x9a, 0x0, 0x1, 0x6, 0x41, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x1, 0x4, 0x0, 0x1, 0x4, 0x54, 0x79, 0x70, 0x65, 0x1, 0x10, 0x0, 0x1, 0x7, 0x43, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x1, 0xff, 0x94, 0x0, 0x0, 0x0, 0x40, 0xff, 0xd8, 0x3c, 0x2, 0x1, 0xfe, 0x7, 0x32, 0x1, 0x1, 0x54, 0x1, 0x1, 0x6, 0x1, 0x1, 0x54, 0x1, 0x3, 0x69, 0x6e, 0x74, 0x4, 0x2, 0x0, 0x22, 0x1, 0x3, 0x69, 0x6e, 0x74, 0x4, 0x2, 0x0, 0xa, 0x0, 0x0, 0x2, 0xa, 0x2a, 0x61, 0x73, 0x74, 0x2e, 0x49, 0x64, 0x65, 0x6e, 0x74, 0xff, 0x9a, 0xa, 0x1, 0xfe, 0x7, 0x36, 0x1, 0x3, 0x69, 0x6e, 0x74, 0x0, 0x0, 0x0, 0xc, 0x2a, 0x61, 0x73, 0x74, 0x2e, 0x47, 0x65, 0x6e, 0x44, 0x65, 0x63, 0x6c, 0xff, 0xb6, 0xff, 0xa9, 0x1, 0x1, 0x1, 0x1, 0xfe, 0x7, 0x40, 0x1, 0xf, 0x2f, 0x2f, 0x20, 0x74, 0x79, 0x70, 0x65, 0x43, 0x6f, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x74, 0x0, 0x0, 0x1, 0xfe, 0x7, 0x60, 0x1, 0xff, 0x80, 0x2, 0x1, 0xe, 0x2a, 0x61, 0x73, 0x74, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x53, 0x70, 0x65, 0x63, 0xff, 0xd6, 0x73, 0x2, 0x1, 0x1, 0xfe, 0x7, 0x6c, 0x1, 0x2, 0x43, 0x54, 0x1, 0x1, 0x4, 0x1, 0x2, 0x43, 0x54, 0x1, 0x3, 0x69, 0x6e, 0x74, 0x4, 0x2, 0x0, 0x2a, 0x1, 0x3, 0x69, 0x6e, 0x74, 0x4, 0x2, 0x0, 0xc, 0x0, 0x0, 0x1, 0xa, 0x2a, 0x61, 0x73, 0x74, 0x2e, 0x49, 0x64, 0x65, 0x6e, 0x74, 0xff, 0x9a, 0x21, 0x1, 0xfe, 0x7, 0x72, 0x1, 0x1, 0x54, 0x1, 0x1, 0x6, 0x1, 0x1, 0x54, 0x1, 0x3, 0x69, 0x6e, 0x74, 0x4, 0x2, 0x0, 0x22, 0x1, 0x3, 0x69, 0x6e, 0x74, 0x4, 0x2, 0x0, 0xa, 0x0, 0x0, 0x1, 0x1, 0xd, 0x2a, 0x61, 0x73, 0x74, 0x2e, 0x42, 0x61, 0x73, 0x69, 0x63, 0x4c, 0x69, 0x74, 0xff, 0xa6, 0xa, 0x1, 0xfe, 0x7, 0x7a, 0x1, 0xa, 0x1, 0x1, 0x33, 0x0, 0x0, 0x0, 0xc, 0x2a, 0x61, 0x73, 0x74, 0x2e, 0x47, 0x65, 0x6e, 0x44, 0x65, 0x63, 0x6c, 0xff, 0xb6, 0xff, 0x8c, 0x1, 0x1, 0x1, 0x1, 0xfe, 0x7, 0x80, 0x1, 0xf, 0x2f, 0x2f, 0x20, 0x74, 0x79, 0x70, 0x65, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x0, 0x0, 0x1, 0xfe, 0x7, 0xa0, 0x1, 0xff, 0xaa, 0x2, 0x1, 0xe, 0x2a, 0x61, 0x73, 0x74, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x53, 0x70, 0x65, 0x63, 0xff, 0xd6, 0x56, 0x2, 0x1, 0x1, 0xfe, 0x7, 0xa8, 0x1, 0x2, 0x56, 0x54, 0x1, 0x1, 0x8, 0x1, 0x2, 0x56, 0x54, 0x1, 0x3, 0x69, 0x6e, 0x74, 0x4, 0x2, 0x0, 0x32, 0x1, 0x3, 0x69, 0x6e, 0x74, 0x4, 0x2, 0x0, 0xe, 0x0, 0x0, 0x1, 0xa, 0x2a, 0x61, 0x73, 0x74, 0x2e, 0x49, 0x64, 0x65, 0x6e, 0x74, 0xff, 0x9a, 0x21, 0x1, 0xfe, 0x7, 0xae, 0x1, 0x1, 0x54, 0x1, 0x1, 0x6, 0x1, 0x1, 0x54, 0x1, 0x3, 0x69, 0x6e, 0x74, 0x4, 0x2, 0x0, 0x22, 0x1, 0x3, 0x69, 0x6e, 0x74, 0x4, 0x2, 0x0, 0xa, 0x0, 0x0, 0x0, 0x0, 0xd, 0x2a, 0x61, 0x73, 0x74, 0x2e, 0x46, 0x75, 0x6e, 0x63, 0x44, 0x65, 0x63, 0x6c, 0xff, 0xba, 0xff, 0x80, 0x1, 0x1, 0x1, 0x1, 0xfe, 0x7, 0xb4, 0x1, 0xb, 0x2f, 0x2f, 0x20, 0x74, 0x79, 0x70, 0x65, 0x46, 0x75, 0x6e, 0x63, 0x0, 0x0, 0x2, 0x1, 0xfe, 0x7, 0xd6, 0x1, 0x2, 0x54, 0x46, 0x1, 0x1, 0xa, 0x1, 0x2, 0x54, 0x46, 0x1, 0x3, 0x69, 0x6e, 0x74, 0x4, 0x2, 0x0, 0x38, 0x1, 0x3, 0x69, 0x6e, 0x74, 0x4, 0x2, 0x0, 0x10, 0x0, 0x0, 0x1, 0x1, 0xfe, 0x7, 0xcc, 0x1, 0x1, 0xfe, 0x7, 0xda, 0x2, 0xfe, 0x7, 0xdc, 0x0, 0x1, 0x2, 0x1, 0x3, 0xa, 0x2a, 0x61, 0x73, 0x74, 0x2e, 0x49, 0x64, 0x65, 0x6e, 0x74, 0xff, 0x9a, 0x21, 0x1, 0xfe, 0x7, 0xe0, 0x1, 0x1, 0x54, 0x1, 0x1, 0x6, 0x1, 0x1, 0x54, 0x1, 0x3, 0x69, 0x6e, 0x74, 0x4, 0x2, 0x0, 0x22, 0x1, 0x3, 0x69, 0x6e, 0x74, 0x4, 0x2, 0x0, 0xa, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xd, 0x2a, 0x61, 0x73, 0x74, 0x2e, 0x46, 0x75, 0x6e, 0x63, 0x44, 0x65, 0x63, 0x6c, 0xff, 0xba, 0xff, 0xa4, 0x1, 0x1, 0x2, 0x1, 0xfe, 0x8, 0x8, 0x1, 0x9, 0x2f, 0x2f, 0x20, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x0, 0x1, 0xfe, 0x8, 0x1c, 0x1, 0x32, 0x2f, 0x2f, 0x20, 0x42, 0x55, 0x47, 0x28, 0x75, 0x69, 0x64, 0x29, 0x3a, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x76, 0x65, 0x72, 0x69, 0x66, 0x69, 0x65, 0x73, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x6e, 0x6f, 0x74, 0x65, 0x73, 0x20, 0x61, 0x72, 0x65, 0x20, 0x72, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x65, 0x64, 0x0, 0x0, 0x1, 0x1, 0xfe, 0x8, 0x8c, 0x1, 0x1, 0x3, 0xa, 0x2a, 0x61, 0x73, 0x74, 0x2e, 0x49, 0x64, 0x65, 0x6e, 0x74, 0xff, 0x9a, 0x21, 0x1, 0xfe, 0x8, 0x8e, 0x1, 0x1, 0x54, 0x1, 0x1, 0x6, 0x1, 0x1, 0x54, 0x1, 0x3, 0x69, 0x6e, 0x74, 0x4, 0x2, 0x0, 0x22, 0x1, 0x3, 0x69, 0x6e, 0x74, 0x4, 0x2, 0x0, 0xa, 0x0, 0x0, 0x0, 0x1, 0xfe, 0x8, 0x90, 0x0, 0x1, 0x1, 0xfe, 0x8, 0x94, 0x1, 0x1, 0x4d, 0x0, 0x1, 0x1, 0xfe, 0x8, 0x82, 0x1, 0x1, 0xfe, 0x8, 0x96, 0x2, 0xfe, 0x8, 0x98, 0x0, 0x0, 0x0, 0xc, 0x2a, 0x61, 0x73, 0x74, 0x2e, 0x47, 0x65, 0x6e, 0x44, 0x65, 0x63, 0x6c, 0xff, 0xb6, 0xff, 0xf4, 0x2, 0xfe, 0x8, 0xf0, 0x1, 0xff, 0xa8, 0x2, 0x1, 0xd, 0x2a, 0x61, 0x73, 0x74, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x53, 0x70, 0x65, 0x63, 0xff, 0xd8, 0x73, 0x2, 0x1, 0xfe, 0x8, 0xfa, 0x1, 0x2, 0x53, 0x31, 0x1, 0x1, 0x6, 0x1, 0x2, 0x53, 0x31, 0x1, 0x3, 0x69, 0x6e, 0x74, 0x4, 0x2, 0x0, 0x46, 0x1, 0x3, 0x69, 0x6e, 0x74, 0x4, 0x2, 0x0, 0x12, 0x0, 0x0, 0x2, 0xf, 0x2a, 0x61, 0x73, 0x74, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x54, 0x79, 0x70, 0x65, 0xff, 0xd9, 0x3, 0x1, 0x1, 0xa, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x54, 0x79, 0x70, 0x65, 0x1, 0xff, 0xda, 0x0, 0x1, 0x3, 0x1, 0x6, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x1, 0x4, 0x0, 0x1, 0x6, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x1, 0xff, 0xbc, 0x0, 0x1, 0xa, 0x49, 0x6e, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x1, 0x2, 0x0, 0x0, 0x0, 0x65, 0xff, 0xda, 0x61, 0x1, 0xfe, 0x9, 0x0, 0x1, 0x1, 0xfe, 0x9, 0xe, 0x1, 0x1, 0x2, 0x1, 0x1, 0xfe, 0x9, 0x14, 0x1, 0x1, 0x46, 0x1, 0x1, 0x8, 0x1, 0x1, 0x46, 0x1, 0x3, 0x69, 0x6e, 0x74, 0x4, 0x2, 0x0, 0x1, 0x1, 0x3, 0x69, 0x6e, 0x74, 0x4, 0x2, 0x0, 0x14, 0x0, 0x0, 0x1, 0xa, 0x2a, 0x61, 0x73, 0x74, 0x2e, 0x49, 0x64, 0x65, 0x6e, 0x74, 0xff, 0x9a, 0xa, 0x1, 0xfe, 0x9, 0x18, 0x1, 0x3, 0x69, 0x6e, 0x74, 0x0, 0x2, 0x1, 0x1, 0x1, 0xfe, 0x9, 0x20, 0x1, 0x8, 0x2f, 0x2f, 0x20, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x0, 0x0, 0x0, 0x1, 0xfe, 0x9, 0x32, 0x0, 0x0, 0x0, 0x0, 0xc, 0x2a, 0x61, 0x73, 0x74, 0x2e, 0x47, 0x65, 0x6e, 0x44, 0x65, 0x63, 0x6c, 0xff, 0xb6, 0xff, 0xe2, 0x2, 0xfe, 0x9, 0x38, 0x1, 0xff, 0xa8, 0x2, 0x1, 0xd, 0x2a, 0x61, 0x73, 0x74, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x53, 0x70, 0x65, 0x63, 0xff, 0xd8, 0xff, 0xc6, 0x2, 0x1, 0xfe, 0x9, 0x42, 0x1, 0x2, 0x75, 0x73, 0x1, 0x1, 0x6, 0x1, 0x2, 0x75, 0x73, 0x1, 0x3, 0x69, 0x6e, 0x74, 0x4, 0x2, 0x0, 0x50, 0x1, 0x3, 0x69, 0x6e, 0x74, 0x4, 0x2, 0x0, 0x16, 0x0, 0x0, 0x2, 0xf, 0x2a, 0x61, 0x73, 0x74, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x54, 0x79, 0x70, 0x65, 0xff, 0xda, 0xff, 0x8c, 0x1, 0xfe, 0x9, 0x48, 0x1, 0x1, 0xfe, 0x9, 0x56, 0x1, 0x2, 0x2, 0x1, 0x1, 0xfe, 0x9, 0x5c, 0x1, 0x1, 0x47, 0x1, 0x1, 0x8, 0x1, 0x1, 0x47, 0x1, 0x3, 0x69, 0x6e, 0x74, 0x4, 0x2, 0x0, 0x1, 0x1, 0x3, 0x69, 0x6e, 0x74, 0x4, 0x2, 0x0, 0x18, 0x0, 0x0, 0x1, 0xa, 0x2a, 0x61, 0x73, 0x74, 0x2e, 0x49, 0x64, 0x65, 0x6e, 0x74, 0xff, 0x9a, 0xb, 0x1, 0xfe, 0x9, 0x60, 0x1, 0x4, 0x62, 0x6f, 0x6f, 0x6c, 0x0, 0x0, 0x2, 0x1, 0x1, 0xfe, 0x9, 0x6c, 0x1, 0x1, 0x75, 0x1, 0x1, 0x8, 0x1, 0x1, 0x75, 0x1, 0x3, 0x69, 0x6e, 0x74, 0x4, 0x2, 0x0, 0x1, 0x1, 0x3, 0x69, 0x6e, 0x74, 0x4, 0x2, 0x0, 0x1a, 0x0, 0x0, 0x1, 0xa, 0x2a, 0x61, 0x73, 0x74, 0x2e, 0x49, 0x64, 0x65, 0x6e, 0x74, 0xff, 0x9a, 0xa, 0x1, 0xfe, 0x9, 0x70, 0x1, 0x3, 0x69, 0x6e, 0x74, 0x0, 0x0, 0x1, 0xfe, 0x9, 0x78, 0x0, 0x0, 0x0, 0x0, 0xc, 0x2a, 0x61, 0x73, 0x74, 0x2e, 0x47, 0x65, 0x6e, 0x44, 0x65, 0x63, 0x6c, 0xff, 0xb6, 0xfe, 0x1, 0x51, 0x2, 0xfe, 0x9, 0x7c, 0x1, 0xff, 0xa8, 0x2, 0x1, 0xd, 0x2a, 0x61, 0x73, 0x74, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x53, 0x70, 0x65, 0x63, 0xff, 0xd8, 0xfe, 0x1, 0x34, 0x2, 0x1, 0xfe, 0x9, 0x86, 0x1, 0x2, 0x53, 0x32, 0x1, 0x1, 0x6, 0x1, 0x2, 0x53, 0x32, 0x1, 0x3, 0x69, 0x6e, 0x74, 0x4, 0x2, 0x0, 0x5e, 0x1, 0x3, 0x69, 0x6e, 0x74, 0x4, 0x2, 0x0, 0x1c, 0x0, 0x0, 0x2, 0xf, 0x2a, 0x61, 0x73, 0x74, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x54, 0x79, 0x70, 0x65, 0xff, 0xda, 0xff, 0xfa, 0x1, 0xfe, 0x9, 0x8c, 0x1, 0x1, 0xfe, 0x9, 0x9a, 0x1, 0x3, 0x3, 0xa, 0x2a, 0x61, 0x73, 0x74, 0x2e, 0x49, 0x64, 0x65, 0x6e, 0x74, 0xff, 0x9a, 0x23, 0x1, 0xfe, 0x9, 0xa0, 0x1, 0x2, 0x53, 0x31, 0x1, 0x1, 0x6, 0x1, 0x2, 0x53, 0x31, 0x1, 0x3, 0x69, 0x6e, 0x74, 0x4, 0x2, 0x0, 0x46, 0x1, 0x3, 0x69, 0x6e, 0x74, 0x4, 0x2, 0x0, 0x12, 0x0, 0x0, 0x2, 0x1, 0x1, 0x1, 0xfe, 0x9, 0xa6, 0x1, 0x12, 0x2f, 0x2f, 0x20, 0x65, 0x6d, 0x62, 0x65, 0x64, 0x64, 0x65, 0x64, 0x20, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x0, 0x0, 0x0, 0x3, 0xa, 0x2a, 0x61, 0x73, 0x74, 0x2e, 0x49, 0x64, 0x65, 0x6e, 0x74, 0xff, 0x9a, 0x23, 0x1, 0xfe, 0x9, 0xce, 0x1, 0x2, 0x75, 0x73, 0x1, 0x1, 0x6, 0x1, 0x2, 0x75, 0x73, 0x1, 0x3, 0x69, 0x6e, 0x74, 0x4, 0x2, 0x0, 0x50, 0x1, 0x3, 0x69, 0x6e, 0x74, 0x4, 0x2, 0x0, 0x16, 0x0, 0x0, 0x2, 0x1, 0x1, 0x1, 0xfe, 0x9, 0xd4, 0x1, 0x1e, 0x2f, 0x2f, 0x20, 0x65, 0x6d, 0x62, 0x65, 0x64, 0x64, 0x65, 0x64, 0x2c, 0x20, 0x75, 0x6e, 0x65, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x20, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x0, 0x0, 0x0, 0x2, 0x1, 0x1, 0xfe, 0xa, 0x14, 0x1, 0x1, 0x48, 0x1, 0x1, 0x8, 0x1, 0x1, 0x48, 0x1, 0x3, 0x69, 0x6e, 0x74, 0x4, 0x2, 0x0, 0x1, 0x1, 0x3, 0x69, 0x6e, 0x74, 0x4, 0x2, 0x0, 0x1e, 0x0, 0x0, 0x1, 0xa, 0x2a, 0x61, 0x73, 0x74, 0x2e, 0x49, 0x64, 0x65, 0x6e, 0x74, 0xff, 0x9a, 0xa, 0x1, 0xfe, 0xa, 0x1a, 0x1, 0x3, 0x69, 0x6e, 0x74, 0x0, 0x0, 0x1, 0xfe, 0xa, 0x22, 0x0, 0x0, 0x0, 0x0, 0xc, 0x2a, 0x61, 0x73, 0x74, 0x2e, 0x47, 0x65, 0x6e, 0x44, 0x65, 0x63, 0x6c, 0xff, 0xb6, 0xfe, 0x1, 0xf, 0x1, 0x1, 0x1, 0x1, 0xfe, 0xa, 0x28, 0x1, 0x15, 0x2f, 0x2f, 0x20, 0x49, 0x20, 0x69, 0x73, 0x20, 0x61, 0x6e, 0x20, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2e, 0x0, 0x0, 0x1, 0xfe, 0xa, 0x54, 0x1, 0xff, 0xa8, 0x2, 0x1, 0xd, 0x2a, 0x61, 0x73, 0x74, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x53, 0x70, 0x65, 0x63, 0xff, 0xd8, 0x7b, 0x2, 0x1, 0xfe, 0xa, 0x5e, 0x1, 0x1, 0x49, 0x1, 0x1, 0x6, 0x1, 0x1, 0x49, 0x1, 0x3, 0x69, 0x6e, 0x74, 0x4, 0x2, 0x0, 0x6c, 0x1, 0x3, 0x69, 0x6e, 0x74, 0x4, 0x2, 0x0, 0x20, 0x0, 0x0, 0x2, 0x12, 0x2a, 0x61, 0x73, 0x74, 0x2e, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0xff, 0xdb, 0x3, 0x1, 0x1, 0xd, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x1, 0xff, 0xdc, 0x0, 0x1, 0x3, 0x1, 0x9, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x1, 0x4, 0x0, 0x1, 0x7, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x73, 0x1, 0xff, 0xbc, 0x0, 0x1, 0xa, 0x49, 0x6e, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x1, 0x2, 0x0, 0x0, 0x0, 0x58, 0xff, 0xdc, 0x54, 0x1, 0xfe, 0xa, 0x62, 0x1, 0x1, 0xfe, 0xa, 0x76, 0x1, 0x1, 0x2, 0x1, 0x1, 0xfe, 0xa, 0x7c, 0x1, 0x2, 0x4d, 0x31, 0x1, 0x1, 0xa, 0x1, 0x2, 0x4d, 0x31, 0x1, 0x3, 0x69, 0x6e, 0x74, 0x4, 0x2, 0x0, 0x1, 0x1, 0x3, 0x69, 0x6e, 0x74, 0x4, 0x2, 0x0, 0x22, 0x0, 0x0, 0x1, 0xd, 0x2a, 0x61, 0x73, 0x74, 0x2e, 0x46, 0x75, 0x6e, 0x63, 0x54, 0x79, 0x70, 0x65, 0xff, 0xc2, 0xb, 0x2, 0x1, 0xfe, 0xa, 0x80, 0x2, 0xfe, 0xa, 0x82, 0x0, 0x0, 0x0, 0x1, 0xfe, 0xa, 0x86, 0x0, 0x0, 0x0, 0x0, 0x1, 0x0, 0x1, 0x2, 0x3, 0x1, 0xfe, 0x5, 0xdc, 0x1, 0x12, 0x1, 0x5, 0x22, 0x66, 0x6d, 0x74, 0x22, 0x0, 0x0, 0x3, 0x1, 0xfe, 0x5, 0xea, 0x1, 0x12, 0x1, 0x6, 0x22, 0x74, 0x69, 0x6d, 0x65, 0x22, 0x0, 0x0, 0x2, 0x10, 0x1, 0x3, 0x1, 0xfe, 0x3, 0x92, 0x1, 0x36, 0x2f, 0x2f, 0x20, 0x43, 0x6f, 0x70, 0x79, 0x72, 0x69, 0x67, 0x68, 0x74, 0x20, 0x32, 0x30, 0x32, 0x30, 0x20, 0x54, 0x68, 0x65, 0x20, 0x47, 0x6f, 0x20, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x73, 0x2e, 0x20, 0x41, 0x6c, 0x6c, 0x20, 0x72, 0x69, 0x67, 0x68, 0x74, 0x73, 0x20, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x2e, 0x0, 0x1, 0xfe, 0x4, 0x0, 0x1, 0x35, 0x2f, 0x2f, 0x20, 0x55, 0x73, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x63, 0x6f, 0x64, 0x65, 0x20, 0x69, 0x73, 0x20, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x65, 0x64, 0x20, 0x62, 0x79, 0x20, 0x61, 0x20, 0x42, 0x53, 0x44, 0x2d, 0x73, 0x74, 0x79, 0x6c, 0x65, 0x0, 0x1, 0xfe, 0x4, 0x6c, 0x1, 0x31, 0x2f, 0x2f, 0x20, 0x6c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x63, 0x61, 0x6e, 0x20, 0x62, 0x65, 0x20, 0x66, 0x6f, 0x75, 0x6e, 0x64, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x4c, 0x49, 0x43, 0x45, 0x4e, 0x53, 0x45, 0x20, 0x66, 0x69, 0x6c, 0x65, 0x2e, 0x0, 0x0, 0x1, 0x2, 0x1, 0xfe, 0x4, 0xd2, 0x1, 0x39, 0x2f, 0x2f, 0x20, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x20, 0x70, 0x20, 0x69, 0x73, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x74, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x67, 0x6f, 0x64, 0x6f, 0x63, 0x2e, 0x52, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x2e, 0x20, 0x54, 0x68, 0x65, 0x72, 0x65, 0x20, 0x61, 0x72, 0x65, 0x20, 0x61, 0x20, 0x6c, 0x6f, 0x74, 0x0, 0x1, 0xfe, 0x5, 0x46, 0x1, 0x35, 0x2f, 0x2f, 0x20, 0x6f, 0x66, 0x20, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x20, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x73, 0x20, 0x74, 0x6f, 0x20, 0x73, 0x61, 0x79, 0x2c, 0x20, 0x62, 0x75, 0x74, 0x20, 0x74, 0x68, 0x61, 0x74, 0x27, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x67, 0x69, 0x73, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x69, 0x74, 0x2e, 0x0, 0x0, 0x1, 0x1, 0x1, 0xfe, 0x5, 0xfe, 0x1, 0x8, 0x2f, 0x2f, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x0, 0x0, 0x1, 0x1, 0x1, 0xfe, 0x6, 0x2a, 0x1, 0x6, 0x2f, 0x2f, 0x20, 0x76, 0x61, 0x72, 0x0, 0x0, 0x1, 0x1, 0x1, 0xfe, 0x6, 0x5a, 0x1, 0x10, 0x2f, 0x2f, 0x20, 0x65, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x0, 0x0, 0x1, 0x1, 0x1, 0xfe, 0x6, 0xce, 0x1, 0x12, 0x2f, 0x2f, 0x20, 0x75, 0x6e, 0x65, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x0, 0x0, 0x1, 0x1, 0x1, 0xfe, 0x7, 0x18, 0x1, 0x7, 0x2f, 0x2f, 0x20, 0x74, 0x79, 0x70, 0x65, 0x0, 0x0, 0x1, 0x1, 0x1, 0xfe, 0x7, 0x40, 0x1, 0xf, 0x2f, 0x2f, 0x20, 0x74, 0x79, 0x70, 0x65, 0x43, 0x6f, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x74, 0x0, 0x0, 0x1, 0x1, 0x1, 0xfe, 0x7, 0x80, 0x1, 0xf, 0x2f, 0x2f, 0x20, 0x74, 0x79, 0x70, 0x65, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x0, 0x0, 0x1, 0x1, 0x1, 0xfe, 0x7, 0xb4, 0x1, 0xb, 0x2f, 0x2f, 0x20, 0x74, 0x79, 0x70, 0x65, 0x46, 0x75, 0x6e, 0x63, 0x0, 0x0, 0x1, 0x2, 0x1, 0xfe, 0x8, 0x8, 0x1, 0x9, 0x2f, 0x2f, 0x20, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x0, 0x1, 0xfe, 0x8, 0x1c, 0x1, 0x32, 0x2f, 0x2f, 0x20, 0x42, 0x55, 0x47, 0x28, 0x75, 0x69, 0x64, 0x29, 0x3a, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x76, 0x65, 0x72, 0x69, 0x66, 0x69, 0x65, 0x73, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x6e, 0x6f, 0x74, 0x65, 0x73, 0x20, 0x61, 0x72, 0x65, 0x20, 0x72, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x65, 0x64, 0x0, 0x0, 0x1, 0x1, 0x1, 0xfe, 0x8, 0xa4, 0x1, 0x14, 0x2f, 0x2f, 0x20, 0x75, 0x6e, 0x65, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x20, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x0, 0x0, 0x1, 0x1, 0x1, 0xfe, 0x9, 0x20, 0x1, 0x8, 0x2f, 0x2f, 0x20, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x0, 0x0, 0x1, 0x1, 0x1, 0xfe, 0x9, 0xa6, 0x1, 0x12, 0x2f, 0x2f, 0x20, 0x65, 0x6d, 0x62, 0x65, 0x64, 0x64, 0x65, 0x64, 0x20, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x0, 0x0, 0x1, 0x1, 0x1, 0xfe, 0x9, 0xd4, 0x1, 0x1e, 0x2f, 0x2f, 0x20, 0x65, 0x6d, 0x62, 0x65, 0x64, 0x64, 0x65, 0x64, 0x2c, 0x20, 0x75, 0x6e, 0x65, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x20, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x0, 0x0, 0x1, 0x1, 0x1, 0xfe, 0xa, 0x28, 0x1, 0x15, 0x2f, 0x2f, 0x20, 0x49, 0x20, 0x69, 0x73, 0x20, 0x61, 0x6e, 0x20, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2e, 0x0, 0x0, 0x0, 0x1, 0x6, 0x1c, 0x26, 0x4c, 0x56, 0x5a, 0x68, 0x1, 0xc, 0x1, 0x1, 0x43, 0x0, 0x1, 0x2, 0x43, 0x54, 0x1, 0xc, 0x0, 0x1, 0x1, 0x46, 0x1, 0x6, 0x0, 0x1, 0x1, 0x49, 0x1, 0x20, 0x0, 0x1, 0x2, 0x53, 0x31, 0x1, 0x12, 0x0, 0x1, 0x2, 0x53, 0x32, 0x1, 0x1c, 0x0, 0x1, 0x1, 0x54, 0x1, 0xa, 0x0, 0x1, 0x2, 0x54, 0x46, 0x1, 0x10, 0x0, 0x1, 0x1, 0x56, 0x1, 0x2, 0x0, 0x1, 0x2, 0x56, 0x54, 0x1, 0xe, 0x0, 0x1, 0x5, 0x75, 0x6e, 0x65, 0x78, 0x70, 0x1, 0x4, 0x0, 0x1, 0x2, 0x75, 0x73, 0x1, 0x16, 0x0, 0x0, 0x0}
+ Documentation = &internal.Documentation{
+ Synopsis: Synopsis,
+ GOOS: GOOS,
+ GOARCH: GOARCH,
+ HTML: DocumentationHTML,
+ Source: DocumentationSource,
+ }
+)
diff --git a/internal/testing/sample/gen_documentation.go b/internal/testing/sample/gen_documentation.go
new file mode 100644
index 00000000..da5477ec
--- /dev/null
+++ b/internal/testing/sample/gen_documentation.go
@@ -0,0 +1,85 @@
+// Copyright 2020 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
+
+// Run this to generate documentation.go.
+
+package main
+
+import (
+ "context"
+ "fmt"
+ "go/parser"
+ "go/token"
+ "log"
+ "os"
+
+ "golang.org/x/pkgsite/internal/godoc"
+ "golang.org/x/pkgsite/internal/source"
+ "golang.org/x/pkgsite/internal/testing/sample"
+)
+
+func main() {
+ ctx := context.Background()
+ fset := token.NewFileSet()
+ pkgs, err := parser.ParseDir(fset, "../../godoc/testdata/p", nil, parser.ParseComments)
+ if err != nil {
+ log.Fatal(err)
+ }
+ p := godoc.NewPackage(fset, sample.GOOS, sample.GOARCH, nil)
+ for _, pkg := range pkgs {
+ for _, f := range pkg.Files {
+ p.AddFile(f, true)
+ }
+ }
+ src, err := p.Encode(ctx)
+ if err != nil {
+ log.Fatal(err)
+ }
+ si := source.NewGitHubInfo(sample.ModulePath, "", "abcde")
+ mi := &godoc.ModuleInfo{
+ ModulePath: sample.ModulePath,
+ ResolvedVersion: sample.VersionString,
+ ModulePackages: nil,
+ }
+ _, _, html, err := p.Render(ctx, "p", si, mi, "", "")
+ if err != nil {
+ log.Fatal(err)
+ }
+
+ f, err := os.Create("documentation.gen.go")
+ if err != nil {
+ log.Fatal(err)
+ }
+ fmt.Fprintf(f, `
+// Copyright 2020 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 sample
+
+import (
+ "github.com/google/safehtml/testconversions"
+ "golang.org/x/pkgsite/internal"
+)
+
+
+
+var (
+ DocumentationHTML = testconversions.MakeHTMLForTest(%s)
+ DocumentationSource = %#v
+ Documentation = &internal.Documentation{
+ Synopsis: Synopsis,
+ GOOS: GOOS,
+ GOARCH: GOARCH,
+ HTML: DocumentationHTML,
+ Source: DocumentationSource,
+ }
+)
+`, "`"+html.String()+"`", src)
+ if err := f.Close(); err != nil {
+ log.Fatal(err)
+ }
+}
diff --git a/internal/testing/sample/sample.go b/internal/testing/sample/sample.go
index c35cde00..ca88902b 100644
--- a/internal/testing/sample/sample.go
+++ b/internal/testing/sample/sample.go
@@ -17,13 +17,14 @@ import (
"github.com/google/go-cmp/cmp"
"github.com/google/go-cmp/cmp/cmpopts"
"github.com/google/licensecheck"
- "github.com/google/safehtml/template"
"golang.org/x/pkgsite/internal"
"golang.org/x/pkgsite/internal/licenses"
"golang.org/x/pkgsite/internal/source"
"golang.org/x/pkgsite/internal/stdlib"
)
+//go:generate go run gen_documentation.go
+
// These sample values can be used to construct test cases.
var (
ModulePath = "github.com/valid/module_name"
@@ -50,23 +51,16 @@ var (
},
Contents: []byte(`unknown`),
}
- DocumentationHTML = template.MustParseAndExecuteToHTML("This is the documentation HTML")
- PackageName = "foo"
- Suffix = "foo"
- PackagePath = path.Join(ModulePath, Suffix)
- V1Path = PackagePath
- Imports = []string{"path/to/bar", "fmt"}
- Synopsis = "This is a package synopsis"
- ReadmeFilePath = "README.md"
- ReadmeContents = "readme"
- GOOS = "linux"
- GOARCH = "amd64"
- Documentation = &internal.Documentation{
- Synopsis: Synopsis,
- HTML: DocumentationHTML,
- GOOS: GOOS,
- GOARCH: GOARCH,
- }
+ PackageName = "foo"
+ Suffix = "foo"
+ PackagePath = path.Join(ModulePath, Suffix)
+ V1Path = PackagePath
+ Imports = []string{"path/to/bar", "fmt"}
+ Synopsis = "This is a package synopsis"
+ ReadmeFilePath = "README.md"
+ ReadmeContents = "readme"
+ GOOS = "linux"
+ GOARCH = "amd64"
)
// LicenseCmpOpts are options to use when comparing licenses with the cmp package.
@@ -146,6 +140,7 @@ func UnitForPackage(path, modulePath, version, name string, isRedistributable bo
Documentation: &internal.Documentation{
Synopsis: Synopsis,
HTML: DocumentationHTML,
+ Source: DocumentationSource,
GOOS: GOOS,
GOARCH: GOARCH,
},