From 8794e0333ef42dacbba80287b6814e29bc3ccac8 Mon Sep 17 00:00:00 2001 From: Jeff Swensen Date: Tue, 21 Feb 2023 22:04:02 -0500 Subject: [PATCH 1/3] add prometheus with default metrics --- cmds/houndd/main.go | 7 + go.mod | 1 + go.sum | 478 ++++++++++++++++++++++++++++++++++++++++++++ ui/bindata.go | 52 ++--- 4 files changed, 512 insertions(+), 26 deletions(-) diff --git a/cmds/houndd/main.go b/cmds/houndd/main.go index e7bc2784..0ffcd169 100644 --- a/cmds/houndd/main.go +++ b/cmds/houndd/main.go @@ -20,6 +20,7 @@ import ( "github.com/hound-search/hound/searcher" "github.com/hound-search/hound/ui" "github.com/hound-search/hound/web" + "github.com/prometheus/client_golang/prometheus/promhttp" ) const gracefulShutdownSignal = syscall.SIGTERM @@ -129,6 +130,12 @@ func main() { info_log = log.New(os.Stdout, "", log.LstdFlags) error_log = log.New(os.Stderr, "", log.LstdFlags) + // prometheus metrics endpoint + http.Handle("/metrics", promhttp.Handler()) + go func() { + http.ListenAndServe(":2112", nil) + }() + flagConf := flag.String("conf", "config.json", "") flagAddr := flag.String("addr", ":6080", "") flagDev := flag.Bool("dev", false, "") diff --git a/go.mod b/go.mod index 275c0bcc..2165ccf4 100644 --- a/go.mod +++ b/go.mod @@ -5,4 +5,5 @@ go 1.13 require ( github.com/blang/semver v3.5.1+incompatible github.com/go-bindata/go-bindata v3.1.2+incompatible // indirect + github.com/prometheus/client_golang v1.14.0 // indirect ) diff --git a/go.sum b/go.sum index 44ac122f..bae33d42 100644 --- a/go.sum +++ b/go.sum @@ -1,6 +1,484 @@ +cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= +cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= +cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU= +cloud.google.com/go v0.44.1/go.mod h1:iSa0KzasP4Uvy3f1mN/7PiObzGgflwredwwASm/v6AU= +cloud.google.com/go v0.44.2/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY= +cloud.google.com/go v0.45.1/go.mod h1:RpBamKRgapWJb87xiFSdk4g1CME7QZg3uwTez+TSTjc= +cloud.google.com/go v0.46.3/go.mod h1:a6bKKbmY7er1mI7TEI4lsAkts/mkhTSZK8w33B4RAg0= +cloud.google.com/go v0.50.0/go.mod h1:r9sluTvynVuxRIOHXQEHMFffphuXHOMZMycpNR5e6To= +cloud.google.com/go v0.52.0/go.mod h1:pXajvRH/6o3+F9jDHZWQ5PbGhn+o8w9qiu/CffaVdO4= +cloud.google.com/go v0.53.0/go.mod h1:fp/UouUEsRkN6ryDKNW/Upv/JBKnv6WDthjR6+vze6M= +cloud.google.com/go v0.54.0/go.mod h1:1rq2OEkV3YMf6n/9ZvGWI3GWw0VoqH/1x2nd8Is/bPc= +cloud.google.com/go v0.56.0/go.mod h1:jr7tqZxxKOVYizybht9+26Z/gUq7tiRzu+ACVAMbKVk= +cloud.google.com/go v0.57.0/go.mod h1:oXiQ6Rzq3RAkkY7N6t3TcE6jE+CIBBbA36lwQ1JyzZs= +cloud.google.com/go v0.62.0/go.mod h1:jmCYTdRCQuc1PHIIJ/maLInMho30T/Y0M4hTdTShOYc= +cloud.google.com/go v0.65.0/go.mod h1:O5N8zS7uWy9vkA9vayVHs65eM1ubvY4h553ofrNHObY= +cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o= +cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE= +cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc= +cloud.google.com/go/bigquery v1.5.0/go.mod h1:snEHRnqQbz117VIFhE8bmtwIDY80NLUZUMb4Nv6dBIg= +cloud.google.com/go/bigquery v1.7.0/go.mod h1://okPTzCYNXSlb24MZs83e2Do+h+VXtc4gLoIoXIAPc= +cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM77hZzJN/fQ= +cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE= +cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk= +cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I= +cloud.google.com/go/pubsub v1.1.0/go.mod h1:EwwdRX2sKPjnvnqCa270oGRyludottCI76h+R3AArQw= +cloud.google.com/go/pubsub v1.2.0/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIAii9o8iA= +cloud.google.com/go/pubsub v1.3.1/go.mod h1:i+ucay31+CNRpDW4Lu78I4xXG+O1r/MAHgjpRVR+TSU= +cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw= +cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0ZeosJ0Rtdos= +cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk= +cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs= +cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0= +dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= +github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= +github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= +github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= +github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= +github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= +github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= +github.com/alecthomas/units v0.0.0-20190924025748-f65c72e2690d/go.mod h1:rBZYJk541a8SKzHPHnH3zbiI+7dagKZ0cgpgrD7Fyho= +github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= +github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= +github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= +github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= github.com/blang/semver v1.1.0 h1:ol1rO7QQB5uy7umSNV7VAmLugfLRD+17sYJujRNYPhg= github.com/blang/semver v3.5.1+incompatible h1:cQNTCjp13qL8KC3Nbxr/y2Bqb63oX6wdnnjpJbkM4JQ= github.com/blang/semver v3.5.1+incompatible/go.mod h1:kRBLl5iJ+tD4TcOOxsy/0fnwebNt5EWlYSAyrTnjyyk= +github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= +github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= +github.com/cespare/xxhash/v2 v2.1.2 h1:YRXhKfTDauu4ajMg1TPgFO5jnlC2HCbmLXMcTG5cbYE= +github.com/cespare/xxhash/v2 v2.1.2/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= +github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= +github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= +github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= +github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= +github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= +github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= +github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= +github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= +github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/go-bindata/go-bindata v1.0.0 h1:DZ34txDXWn1DyWa+vQf7V9ANc2ILTtrEjtlsdJRF26M= github.com/go-bindata/go-bindata v3.1.2+incompatible h1:5vjJMVhowQdPzjE1LdxyFF7YFTXg5IgGVW4gBr5IbvE= github.com/go-bindata/go-bindata v3.1.2+incompatible/go.mod h1:xK8Dsgwmeed+BBsSy2XTopBn/8uK2HWuGSnA11C3Joo= +github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= +github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= +github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= +github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= +github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= +github.com/go-kit/log v0.1.0/go.mod h1:zbhenjAZHb184qTLMA9ZjW7ThYL0H2mk7Q6pNt4vbaY= +github.com/go-kit/log v0.2.0/go.mod h1:NwTd00d/i8cPZ3xOwwiv2PO5MOcx78fFErGNcVmBjv0= +github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= +github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= +github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A= +github.com/go-logfmt/logfmt v0.5.1/go.mod h1:WYhtIu8zTZfxdn5+rREduYbwxfcBr/Vr6KEVveWlfTs= +github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= +github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= +github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= +github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= +github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= +github.com/golang/mock v1.3.1/go.mod h1:sBzyDLLjw3U8JLTeZvSv8jJB+tU5PVekmnlKIyFUx0Y= +github.com/golang/mock v1.4.0/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= +github.com/golang/mock v1.4.1/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= +github.com/golang/mock v1.4.3/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= +github.com/golang/mock v1.4.4/go.mod h1:l3mdAwkq5BuhzHwde/uurv3sEJeZMXNpwsxVWU71h+4= +github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= +github.com/golang/protobuf v1.3.4/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= +github.com/golang/protobuf v1.3.5/go.mod h1:6O5/vntMXwX2lRkT1hjjk0nAC1IDOTvTlVgjlRvqsdk= +github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= +github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA= +github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs= +github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w= +github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= +github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8= +github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= +github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= +github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= +github.com/golang/protobuf v1.5.2 h1:ROPKBNFfQgOUMifHyP+KYbvpjbdoFNs+aK7DXlji0Tw= +github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= +github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= +github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= +github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= +github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= +github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= +github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.4.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.8/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= +github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= +github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= +github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= +github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= +github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= +github.com/google/pprof v0.0.0-20191218002539-d4f498aebedc/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20200212024743-f11f1df84d12/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20200229191704-1ebb73c60ed3/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20200430221834-fc25d7d30c6d/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20200708004538-1a94d8640e99/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= +github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= +github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= +github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= +github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= +github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= +github.com/jpillora/backoff v1.0.0/go.mod h1:J/6gKK9jxlEcS3zixgDgUAsiuZ7yrSoa/FX5e0EB2j4= +github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= +github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= +github.com/json-iterator/go v1.1.11/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= +github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= +github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= +github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk= +github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= +github.com/julienschmidt/httprouter v1.3.0/go.mod h1:JR6WtHb+2LUe8TCKY3cZOxFyyO8IZAc4RVcycCCAKdM= +github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= +github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= +github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= +github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= +github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= +github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= +github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= +github.com/matttproud/golang_protobuf_extensions v1.0.1 h1:4hp9jkHxhMHkqkrB3Ix0jegS5sx/RkqARlsWZ6pIwiU= +github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= +github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= +github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= +github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= +github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= +github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= +github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= +github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= +github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= +github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo= +github.com/prometheus/client_golang v1.7.1/go.mod h1:PY5Wy2awLA44sXw4AOSfFBetzPP4j5+D6mVACh+pe2M= +github.com/prometheus/client_golang v1.11.0/go.mod h1:Z6t4BnS23TR94PD6BsDNk8yVqroYurpAkEiz0P2BEV0= +github.com/prometheus/client_golang v1.12.1/go.mod h1:3Z9XVyYiZYEO+YQWt3RD2R3jrbd179Rt297l4aS6nDY= +github.com/prometheus/client_golang v1.14.0 h1:nJdhIvne2eSX/XRAFV9PcvFFRbrjbcTUj0VP62TMhnw= +github.com/prometheus/client_golang v1.14.0/go.mod h1:8vpkKitgIVNcqrRBWh1C4TIUQgYNtG/XQE4E/Zae36Y= +github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= +github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/prometheus/client_model v0.3.0 h1:UBgGFHqYdG/TPFD1B1ogZywDqEkwp3fBMvqdiQ7Xew4= +github.com/prometheus/client_model v0.3.0/go.mod h1:LDGWKZIo7rky3hgvBe+caln+Dr3dPggB5dvjtD7w9+w= +github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= +github.com/prometheus/common v0.10.0/go.mod h1:Tlit/dnDKsSWFlCLTWaA1cyBgKHSMdTB80sz/V91rCo= +github.com/prometheus/common v0.26.0/go.mod h1:M7rCNAaPfAosfx8veZJCuw84e35h3Cfd9VFqTh1DIvc= +github.com/prometheus/common v0.32.1/go.mod h1:vu+V0TpY+O6vW9J44gczi3Ap/oXXR10b+M/gUGO4Hls= +github.com/prometheus/common v0.37.0 h1:ccBbHCgIiT9uSoFY0vX8H3zsNR5eLt17/RQLUvn8pXE= +github.com/prometheus/common v0.37.0/go.mod h1:phzohg0JFMnBEFGxTDbfu3QyL5GI8gTQJFhYO5B3mfA= +github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= +github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= +github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= +github.com/prometheus/procfs v0.6.0/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= +github.com/prometheus/procfs v0.7.3/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= +github.com/prometheus/procfs v0.8.0 h1:ODq8ZFEaYeCaZOJlZZdJA2AbQR98dSHSM1KW/You5mo= +github.com/prometheus/procfs v0.8.0/go.mod h1:z7EfXMXOkbkqb9IINtpCn86r/to3BnA0uaxHdg830/4= +github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= +github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= +github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= +github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88= +github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= +github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= +github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= +github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= +go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= +go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= +go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= +go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= +golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= +golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= +golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= +golang.org/x/exp v0.0.0-20190829153037-c13cbed26979/go.mod h1:86+5VVa7VpoJ4kLfm080zCjGlMRFzhUhsZKEZO7MGek= +golang.org/x/exp v0.0.0-20191030013958-a1ab85dbe136/go.mod h1:JXzH8nQsPlswgeRAPE3MuO9GYsAcnJvJ4vnMwN/5qkY= +golang.org/x/exp v0.0.0-20191129062945-2f5052295587/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= +golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= +golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= +golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM= +golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU= +golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= +golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= +golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= +golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= +golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= +golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20190409202823-959b441ac422/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20190909230951-414d861bb4ac/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f/go.mod h1:5qLYkcX4OjUUV8bRuDixDT3tpyyb+LUpUlRWLxfhWrs= +golang.org/x/lint v0.0.0-20200130185559-910be7a94367/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= +golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= +golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE= +golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o= +golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc= +golang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY= +golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= +golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= +golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190501004415-9ce7a6920f09/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= +golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20190628185345-da137c7871d7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200222125558-5a598a2470a0/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200301022130-244492dfa37a/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200501053045-e0ff5e5a1de5/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200506145744-7e3656a0809f/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200513185701-a91f0712d120/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200520182314-0ba52f642ac2/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= +golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= +golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= +golang.org/x/net v0.0.0-20210525063256-abc453219eb5/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= +golang.org/x/net v0.0.0-20220225172249-27dd8689420f/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= +golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= +golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/oauth2 v0.0.0-20210514164344-f6687ab2804c/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20220223155221-ee480838109b/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc= +golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20220601150217-0de741cfad7f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200106162015-b016eb3dc98e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200113162924-86b910548bc1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200202164722-d101bd2416d5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200212091648-12a6c2dcc1e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200331124033-c3d80250170d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200501052902-10377860bb8e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200511232937-7e40ca221e25/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200515095857-1151b9dac4a9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200523222454-059865788121/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200615200032-f1bc736245b1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200625212154-ddb9806d33ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210603081109-ebe580a85c40/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220114195835-da31bd327af9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a h1:dGzPydgVsqGcTRVwiLJ1jVbufYwmzD3LfVPLKsKg+0k= +golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= +golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= +golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= +golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= +golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= +golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= +golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= +golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= +golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= +golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= +golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= +golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191113191852-77e3bb0ad9e7/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191115202509-3a792d9c32b2/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191125144606-a911d9008d1f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191130070609-6e064ea0cf2d/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191216173652-a0e659d51361/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20191227053925-7b8e75db28f4/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200117161641-43d50277825c/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200122220014-bf1340f18c4a/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200204074204-1cc6d1ef6c74/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200207183749-b753a1ba74fa/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200212150539-ea181f53ac56/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200224181240-023911ca70b2/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200227222343-706bc42d1f0d/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200304193943-95d2e580d8eb/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= +golang.org/x/tools v0.0.0-20200312045724-11d5b4c81c7d/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= +golang.org/x/tools v0.0.0-20200331025713-a30bf2db82d4/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= +golang.org/x/tools v0.0.0-20200501065659-ab2804fb9c9d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200512131952-2bc93b1c0c88/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200515010526-7d3b6ebf133d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200618134242-20370b0cb4b2/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200729194436-6467de6f59a7/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= +golang.org/x/tools v0.0.0-20200804011535-6c149bb5ef0d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= +golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= +golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= +google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M= +google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= +google.golang.org/api v0.9.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= +google.golang.org/api v0.13.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= +google.golang.org/api v0.14.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= +google.golang.org/api v0.15.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= +google.golang.org/api v0.17.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.18.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.19.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.20.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.22.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.24.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= +google.golang.org/api v0.28.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= +google.golang.org/api v0.29.0/go.mod h1:Lcubydp8VUV7KeIHD9z2Bys/sm/vGKnG1UHuDBSrHWM= +google.golang.org/api v0.30.0/go.mod h1:QGmEvQ87FHZNiUVJkT14jQNYJ4ZJjdRF23ZXz5138Fc= +google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= +google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= +google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= +google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0= +google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= +google.golang.org/appengine v1.6.6/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= +google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= +google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190502173448-54afdca5d873/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= +google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= +google.golang.org/genproto v0.0.0-20190911173649-1774047e7e51/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8= +google.golang.org/genproto v0.0.0-20191108220845-16a3f7862a1a/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20191115194625-c23dd37a84c9/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20191216164720-4f79533eabd1/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20191230161307-f3c370f40bfb/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20200115191322-ca5a22157cba/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20200122232147-0452cf42e150/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20200204135345-fa8e72b47b90/go.mod h1:GmwEX6Z4W5gMy59cAlVYjN9JhxgbQH6Gn+gFDQe2lzA= +google.golang.org/genproto v0.0.0-20200212174721-66ed5ce911ce/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200224152610-e50cd9704f63/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200228133532-8c2c7df3a383/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200305110556-506484158171/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200312145019-da6875a35672/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200331122359-1ee6d9798940/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200430143042-b979b6f78d84/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200511104702-f5ebc3bea380/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200515170657-fc4c6c6a6587/go.mod h1:YsZOwe1myG/8QRHRsmBRE1LrgQY60beZKjly0O1fX9U= +google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= +google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA= +google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= +google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= +google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= +google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= +google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= +google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= +google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= +google.golang.org/grpc v1.27.1/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= +google.golang.org/grpc v1.28.0/go.mod h1:rpkK4SK4GF4Ach/+MFLZUBavHOvF2JJB5uozKKal+60= +google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk= +google.golang.org/grpc v1.30.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= +google.golang.org/grpc v1.31.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= +google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= +google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= +google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= +google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE= +google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo= +google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= +google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= +google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= +google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4= +google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= +google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= +google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= +google.golang.org/protobuf v1.28.1 h1:d0NfwRgPtno5B1Wa6L2DAG+KivqkdutMf1UhdNx175w= +google.golang.org/protobuf v1.28.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= +gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= +gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.5/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= +honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= +honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= +honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= +rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= +rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= +rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= diff --git a/ui/bindata.go b/ui/bindata.go index ccf15ce5..405babb9 100644 --- a/ui/bindata.go +++ b/ui/bindata.go @@ -116,7 +116,7 @@ func cssHoundCss() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "css/hound.css", size: 6848, mode: os.FileMode(420), modTime: time.Unix(1676349849, 0)} + info := bindataFileInfo{name: "css/hound.css", size: 6848, mode: os.FileMode(420), modTime: time.Unix(1677033947, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -136,7 +136,7 @@ func cssOcticonsLicenseTxt() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "css/octicons/LICENSE.txt", size: 293, mode: os.FileMode(420), modTime: time.Unix(1676349849, 0)} + info := bindataFileInfo{name: "css/octicons/LICENSE.txt", size: 293, mode: os.FileMode(420), modTime: time.Unix(1677033947, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -156,7 +156,7 @@ func cssOcticonsReadmeMd() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "css/octicons/README.md", size: 200, mode: os.FileMode(420), modTime: time.Unix(1676349849, 0)} + info := bindataFileInfo{name: "css/octicons/README.md", size: 200, mode: os.FileMode(420), modTime: time.Unix(1677033947, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -176,7 +176,7 @@ func cssOcticonsOcticonsLocalTtf() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "css/octicons/octicons-local.ttf", size: 52764, mode: os.FileMode(420), modTime: time.Unix(1676349849, 0)} + info := bindataFileInfo{name: "css/octicons/octicons-local.ttf", size: 52764, mode: os.FileMode(420), modTime: time.Unix(1677033947, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -196,7 +196,7 @@ func cssOcticonsOcticonsCss() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "css/octicons/octicons.css", size: 11740, mode: os.FileMode(420), modTime: time.Unix(1676349849, 0)} + info := bindataFileInfo{name: "css/octicons/octicons.css", size: 11740, mode: os.FileMode(420), modTime: time.Unix(1677033947, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -216,7 +216,7 @@ func cssOcticonsOcticonsEot() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "css/octicons/octicons.eot", size: 31440, mode: os.FileMode(420), modTime: time.Unix(1676349849, 0)} + info := bindataFileInfo{name: "css/octicons/octicons.eot", size: 31440, mode: os.FileMode(420), modTime: time.Unix(1677033947, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -236,7 +236,7 @@ func cssOcticonsOcticonsLess() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "css/octicons/octicons.less", size: 12018, mode: os.FileMode(420), modTime: time.Unix(1676349849, 0)} + info := bindataFileInfo{name: "css/octicons/octicons.less", size: 12018, mode: os.FileMode(420), modTime: time.Unix(1677033947, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -256,7 +256,7 @@ func cssOcticonsOcticonsSvg() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "css/octicons/octicons.svg", size: 86997, mode: os.FileMode(420), modTime: time.Unix(1676349849, 0)} + info := bindataFileInfo{name: "css/octicons/octicons.svg", size: 86997, mode: os.FileMode(420), modTime: time.Unix(1677033947, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -276,7 +276,7 @@ func cssOcticonsOcticonsTtf() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "css/octicons/octicons.ttf", size: 31272, mode: os.FileMode(420), modTime: time.Unix(1676349849, 0)} + info := bindataFileInfo{name: "css/octicons/octicons.ttf", size: 31272, mode: os.FileMode(420), modTime: time.Unix(1677033947, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -296,7 +296,7 @@ func cssOcticonsOcticonsWoff() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "css/octicons/octicons.woff", size: 17492, mode: os.FileMode(420), modTime: time.Unix(1676349849, 0)} + info := bindataFileInfo{name: "css/octicons/octicons.woff", size: 17492, mode: os.FileMode(420), modTime: time.Unix(1677033947, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -316,7 +316,7 @@ func cssOcticonsSprocketsOcticonsScss() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "css/octicons/sprockets-octicons.scss", size: 11758, mode: os.FileMode(420), modTime: time.Unix(1676349849, 0)} + info := bindataFileInfo{name: "css/octicons/sprockets-octicons.scss", size: 11758, mode: os.FileMode(420), modTime: time.Unix(1677033947, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -336,7 +336,7 @@ func excluded_filesTplHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "excluded_files.tpl.html", size: 459, mode: os.FileMode(420), modTime: time.Unix(1676349849, 0)} + info := bindataFileInfo{name: "excluded_files.tpl.html", size: 459, mode: os.FileMode(420), modTime: time.Unix(1677033947, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -356,7 +356,7 @@ func faviconIco() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "favicon.ico", size: 1150, mode: os.FileMode(420), modTime: time.Unix(1676349849, 0)} + info := bindataFileInfo{name: "favicon.ico", size: 1150, mode: os.FileMode(420), modTime: time.Unix(1677033947, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -376,7 +376,7 @@ func imagesBusyGif() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "images/busy.gif", size: 4178, mode: os.FileMode(420), modTime: time.Unix(1676349849, 0)} + info := bindataFileInfo{name: "images/busy.gif", size: 4178, mode: os.FileMode(420), modTime: time.Unix(1677033947, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -396,7 +396,7 @@ func indexTplHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "index.tpl.html", size: 821, mode: os.FileMode(420), modTime: time.Unix(1676349849, 0)} + info := bindataFileInfo{name: "index.tpl.html", size: 821, mode: os.FileMode(420), modTime: time.Unix(1677033947, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -416,7 +416,7 @@ func jsJsxtransformer0122Js() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "js/JSXTransformer-0.12.2.js", size: 471852, mode: os.FileMode(420), modTime: time.Unix(1676349849, 0)} + info := bindataFileInfo{name: "js/JSXTransformer-0.12.2.js", size: 471852, mode: os.FileMode(420), modTime: time.Unix(1677033947, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -436,7 +436,7 @@ func jsCommonJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "js/common.js", size: 2378, mode: os.FileMode(420), modTime: time.Unix(1676349849, 0)} + info := bindataFileInfo{name: "js/common.js", size: 2378, mode: os.FileMode(420), modTime: time.Unix(1677033947, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -456,7 +456,7 @@ func jsCommonTestJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "js/common.test.js", size: 5902, mode: os.FileMode(420), modTime: time.Unix(1676349849, 0)} + info := bindataFileInfo{name: "js/common.test.js", size: 5902, mode: os.FileMode(420), modTime: time.Unix(1677033947, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -476,12 +476,12 @@ func jsExcluded_filesJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "js/excluded_files.js", size: 3199, mode: os.FileMode(420), modTime: time.Unix(1676349850, 0)} + info := bindataFileInfo{name: "js/excluded_files.js", size: 3199, mode: os.FileMode(420), modTime: time.Unix(1677033948, 0)} a := &asset{bytes: bytes, info: info} return a, nil } -var _jsHoundJs = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xcc\x7c\xff\x92\xdb\x36\x92\xff\xab\x70\xf0\x75\xa9\x80\x08\xe2\x68\x92\xef\xed\xed\x51\x66\x66\x1d\x7b\x92\xf5\x6d\x1c\xef\x8d\x9d\xdd\x3f\x64\x6d\x0a\x23\xb6\x24\xc4\x14\x40\x03\xd0\x8c\xe7\x24\x56\xed\x83\xdc\xbd\xdc\x3e\xc9\x15\x7e\x90\x22\x29\x6a\x46\x93\x4b\xb6\xee\x9f\xb1\x08\xe2\x47\x77\xa3\xfb\x83\xee\x46\xd3\x18\x93\xf4\xeb\x2d\xda\x68\x88\xb4\x51\x7c\x6e\xd0\x64\xb1\x11\x73\xc3\xa5\x88\x00\x03\x35\x64\xbb\x90\x0a\xdf\x32\x15\xa9\x88\x8b\xc8\x10\x48\x21\x56\x50\xe4\x6c\x0e\x18\x6d\xd1\x50\x0d\x51\x89\xa8\x99\xaa\x19\x99\x28\x30\x1b\x25\x22\x28\xeb\x39\x0c\x36\x54\x51\x4d\x19\xd9\xda\x39\x44\x6a\xe2\x8d\xca\xeb\x09\xce\x3f\xc4\x4b\x6e\x9e\x9d\x53\x84\x08\xe5\xa9\x99\xa2\x8d\xca\x47\x05\x33\x06\x94\x40\x33\x2a\x53\x84\x68\x6e\xff\xcc\xed\x9f\x8d\xfd\xb3\x4a\xb1\x4a\xd5\x6e\x87\x10\x89\xf5\xe6\xc6\x92\x2d\x96\x58\xc5\x39\xd3\xe6\xb5\xc8\xe0\xf3\xdb\x05\x46\xe7\x88\x0c\x2f\x08\xcd\x52\x7d\x09\x98\xc7\x4c\xcc\x57\x52\xd1\x6d\xce\x05\x24\x9a\x2e\x78\x0e\x82\xad\x21\x59\x95\x24\x41\x68\x72\xfe\x21\xbe\xe3\x1f\xf9\xb3\xf3\x18\x3e\xc3\x1c\x0b\x32\x18\x60\x91\x8a\x26\x99\xf6\xfd\x39\x45\xe7\xf6\x5f\x44\xa8\x4a\x55\xf3\xed\x3a\x0b\x3c\x64\x29\x42\x64\x62\x59\x2d\xd2\x73\xbc\xe4\x66\xb7\x5a\x92\x3f\xe0\xf8\x8b\x4b\x82\x93\xe9\x78\xf4\x6f\xb3\x21\xb9\xc4\xc9\xee\xc3\x39\xc1\xf1\x17\x04\x87\x7f\xeb\x85\x2b\x11\x16\x83\x01\x96\x29\x3a\x3f\x47\xc3\x62\xfa\xe5\x8c\xe6\x69\x31\xfd\x97\x19\x9d\xa7\xc5\xf4\x5f\x67\xb4\x98\x7e\x35\x1b\x0c\xf0\x26\xb5\x3f\x08\x15\xa9\x1c\x6e\x86\xe8\x1c\x0d\x73\xf7\x77\x4e\xe8\x76\xa3\xf2\x44\xd0\x95\xd4\xc6\x31\x2a\x69\x21\x95\x49\x36\xb4\x50\xf2\x67\x98\x9b\x24\xa7\x0a\x0a\x99\xcc\x69\xc1\xcc\x2a\x51\x54\xc1\x6d\xc2\xa8\x97\x53\x92\x95\xfb\x1d\x54\x5e\x0b\xb0\xd8\xe4\x79\x9a\x9a\xdd\xce\x7c\x0d\x71\x0e\x62\x69\x56\x56\x4c\x26\xad\x9f\x26\xb5\xa6\xa4\x63\xaa\x53\x01\x77\xd1\x0b\xa5\xd8\x3d\x36\x64\xa2\x9e\x9b\x89\x1a\x0e\x89\x9e\xaa\x59\x0a\x53\x35\xab\x18\xd5\xfb\x95\x74\x47\xdf\xd2\xb1\x1d\x16\x66\x77\xa3\x9d\x0e\xe9\xd4\x2a\xdb\x44\xc7\x20\x36\x6b\x50\xec\x26\x87\xb4\xf9\xb0\xdb\x9d\x5d\x50\x1d\xcf\xa5\x58\xf0\xe5\xc6\xbf\x3f\x1b\x53\x74\xcb\xf2\x0d\x20\x2e\x22\x3d\x18\x60\x1d\xdf\x29\x6e\xc2\x3b\x42\xdf\xde\x58\xa1\xc4\x19\x2c\xb8\x80\x3f\x2b\x59\x80\x32\xf7\x18\xa8\x8e\x3f\xc2\x3d\xd5\xa4\x2c\xed\xca\x2c\xad\x68\xc5\x64\xdb\x30\x13\xb2\x3d\xab\x5f\x38\x16\xf8\x02\x9f\x61\x88\xb8\xd0\x86\x89\x39\xc8\x45\x64\x08\x31\x2b\x25\xef\x22\x2b\x95\xf7\xf7\x05\x5c\x29\x25\x15\x46\x2f\x99\x10\xd2\x44\x73\x96\xe7\x11\x8b\xe6\x39\xd3\x3a\x62\x3a\x62\x51\x35\x21\x22\x25\x36\x2b\xae\x29\x10\x6a\xff\x8d\x73\xae\x0d\x08\x50\x3a\x9d\xce\x1c\x55\x86\xb2\x4a\x98\x26\x05\xca\xd2\xe9\xf6\x23\xdc\x27\xc8\xb0\x02\x51\xc7\x74\xb2\xa7\xce\x8b\xd0\x4c\x0e\xa6\xb2\xf2\x9a\x33\x83\x9b\x5d\xf9\x02\xbb\x0d\x8c\xb9\xf6\x1b\x09\x84\x84\x95\x14\x06\x4b\x58\xda\x9e\x87\xec\x76\x9d\xf1\x68\x23\xbc\x50\x33\x74\x96\x9a\xfb\xc2\xca\xe2\xdd\xfd\xfa\x46\xe6\x83\x81\xd5\xa8\xb3\x14\xa6\xfe\x39\xe6\x06\x14\x33\x52\xcd\x76\xbb\xea\x0d\xfa\xc3\x1f\xaa\x56\x34\xab\x96\xf6\x24\x2d\x94\x5c\x7b\x1a\x5a\x8b\x06\xe9\x87\xc5\x3d\x36\xa0\xb4\x5a\x19\x1a\xe4\x53\xe3\xed\x54\xa7\x61\xf3\x0b\x25\x8d\xb4\x1d\x63\x23\xdf\xb9\x81\xb1\xdd\x16\x0c\x24\xd6\x39\x9f\x03\xfe\x3d\x1d\x5d\x54\x06\x8a\xfc\x20\x94\xa6\xa9\x1e\x0c\xc0\x4a\x4f\x1b\xb5\x99\x1b\xa9\xac\x76\xa5\xad\x96\xd8\x9a\x20\xa1\xe8\x0d\x2b\xdc\x80\xdd\x0e\xbd\x03\x3f\xf6\xb2\xc5\x4d\x82\x5e\xa8\xe5\x66\x0d\xc2\xe8\xd0\xf1\xfc\x6f\xf8\x32\xf9\x91\xef\x5e\x13\x61\xf0\x65\xf2\xfb\xdd\xc5\xef\x76\x5f\x7d\x49\xf0\x65\xf2\x32\x67\xeb\x02\x32\xe2\x67\x78\x76\x1e\x1b\xd0\x06\x6b\x72\xe9\x79\x4b\x6e\x25\xcf\xa2\x71\xd9\x11\x10\xd9\xf6\xaa\xe1\x6b\x71\xcb\x72\x9e\x45\x16\x78\xd7\x85\x89\x8c\x8c\x74\xa1\x80\x65\x91\x90\x62\xe4\xf6\xe0\x26\xdf\x2b\x74\xfc\x41\xbc\x16\x91\x54\x19\x28\xdb\xf5\x06\xa2\xaa\x0b\x75\x03\x98\x25\x29\x92\x4e\x44\x3a\x5a\x6f\xb4\x89\x56\xec\x16\x22\x16\x1d\x6c\x36\x26\xd1\x1a\xcc\x4a\x66\xb1\xd5\x74\x42\xa7\x30\x23\x65\x49\xbd\x0a\x6f\xc4\x43\x4a\xdc\x51\xbe\x98\x07\xf0\x07\x32\x19\x5d\x9c\xa5\xc6\xa2\x53\x5b\xcd\x3b\x03\xfc\xb6\x8e\xbb\x86\x15\xeb\xc2\xbd\x30\xf4\x82\xec\x69\x51\x8c\x6b\x38\xa0\x65\x0f\x57\xe0\x66\xa7\x26\x65\xd5\x16\x06\xe4\xa2\xaa\x05\x85\x54\xa7\xe3\x89\x7e\x6e\x26\x7a\x38\x24\x6a\xaa\x67\xfb\x01\x53\x3d\xeb\x18\x66\xbc\x90\xea\x8a\xcd\x57\x78\x6f\x97\x86\x6c\x2b\x6b\x8f\x59\x51\xe4\x16\xa6\x14\x29\x2d\xa5\x33\xca\x06\x03\x8d\x1b\xaa\x4c\xd9\x31\x6c\x33\x14\xd5\xbd\x10\xdd\x56\x68\x98\x9c\x5d\x94\x84\x82\xdd\x09\x91\x36\xcd\x8a\x2a\xb2\x85\x58\x9b\xfb\x1c\x62\x0d\xa6\x31\x8f\xb2\x07\x5f\x49\x79\xda\xdc\xa0\x4a\x2a\x26\x45\x68\x88\xc7\x3b\xb0\x47\xe6\x74\x36\xa9\xe0\xfc\xeb\xf1\x84\xa8\x78\x23\xf4\x8a\x2f\x0c\x36\x8d\x83\xbc\xea\x31\xfa\x8a\x56\x3f\x09\xa1\x26\x6d\xf6\x19\xd3\x7d\xaf\xfa\xc8\x54\xf1\xcf\x92\x0b\x8c\xa8\xa5\x46\xb6\xa8\xa9\xfc\x92\x14\x76\xbb\xed\xa7\x04\x21\xca\x13\x24\xa4\xe5\x3c\x77\x9a\x98\x57\x8f\xd6\x33\xd0\xb6\x03\x7c\x9e\xe7\x9b\x0c\xbe\xad\x9e\xed\x69\xa9\x13\xf4\x05\x2a\x69\x1b\x6d\x6a\xe8\x35\xbb\xdd\xb6\xa4\x70\x89\xa1\x41\xe9\x05\x71\xda\x64\x30\x1a\x20\xd2\xb3\x9b\x41\x97\x55\x0a\x55\xbf\x14\x91\xc9\x97\x69\xaa\x02\x83\x83\x01\x56\xd3\x8b\x59\x6a\xff\x34\x3c\x8e\xe1\xf9\x92\xa2\x08\x11\x6a\xa6\x19\xcc\x65\x06\x3f\x5e\xbf\x7e\x29\xd7\x85\x14\x20\x0c\x56\xd3\xf1\x8c\xcc\xd2\xde\x37\x17\x33\x62\xb5\xc5\x42\x84\x29\x71\x2e\xe7\xcc\x12\x12\x6b\x60\x6a\xbe\xa2\x40\x4a\x9a\xf7\xc8\x0e\x2d\xa4\x5e\x49\x94\xa6\xd8\xfa\x7f\x46\x7e\x2f\xef\x40\xbd\x64\x1a\x30\x21\xbb\x1d\x32\x6a\x03\x28\xb5\xe2\x45\x17\xf6\xdf\x92\xce\xd3\xed\x1d\xcf\xf3\x77\x6e\xda\xc4\x1a\x00\xa3\x19\xcf\x5a\xcf\xb6\xc3\xf7\x92\x65\x6f\xa4\x82\x7d\x97\xc3\x16\x07\x52\xed\x0e\xd7\x6e\x3b\x7c\xd3\x5f\x2c\x74\xf9\x86\x23\x18\xe1\x36\x8f\xaa\x74\x5b\xd6\x2e\x6a\xbc\xe0\xb9\x01\x75\xb8\x15\xd6\xbd\x80\xd9\x60\x70\xa6\xa6\x50\x7b\x29\xf6\xb7\x75\x22\xb4\xb5\x33\x6a\xd7\x7a\x29\x37\xc2\x34\x71\x20\xf4\x0c\xd6\xf6\x11\xee\x35\xde\xaf\x4d\xc2\x6e\x96\xd4\x12\xdf\x1c\xd6\x82\x8e\x4e\xbb\x49\x25\x26\x13\x88\x9b\x3c\xc7\x0e\x87\x30\x50\x08\x33\x53\x84\xce\xd2\xd4\xc4\x9f\xec\x31\xe4\xc5\x8b\x0d\x29\x27\x47\x0e\xdf\x37\x32\x83\xfc\x15\x33\xac\x52\xbc\x7f\x7f\xf7\xf6\x87\xb8\x60\x4a\x03\xde\xbf\xa3\xda\xca\xaa\x32\x62\x66\x3d\x7f\x45\xf4\x94\x59\x3d\x64\xb5\x54\xf6\xfc\xa5\x9a\xba\xf3\xc6\x60\x52\x3e\x8b\xd9\xcf\xec\x33\x76\x1e\x28\x62\x05\x3f\xbf\xbd\x38\x77\x9d\x10\xcd\x98\x61\xf6\xd4\x49\xd0\xcf\x5a\x0a\x44\xf5\x66\x3e\x07\xdd\xd8\x36\x07\x32\x7e\x46\x45\xed\x64\x14\xdc\xde\x77\x91\xc8\x1e\xae\x32\x87\xd8\xbd\xc5\x8a\x94\x25\x29\x69\xd0\xad\xe6\x86\x3a\x0a\xf7\x7a\x18\x84\x17\xfc\xa9\xc9\x5e\x43\xa8\x4a\x5f\x31\x03\xb1\x90\x77\x98\x38\xd1\xd9\xf3\x17\x43\xfa\x2c\x86\xcf\x06\x44\x86\xb7\xda\x30\xa3\x93\x60\x07\x7b\x38\xa0\x4a\x2c\x13\x94\x7c\x39\x46\x25\x05\x42\x3c\xf1\x83\x01\xae\xd8\x40\x5f\x58\x23\xb5\x02\x66\x6b\x9d\x02\xb5\x13\x43\xfc\x89\xd4\x18\xae\x40\x6f\x72\x63\x5d\x30\x5a\x3f\x7c\x73\x6f\xf7\x3a\xdd\x96\x41\xaa\x71\x6d\x39\x15\x07\xd4\xc4\xd7\xbe\x2f\x99\xf4\x09\xdc\x9b\xb3\x97\x78\x02\xd4\x38\xa1\x7f\x77\xf5\xfe\x84\x3d\xf0\xbe\x13\xc4\xce\xea\x88\x5b\xdb\xfd\xac\x97\xae\x5e\x4d\x20\xd7\x10\x6c\x06\x2a\x72\x28\x4b\x21\x7e\x67\x65\x45\x85\x05\xfc\x4a\x87\xb8\xd5\x21\x4d\xf8\x02\xeb\x29\x9f\x79\xe5\x93\xa9\xfd\x3d\x11\x71\xb1\xd1\x2b\xbc\xb5\x3c\x27\x9c\x5e\xc3\x6d\x22\xe3\x6b\xb8\xe5\x9a\x4b\x41\xdf\x30\x33\x5f\x81\x4e\x64\x1c\x7e\x51\x87\xc9\x7f\xe5\x66\xe5\x1a\x12\x19\xb7\x1b\x4a\x52\x8a\x58\x4b\x65\x9a\xb6\xdd\x44\xea\x6a\xa2\xea\x08\x81\x4e\xc3\x6e\x67\xb9\x29\x64\x6c\xc1\x31\x07\x0b\x9e\x4c\x01\x36\xae\xd1\x62\xa7\x53\x9c\xdc\x5a\x88\xe8\x87\xf4\x7c\xea\x67\x98\xa5\xe0\xa0\xb6\xde\x64\x71\xb0\xc7\x39\x35\xb1\x53\xad\x74\xfb\x0e\xd4\x2d\xa8\x84\xc5\xaf\x36\xca\x81\x32\x7d\x2f\x0d\xcb\x93\xbd\x66\x8e\x94\x67\x3e\x61\x9e\xe7\xb7\x05\x08\xc8\x4a\xda\xaf\x20\x61\xa1\x6a\x01\xeb\xca\x1c\x58\x93\xa2\x9a\x6c\x0f\xf7\xd8\x9a\x04\x7a\xbf\x82\x48\x3b\x9a\xa2\x1b\x25\x3f\x42\x94\xc9\x3b\x1b\x8f\x58\x5b\xab\x41\xba\x1f\x71\xa9\xaa\x80\xb7\xc1\xeb\x14\x66\x54\xa7\xaa\x23\x6d\xca\x52\xd5\xd9\xc1\x91\xd5\x9d\x37\xcc\xac\xe2\x35\x17\xf8\x4b\xf8\xca\xba\x31\x3c\x65\x69\x2a\x2e\x11\x4a\x10\x1a\x8a\x89\x89\x9b\xa7\x47\xcb\xb0\xa9\xa6\x8c\x0a\xbf\x4b\x72\x6f\xc1\x8e\x20\x6f\x87\x74\x6b\xad\x56\x0f\x51\x82\x86\x3c\xd8\x32\x94\x27\x58\x92\x7c\x92\x25\x69\x67\x49\xfa\xb8\x25\xe9\x03\x4b\x62\xa9\xae\x2c\xc9\x1d\x3f\x95\xb0\x1a\x62\x0b\x81\x1a\xab\x1a\x88\xdf\xfe\xae\x28\x28\xec\x55\xe0\x57\xdd\xfa\x1f\xd8\x1a\xbe\x95\xca\x59\xeb\x43\xe7\xad\xa5\xdf\x06\xc2\xa6\xc2\x3a\x98\xf8\x13\xc7\xa5\x80\x9c\x26\x74\x53\x36\xb6\xbf\x7e\x3e\x6e\x0f\xb0\xfa\xb1\x77\xa8\xf4\xf0\x82\xf4\xa7\x8f\xc4\xe1\x84\x54\xef\x23\xb6\x48\x3c\x1f\x5f\xb2\xa4\x39\x97\x18\x5e\x50\x4d\x86\x28\x3a\x8f\xd0\x90\x95\xf4\x47\x95\xbf\x97\x6d\xbe\x54\x50\xa6\x0a\x3c\x0e\x5f\x38\x70\x4b\x4d\xdd\x50\x7b\x18\x58\x75\xb2\x59\x53\x74\xc3\x34\x8c\x36\x2a\x47\x33\xca\x43\x5c\x1f\x64\xa5\x66\x61\x78\x45\x85\x94\x26\xe9\x71\x61\x0d\x6e\x09\x98\x58\x51\x96\x25\xdd\xa4\xd7\xc0\xe6\x26\x9e\x2b\x60\x06\x5e\xe6\x4c\x6b\xbc\xcd\xb8\x2e\x72\x76\x6f\xf7\x2b\x41\x96\xad\xb7\x85\xcb\x28\x50\x05\x22\x03\xd5\xe3\xbc\x34\x27\xb9\xca\xc1\x06\x25\x18\xc9\x30\x6a\xeb\x43\x1f\x6f\x46\x4a\x16\x3a\x76\x0d\x54\x43\x0e\x73\x03\x59\xf3\x4d\xd5\x56\xd2\x6e\x77\xab\x43\x74\xf5\x28\xb9\x1e\xcc\xbe\x61\x0a\xd1\x79\xe5\xbc\xfe\x95\xe7\xf9\x9b\xae\xdb\xb5\xf7\x9f\x26\xf3\xb6\xa3\x64\x58\xd1\x0c\x9b\x42\x00\x03\xc6\x1e\x4e\x80\xb7\x2c\xcf\xbd\xcf\xd8\xf4\xd8\x6c\x20\xe5\x5c\xbc\x7a\xd1\x57\x3c\x7b\x60\xcd\x58\xc1\x42\xc7\x9f\xe2\x25\x98\x57\x6f\xdf\xfc\x20\x33\x70\x0e\x9b\x06\xf3\xc2\x18\xc5\x6f\x36\x06\x30\x62\x1b\x23\xed\x7c\x39\x18\x40\x14\xc9\xc5\x02\x85\x90\xd3\x06\x52\x0e\x90\xf0\x5e\x4c\xe1\xd5\x8a\xe9\x17\xd9\xad\x0d\xb6\xb3\xbf\x58\xb9\x69\x4c\x06\x03\x3f\x68\x25\xef\xaa\x57\x98\x50\x88\x17\x72\xbe\xd1\xd6\x57\x5a\x82\x79\x2d\xb8\xe1\x2c\x77\x3c\x1e\x6e\xb0\x73\x62\x20\x11\x9b\x3c\xa7\x35\xff\xd3\x59\x40\xc0\xe9\xac\x2c\xe9\xa7\x0d\xa8\xfb\xef\xa4\xf9\x13\xdc\x5b\x9b\x6f\xe9\xa0\xbe\xe3\x66\xbe\xc2\x60\x65\xf5\x52\x66\x40\xb6\x73\xa6\x21\xfa\xff\xe3\x64\x2f\x0b\x17\x40\xb5\xe4\x51\xd1\x37\xb9\x51\xc0\x3e\x4e\xdc\x90\xaf\x7e\xef\x87\xac\x78\x06\x7b\x5e\x9a\x3d\x2e\xbe\xf2\x3d\xf4\xe6\x66\xcd\xcd\x7f\x58\xaa\x30\x69\xd0\xf7\xad\x9d\xf4\xd0\xd7\xeb\x11\xdb\x6e\xd7\xb3\x54\xe9\x23\xbd\xa7\x31\x5a\x51\xcd\xeb\x35\xae\xd6\x85\xb9\xaf\x77\xa6\xbd\x04\x3d\xa6\x20\x7d\x02\x39\xc6\x6e\x45\xe5\x11\x76\xdb\xba\x50\xb6\xa2\xd6\xff\xf3\xbc\x75\x88\x3d\x91\xc5\xc6\x2c\x49\x2b\xad\x55\xe3\x8c\x14\x1e\x3d\xae\xe1\xd3\x06\xb4\x81\x70\xf4\x2f\x6b\x63\x23\xde\x56\xae\x61\x79\xf5\xb9\x38\xdd\xb0\x3d\x80\xc5\x46\xf1\x35\x26\x9d\x18\x68\xa1\xe3\xdc\x7b\x0a\xed\x21\xf3\x15\xcc\x3f\x42\x66\x03\x82\xde\x8c\xc4\xfe\x28\x9b\x8e\xa6\x1f\x66\xdb\x12\x93\x2f\x86\x67\xcf\xd3\xe4\x32\xfe\x70\xfe\xe1\xc3\xdf\x9e\xed\xfe\xdf\x07\x4d\x67\x36\xda\xff\xf0\xe1\xd9\x00\x91\x12\x03\x21\xd4\x06\xbe\x9e\x7c\xeb\xda\xd6\x24\x70\x2b\xef\x5e\x02\x2e\x11\x5f\xa2\x04\x2d\x91\x67\xdd\x0b\xe2\x90\xf5\x79\xbc\x0f\xa6\xf1\x7e\x5e\x87\x0f\xce\x8b\x84\x80\xe2\xfb\x38\xda\x7b\x71\x69\x3a\x8f\xeb\xb0\xd8\x2a\x0d\x86\x74\x3a\x23\x74\xfb\x29\x39\x49\x9c\x21\xf1\xf2\x20\x8e\xb4\xfa\xb7\xf2\x33\xfb\x61\xcd\xe6\x07\x46\x07\x97\x6f\x9f\x31\xa2\x3c\x39\x4d\x8c\x3e\xfe\xeb\x66\x8f\x4e\xd3\x82\xce\xe8\xb2\xa4\xfa\x70\x2b\xba\x9e\xd4\x81\xdc\xf6\xbe\x75\x2f\xa9\x54\xa7\x0f\x53\x43\x59\xfa\x90\x98\xa9\x48\x4f\x10\xe7\xc4\x78\x81\xda\x58\x96\xaa\x8a\xc1\x34\xc7\x10\x73\x42\x75\xab\x21\x08\x89\x50\x56\x8f\x71\xcb\x52\x51\x3f\x37\xd7\x29\xe9\x01\x88\x1f\x9e\x64\x3e\xe9\x71\xaa\xb6\xec\x76\x9d\xfe\xa7\xa9\x49\x38\x39\x1e\xd1\x89\x66\xaf\x87\x76\xff\x80\x08\x6f\x55\x87\xab\x97\xb4\x03\xc2\x7d\xec\xa7\x4f\x60\x7f\x30\xe8\xf4\x3f\x8d\xfd\x92\x36\xb1\xf7\x21\x9c\x64\xd9\x6d\x5b\x87\x9a\xda\x7b\xc3\x44\x47\x75\x8e\x29\xf6\x83\x6a\x79\x02\xf5\xd4\x86\x35\x68\x05\x7c\xb9\x32\x88\x3a\xbf\x0b\x85\xc6\x82\x65\x19\x17\x4b\x44\xd1\xc5\xb8\xf8\x1c\x8d\x5d\xbb\xa1\x68\xcd\x3e\x8f\xea\x01\x75\xab\x2c\xd8\x9c\x9b\x7b\xdf\x54\xd2\xe6\xd9\xf7\xab\x89\xa1\x65\xc6\x1d\x0f\xb2\xcd\xc7\xf8\x90\x89\x7e\xfa\x2f\xc6\xe3\xe2\xf3\x21\x0f\x17\x88\x50\xb5\xf7\x12\x0f\xbd\xff\x06\x1f\x1e\xe3\x2b\xdf\xb0\x0a\xd1\x4d\x6a\x9d\xc4\x74\x5b\x4e\x1a\x9d\xbc\xfa\xf6\xe6\x3f\x42\xba\xd4\xe5\x3e\x7a\x66\xed\x1d\x63\x7c\x16\xa8\x2f\x04\xd9\x54\xb1\x47\x23\xd8\xb0\x4b\x94\xa4\xce\xc6\xe8\x26\xf9\x2e\xdd\x41\x59\x8a\x50\x7d\xcb\x3c\x18\x60\x96\xf6\x86\x37\x19\xbf\x45\x74\xeb\x6e\x5e\x7d\xe8\xe1\x46\xa3\x92\x3e\xa1\xf7\x28\x87\x85\x39\x36\x84\x21\xba\x5d\x29\x58\x24\x28\x28\x6e\xf6\x93\x57\xef\x95\x59\xe7\x88\x36\xe6\xca\xb9\xf8\x38\x5a\x2a\x76\x8f\x4a\x8a\xae\x42\xe7\xc8\xe9\x39\x22\xe4\x49\x04\x29\xa7\x12\xa7\x32\x71\xcb\x72\x54\x52\x8e\x75\xec\x32\x4e\x84\xa2\xb5\x8e\x8c\xfd\x89\x08\x45\x11\xa2\x36\x96\x7e\xea\x54\x3e\x9d\xe5\xe7\xf2\xb9\x84\x5f\x38\x99\xf6\xe9\x21\x8a\xa2\x45\x10\xc5\xc3\xc2\xe0\x59\x82\xb8\x28\x36\x8f\xf0\xef\xbb\xb1\x63\x9d\xfc\x0c\xbe\xdb\x27\x14\xf2\x3e\x06\x3e\x1b\x44\x9d\xc7\xb6\x92\xb9\x35\xa3\x10\xa9\x46\x37\xf7\xd6\x21\x83\xcf\x85\x05\x1e\xc5\xd9\x28\x67\x37\x90\xa3\xbe\xf7\x4e\x17\x3e\x21\xda\x8c\x0b\x13\x17\x16\x52\x29\xfe\x04\xf7\xaf\xac\xcb\xee\xd4\xb9\x13\x8c\x51\x29\xbc\x93\xdc\x7a\xe9\x9a\xca\x53\xd5\xe3\x66\x63\x8c\x14\x23\x96\x65\x23\x29\x8e\xf1\xee\x3b\x05\xe6\x33\x99\x31\x83\xa8\xe1\x26\xaf\x03\x73\x4b\xe9\xcb\x9c\xcf\x3f\x1e\x78\xf6\xe5\x49\x9b\x73\xf3\xf8\xd6\xb0\xec\x36\x88\xca\xfe\x3a\xd2\x5d\x17\x4c\xb4\xf9\x93\x73\xc3\xe7\x52\x44\xe1\xdf\xd1\x7c\x05\xb7\x4a\x8a\xd1\xa6\x88\x2c\x8c\x8f\xdc\xb4\x2d\xe2\x9b\xe8\x7e\xb2\x18\x17\x1c\xf2\xec\x18\x55\x7e\xeb\xe9\xd6\x1a\xf8\xb7\x52\xd9\xde\x56\x6f\x4b\x8a\xac\x22\x47\x7f\x66\x66\x85\x9e\xb4\xd0\xe8\x41\x75\xae\x34\xb5\xa9\xa2\x56\x82\x7e\xd5\xb6\xb6\xaa\xa6\x0e\x86\x0e\x1d\xa5\xeb\x04\xc6\x6d\xa5\x6b\xc5\xa3\x8f\xed\xf5\x2f\x96\x57\xf3\x84\x6f\x60\x61\xf4\x4f\x15\x5f\x8b\x88\x07\xa4\xd8\xee\xd7\x11\x66\x7f\x40\xde\x96\x69\x5f\x1c\xfc\x9b\x89\x96\x2f\x85\x54\x30\xb2\xde\xac\x95\xec\x6b\xf7\x18\xbd\xb4\x8f\xbf\x81\x4c\x9d\xb5\x37\x56\x0c\x30\xea\x3c\xe2\x1b\xf9\x39\x48\x90\x7b\x6a\x7e\x2b\x96\x43\xfc\x31\x0a\x99\xfc\x92\xa2\x1f\x43\xb9\xa3\x58\x46\xe1\x65\x7e\xff\x5b\xb1\xdf\x59\xbd\x5f\x02\x79\x45\xdb\xaf\x2c\x83\x46\xff\xf5\x26\x37\xdc\xbb\x4f\x3f\x85\xd7\xb5\x84\xfc\xf5\x6c\x49\xd1\x3b\xf7\x3e\xb2\x6e\xda\xaf\x29\x0f\xbf\x6c\x10\x48\xb8\x0b\x6e\xce\x20\xd5\x7a\x34\x97\xc2\x28\x99\x47\x0d\x3a\x11\x75\x0f\x45\x0e\xc9\xd9\x98\x6a\xfe\x9f\x90\xd4\xb7\x42\x17\xbf\xa3\x40\xbc\xf0\x2a\xea\xcd\x63\x8e\x41\xf3\x18\x64\x22\x88\xde\xfd\x6a\x9f\x66\x8d\xa8\xe7\x08\x43\xb0\x46\xd4\x65\x51\x51\x1d\x17\x38\xe7\xc6\xeb\x7a\x64\xf5\x99\x46\xbe\xc2\xc0\x9e\xfc\x05\x33\x2b\x1a\x69\xb3\x59\x2c\xa2\x9c\x7f\x84\xc8\xac\x98\x89\xad\x4f\xc7\x5c\x3e\x3c\x4b\x0f\xc3\x7f\xe7\x71\x43\xfc\x3d\x17\xf0\xc3\x66\x7d\x03\x8a\xea\x14\xe2\x6f\x60\x21\x15\xd4\x35\x91\x55\x12\xe6\xc5\xc2\x40\x55\x31\x42\xeb\x5e\x3d\x7e\x36\x65\xb5\xa7\xbd\xf5\xd3\x26\x6a\xa4\x87\x8c\xbe\x94\xc2\x80\x30\x09\xf8\x0b\x57\x57\x07\xe4\xef\x2e\xdb\x9d\xf7\x1d\x1d\x69\x55\xef\x71\x49\x68\x45\x46\xdf\xb2\xfa\x70\xd9\xa1\x1e\x5e\x1c\x5f\xb6\xa4\x45\x7f\x41\x91\x93\xca\x9a\x15\x38\x23\xd4\xdd\x9a\xb3\x74\xec\xef\x7e\xbc\x4c\xd8\x73\x31\x61\x55\xad\x28\x77\xf5\x0a\x54\xa6\xe6\xd2\x4c\xeb\x9a\xa1\x8b\x59\x1c\x88\x18\x5d\x4c\xf8\x74\x5c\x3d\x3e\x4f\xe5\x25\xef\x8f\x4e\x20\x74\xf9\x5a\x5e\x06\x3e\x80\x24\x66\x30\x08\x77\xc7\x83\x01\x6e\xce\x3f\xc2\x72\x54\x8d\x20\x33\xdf\x25\x3d\x1b\x5b\xce\x12\x6c\x06\x03\xed\xa7\x30\x36\x42\xe4\xa4\xac\x52\x89\xcd\x17\xba\xa4\x8b\xb4\x51\x63\x6a\xf6\x85\x42\xb0\xaf\x78\xb2\xa7\x55\x10\x61\x6a\xa8\x8a\xb9\x10\xa0\xfe\xf8\xfe\xcd\xf7\xe5\x64\x11\x43\x9a\xc9\xb9\xab\x2c\xeb\x33\x07\x1f\x37\xad\x1f\xbd\x89\xb1\xc7\x52\x58\xe2\x2f\x1c\xee\xd0\x09\xb7\x0c\xb2\x00\x91\x9c\x35\x32\xb2\x5c\xbf\xd8\x18\xf9\x1d\x08\x50\xcc\x40\x56\x96\xd4\xc8\xe5\xb2\x9e\xf7\x20\x8f\xeb\xc3\x38\x3b\xcd\xa5\x7b\x9e\xe7\x52\x57\x9d\x31\xf1\x56\x6a\xdf\xd6\x4d\x25\x6d\x3c\x1e\x4e\x57\x5f\xfa\x78\xca\xc6\x25\x29\x69\x73\xce\x47\x47\x58\xad\x7c\x38\x70\xf6\x8c\x5a\x28\xaa\xa2\xfe\xaa\xe5\xb6\x8a\xf4\xab\x06\xeb\x3b\x54\x59\x3a\xdf\x66\xbd\x2a\x2b\xed\x2a\x35\xe7\x5b\x6f\x72\x39\xff\xa8\x9d\xae\xef\x75\xb1\x2e\xa4\x67\xc7\x5e\x1c\x96\x22\x07\x25\xad\xae\x55\x17\x18\xe2\xc0\x78\xb3\x66\xbb\x6e\x74\x66\x35\x99\x58\x8b\xad\xef\x53\xd3\x71\xb8\x8b\x35\xbe\x52\x5d\xb9\xbb\xda\x33\x46\xb6\x41\x65\x17\x58\x91\x90\xf5\x2f\xf7\x4d\xdd\x9a\xbd\x6a\xba\x11\xb3\x56\x57\x55\xf7\x11\x1a\x46\xa0\xe7\xb0\xfe\x1a\x0d\x17\xd8\xbe\x26\x43\xf4\xfc\xdc\x3e\xfb\x6a\xfb\x56\x85\x60\x35\x4f\x6d\x3b\x3a\xa4\x72\x11\x29\x31\xa3\xaa\xce\x4f\x9f\x76\x1a\xe4\x5c\xc0\xa3\xe1\xfb\x3c\xae\xef\x87\xb1\xab\x31\x08\x06\x4e\x0d\x69\x05\xf1\x62\xb3\x46\xd4\x30\xb5\x04\x93\xa0\x9f\x6e\x72\x26\x3e\xda\xa3\xc6\x95\x18\x5a\x6d\x02\x15\xd9\x43\x62\x01\x4a\x81\x42\x65\x3d\xcf\x91\xa3\xeb\x30\xc4\xc9\x6d\x58\x4c\x33\x26\x96\xa0\xe4\x46\xe7\xf7\xef\xac\x45\x06\xc3\x4f\xb6\x3f\xfd\x64\xcf\xf5\x44\x94\x21\x3d\xf2\x24\x49\xac\xad\xa2\xa0\x92\x0a\x87\xc2\x22\xb5\x87\x5c\xeb\xaa\xa3\xd7\xa0\xdd\xe7\x12\x27\x52\x6f\x75\x7d\x74\xc3\xb2\xa5\xf3\x3f\x5f\xfc\xf8\xfe\xed\x77\x57\x3f\x5c\x5d\xbf\x78\x7f\xf5\xea\xf4\x24\x87\x9d\x24\x42\x43\xdc\x45\x0b\x64\xff\xa2\x04\x39\xe3\xce\x10\x39\x35\x01\xe2\x82\xdb\x8e\x1b\xd0\x82\xa8\xa7\x2a\x87\x73\x0e\x2c\xbe\x9f\xae\x07\x9a\x50\xf1\x14\xfe\x47\x37\x32\xbb\xb7\xfa\x43\x9c\x0f\x71\x7b\x12\x92\x6b\x8f\xe1\x52\xf4\x16\xf0\xcc\xe3\xaa\x19\x77\x40\xed\x54\xf8\xbb\xed\xa2\x5f\x21\x1f\x87\xbf\x75\x28\xec\x6a\xa1\x9f\x4b\x3f\x55\x25\x5f\x22\xed\xe2\xa0\xfb\xa4\xe8\x01\xd5\x5e\xd3\x6d\x1d\xe3\x8e\xd0\x90\xf9\xcf\x5d\x8c\xfb\xce\x05\x68\x05\xb8\x89\xcf\x2d\x09\x8b\xbd\x1e\x6e\x93\x02\xeb\x7d\x65\x8d\xa7\x36\x51\xb4\xa3\xf0\x89\x8e\xdb\x27\x9a\x33\x17\xde\xcc\x38\x06\x74\x7b\xce\x06\x03\xcc\xfb\x8d\xa3\x4e\xb3\x34\x0d\x50\x32\xd5\x51\xc4\xfd\x66\x95\x14\xd9\x9f\x11\xcb\xf3\x08\x51\x46\x51\x14\x44\x17\x71\x11\x21\x3a\x8f\x1b\xb5\x39\xd8\x3c\x25\x96\xf0\x81\xb6\xa0\xdc\xe9\xd2\xf5\x49\xe5\x24\x4f\x73\x07\xc6\xf5\xa9\xdf\xae\xb0\x79\xe8\xc8\x77\x7c\x34\xce\x7b\xff\xec\x0f\xfb\xb7\xea\x65\xd5\x25\xe9\x75\x14\xdd\xe7\x6a\xed\x1b\x05\x4b\xb1\x7b\x24\xae\x26\x4e\x19\x57\x73\x86\x83\x92\xb8\x5b\xcb\xcb\x63\x43\xa6\x66\xd6\xf6\x39\xba\x97\x95\xad\x9e\x6d\x8f\x25\xdc\x79\x74\xbc\x0a\x28\x03\x2b\xbd\x02\xe9\xf0\x88\xad\xfb\x48\xe7\x87\x2c\x1f\xeb\x7e\xd1\x6b\xb2\x4f\x3a\x0c\xac\xc9\xfc\x73\x50\xd6\x92\x7c\x72\x8a\x6f\x0d\x4b\x36\xea\xe6\xf9\x2c\xad\xe8\x58\xfa\xee\x70\x0e\x6b\xf1\xa8\xec\x5a\x4c\x07\xf3\x4e\x9e\x8d\x8b\x8c\xcf\x99\x91\x2a\x3a\x96\x7e\xec\x93\xe2\xa6\x40\x09\xf2\x85\x75\x47\x65\x72\x84\x86\xdb\x06\xba\x05\x48\x0f\x48\x90\xf4\xe0\xaa\xc5\xbc\xae\x4b\xea\xd0\xb0\x0b\xd4\x1e\xed\x0e\xd1\xba\x89\xc5\x49\xc7\x6f\x75\x25\xf1\x25\xa1\xcb\x13\x30\x43\x6f\xf2\x10\x44\x3c\xa1\xa8\xab\x51\xbe\xfd\x48\x49\x57\xa8\x76\xf4\xf5\x4d\x2e\x3d\x9e\xa8\xf8\x53\xa8\xe8\x6a\x18\xc8\x8b\x3c\x3f\x01\x32\x3a\x18\x61\x25\x74\x80\x11\x15\x28\x34\x81\xaa\x05\x01\xfe\x45\x58\xbe\xb5\xee\xa1\xdd\xbe\xc8\xf3\x86\x95\x9f\xd2\xf9\xe2\xa4\xa2\xaf\xa6\x58\xca\x3e\x50\xe0\x8b\xa6\x72\xba\x42\x51\xf2\x38\x50\xf0\xcc\x7a\x32\x23\x3f\x7b\x2b\x9f\xe3\x66\x38\x9a\x0b\x32\x4a\x8a\x65\x95\x3e\xb9\xba\xbe\x7e\x7b\x9d\xa0\xd6\x3d\xa1\x27\xc0\xc6\x17\xfe\x3b\xc0\xb4\x75\xe9\xe8\x78\x19\x0c\xc6\x69\x5f\x7b\x15\x52\x3c\x95\xfa\x92\xa2\x7f\xfc\xfd\xbf\x7e\x90\x66\xc5\xc5\x32\x5a\x48\x15\xdd\xcb\x0d\x8d\x5e\xb1\xbb\x65\xfc\x8f\xbf\xff\xf7\x43\xf7\x55\x9e\x8f\x71\x14\x28\x40\xa4\xa6\xbc\x97\xc2\xaa\x88\xcf\xb5\x39\x1d\xfd\x05\xc4\xf6\x27\x1d\xd7\x4b\x44\xb7\x5a\xcd\x13\xc4\xd7\x6c\x09\xfa\xfc\x66\xa3\xef\xe3\x25\x5f\x1c\xc5\xc5\x06\x03\xde\xc2\xb8\x58\xc6\x71\x8c\xc2\xa5\x2a\xb4\xe9\xf7\x50\xd0\xc3\xd3\x6e\xe7\x92\x55\xa6\xe3\xa2\x39\xfb\x7c\x80\xb9\xeb\x00\x62\xde\xb2\x86\x6a\x0f\x61\x75\xa9\xbf\x43\xae\xf8\xba\x06\x2c\x57\x63\x54\xe1\x14\x54\x45\x43\x87\x1f\x00\xd8\x90\xb2\xe1\x8c\xed\xbf\x3a\x73\x1f\x67\x9e\x76\x5a\x31\xc7\xc5\xd1\x9b\xe0\xda\x79\x6b\xfb\x6a\xde\xcc\xff\xd7\xd7\x55\xee\x58\x28\xc3\x7d\xe9\xd5\xe7\x82\x09\xe7\xf5\x1d\x4b\xca\xf6\x13\x53\xe1\xc8\xaf\x70\x79\x56\xd3\xf2\x52\xe6\x39\x2b\x34\x78\x6a\x1e\xbf\xeb\xab\x75\x56\x53\xf7\x99\x0e\xbd\x7a\xf4\x9c\x78\x51\x14\xa7\x1d\x10\xd2\x95\x58\xf8\x2f\x6a\x5c\x12\xf8\x72\x3a\x4b\xaa\xc2\x84\xf0\x39\x1d\x45\x07\xce\xd7\xa7\x04\xe2\x4f\x94\x27\x10\xf3\xba\x80\xab\xae\x52\x0a\x3a\x55\x95\x28\xb5\xca\xcc\xda\x75\x4a\xa1\x88\xcc\x94\xa4\xaa\x6b\x7f\xb4\x08\xd9\x65\x64\xa0\x59\x63\xa7\x9a\xc5\x14\xa4\x2e\xa6\x83\x76\x31\x9d\x6a\x1d\x72\xa1\x56\xd7\x69\xf9\xbc\xf1\xe5\x47\x77\x2d\x1f\x22\x79\x0f\x55\x57\xf5\xd4\x8d\x99\xfc\x17\x4d\x6c\xcf\x07\x55\x55\x61\x52\x75\x50\xf7\x1c\xae\xba\x0e\x8a\xba\x33\xd7\x25\x95\x98\x84\xaf\x0d\xdc\x89\xb3\xa7\xb3\xfe\x44\xe1\x40\x2a\x54\xd7\x94\xfe\x56\x8b\xfb\x8f\x1c\x7a\xf6\xe3\x94\x75\x1d\x46\xfa\x69\x8d\x9f\xf3\x8e\x8b\x4c\xde\xc5\x2c\xcb\xae\x6e\x41\x98\xef\xc3\x17\xbb\x18\x15\xb2\x70\x5b\x8a\xe8\xc1\xa7\x85\xfe\x7b\xbe\xbe\x1d\xa9\xaa\xc0\x2d\xad\xfb\x6f\xf8\x9c\xdf\xd0\x2d\x66\x3d\xac\x90\xdd\x14\x19\x33\xf0\x47\xae\x8d\x54\xf7\x18\x9a\x73\xd4\x11\x4a\x4b\x50\x8d\x32\xd8\xd6\xd8\x9e\x22\xc4\xfa\xfb\xd0\x82\x99\x95\x75\x9a\x87\xe8\xf2\x53\x8a\x86\x20\x0e\x3e\x2d\x85\xf8\x13\x19\xa2\x01\x3f\xf6\x96\xdb\xb7\xc1\xca\x8e\xf5\xa9\x4a\x05\x87\x68\xe0\xec\xef\x58\x3f\xf7\xd2\xf6\x6a\x1a\xe4\xb1\xce\xcd\x3e\x76\x4c\xf8\x30\x6f\x18\xac\x6e\xb2\xf2\xdc\xbb\x14\x64\xd8\x77\xf7\x9f\x62\x98\x92\x22\x44\xcd\x2f\x8b\xa3\x9c\xc6\xf4\xbd\x5e\x85\x53\x4f\xef\xbf\x70\x08\x35\xb2\xc1\x27\xa8\x4a\x51\xfd\x23\x6f\xd7\x98\xfa\xc6\x36\x56\x35\x5e\xf4\x80\x56\xd3\xb1\xea\x41\xaf\x4e\x3d\x57\x8f\xbe\x85\x1c\x44\xa7\xf9\x88\x4b\xb1\xac\xcf\xf4\xbd\xaf\xdf\x66\xcf\x87\x0b\x13\x3f\xd8\x0b\x76\xbf\x59\x7d\x53\x5e\x39\x59\x12\x5a\x5f\x66\x2c\xc1\x84\x77\xdf\xdc\xbf\xce\x30\x52\x52\x1a\xe4\xcc\xdc\x02\x0c\x26\x25\xc1\x64\xf2\x3f\x01\x00\x00\xff\xff\xd6\xa4\xa9\x5f\xd9\x46\x00\x00" +var _jsHoundJs = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xcc\x7c\xff\x92\xdb\x36\x92\xff\xab\x70\xf0\x75\xa9\x80\x08\xe2\x68\x92\xef\xed\xed\x51\x66\x66\x1d\x7b\x92\xf5\x6d\x1c\xef\x8d\x9d\xdd\x3f\x64\x6d\x0a\x23\xb6\x24\xc4\x14\x40\x03\xd0\x8c\xe7\x24\x56\xed\x83\xdc\xbd\xdc\x3e\xc9\x15\x7e\x90\x22\x29\x6a\x46\x93\x4b\xb6\xee\x9f\xb1\x08\xe2\x47\x77\xa3\xfb\x83\xee\x46\xd3\x18\x93\xf4\xeb\x2d\xda\x68\x88\xb4\x51\x7c\x6e\xd0\x64\xb1\x11\x73\xc3\xa5\x88\x00\x03\x35\x64\xbb\x90\x0a\xdf\x32\x15\xa9\x88\x8b\xc8\x10\x48\x21\x56\x50\xe4\x6c\x0e\x18\x6d\xd1\x50\x0d\x51\x89\xa8\x99\xaa\x19\x99\x28\x30\x1b\x25\x22\x28\xeb\x39\x0c\x36\x54\x51\x4d\x19\xd9\xda\x39\x44\x6a\xe2\x8d\xca\xeb\x09\xce\x3f\xc4\x4b\x6e\x9e\x9d\x53\x84\x08\xe5\xa9\x99\xa2\x8d\xca\x47\x05\x33\x06\x94\x40\x33\x2a\x53\x84\x68\x6e\xff\xcc\xed\x9f\x8d\xfd\xb3\x4a\xb1\x4a\xd5\x6e\x87\x10\x89\xf5\xe6\xc6\x92\x2d\x96\x58\xc5\x39\xd3\xe6\xb5\xc8\xe0\xf3\xdb\x05\x46\xe7\x88\x0c\x2f\x08\xcd\x52\x7d\x09\x98\xc7\x4c\xcc\x57\x52\xd1\x6d\xce\x05\x24\x9a\x2e\x78\x0e\x82\xad\x21\x59\x95\x24\x41\x68\x72\xfe\x21\xbe\xe3\x1f\xf9\xb3\xf3\x18\x3e\xc3\x1c\x0b\x32\x18\x60\x91\x8a\x26\x99\xf6\xfd\x39\x45\xe7\xf6\x5f\x44\xa8\x4a\x55\xf3\xed\x3a\x0b\x3c\x64\x29\x42\x64\x62\x59\x2d\xd2\x73\xbc\xe4\x66\xb7\x5a\x92\x3f\xe0\xf8\x8b\x4b\x82\x93\xe9\x78\xf4\x6f\xb3\x21\xb9\xc4\xc9\xee\xc3\x39\xc1\xf1\x17\x04\x87\x7f\xeb\x85\x2b\x11\x16\x83\x01\x96\x29\x3a\x3f\x47\xc3\x62\xfa\xe5\x8c\xe6\x69\x31\xfd\x97\x19\x9d\xa7\xc5\xf4\x5f\x67\xb4\x98\x7e\x35\x1b\x0c\xf0\x26\xb5\x3f\x08\x15\xa9\x1c\x6e\x86\xe8\x1c\x0d\x73\xf7\x77\x4e\xe8\x76\xa3\xf2\x44\xd0\x95\xd4\xc6\x31\x2a\x69\x21\x95\x49\x36\xb4\x50\xf2\x67\x98\x9b\x24\xa7\x0a\x0a\x99\xcc\x69\xc1\xcc\x2a\x51\x54\xc1\x6d\xc2\xa8\x97\x53\x92\x95\xfb\x1d\x54\x5e\x0b\xb0\xd8\xe4\x79\x9a\x9a\xdd\xce\x7c\x0d\x71\x0e\x62\x69\x56\x56\x4c\x26\xad\x9f\x26\xb5\xa6\xa4\x63\xaa\x53\x01\x77\xd1\x0b\xa5\xd8\x3d\x36\x64\xa2\x9e\x9b\x89\x1a\x0e\x89\x9e\xaa\x59\x0a\x53\x35\xab\x18\xd5\xfb\x95\x74\x47\xdf\xd2\xb1\x1d\x16\x66\x77\xa3\x9d\x0e\xe9\xd4\x2a\xdb\x44\xc7\x20\x36\x6b\x50\xec\x26\x87\xb4\xf9\xb0\xdb\x9d\x5d\x50\x1d\xcf\xa5\x58\xf0\xe5\xc6\xbf\x3f\x1b\x53\x74\xcb\xf2\x0d\x20\x2e\x22\x3d\x18\x60\x1d\xdf\x29\x6e\xc2\x3b\x42\xdf\xde\x58\xa1\xc4\x19\x2c\xb8\x80\x3f\x2b\x59\x80\x32\xf7\x18\xa8\x8e\x3f\xc2\x3d\xd5\xa4\x2c\xed\xca\x2c\xad\x68\xc5\x64\xdb\x30\x13\xb2\x3d\xab\x5f\x38\x16\xf8\x02\x9f\x61\x88\xb8\xd0\x86\x89\x39\xc8\x45\x64\x08\x31\x2b\x25\xef\x22\x2b\x95\xf7\xf7\x05\x5c\x29\x25\x15\x46\x2f\x99\x10\xd2\x44\x73\x96\xe7\x11\x8b\xe6\x39\xd3\x3a\x62\x3a\x62\x51\x35\x21\x22\x25\x36\x2b\xae\x29\x10\x6a\xff\x8d\x73\xae\x0d\x08\x50\x3a\x9d\xce\x1c\x55\x86\xb2\x4a\x98\x26\x05\xca\xd2\xe9\xf6\x23\xdc\x27\xc8\xb0\x02\x51\xc7\x74\xb2\xa7\xce\x8b\xd0\x4c\x0e\xa6\xb2\xf2\x9a\x33\x83\x9b\x5d\xf9\x02\xbb\x0d\x8c\xb9\xf6\x1b\x09\x84\x84\x95\x14\x06\x4b\x58\xda\x9e\x87\xec\x76\x9d\xf1\x68\x23\xbc\x50\x33\x74\x96\x9a\xfb\xc2\xca\xe2\xdd\xfd\xfa\x46\xe6\x83\x81\xd5\xa8\xb3\x14\xa6\xfe\x39\xe6\x06\x14\x33\x52\xcd\x76\xbb\xea\x0d\xfa\xc3\x1f\xaa\x56\x34\xab\x96\xf6\x24\x2d\x94\x5c\x7b\x1a\x5a\x8b\x06\xe9\x87\xc5\x3d\x36\xa0\xb4\x5a\x19\x1a\xe4\x53\xe3\xed\x54\xa7\x61\xf3\x0b\x25\x8d\xb4\x1d\x63\x23\xdf\xb9\x81\xb1\xdd\x16\x0c\x24\xd6\x39\x9f\x03\xfe\x3d\x1d\x5d\x54\x06\x8a\xfc\x20\x94\xa6\xa9\x1e\x0c\xc0\x4a\x4f\x1b\xb5\x99\x1b\xa9\xac\x76\xa5\xad\x96\xd8\x9a\x20\xa1\xe8\x0d\x2b\xdc\x80\xdd\x0e\xbd\x03\x3f\xf6\xb2\xc5\x4d\x82\x5e\xa8\xe5\x66\x0d\xc2\xe8\xd0\xf1\xfc\x6f\xf8\x32\xf9\x91\xef\x5e\x13\x61\xf0\x65\xf2\xfb\xdd\xc5\xef\x76\x5f\x7d\x49\xf0\x65\xf2\x32\x67\xeb\x02\x32\xe2\x67\x78\x76\x1e\x1b\xd0\x06\x6b\x72\xe9\x79\x4b\x6e\x25\xcf\xa2\x71\xd9\x11\x10\xd9\xf6\xaa\xe1\x6b\x71\xcb\x72\x9e\x45\x16\x78\xd7\x85\x89\x8c\x8c\x74\xa1\x80\x65\x91\x90\x62\xe4\xf6\xe0\x26\xdf\x2b\x74\xfc\x41\xbc\x16\x91\x54\x19\x28\xdb\xf5\x06\xa2\xaa\x0b\x75\x03\x98\x25\x29\x92\x4e\x44\x3a\x5a\x6f\xb4\x89\x56\xec\x16\x22\x16\x1d\x6c\x36\x26\xd1\x1a\xcc\x4a\x66\xb1\xd5\x74\x42\xa7\x30\x23\x65\x49\xbd\x0a\x6f\xc4\x43\x4a\xdc\x51\xbe\x98\x07\xf0\x07\x32\x19\x5d\x9c\xa5\xc6\xa2\x53\x5b\xcd\x3b\x03\xfc\xb6\x8e\xbb\x86\x15\xeb\xc2\xbd\x30\xf4\x82\xec\x69\x51\x8c\x6b\x38\xa0\x65\x0f\x57\xe0\x66\xa7\x26\x65\xd5\x16\x06\xe4\xa2\xaa\x05\x85\x54\xa7\xe3\x89\x7e\x6e\x26\x7a\x38\x24\x6a\xaa\x67\xfb\x01\x53\x3d\xeb\x18\x66\xbc\x90\xea\x8a\xcd\x57\x78\x6f\x97\x86\x6c\x2b\x6b\x8f\x59\x51\xe4\x16\xa6\x14\x29\x2d\xa5\x33\xca\x06\x03\x8d\x1b\xaa\x4c\xd9\x31\x6c\x33\x14\xd5\xbd\x10\xdd\x56\x68\x98\x9c\x5d\x94\x84\x82\xdd\x09\x91\x36\xcd\x8a\x2a\xb2\x85\x58\x9b\xfb\x1c\x62\x0d\xa6\x31\x8f\xb2\x07\x5f\x49\x79\xda\xdc\xa0\x4a\x2a\x26\x45\x68\x88\xc7\x3b\xb0\x47\xe6\x74\x36\xa9\xe0\xfc\xeb\xf1\x84\xa8\x78\x23\xf4\x8a\x2f\x0c\x36\x8d\x83\xbc\xea\x31\xfa\x8a\x56\x3f\x09\xa1\x26\x6d\xf6\x19\xd3\x7d\xaf\xfa\xc8\x54\xf1\xcf\x92\x0b\x8c\xa8\xa5\x46\xb6\xa8\xa9\xfc\x92\x14\x76\xbb\xed\xa7\x04\x21\xca\x13\x24\xa4\xe5\x3c\x77\x9a\x98\x57\x8f\xd6\x33\xd0\xb6\x03\x7c\x9e\xe7\x9b\x0c\xbe\xad\x9e\xed\x69\xa9\x13\xf4\x05\x2a\x69\x1b\x6d\x6a\xe8\x35\xbb\xdd\xb6\xa4\x70\x89\xa1\x41\xe9\x05\x71\xda\x64\x30\x1a\x20\xd2\xb3\x9b\x41\x97\x55\x0a\x55\xbf\x14\x91\xc9\x97\x69\xaa\x02\x83\x83\x01\x56\xd3\x8b\x59\x6a\xff\x34\x3c\x8e\xe1\xf9\x92\xa2\x08\x11\x6a\xa6\x19\xcc\x65\x06\x3f\x5e\xbf\x7e\x29\xd7\x85\x14\x20\x0c\x56\xd3\xf1\x8c\xcc\xd2\xde\x37\x17\x33\x62\xb5\xc5\x42\x84\x29\x71\x2e\xe7\xcc\x12\x12\x6b\x60\x6a\xbe\xa2\x40\x4a\x9a\xf7\xc8\x0e\x2d\xa4\x5e\x49\x94\xa6\xd8\xfa\x7f\x46\x7e\x2f\xef\x40\xbd\x64\x1a\x30\x21\xbb\x1d\x32\x6a\x03\x28\xb5\xe2\x45\x17\xf6\xdf\x92\xce\xd3\xed\x1d\xcf\xf3\x77\x6e\xda\xc4\x1a\x00\xa3\x19\xcf\x5a\xcf\xb6\xc3\xf7\x92\x65\x6f\xa4\x82\x7d\x97\xc3\x16\x07\x52\xed\x0e\xd7\x6e\x3b\x7c\xd3\x5f\x2c\x74\xf9\x86\x23\x18\xe1\x36\x8f\xaa\x74\x5b\xd6\x2e\x6a\xbc\xe0\xb9\x01\x75\xb8\x15\xd6\xbd\x80\xd9\x60\x70\xa6\xa6\x50\x7b\x29\xf6\xb7\x75\x22\xb4\xb5\x33\x6a\xd7\x7a\x29\x37\xc2\x34\x71\x20\xf4\x0c\xd6\xf6\x11\xee\x35\xde\xaf\x4d\xc2\x6e\x96\xd4\x12\xdf\x1c\xd6\x82\x8e\x4e\xbb\x49\x25\x26\x13\x88\x9b\x3c\xc7\x0e\x87\x30\x50\x08\x33\x53\x84\xce\xd2\xd4\xc4\x9f\xec\x31\xe4\xc5\x8b\x0d\x29\x27\x47\x0e\xdf\x37\x32\x83\xfc\x15\x33\xac\x52\xbc\x7f\x7f\xf7\xf6\x87\xb8\x60\x4a\x03\xde\xbf\xa3\xda\xca\xaa\x32\x62\x66\x3d\x7f\x45\xf4\x94\x59\x3d\x64\xb5\x54\xf6\xfc\xa5\x9a\xba\xf3\xc6\x60\x52\x3e\x8b\xd9\xcf\xec\x33\x76\x1e\x28\x62\x05\x3f\xbf\xbd\x38\x77\x9d\x10\xcd\x98\x61\xf6\xd4\x49\xd0\xcf\x5a\x0a\x44\xf5\x66\x3e\x07\xdd\xd8\x36\x07\x32\x7e\x46\x45\xed\x64\x14\xdc\xde\x77\x91\xc8\x1e\xae\x32\x87\xd8\xbd\xc5\x8a\x94\x25\x29\x69\xd0\xad\xe6\x86\x3a\x0a\xf7\x7a\x18\x84\x17\xfc\xa9\xc9\x5e\x43\xa8\x4a\x5f\x31\x03\xb1\x90\x77\x98\x38\xd1\xd9\xf3\x17\x43\xfa\x2c\x86\xcf\x06\x44\x86\xb7\xda\x30\xa3\x93\x60\x07\x7b\x38\xa0\x4a\x2c\x13\x94\x7c\x39\x46\x25\x05\x42\x3c\xf1\x83\x01\xae\xd8\x40\x5f\x58\x23\xb5\x02\x66\x6b\x9d\x02\xb5\x13\x43\xfc\x89\xd4\x18\xae\x40\x6f\x72\x63\x5d\x30\x5a\x3f\x7c\x73\x6f\xf7\x3a\xdd\x96\x41\xaa\x71\x6d\x39\x15\x07\xd4\xc4\xd7\xbe\x2f\x99\xf4\x09\xdc\x9b\xb3\x97\x78\x02\xd4\x38\xa1\x7f\x77\xf5\xfe\x84\x3d\xf0\xbe\x13\xc4\xce\xea\x88\x5b\xdb\xfd\xac\x97\xae\x5e\x4d\x20\xd7\x10\x6c\x06\x2a\x72\x28\x4b\x21\x7e\x67\x65\x45\x85\x05\xfc\x4a\x87\xb8\xd5\x21\x4d\xf8\x02\xeb\x29\x9f\x79\xe5\x93\xa9\xfd\x3d\x11\x71\xb1\xd1\x2b\xbc\xb5\x3c\x27\x9c\x5e\xc3\x6d\x22\xe3\x6b\xb8\xe5\x9a\x4b\x41\xdf\x30\x33\x5f\x81\x4e\x64\x1c\x7e\x51\x87\xc9\x7f\xe5\x66\xe5\x1a\x12\x19\xb7\x1b\x4a\x52\x8a\x58\x4b\x65\x9a\xb6\xdd\x44\xea\x6a\xa2\xea\x08\x81\x4e\xc3\x6e\x67\xb9\x29\x64\x6c\xc1\x31\x07\x0b\x9e\x4c\x01\x36\xae\xd1\x62\xa7\x53\x9c\xdc\x5a\x88\xe8\x87\xf4\x7c\xea\x67\x98\xa5\xe0\xa0\xb6\xde\x64\x71\xb0\xc7\x39\x35\xb1\x53\xad\x74\xfb\x0e\xd4\x2d\xa8\x84\xc5\xaf\x36\xca\x81\x32\x7d\x2f\x0d\xcb\x93\xbd\x66\x8e\x94\x67\x3e\x61\x9e\xe7\xb7\x05\x08\xc8\x4a\xda\xaf\x20\x61\xa1\x6a\x01\xeb\xca\x1c\x58\x93\xa2\x9a\x6c\x0f\xf7\xd8\x9a\x04\x7a\xbf\x82\x48\x3b\x9a\xa2\x1b\x25\x3f\x42\x94\xc9\x3b\x1b\x8f\x58\x5b\xab\x41\xba\x1f\x71\xa9\xaa\x80\xb7\xc1\xeb\x14\x66\x54\xa7\xaa\x23\x6d\xca\x52\xd5\xd9\xc1\x91\xd5\x9d\x37\xcc\xac\xe2\x35\x17\xf8\x4b\xf8\xca\xba\x31\x3c\x65\x69\x2a\x2e\x11\x4a\x10\x1a\x8a\x89\x89\x9b\xa7\x47\xcb\xb0\xa9\xa6\x8c\x0a\xbf\x4b\x72\x6f\xc1\x8e\x20\x6f\x87\x74\x6b\xad\x56\x0f\x51\x82\x86\x3c\xd8\x32\x94\x27\x58\x92\x7c\x92\x25\x69\x67\x49\xfa\xb8\x25\xe9\x03\x4b\x62\xa9\xae\x2c\xc9\x1d\x3f\x95\xb0\x1a\x62\x0b\x81\x1a\xab\x1a\x88\xdf\xfe\xae\x28\x28\xec\x55\xe0\x57\xdd\xfa\x1f\xd8\x1a\xbe\x95\xca\x59\xeb\x43\xe7\xad\xa5\xdf\x06\xc2\xa6\xc2\x3a\x98\xf8\x13\xc7\xa5\x80\x9c\x26\x74\x53\x36\xb6\xbf\x7e\x3e\x6e\x0f\xb0\xfa\xb1\x77\xa8\xf4\xf0\x82\xf4\xa7\x8f\xc4\xe1\x84\x54\xef\x23\xb6\x48\x3c\x1f\x5f\xb2\xa4\x39\x97\x18\x5e\x50\x4d\x86\x28\x3a\x8f\xd0\x90\x95\xf4\x47\x95\xbf\x97\x6d\xbe\x54\x50\xa6\x0a\x3c\x0e\x5f\x38\x70\x4b\x4d\xdd\x50\x7b\x18\x58\x75\xb2\x59\x53\x74\xc3\x34\x8c\x36\x2a\x47\x33\xca\x43\x5c\x1f\x64\xa5\x66\x61\x78\x45\x85\x94\x26\xe9\x71\x61\x0d\x6e\x09\x98\x58\x51\x96\x25\xdd\xa4\xd7\xc0\xe6\x26\x9e\x2b\x60\x06\x5e\xe6\x4c\x6b\xbc\xcd\xb8\x2e\x72\x76\x6f\xf7\x2b\x41\x96\xad\xb7\x85\xcb\x28\x50\x05\x22\x03\xd5\xe3\xbc\x34\x27\xb9\xca\xc1\x06\x25\x18\xc9\x30\x6a\xeb\x43\x1f\x6f\x46\x4a\x16\x3a\x76\x0d\x54\x43\x0e\x73\x03\x59\xf3\x4d\xd5\x56\xd2\x6e\x77\xab\x43\x74\xf5\x28\xb9\x1e\xcc\xbe\x61\x0a\xd1\x79\xe5\xbc\xfe\x95\xe7\xf9\x9b\xae\xdb\xb5\xf7\x9f\x26\xf3\xb6\xa3\x64\x58\xd1\x0c\x9b\x42\x00\x03\xc6\x1e\x4e\x80\xb7\x2c\xcf\xbd\xcf\xd8\xf4\xd8\x6c\x20\xe5\x5c\xbc\x7a\xd1\x57\x3c\x7b\x60\xcd\x58\xc1\x42\xc7\x9f\xe2\x25\x98\x57\x6f\xdf\xfc\x20\x33\x70\x0e\x9b\x06\xf3\xc2\x18\xc5\x6f\x36\x06\x30\x62\x1b\x23\xed\x7c\x39\x18\x40\x14\xc9\xc5\x02\x85\x90\xd3\x06\x52\x0e\x90\xf0\x5e\x4c\xe1\xd5\x8a\xe9\x17\xd9\xad\x0d\xb6\xb3\xbf\x58\xb9\x69\x4c\x06\x03\x3f\x68\x25\xef\xaa\x57\x98\x50\x88\x17\x72\xbe\xd1\xd6\x57\x5a\x82\x79\x2d\xb8\xe1\x2c\x77\x3c\x1e\x6e\xb0\x73\x62\x20\x11\x9b\x3c\xa7\x35\xff\xd3\x59\x40\xc0\xe9\xac\x2c\xe9\xa7\x0d\xa8\xfb\xef\xa4\xf9\x13\xdc\x5b\x9b\x6f\xe9\xa0\xbe\xe3\x66\xbe\xc2\x60\x65\xf5\x52\x66\x40\xb6\x73\xa6\x21\xfa\xff\xe3\x64\x2f\x0b\x17\x40\xb5\xe4\x51\xd1\x37\xb9\x51\xc0\x3e\x4e\xdc\x90\xaf\x7e\xef\x87\xac\x78\x06\x7b\x5e\x9a\x3d\x2e\xbe\xf2\x3d\xf4\xe6\x66\xcd\xcd\x7f\x58\xaa\x30\x69\xd0\xf7\xad\x9d\xf4\xd0\xd7\xeb\x11\xdb\x6e\xd7\xb3\x54\xe9\x23\xbd\xa7\x31\x5a\x51\xcd\xeb\x35\xae\xd6\x85\xb9\xaf\x77\xa6\xbd\x04\x3d\xa6\x20\x7d\x02\x39\xc6\x6e\x45\xe5\x11\x76\xdb\xba\x50\xb6\xa2\xd6\xff\xf3\xbc\x75\x88\x3d\x91\xc5\xc6\x2c\x49\x2b\xad\x55\xe3\x8c\x14\x1e\x3d\xae\xe1\xd3\x06\xb4\x81\x70\xf4\x2f\x6b\x63\x23\xde\x56\xae\x61\x79\xf5\xb9\x38\xdd\xb0\x3d\x80\xc5\x46\xf1\x35\x26\x9d\x18\x68\xa1\xe3\xdc\x7b\x0a\xed\x21\xf3\x15\xcc\x3f\x42\x66\x03\x82\xde\x8c\xc4\xfe\x28\x9b\x8e\xa6\x1f\x66\xdb\x12\x93\x2f\x86\x67\xcf\xd3\xe4\x32\xfe\x70\xfe\xe1\xc3\xdf\x9e\xed\xfe\xdf\x07\x4d\x67\x36\xda\xff\xf0\xe1\xd9\x00\x91\x12\x03\x21\xd4\x06\xbe\x9e\x7c\xeb\xda\xd6\x24\x70\x2b\xef\x5e\x02\x2e\x11\x5f\xa2\x04\x2d\x91\x67\xdd\x0b\xe2\x90\xf5\x79\xbc\x0f\xa6\xf1\x7e\x5e\x87\x0f\xce\x8b\x84\x80\xe2\xfb\x38\xda\x7b\x71\x69\x3a\x8f\xeb\xb0\xd8\x2a\x0d\x86\x74\x3a\x23\x74\xfb\x29\x39\x49\x9c\x21\xf1\xf2\x20\x8e\xb4\xfa\xb7\xf2\x33\xfb\x61\xcd\xe6\x07\x46\x07\x97\x6f\x9f\x31\xa2\x3c\x39\x4d\x8c\x3e\xfe\xeb\x66\x8f\x4e\xd3\x82\xce\xe8\xb2\xa4\xfa\x70\x2b\xba\x9e\xd4\x81\xdc\xf6\xbe\x75\x2f\xa9\x54\xa7\x0f\x53\x43\x59\xfa\x90\x98\xa9\x48\x4f\x10\xe7\xc4\x78\x81\xda\x58\x96\xaa\x8a\xc1\x34\xc7\x10\x73\x42\x75\xab\x21\x08\x89\x50\x56\x8f\x71\xcb\x52\x51\x3f\x37\xd7\x29\xe9\x01\x88\x1f\x9e\x64\x3e\xe9\x71\xaa\xb6\xec\x76\x9d\xfe\xa7\xa9\x49\x38\x39\x1e\xd1\x89\x66\xaf\x87\x76\xff\x80\x08\x6f\x55\x87\xab\x97\xb4\x03\xc2\x7d\xec\xa7\x4f\x60\x7f\x30\xe8\xf4\x3f\x8d\xfd\x92\x36\xb1\xf7\x21\x9c\x64\xd9\x6d\x5b\x87\x9a\xda\x7b\xc3\x44\x47\x75\x8e\x29\xf6\x83\x6a\x79\x02\xf5\xd4\x86\x35\x68\x05\x7c\xb9\x32\x88\x3a\xbf\x0b\x85\xc6\x82\x65\x19\x17\x4b\x44\xd1\xc5\xb8\xf8\x1c\x8d\x5d\xbb\xa1\x68\xcd\x3e\x8f\xea\x01\x75\xab\x2c\xd8\x9c\x9b\x7b\xdf\x54\xd2\xe6\xd9\xf7\xab\x89\xa1\x65\xc6\x1d\x0f\xb2\xcd\xc7\xf8\x90\x89\x7e\xfa\x2f\xc6\xe3\xe2\xf3\x21\x0f\x17\x88\x50\xb5\xf7\x12\x0f\xbd\xff\x06\x1f\x1e\xe3\x2b\xdf\xb0\x0a\xd1\x4d\x6a\x9d\xc4\x74\x5b\x4e\x1a\x9d\xbc\xfa\xf6\xe6\x3f\x42\xba\xd4\xe5\x3e\x7a\x66\xed\x1d\x63\x7c\x16\xa8\x2f\x04\xd9\x54\xb1\x47\x23\xd8\xb0\x4b\x94\xa4\xce\xc6\xe8\x26\xf9\x2e\xdd\x41\x59\x8a\x50\x7d\xcb\x3c\x18\x60\x96\xf6\x86\x37\x19\xbf\x45\x74\xeb\x6e\x5e\x7d\xe8\xe1\x46\xa3\x92\x3e\xa1\xf7\x28\x87\x85\x39\x36\x84\x21\xba\x5d\x29\x58\x24\x28\x28\x6e\xf6\x93\x57\xef\x95\x59\xe7\x88\x36\xe6\xca\xb9\xf8\x38\x5a\x2a\x76\x8f\x4a\x8a\xae\x42\xe7\xc8\xe9\x39\x22\xe4\x49\x04\x29\xa7\x12\xa7\x32\x71\xcb\x72\x54\x52\x8e\x75\xec\x32\x4e\x84\xa2\xb5\x8e\x8c\xfd\x89\x08\x45\x11\xa2\x36\x96\x7e\xea\x54\x3e\x9d\xe5\xe7\xf2\xb9\x84\x5f\x38\x99\xf6\xe9\x21\x8a\xa2\x45\x10\xc5\xc3\xc2\xe0\x59\x82\xb8\x28\x36\x8f\xf0\xef\xbb\xb1\x63\x9d\xfc\x0c\xbe\xdb\x27\x14\xf2\x3e\x06\x3e\x1b\x44\x9d\xc7\xb6\x92\xb9\x35\xa3\x10\xa9\x46\x37\xf7\xd6\x21\x83\xcf\x85\x05\x1e\xc5\xd9\x28\x67\x37\x90\xa3\xbe\xf7\x4e\x17\x3e\x21\xda\x8c\x0b\x13\x17\x16\x52\x29\xfe\x04\xf7\xaf\xac\xcb\xee\xd4\xb9\x13\x8c\x51\x29\xbc\x93\xdc\x7a\xe9\x9a\xca\x53\xd5\xe3\x66\x63\x8c\x14\x23\x96\x65\x23\x29\x8e\xf1\xee\x3b\x05\xe6\x33\x99\x31\x83\xa8\xe1\x26\xaf\x03\x73\x4b\xe9\xcb\x9c\xcf\x3f\x1e\x78\xf6\xe5\x49\x9b\x73\xf3\xf8\xd6\xb0\x00\xb8\x41\x5e\x2c\xbb\x3d\x36\x46\x17\x4c\xb4\x99\x94\x73\xc3\xe7\x52\x44\xe1\xdf\xd1\x7c\x05\xb7\x4a\x8a\xd1\xa6\x88\x2c\x96\x8f\xec\x64\x6d\x0e\x9a\x10\x7f\xb2\x2c\x17\x1c\xf2\xec\x18\x55\x7e\xff\xe9\xd6\x5a\xf9\xb7\x52\xd9\xde\x56\x79\x4b\x8a\xac\x36\x47\x7f\x66\x66\x85\x9e\xb4\xd0\xe8\x41\x9d\xae\xd4\xb5\xa9\xa7\x56\x8c\x7e\xd5\xb6\xca\xaa\xa6\x22\x86\x0e\x1d\xcd\xeb\x44\xc7\x6d\xcd\x6b\x05\xa5\x8f\x6d\xf8\x2f\x96\x57\xf3\x98\x6f\x00\x62\xf4\x4f\x15\x5f\x8b\x88\x07\xa4\xd8\xee\xd7\x11\x66\x7f\x54\xde\x96\x69\x5f\x30\xfc\x9b\x89\x96\x2f\x85\x54\x30\xb2\x2e\xad\x95\xec\x6b\xf7\x18\xbd\xb4\x8f\xbf\x81\x4c\x9d\xc9\x37\x56\x0c\x58\xea\xdc\xe2\x1b\xf9\x39\x48\x90\x7b\x6a\x7e\x2b\x96\x43\x10\x32\x0a\xe9\xfc\x92\xa2\x1f\x43\xcd\xa3\x58\x46\xe1\x65\x7e\xff\x5b\xb1\xdf\x59\xbd\x5f\x02\x79\x45\xdb\xaf\x2c\x83\x46\xff\xf5\x26\x37\xdc\xfb\x50\x3f\x85\xd7\xb5\x84\xfc\x1d\x6d\x49\xd1\x3b\xf7\x3e\xb2\xbe\xda\xaf\x29\x0f\xbf\x6c\x10\x48\xb8\x10\x6e\xce\x20\xd5\x7a\x34\x97\xc2\x28\x99\x47\x0d\x3a\x11\x75\x0f\x45\x0e\xc9\xd9\x98\x6a\xfe\x9f\x90\xd4\x57\x43\x17\xbf\xa3\x40\xbc\xf0\x2a\xea\xcd\x63\xde\x41\xf3\x2c\x64\x22\x88\xde\xfd\x6a\x1f\x69\x8d\xd0\xe7\x08\x43\xb0\x46\xd4\xa5\x52\x51\x1d\x1c\x38\x0f\xc7\xeb\x7a\x64\xf5\x99\x46\xbe\xcc\xc0\x1e\xff\x05\x33\x2b\x1a\x69\xb3\x59\x2c\xa2\x9c\x7f\x84\xc8\xac\x98\x89\xad\x63\xc7\x5c\x52\x3c\x4b\x0f\x73\x00\xce\xed\x86\xf8\x7b\x2e\xe0\x87\xcd\xfa\x06\x14\xd5\x29\xc4\xdf\xc0\x42\x2a\xa8\x0b\x23\xab\x4c\xcc\x8b\x85\x81\xaa\x6c\x84\xd6\xbd\x7a\x9c\x6d\xca\x6a\x77\x7b\xeb\xa7\x4d\xd4\x48\x0f\x19\x7d\x29\x85\x01\x61\x12\xf0\xb7\xae\xae\x18\xc8\x5f\x60\xb6\x3b\xef\x3b\x3a\xd2\xaa\xde\xe3\x92\xd0\x8a\x8c\xbe\x65\xf5\xe1\xb2\x43\x3d\xbc\x38\xbe\x6c\x49\x8b\xfe\xaa\x22\x27\x95\x35\x2b\x70\x46\xa8\xbb\x3a\x67\xe9\xd8\x5f\x00\x79\x99\xb0\xe7\x62\xc2\xaa\x82\x51\xee\x8a\x16\xa8\x4c\xcd\xa5\x99\xd6\x85\x43\x17\xb3\x38\x10\x31\xba\x98\xf0\xe9\xb8\x7a\x7c\x9e\xca\x4b\xde\x1f\xa2\x40\xe8\xf2\xb5\xbc\x0c\x7c\x00\x49\xcc\x60\x10\x2e\x90\x07\x03\xdc\x9c\x7f\x84\xe5\xa8\x1a\x41\x66\xbe\x4b\x7a\x36\xb6\x9c\x25\xd8\x0c\x06\xda\x4f\x61\x6c\x98\xc8\x49\x59\xe5\x13\x9b\x2f\x74\x49\x17\x69\xa3\xd0\xd4\xec\xab\x85\x60\x5f\xf6\x64\x4f\xab\x20\xc2\xd4\x50\x15\x73\x21\x40\xfd\xf1\xfd\x9b\xef\xcb\xc9\x22\x86\x34\x93\x73\x57\x5e\xd6\x67\x0e\x3e\x78\x5a\x3f\x7a\x1d\x63\x8f\xa5\xb0\xc4\x5f\x38\xdc\xa1\x13\xae\x1a\x64\x01\x22\x39\x6b\xa4\x65\xb9\x7e\xb1\x31\xf2\x3b\x10\xa0\x98\x81\xac\x2c\xa9\x91\xcb\x65\x3d\xef\x41\x32\xd7\xc7\x72\x76\x9a\x4b\xf7\x3c\xcf\xa5\xae\x3a\x63\xe2\xad\xd4\xbe\xad\x9b\x4a\xda\x78\x3c\x9c\xae\xbe\xf9\xf1\x94\x8d\x4b\x52\xd2\xe6\x9c\x8f\x8e\xb0\x5a\xf9\x70\xf4\xec\x19\xb5\x50\x54\x85\xfe\x55\xcb\x6d\x15\xee\x57\x0d\xd6\x77\xa8\x52\x75\xbe\xcd\x7a\x55\x56\xda\x55\x7e\xce\xb7\xde\xe4\x72\xfe\x51\x3b\x5d\xdf\xeb\x62\x5d\x4d\xcf\x8e\xbd\x38\xac\x47\x0e\x4a\x5a\xdd\xad\x2e\x30\xc4\x81\xf1\x66\xe1\x76\xdd\xe8\xcc\x6a\x32\xb1\x16\x5b\x5f\xaa\xa6\xe3\x70\x21\x6b\x7c\xb9\xba\x72\x17\xb6\x67\x8c\x6c\x83\xca\x2e\xb0\x22\x21\xf5\x5f\xee\x9b\xba\x85\x7b\xd5\x74\x23\x66\xad\xae\x2a\xf1\x23\x34\x8c\x40\xcf\x61\xfd\x35\x1a\x2e\xb0\x7d\x4d\x86\xe8\xf9\xb9\x7d\xf6\x25\xf7\xad\x32\xc1\x6a\x9e\xda\x76\x74\xc8\xe7\x22\x52\x62\x46\x55\x9d\xa4\x3e\xed\x34\xc8\xb9\x80\x47\x63\xf8\x79\x5c\x5f\x12\x63\x57\x68\x10\x0c\x9c\x1a\xd2\x8a\xe4\xc5\x66\x8d\xa8\x61\x6a\x09\x26\x41\x3f\xdd\xe4\x4c\x7c\xb4\x47\x8d\xab\x33\xb4\xda\x04\x2a\xb2\x87\xc4\x02\x94\x02\x85\xca\x7a\x9e\x23\x47\xd7\x61\x88\x93\xdb\xd8\x98\x66\x4c\x2c\x41\xc9\x8d\xce\xef\xdf\x59\x8b\x0c\x86\x9f\x6c\x7f\xfa\xc9\x9e\xeb\x89\x28\x43\x8e\xe4\x49\x92\x58\x5b\x45\x41\x25\x15\x0e\x85\x45\x6a\x0f\xb9\xd6\x7d\x47\xaf\x41\xbb\x6f\x26\x4e\xa4\xde\xea\xfa\xe8\x86\x65\x4b\xe7\x7f\xbe\xf8\xf1\xfd\xdb\xef\xae\x7e\xb8\xba\x7e\xf1\xfe\xea\xd5\xe9\x99\x0e\x3b\x49\x84\x86\xb8\x8b\x16\xc8\xfe\x45\x09\x72\xc6\x9d\x21\x72\x6a\x16\xc4\x45\xb8\x1d\x37\xa0\x05\x51\x4f\x55\x0e\xe7\x1c\x58\x7c\x3f\x5d\x0f\x34\xa1\xe2\x29\xfc\x8f\x6e\x64\x76\x6f\xf5\x87\x38\x1f\xe2\xf6\x24\x24\xd7\x1e\xc3\xa5\xe8\xad\xe2\x99\xc7\x55\x33\xee\x80\xda\xa9\xf0\x77\xdb\x45\xbf\x42\x3e\x0e\x7f\xeb\x50\xdd\xd5\x42\x3f\x97\x83\xaa\xea\xbe\x44\xda\xc5\x41\xf7\x5d\xd1\x03\xaa\xbd\xa6\xdb\x3a\xc6\x1d\xa1\x21\xf3\xdf\xbc\x18\xf7\xb1\x0b\xd0\x0a\x70\x13\x9f\x60\x12\x16\x7b\x3d\xdc\x26\x05\xd6\xfb\xf2\x1a\x4f\x6d\xa2\x68\x47\xe1\x13\x1d\xb7\x4f\x34\x67\x2e\xbc\x99\x76\x0c\xe8\xf6\x9c\x0d\x06\x98\xf7\x1b\x47\x9d\x6b\x69\x1a\xa0\x64\xaa\xa3\x88\xfb\xcd\x2a\x29\xb2\x3f\x23\x96\xe7\x11\xa2\x8c\xa2\x28\x88\x2e\xe2\x22\x42\x74\x1e\x37\x0a\x74\xb0\x79\x4a\x2c\xe1\x03\x6d\x41\xb9\xd3\xa5\xeb\x93\x6a\x4a\x9e\xe6\x0e\x8c\xeb\x53\xbf\x5d\x66\xf3\xd0\x91\xef\xf8\x68\x9c\xf7\xfe\xd9\x1f\xf6\x6f\xd5\xcb\xaa\x4b\xd2\xeb\x28\xba\x6f\xd6\xda\xd7\x0a\x96\x62\xf7\x48\x5c\x61\x9c\x32\xae\xf0\x0c\x07\x25\x71\x57\x97\x97\xc7\x86\x4c\xcd\xac\xed\x73\x74\x6f\x2c\x5b\x3d\xdb\x1e\x4b\xb8\xf8\xe8\x78\x15\x50\x06\x56\x7a\x05\xd2\xe1\x11\x5b\xf7\x91\xce\x0f\x59\x3e\xd6\xfd\xa2\xd7\x64\x9f\x74\x18\x58\x93\xf9\xe7\xa0\xac\x25\xf9\xe4\x14\xdf\x1a\x96\x6c\xd4\xcd\xf3\x59\x5a\xd1\xb1\xf4\xdd\xe1\x1c\xd6\xe2\x51\xd9\xb5\x98\x0e\xe6\x9d\x3c\x1b\x17\x19\x9f\x33\x23\x55\x74\x2c\xfd\xd8\x27\xc5\x4d\x81\x12\xe4\xab\xeb\x8e\xca\xe4\x08\x0d\xb7\x0d\x74\x0b\x90\x1e\x90\x20\xe9\xc1\x55\x8b\x79\x5d\x97\xd4\xa1\x61\x17\xa8\x3d\xda\x1d\xa2\x75\x13\x8b\x93\x8e\xdf\xea\xea\xe2\x4b\x42\x97\x27\x60\x86\xde\xe4\x21\x88\x78\x42\x65\x57\xa3\x86\xfb\x91\xba\xae\x50\xf2\xe8\x8b\x9c\x5c\x8e\x3c\x51\xf1\xa7\x50\xd6\xd5\x30\x90\x17\x79\x7e\x02\x64\x74\x30\xc2\x4a\xe8\x00\x23\x2a\x50\x68\x02\x55\x0b\x02\xfc\x8b\xb0\x7c\x6b\xdd\x43\xbb\x7d\x91\xe7\x0d\x2b\x3f\xa5\xf3\xc5\x49\x95\x5f\x4d\xb1\x94\x7d\xa0\xc0\x17\x4d\xe5\x74\xd5\xa2\xe4\x71\xa0\xe0\x99\xf5\x64\x46\x7e\xf6\x56\x3e\xc7\xcd\x70\x34\x17\x64\x94\x14\xcb\x2a\x7d\x72\x75\x7d\xfd\xf6\x3a\x41\xad\xcb\x42\x4f\x80\x8d\x2f\xfc\xc7\x80\x69\xeb\xe6\xd1\xf1\x32\x18\x8c\xd3\xbe\xf6\x2a\xa4\x78\x2a\xf5\x25\x45\xff\xf8\xfb\x7f\xfd\x20\xcd\x8a\x8b\x65\xb4\x90\x2a\xba\x97\x1b\x1a\xbd\x62\x77\xcb\xf8\x1f\x7f\xff\xef\x87\x2e\xad\x3c\x1f\xe3\x28\x50\x80\x48\x4d\x79\x2f\x85\x55\x25\x9f\x6b\x73\x3a\xfa\x0b\x88\xed\x4f\x3a\xae\x97\x88\x6e\xb5\x9a\x27\x88\xaf\xd9\x12\xf4\xf9\xcd\x46\xdf\xc7\x4b\xbe\x38\x8a\x8b\x0d\x06\xbc\x85\x71\xb1\x8c\xe3\x18\x85\x9b\x55\x68\xd3\xef\xa1\xa0\x87\xa7\xdd\xce\x25\xab\x4c\xc7\x45\x73\xf6\xf9\x00\x73\xd7\x01\xc4\xbc\x65\x0d\xd5\x1e\xc2\xea\x7a\x7f\x87\x5c\xf1\x75\x0d\x58\xae\xd0\xa8\xc2\x29\xa8\x2a\x87\x0e\xbf\x02\xb0\x21\x65\xc3\x19\xdb\x7f\x7a\xe6\xbe\xd0\x3c\xed\xb4\x62\x8e\x8b\xa3\xd7\xc1\xb5\xf3\xd6\xf6\xd5\xbc\x99\xff\xaf\xaf\xab\xdc\xb1\x50\x86\x4b\xd3\xab\xcf\x05\x13\xce\xeb\x3b\x96\x94\xed\x27\xa6\xc2\x91\x5f\xe1\xf2\xac\xa6\xe5\xa5\xcc\x73\x56\x68\xf0\xd4\x3c\x7e\xe1\x57\xeb\xac\xa6\xee\x5b\x1d\x7a\xf5\xe8\x39\xf1\xa2\x28\x4e\x3b\x20\xa4\xab\xb3\xf0\x9f\xd5\xb8\x24\xf0\xe5\x74\x96\x54\xd5\x09\xe1\x9b\x3a\x8a\x0e\x9c\xaf\x4f\x09\xc4\x9f\x28\x4f\x20\xe6\x75\x15\x57\x5d\xaa\x14\x74\xaa\xaa\x53\x6a\xd5\x9a\xb5\x8b\x95\x42\x25\x99\x29\x49\x55\xdc\xfe\x68\x25\xb2\xcb\xc8\x40\xb3\xd0\x4e\x35\x2b\x2a\x48\x5d\x51\x07\xed\x8a\x3a\xd5\x3a\xe4\x42\xc1\xae\xd3\xf2\x79\xe3\xf3\x8f\xee\x5a\x3e\x44\xf2\x1e\xaa\xae\x8a\xaa\x1b\x33\xf9\xcf\x9a\xd8\x9e\x0f\xaa\xaa\xea\xa4\xea\xa0\xee\x39\x5c\x75\x1d\x14\x75\x67\xae\xeb\x2a\x31\x09\x9f\x1c\xb8\x13\x67\x4f\x67\xfd\x9d\xc2\x81\x54\xa8\xae\x29\xfd\xad\x16\xf7\x5f\x3a\xf4\xec\xc7\x29\xeb\x3a\x8c\xf4\xd3\x1a\x3f\xe7\x1d\x17\x99\xbc\x8b\x59\x96\x5d\xdd\x82\x30\xdf\x87\xcf\x76\x31\x2a\x64\xe1\xb6\x14\xd1\x83\xef\x0b\xfd\x47\x7d\x7d\x3b\x52\x95\x82\x5b\x5a\xf7\x1f\xf2\x39\xbf\xa1\x5b\xd1\x7a\x58\x26\xbb\x29\x32\x66\xe0\x8f\x5c\x1b\xa9\xee\x31\x34\xe7\xa8\x23\x94\x96\xa0\x1a\xb5\xb0\xad\xb1\x3d\x95\x88\xf5\x47\xa2\x05\x33\x2b\xeb\x34\x0f\xd1\xe5\xa7\x14\x0d\x41\x1c\x7c\x5f\x0a\xf1\x27\x32\x44\x03\x7e\xec\x2d\xb7\x6f\x83\x95\x1d\xeb\x53\xd5\x0b\x0e\xd1\xc0\xd9\xdf\xb1\x7e\xee\xa5\xed\xd5\x34\xc8\x63\x9d\x9b\x7d\xec\x98\xf0\x75\xde\x30\x58\xdd\x64\xe5\xb9\x77\x29\xc8\xb0\xef\xee\x7f\xc6\x30\x25\x45\x88\x9a\x5f\x16\x47\x39\x8d\xe9\x7b\xbd\x0a\xa7\x9e\xde\x7f\xe6\x10\x0a\x65\x83\x4f\x50\xd5\xa3\xfa\x47\xde\x2e\x34\xf5\x8d\x6d\xac\x6a\xbc\xe8\x01\xad\xa6\x63\xd5\x83\x5e\x9d\xa2\xae\x1e\x7d\x0b\x39\x88\x4e\xf3\x11\x97\x62\x59\x9f\xe9\x7b\x5f\xbf\xcd\x9e\x0f\x17\x26\x7e\xb0\x17\xec\x7e\xb3\xfa\xa6\xbc\x72\xb2\x24\xb4\xbe\xcc\x58\x82\x09\xef\xbe\xb9\x7f\x9d\x61\xa4\xa4\x34\xc8\x99\xb9\x05\x18\x4c\x4a\x82\xc9\xe4\x7f\x02\x00\x00\xff\xff\x93\xeb\x36\x62\xde\x46\x00\x00" func jsHoundJsBytes() ([]byte, error) { return bindataRead( @@ -496,7 +496,7 @@ func jsHoundJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "js/hound.js", size: 18137, mode: os.FileMode(420), modTime: time.Unix(1676349850, 0)} + info := bindataFileInfo{name: "js/hound.js", size: 18142, mode: os.FileMode(420), modTime: time.Unix(1677033948, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -516,7 +516,7 @@ func jsJquery213MinJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "js/jquery-2.1.3.min.js", size: 84320, mode: os.FileMode(420), modTime: time.Unix(1676349849, 0)} + info := bindataFileInfo{name: "js/jquery-2.1.3.min.js", size: 84320, mode: os.FileMode(420), modTime: time.Unix(1677033947, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -536,7 +536,7 @@ func jsReact0122MinJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "js/react-0.12.2.min.js", size: 130436, mode: os.FileMode(420), modTime: time.Unix(1676349849, 0)} + info := bindataFileInfo{name: "js/react-0.12.2.min.js", size: 130436, mode: os.FileMode(420), modTime: time.Unix(1677033947, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -556,7 +556,7 @@ func jsSignalJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "js/signal.js", size: 1401, mode: os.FileMode(420), modTime: time.Unix(1676349849, 0)} + info := bindataFileInfo{name: "js/signal.js", size: 1401, mode: os.FileMode(420), modTime: time.Unix(1677033947, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -576,7 +576,7 @@ func jsSignalTestJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "js/signal.test.js", size: 2005, mode: os.FileMode(420), modTime: time.Unix(1676349849, 0)} + info := bindataFileInfo{name: "js/signal.test.js", size: 2005, mode: os.FileMode(420), modTime: time.Unix(1677033947, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -596,7 +596,7 @@ func open_searchTplXml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "open_search.tpl.xml", size: 351, mode: os.FileMode(420), modTime: time.Unix(1676349849, 0)} + info := bindataFileInfo{name: "open_search.tpl.xml", size: 351, mode: os.FileMode(420), modTime: time.Unix(1677033947, 0)} a := &asset{bytes: bytes, info: info} return a, nil } From a80c8631ab1c0a94d783e59fc4faa915a5646321 Mon Sep 17 00:00:00 2001 From: Jeff Swensen Date: Sun, 5 Mar 2023 14:35:47 -0500 Subject: [PATCH 2/3] add hound_searcher_started_total --- searcher/searcher.go | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/searcher/searcher.go b/searcher/searcher.go index 791ce810..272d3e1b 100644 --- a/searcher/searcher.go +++ b/searcher/searcher.go @@ -16,6 +16,9 @@ import ( "github.com/hound-search/hound/config" "github.com/hound-search/hound/index" "github.com/hound-search/hound/vcs" + + "github.com/prometheus/client_golang/prometheus" + "github.com/prometheus/client_golang/prometheus/promauto" ) type Searcher struct { @@ -264,7 +267,7 @@ func reportOnMemory() { // Utility function for producing a hex encoded sha1 hash for a string. func hashFor(name string) string { h := sha1.New() - h.Write([]byte(name)) //nolint + h.Write([]byte(name)) //nolint return hex.EncodeToString(h.Sum(nil)) } @@ -390,6 +393,13 @@ func updateAndReindex( return newRev, true } +var ( + searchersStarted = promauto.NewCounter(prometheus.CounterOpts{ + Name: "hound_searcher_started_total", + Help: "The total number of Searchers started", + }) +) + // Creates a new Searcher that is capable of re-claiming an existing index directory // from a set of existing manifests. func newSearcher( @@ -401,13 +411,13 @@ func newSearcher( vcsDir := filepath.Join(dbpath, vcsDirFor(repo)) log.Printf("Searcher started for %s", name) + searchersStarted.Inc() wd, err := vcs.New(repo.Vcs, repo.VcsConfig()) if err != nil { return nil, err } - rev, err := wd.PullOrClone(vcsDir, repo.Url) if err != nil { return nil, err From d64f275d9ebdbdd3a8e146b79c59c62a9b9a8cef Mon Sep 17 00:00:00 2001 From: Jeff Swensen Date: Sun, 5 Mar 2023 15:08:00 -0500 Subject: [PATCH 3/3] add search_duration_seconds --- api/api.go | 18 +++++++++++++--- searcher/searcher.go | 2 +- ui/bindata.go | 50 ++++++++++++++++++++++---------------------- 3 files changed, 41 insertions(+), 29 deletions(-) diff --git a/api/api.go b/api/api.go index c893e73c..4c950542 100644 --- a/api/api.go +++ b/api/api.go @@ -13,6 +13,8 @@ import ( "github.com/hound-search/hound/config" "github.com/hound-search/hound/index" "github.com/hound-search/hound/searcher" + "github.com/prometheus/client_golang/prometheus" + "github.com/prometheus/client_golang/prometheus/promauto" ) const ( @@ -89,7 +91,7 @@ func searchAll( *filesOpened += r.res.FilesOpened } - *duration = int(time.Now().Sub(startedAt).Seconds() * 1000) //nolint + *duration = int(time.Now().Sub(startedAt).Seconds() * 1000) //nolint return res, nil } @@ -159,6 +161,13 @@ func parseRangeValue(rv string) (int, int) { return b, e } +var ( + searchDuration = promauto.NewHistogram(prometheus.HistogramOpts{ + Name: "search_duration_seconds", + Help: "Histogram for the runtime of the search endpoint", + }) +) + func Setup(m *http.ServeMux, idx map[string]*searcher.Searcher) { m.HandleFunc("/api/v1/repos", func(w http.ResponseWriter, r *http.Request) { @@ -171,6 +180,9 @@ func Setup(m *http.ServeMux, idx map[string]*searcher.Searcher) { }) m.HandleFunc("/api/v1/search", func(w http.ResponseWriter, r *http.Request) { + timer := prometheus.NewTimer(searchDuration) + defer timer.ObserveDuration() + var opt index.SearchOptions stats := parseAsBool(r.FormValue("stats")) @@ -262,7 +274,7 @@ func Setup(m *http.ServeMux, idx map[string]*searcher.Searcher) { type Webhook struct { Repository struct { - Name string + Name string Full_name string } } @@ -272,7 +284,7 @@ func Setup(m *http.ServeMux, idx map[string]*searcher.Searcher) { err := json.NewDecoder(r.Body).Decode(&h) if err != nil { - writeError(w, + writeError(w, errors.New(http.StatusText(http.StatusBadRequest)), http.StatusBadRequest) return diff --git a/searcher/searcher.go b/searcher/searcher.go index 272d3e1b..262c0034 100644 --- a/searcher/searcher.go +++ b/searcher/searcher.go @@ -395,7 +395,7 @@ func updateAndReindex( var ( searchersStarted = promauto.NewCounter(prometheus.CounterOpts{ - Name: "hound_searcher_started_total", + Name: "searcher_started_total", Help: "The total number of Searchers started", }) ) diff --git a/ui/bindata.go b/ui/bindata.go index 405babb9..6aea2adf 100644 --- a/ui/bindata.go +++ b/ui/bindata.go @@ -116,7 +116,7 @@ func cssHoundCss() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "css/hound.css", size: 6848, mode: os.FileMode(420), modTime: time.Unix(1677033947, 0)} + info := bindataFileInfo{name: "css/hound.css", size: 6848, mode: os.FileMode(420), modTime: time.Unix(1678046396, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -136,7 +136,7 @@ func cssOcticonsLicenseTxt() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "css/octicons/LICENSE.txt", size: 293, mode: os.FileMode(420), modTime: time.Unix(1677033947, 0)} + info := bindataFileInfo{name: "css/octicons/LICENSE.txt", size: 293, mode: os.FileMode(420), modTime: time.Unix(1678046396, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -156,7 +156,7 @@ func cssOcticonsReadmeMd() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "css/octicons/README.md", size: 200, mode: os.FileMode(420), modTime: time.Unix(1677033947, 0)} + info := bindataFileInfo{name: "css/octicons/README.md", size: 200, mode: os.FileMode(420), modTime: time.Unix(1678046396, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -176,7 +176,7 @@ func cssOcticonsOcticonsLocalTtf() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "css/octicons/octicons-local.ttf", size: 52764, mode: os.FileMode(420), modTime: time.Unix(1677033947, 0)} + info := bindataFileInfo{name: "css/octicons/octicons-local.ttf", size: 52764, mode: os.FileMode(420), modTime: time.Unix(1678046396, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -196,7 +196,7 @@ func cssOcticonsOcticonsCss() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "css/octicons/octicons.css", size: 11740, mode: os.FileMode(420), modTime: time.Unix(1677033947, 0)} + info := bindataFileInfo{name: "css/octicons/octicons.css", size: 11740, mode: os.FileMode(420), modTime: time.Unix(1678046396, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -216,7 +216,7 @@ func cssOcticonsOcticonsEot() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "css/octicons/octicons.eot", size: 31440, mode: os.FileMode(420), modTime: time.Unix(1677033947, 0)} + info := bindataFileInfo{name: "css/octicons/octicons.eot", size: 31440, mode: os.FileMode(420), modTime: time.Unix(1678046396, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -236,7 +236,7 @@ func cssOcticonsOcticonsLess() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "css/octicons/octicons.less", size: 12018, mode: os.FileMode(420), modTime: time.Unix(1677033947, 0)} + info := bindataFileInfo{name: "css/octicons/octicons.less", size: 12018, mode: os.FileMode(420), modTime: time.Unix(1678046396, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -256,7 +256,7 @@ func cssOcticonsOcticonsSvg() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "css/octicons/octicons.svg", size: 86997, mode: os.FileMode(420), modTime: time.Unix(1677033947, 0)} + info := bindataFileInfo{name: "css/octicons/octicons.svg", size: 86997, mode: os.FileMode(420), modTime: time.Unix(1678046396, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -276,7 +276,7 @@ func cssOcticonsOcticonsTtf() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "css/octicons/octicons.ttf", size: 31272, mode: os.FileMode(420), modTime: time.Unix(1677033947, 0)} + info := bindataFileInfo{name: "css/octicons/octicons.ttf", size: 31272, mode: os.FileMode(420), modTime: time.Unix(1678046396, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -296,7 +296,7 @@ func cssOcticonsOcticonsWoff() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "css/octicons/octicons.woff", size: 17492, mode: os.FileMode(420), modTime: time.Unix(1677033947, 0)} + info := bindataFileInfo{name: "css/octicons/octicons.woff", size: 17492, mode: os.FileMode(420), modTime: time.Unix(1678046396, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -316,7 +316,7 @@ func cssOcticonsSprocketsOcticonsScss() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "css/octicons/sprockets-octicons.scss", size: 11758, mode: os.FileMode(420), modTime: time.Unix(1677033947, 0)} + info := bindataFileInfo{name: "css/octicons/sprockets-octicons.scss", size: 11758, mode: os.FileMode(420), modTime: time.Unix(1678046396, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -336,7 +336,7 @@ func excluded_filesTplHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "excluded_files.tpl.html", size: 459, mode: os.FileMode(420), modTime: time.Unix(1677033947, 0)} + info := bindataFileInfo{name: "excluded_files.tpl.html", size: 459, mode: os.FileMode(420), modTime: time.Unix(1678046396, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -356,7 +356,7 @@ func faviconIco() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "favicon.ico", size: 1150, mode: os.FileMode(420), modTime: time.Unix(1677033947, 0)} + info := bindataFileInfo{name: "favicon.ico", size: 1150, mode: os.FileMode(420), modTime: time.Unix(1678046396, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -376,7 +376,7 @@ func imagesBusyGif() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "images/busy.gif", size: 4178, mode: os.FileMode(420), modTime: time.Unix(1677033947, 0)} + info := bindataFileInfo{name: "images/busy.gif", size: 4178, mode: os.FileMode(420), modTime: time.Unix(1678046396, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -396,7 +396,7 @@ func indexTplHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "index.tpl.html", size: 821, mode: os.FileMode(420), modTime: time.Unix(1677033947, 0)} + info := bindataFileInfo{name: "index.tpl.html", size: 821, mode: os.FileMode(420), modTime: time.Unix(1678046396, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -416,7 +416,7 @@ func jsJsxtransformer0122Js() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "js/JSXTransformer-0.12.2.js", size: 471852, mode: os.FileMode(420), modTime: time.Unix(1677033947, 0)} + info := bindataFileInfo{name: "js/JSXTransformer-0.12.2.js", size: 471852, mode: os.FileMode(420), modTime: time.Unix(1678046396, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -436,7 +436,7 @@ func jsCommonJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "js/common.js", size: 2378, mode: os.FileMode(420), modTime: time.Unix(1677033947, 0)} + info := bindataFileInfo{name: "js/common.js", size: 2378, mode: os.FileMode(420), modTime: time.Unix(1678046396, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -456,7 +456,7 @@ func jsCommonTestJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "js/common.test.js", size: 5902, mode: os.FileMode(420), modTime: time.Unix(1677033947, 0)} + info := bindataFileInfo{name: "js/common.test.js", size: 5902, mode: os.FileMode(420), modTime: time.Unix(1678046396, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -476,7 +476,7 @@ func jsExcluded_filesJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "js/excluded_files.js", size: 3199, mode: os.FileMode(420), modTime: time.Unix(1677033948, 0)} + info := bindataFileInfo{name: "js/excluded_files.js", size: 3199, mode: os.FileMode(420), modTime: time.Unix(1678046397, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -496,7 +496,7 @@ func jsHoundJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "js/hound.js", size: 18142, mode: os.FileMode(420), modTime: time.Unix(1677033948, 0)} + info := bindataFileInfo{name: "js/hound.js", size: 18142, mode: os.FileMode(420), modTime: time.Unix(1678046397, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -516,7 +516,7 @@ func jsJquery213MinJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "js/jquery-2.1.3.min.js", size: 84320, mode: os.FileMode(420), modTime: time.Unix(1677033947, 0)} + info := bindataFileInfo{name: "js/jquery-2.1.3.min.js", size: 84320, mode: os.FileMode(420), modTime: time.Unix(1678046396, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -536,7 +536,7 @@ func jsReact0122MinJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "js/react-0.12.2.min.js", size: 130436, mode: os.FileMode(420), modTime: time.Unix(1677033947, 0)} + info := bindataFileInfo{name: "js/react-0.12.2.min.js", size: 130436, mode: os.FileMode(420), modTime: time.Unix(1678046396, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -556,7 +556,7 @@ func jsSignalJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "js/signal.js", size: 1401, mode: os.FileMode(420), modTime: time.Unix(1677033947, 0)} + info := bindataFileInfo{name: "js/signal.js", size: 1401, mode: os.FileMode(420), modTime: time.Unix(1678046396, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -576,7 +576,7 @@ func jsSignalTestJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "js/signal.test.js", size: 2005, mode: os.FileMode(420), modTime: time.Unix(1677033947, 0)} + info := bindataFileInfo{name: "js/signal.test.js", size: 2005, mode: os.FileMode(420), modTime: time.Unix(1678046396, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -596,7 +596,7 @@ func open_searchTplXml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "open_search.tpl.xml", size: 351, mode: os.FileMode(420), modTime: time.Unix(1677033947, 0)} + info := bindataFileInfo{name: "open_search.tpl.xml", size: 351, mode: os.FileMode(420), modTime: time.Unix(1678046396, 0)} a := &asset{bytes: bytes, info: info} return a, nil }