From bde92d5cfe428506a4b56b8a79f646377d9e4e5a Mon Sep 17 00:00:00 2001 From: Audrius Butkevicius Date: Sun, 7 Dec 2014 20:21:12 +0000 Subject: [PATCH 1/2] Display last received file and time (fixes #292, fixes #801) --- cmd/syncthing/gui.go | 7 + gui/index.html | 12 +- .../core/controllers/syncthingController.js | 25 +++- internal/auto/gui.files.go | 4 +- internal/model/model.go | 28 ++++ internal/model/puller.go | 1 + internal/stats/folder.go | 133 ++++++++++++++++++ internal/stats/leveldb.go | 1 + 8 files changed, 202 insertions(+), 9 deletions(-) create mode 100644 internal/stats/folder.go diff --git a/cmd/syncthing/gui.go b/cmd/syncthing/gui.go index 5f48c945a..6ee627d46 100644 --- a/cmd/syncthing/gui.go +++ b/cmd/syncthing/gui.go @@ -129,6 +129,7 @@ func startGUI(cfg config.GUIConfiguration, assetDir string, m *model.Model) erro getRestMux.HandleFunc("/rest/upgrade", restGetUpgrade) getRestMux.HandleFunc("/rest/version", restGetVersion) getRestMux.HandleFunc("/rest/stats/device", withModel(m, restGetDeviceStats)) + getRestMux.HandleFunc("/rest/stats/folder", withModel(m, restGetFolderStats)) // Debug endpoints, not for general use getRestMux.HandleFunc("/rest/debug/peerCompletion", withModel(m, restGetPeerCompletion)) @@ -343,6 +344,12 @@ func restGetDeviceStats(m *model.Model, w http.ResponseWriter, r *http.Request) json.NewEncoder(w).Encode(res) } +func restGetFolderStats(m *model.Model, w http.ResponseWriter, r *http.Request) { + var res = m.FolderStatistics() + w.Header().Set("Content-Type", "application/json; charset=utf-8") + json.NewEncoder(w).Encode(res) +} + func restGetConfig(w http.ResponseWriter, r *http.Request) { w.Header().Set("Content-Type", "application/json; charset=utf-8") json.NewEncoder(w).Encode(cfg.Raw()) diff --git a/gui/index.html b/gui/index.html index 64848c7ae..9a4977c8f 100644 --- a/gui/index.html +++ b/gui/index.html @@ -153,6 +153,14 @@ Shared With {{sharesFolder(folder)}} + + Last change received + + + {{folderStats[folder.ID].LastFile.Filename | basename}} + + + @@ -276,8 +284,8 @@ Last seen - Never - {{stats[deviceCfg.DeviceID].LastSeen | date:"yyyy-MM-dd HH:mm"}} + Never + {{deviceStats[deviceCfg.DeviceID].LastSeen | date:"yyyy-MM-dd HH:mm"}} Folders diff --git a/gui/scripts/syncthing/core/controllers/syncthingController.js b/gui/scripts/syncthing/core/controllers/syncthingController.js index 4f08d9320..c11d72dec 100644 --- a/gui/scripts/syncthing/core/controllers/syncthingController.js +++ b/gui/scripts/syncthing/core/controllers/syncthingController.js @@ -17,6 +17,7 @@ angular.module('syncthing.core') refreshConfig(); refreshConnectionStats(); refreshDeviceStats(); + refreshFolderStats(); $http.get(urlbase + '/version').success(function (data) { $scope.version = data.version; @@ -52,7 +53,8 @@ angular.module('syncthing.core') $scope.folders = {}; $scope.seenError = ''; $scope.upgradeInfo = null; - $scope.stats = {}; + $scope.deviceStats = {}; + $scope.folderStats = {}; $scope.progress = {}; $(window).bind('beforeunload', function () { @@ -112,6 +114,7 @@ angular.module('syncthing.core') $scope.$on('LocalIndexUpdated', function (event, arg) { var data = arg.data; refreshFolder(data.folder); + refreshFolderStats(); // Update completion status for all devices that we share this folder with. $scope.folders[data.folder].Devices.forEach(function (deviceCfg) { @@ -364,15 +367,27 @@ angular.module('syncthing.core') var refreshDeviceStats = debounce(function () { $http.get(urlbase + "/stats/device").success(function (data) { - $scope.stats = data; - for (var device in $scope.stats) { - $scope.stats[device].LastSeen = new Date($scope.stats[device].LastSeen); - $scope.stats[device].LastSeenDays = (new Date() - $scope.stats[device].LastSeen) / 1000 / 86400; + $scope.deviceStats = data; + for (var device in $scope.deviceStats) { + $scope.deviceStats[device].LastSeen = new Date($scope.deviceStats[device].LastSeen); + $scope.deviceStats[device].LastSeenDays = (new Date() - $scope.deviceStats[device].LastSeen) / 1000 / 86400; } console.log("refreshDeviceStats", data); }); }, 500); + var refreshFolderStats = debounce(function () { + $http.get(urlbase + "/stats/folder").success(function (data) { + $scope.folderStats = data; + for (var folder in $scope.folderStats) { + if ($scope.folderStats[folder].LastFile) { + $scope.folderStats[folder].LastFile.At = new Date($scope.folderStats[folder].LastFile.At); + } + } + console.log("refreshfolderStats", data); + }); + }, 500); + $scope.refresh = function () { refreshSystem(); refreshConnectionStats(); diff --git a/internal/auto/gui.files.go b/internal/auto/gui.files.go index dda4e1085..b338bf0af 100644 --- a/internal/auto/gui.files.go +++ b/internal/auto/gui.files.go @@ -142,7 +142,7 @@ func Assets() map[string][]byte { bs, _ = ioutil.ReadAll(gr) assets["assets/lang/valid-langs.js"] = bs - bs, _ = base64.StdEncoding.DecodeString("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") + bs, _ = base64.StdEncoding.DecodeString("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") gr, _ = gzip.NewReader(bytes.NewBuffer(bs)) bs, _ = ioutil.ReadAll(gr) assets["index.html"] = bs @@ -162,7 +162,7 @@ func Assets() map[string][]byte { bs, _ = ioutil.ReadAll(gr) assets["scripts/syncthing/core/controllers/eventController.js"] = bs - bs, _ = base64.StdEncoding.DecodeString("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") + bs, _ = base64.StdEncoding.DecodeString("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") gr, _ = gzip.NewReader(bytes.NewBuffer(bs)) bs, _ = ioutil.ReadAll(gr) assets["scripts/syncthing/core/controllers/syncthingController.js"] = bs diff --git a/internal/model/model.go b/internal/model/model.go index d6b589425..ba6e76898 100644 --- a/internal/model/model.go +++ b/internal/model/model.go @@ -98,6 +98,7 @@ type Model struct { deviceStatRefs map[protocol.DeviceID]*stats.DeviceStatisticsReference // deviceID -> statsRef folderIgnores map[string]*ignore.Matcher // folder -> matcher object folderRunners map[string]service // folder -> puller or scanner + folderStatRefs map[string]*stats.FolderStatisticsReference // folder -> statsRef fmut sync.RWMutex // protects the above folderState map[string]folderState // folder -> state @@ -137,6 +138,7 @@ func NewModel(cfg *config.Wrapper, deviceName, clientName, clientVersion string, deviceStatRefs: make(map[protocol.DeviceID]*stats.DeviceStatisticsReference), folderIgnores: make(map[string]*ignore.Matcher), folderRunners: make(map[string]service), + folderStatRefs: make(map[string]*stats.FolderStatisticsReference), folderState: make(map[string]folderState), folderStateChanged: make(map[string]time.Time), protoConn: make(map[protocol.DeviceID]protocol.Connection), @@ -283,6 +285,15 @@ func (m *Model) DeviceStatistics() map[string]stats.DeviceStatistics { return res } +// Returns statistics about each folder +func (m *Model) FolderStatistics() map[string]stats.FolderStatistics { + var res = make(map[string]stats.FolderStatistics) + for id := range m.cfg.Folders() { + res[id] = m.folderStatRef(id).GetStatistics() + } + return res +} + // Returns the completion status, in percent, for the given device and folder. func (m *Model) Completion(device protocol.DeviceID, folder string) float64 { defer m.leveldbPanicWorkaround() @@ -873,6 +884,23 @@ func (m *Model) deviceWasSeen(deviceID protocol.DeviceID) { m.deviceStatRef(deviceID).WasSeen() } +func (m *Model) folderStatRef(folder string) *stats.FolderStatisticsReference { + m.fmut.Lock() + defer m.fmut.Unlock() + + if sr, ok := m.folderStatRefs[folder]; ok { + return sr + } else { + sr = stats.NewFolderStatisticsReference(m.db, folder) + m.folderStatRefs[folder] = sr + return sr + } +} + +func (m *Model) receivedFile(folder, filename string) { + m.folderStatRef(folder).ReceivedFile(filename) +} + func sendIndexes(conn protocol.Connection, folder string, fs *files.Set, ignores *ignore.Matcher) { deviceID := conn.ID() name := conn.Name() diff --git a/internal/model/puller.go b/internal/model/puller.go index 968db7a76..5b404ff06 100644 --- a/internal/model/puller.go +++ b/internal/model/puller.go @@ -839,6 +839,7 @@ func (p *Puller) finisherRoutine(in <-chan *sharedPullerState) { } p.performFinish(state) + p.model.receivedFile(p.folder, state.file.Name) if p.progressEmitter != nil { p.progressEmitter.Deregister(state) } diff --git a/internal/stats/folder.go b/internal/stats/folder.go new file mode 100644 index 000000000..0a4c199e5 --- /dev/null +++ b/internal/stats/folder.go @@ -0,0 +1,133 @@ +// Copyright (C) 2014 The Syncthing Authors. +// +// This program is free software: you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation, either version 3 of the License, or (at your option) +// any later version. +// +// This program is distributed in the hope that it will be useful, but WITHOUT +// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for +// more details. +// +// You should have received a copy of the GNU General Public License along +// with this program. If not, see . + +package stats + +import ( + "encoding/binary" + "time" + + "github.com/syndtr/goleveldb/leveldb" +) + +const ( + folderStatisticTypeLastFile = iota +) + +var folderStatisticsTypes = []byte{ + folderStatisticTypeLastFile, +} + +type FolderStatistics struct { + LastFile *LastFile +} + +type FolderStatisticsReference struct { + db *leveldb.DB + folder string +} + +func NewFolderStatisticsReference(db *leveldb.DB, folder string) *FolderStatisticsReference { + return &FolderStatisticsReference{ + db: db, + folder: folder, + } +} + +func (s *FolderStatisticsReference) key(stat byte) []byte { + k := make([]byte, 1+1+64) + k[0] = keyTypeFolderStatistic + k[1] = stat + copy(k[1+1:], s.folder[:]) + return k +} + +func (s *FolderStatisticsReference) GetLastFile() *LastFile { + value, err := s.db.Get(s.key(folderStatisticTypeLastFile), nil) + if err != nil { + if err != leveldb.ErrNotFound { + l.Warnln("FolderStatisticsReference: Failed loading last file filename value for", s.folder, ":", err) + } + return nil + } + + file := LastFile{} + err = file.UnmarshalBinary(value) + if err != nil { + l.Warnln("FolderStatisticsReference: Failed loading last file value for", s.folder, ":", err) + return nil + } + return &file +} + +func (s *FolderStatisticsReference) ReceivedFile(filename string) { + f := LastFile{ + Filename: filename, + At: time.Now(), + } + if debug { + l.Debugln("stats.FolderStatisticsReference.ReceivedFile:", s.folder) + } + + value, err := f.MarshalBinary() + if err != nil { + l.Warnln("FolderStatisticsReference: Failed serializing last file value for", s.folder, ":", err) + return + } + + err = s.db.Put(s.key(folderStatisticTypeLastFile), value, nil) + if err != nil { + l.Warnln("Failed update last file value for", s.folder, ":", err) + } +} + +// Never called, maybe because it's worth while to keep the data +// or maybe because we have no easy way of knowing that a folder has been removed. +func (s *FolderStatisticsReference) Delete() error { + for _, stype := range folderStatisticsTypes { + err := s.db.Delete(s.key(stype), nil) + if debug && err == nil { + l.Debugln("stats.FolderStatisticsReference.Delete:", s.folder, stype) + } + if err != nil && err != leveldb.ErrNotFound { + return err + } + } + return nil +} + +func (s *FolderStatisticsReference) GetStatistics() FolderStatistics { + return FolderStatistics{ + LastFile: s.GetLastFile(), + } +} + +type LastFile struct { + At time.Time + Filename string +} + +func (f *LastFile) MarshalBinary() ([]byte, error) { + buf := make([]byte, 8+len(f.Filename)) + binary.BigEndian.PutUint64(buf[:8], uint64(f.At.Unix())) + copy(buf[8:], []byte(f.Filename)) + return buf, nil +} + +func (f *LastFile) UnmarshalBinary(buf []byte) error { + f.At = time.Unix(int64(binary.BigEndian.Uint64(buf[:8])), 0) + f.Filename = string(buf[8:]) + return nil +} diff --git a/internal/stats/leveldb.go b/internal/stats/leveldb.go index e613c17f2..77353bfea 100644 --- a/internal/stats/leveldb.go +++ b/internal/stats/leveldb.go @@ -18,4 +18,5 @@ package stats // Same key space as files/leveldb.go keyType* constants const ( keyTypeDeviceStatistic = iota + 30 + keyTypeFolderStatistic ) From 5346bdc683a2642b853e3f6cb5289e7bf54a41f2 Mon Sep 17 00:00:00 2001 From: Jakob Borg Date: Fri, 12 Dec 2014 14:24:36 +0100 Subject: [PATCH 2/2] GUI tweaks for last file synced --- gui/assets/lang/lang-en.json | 3 +++ gui/index.html | 4 ++-- internal/auto/gui.files.go | 4 ++-- 3 files changed, 7 insertions(+), 4 deletions(-) diff --git a/gui/assets/lang/lang-en.json b/gui/assets/lang/lang-en.json index 612aed594..dbc9cf518 100644 --- a/gui/assets/lang/lang-en.json +++ b/gui/assets/lang/lang-en.json @@ -57,6 +57,7 @@ "Introducer": "Introducer", "Inversion of the given condition (i.e. do not exclude)": "Inversion of the given condition (i.e. do not exclude)", "Keep Versions": "Keep Versions", + "Last File Synced": "Last File Synced", "Last seen": "Last seen", "Latest Release": "Latest Release", "Legend:": "Legend:", @@ -90,7 +91,9 @@ "Save": "Save", "Scanning": "Scanning", "Select the devices to share this folder with.": "Select the devices to share this folder with.", + "Select the folders to share with this device.": "Select the folders to share with this device.", "Settings": "Settings", + "Share Folders With Device": "Share Folders With Device", "Share With Devices": "Share With Devices", "Shared With": "Shared With", "Short identifier for the folder. Must be the same on all cluster devices.": "Short identifier for the folder. Must be the same on all cluster devices.", diff --git a/gui/index.html b/gui/index.html index 9a4977c8f..f6205dc56 100644 --- a/gui/index.html +++ b/gui/index.html @@ -154,9 +154,9 @@ {{sharesFolder(folder)}} - Last change received + Last File Synced - + {{folderStats[folder.ID].LastFile.Filename | basename}} diff --git a/internal/auto/gui.files.go b/internal/auto/gui.files.go index b338bf0af..720ae337a 100644 --- a/internal/auto/gui.files.go +++ b/internal/auto/gui.files.go @@ -67,7 +67,7 @@ func Assets() map[string][]byte { bs, _ = ioutil.ReadAll(gr) assets["assets/lang/lang-de.json"] = bs - bs, _ = base64.StdEncoding.DecodeString("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") + bs, _ = base64.StdEncoding.DecodeString("H4sIAAAJbogA/+Qa7W4ct/F/noIwYEACLhc3ifPDfwp/xKnq2FFtq4EBAwVvl3dHaHe5Jbk6XwwVfZoCfY0+Sp+k88Vd7t6dLCvxR9A/EjlfnCGHM8PZe/uFUurW/dMT9cRsb90bhjNGLFwXCUwDAZalemQubGEIM8wG9GNXlcYntMx6tDchCI6GI4TJUaZHVpXbqPuNa7a164I6C3pl1HPTOh9ts/oj8byLRkQdIiAZB5GJeatKsjaowjVLu+q8KZVrlG6UbaJ3ZVcYLzRqY6tKLYzSZQlU0am4tiEhdVAbU1VzXvcDyBWVu+hqHW2hunbldSkbvAtl8gfdigjoP4Menp6ps2gr+wswuAaxU5AQVi6QU/BAgK6uTRNnarM2jeoCKKwjKGxUiNpH5ZZKq8o2zHht4l54i44COijYAW8KEoC7YhtVuxBVMLFrw1ykX5c6iW8aU6CF6nvvnWchE1gibS3IWXpXK1MFAwZ4MWkfYpfJebuyja6mPD28Z9kCZB3Vf/6tvr7zh2/Vn/W5W6gHzq/AWUrarKXDuwBuq0Db6O0CTtuHeyL65vyswiNTmUi2ySiByf1OHjEmTcbIEk7XLm3Re9J+xIjpma5NRkpTIbCh4OMwJVHkcyFxRYcuNSw4AiSiTVM5XarnWgwbAcZEstQwG6MlkuRTJvi+tBRL6f8AymJpPs0IhmiaTwcCWTENBdHoRWXU2WlzSshsmggiBBS8ARq8vtUeLC3V61u2vYcx7/UtjC4chMEHAVFuG13bAhAQcFrjl87XSvdxpMS9vzB+i5cUnUjY57z8x1osN86uGueNanWEWRNmEE8NCqMIkun1DjoRmQJAfusfW9jUvxqPIUWOYQrKCEFkbTn8LGwMSsOivHbJAa9y7hxvHVirirVuVibMIRMZTASP779US5AStiGamrf1A0gd1GVJNWwzpZgSjgyjcN3C/ILtCxg3tZqH2AOW5J28sDdtpQvMY5i5MFSUarFVYdsUkLCaVW/Dx1hqaljrXaRAwWFWNkbVcKVxYxx4Vcq34BEQAXdI8qSbMnKAyMIJ2YBOISb/LKoONthPLP5EOshW8PZxvB4mI+RTjRwZgQBGRKc6rjMSmuYEYUCmkuKHsxMFJcgagz6HfGALYeM8Bder0AcFgEf7A8yEGhh/tGBEo0YV5164sJjGeEkM/VhQlVvoSj1K4YhIprD9pOqF8Rei8QHUiPFFTCrkcyY5KStC0X8BcUw7lZhG2AloTNhHkRFtBhXyBqI4RhPMjLBjNWSkoyf2wVfhmPiuQCcBqZpl+n6W0HK/k9eu7AWcCaR1TG8APrJzM1elU42LyrwBpy6NLH0jTl72iTFtitq0AWMAE/0Izq8o5r6AuMJ1wA4sIw3GND0NTRIy4rV8DnFKc8E8gQiZWUFxSlVbGgrCFVOnm4Jywt5z8ikTPNVvbN3V6v6KCPKpEHRVtKoyF6bC+FIW2pfqCJJwscYohNgWbC8tFNNQI26ZlH3hxry89DMj14MHAnQEcf1U7UnBe6CJPEqpJSMG//QEQfBXpstleo+koSCaHt7kYIjLPy3p/AmXTXuClTt8Z65CiwDYAG8h4j/k8E9cUxiTYvRNwV8SJKUJA2UAnj5cz7bDLKB+lnRReEPVmF0qWLh0cDZ8QSAaztVL4ISHHqwDqcfrAuulo38cqwIepsDMTzTIZiqsoZArwPYll0mfhyLZptDDaygngKyrSsqXkWqlI7h7F0aZuo1bqpVQ19IsNTjqvrrDNpltx/Pe5g+9jphEkUJtND8q8qkQeKgKzIaQMhwhRh2OjGoMZ5a/dLY4V6sO3Q2ONHQtIsGWNksv7yZiYc/vP522E6YgITQBDpfwPMrB6gRL9wt+L09BPSE2DYSAhiOEemaMvOYmkBGZBJVsltDoc4yiEYNfwOEikP4LCJRLsakfCwoifhHFBbj/g3u3xuqQartU5Nq4Jhd7P4adRRib8SBdXkVOF7kGQ1ok4uYE5pexoIhRKkC47iBgePQeRubMGTwMXCNoRl4SpqeTaSIAr1RW+g2wU+kKsqVz9RSqZLyu1HXSNZXZGiKUlM9p23mjfjNhvXIbqcjTcEBgJxCYdIkFTt9gSfEhSQQvjV0YoqouIaBEG/hpNXpSULyEcqnFSwchOQUheHqbZN7HXvXXmtu1JSURyTwoNLssg14B00xllpED8a8098arJnO7WMLarISMBWVrLJL2VDkHMImtWQH8UPGFl5je00Px5Zpqe8xyb8YqC7vOg8UPXcm3O5sKQdSrlcFLuc+mg8ieGe7bA+828tgbAxKRa1uOzGkoCE5J6isIN76riWACEkKo3dQpPM5d4aq9z8V3UAxi1h70HzLdFDQQph2Q4YCg/oVaw61ZwBMConCHxdGmmSfywwRTIbahR0+YNHmDW8YNxlMIXvS9A6sPvLLGLe+NV7mRhB01AvUlOJtOzJjg9rDyB4u9nBlqygjPr5qyGNxW3JyZ4kiNzTKsGlvvFpWpOb1twWu5mmhMVEXf8Z9DWRT9FuT995//Gq/+AeSzCVj3wqXwZkURBiMPeJstpIPULSpbVFulL7StqMero3p7u/PV7UvaoBvxvwX+y8t5pkL6KsUNlcHZNPbssDOFpTpU5fYCl5mrYWdqTIFyprhBiYgjJRScI9G9zh9vwcHIso/3WKU5ytyLSjfnvVZXUOwTA6sbajGTI8hTZem6pkwZ5TU39V93d+58Y5Qk/de3ILrqyq3SkylPoGBqqymPgpRSh7U0E/uEeiTd3+M9Wn9qhYZNMk3hty26ZEcPDk8PDrws1L8swR23c3VCkE7qiAjvvnP6jABqtJWO+FkgzFLNG+wvooVu2/4FBkKW0guVBwnkavwMQaK5oVrilewbqHBXa9Isq3XZer3SdnDR37MJ+UFEyriDk/RPb/xyoOBBZUsyY3jKanX3awxwd7/LXuMherx+cLsCRhgYOix28PHHJjVdvYDxjJUKO06zMMQkbpNt8+eq4LCJy9Q/Pxg5rqDYJ6aWh4P0M/I3xtF33w5G0feyCqqO4/12zZJR/cfdEtY+mh/PyCh19OUxYSACAFEBdZo6+tvxSD5Ud3us+NwUvGoTu8b+vTNXGJEIdoS02NF5x5HupxmJkjLJSoOC4yOGhHvDi9F60GWNlYFOFx9v97lp4bVAnwW+uQNXHvvZFC9ytlJvD3KhyCk9SAKWcJAHkDPYlGgrYqqlL4xB7hDLxpjRzvzfmDwcdM4zXA92b/LhQ470/oy7i0ZbU9/tHD9cDBofQVpHu2eULQB/pyfKGo0eDTre0ec3kTmoKgbB3YeLM5AK74w+uePH6F6P6zPsW6Snf6+zuDH/oILndmRy/ZzfNV82WInbi3wlcfFeh5sLuIYSkDUNfpC6e/1l97DwQmfNeSN9izRMCOoWloyRcUKlvqmMBNziuT6ST1XZLKHpZ2rqpYPXjZzM7UsmHTBvBXN5OWKTt/UwScjRj37yqRAEbF30PxojogloIPzTy5enLyjo/HB2kkjHQCaWrgaSpOEIEfov6mPAhAjjaf+LGF1V2/6HD5aKxS0X4ZSiIpSIO2ENlDJvCmM46w7OtOTfJ2AE51/GZT4xH6n1iVTgjfgZf/ehSzxPvBjwruMCccaRCH/RZ6mioF8QDj+T6L2afjw5es8E/nbhyMoPKv+QCVxS7F8idcmpH5m9KGzepV8ZWmlh4gafy6m/jJ/P+DQK/E4E75NgKYZgKCONqb8HpwFFFZxj4sdedd7w/p1pzNv8int2r/rG3Ct4KZEITmwpvOHPviSAkLHXIWOByw5Xnf7UcA+UyS3+1gopePDF5Rf/AwAA//8BAAD//4y3gJSJLQAA") gr, _ = gzip.NewReader(bytes.NewBuffer(bs)) bs, _ = ioutil.ReadAll(gr) assets["assets/lang/lang-en.json"] = bs @@ -142,7 +142,7 @@ func Assets() map[string][]byte { bs, _ = ioutil.ReadAll(gr) assets["assets/lang/valid-langs.js"] = bs - bs, _ = base64.StdEncoding.DecodeString("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") + bs, _ = base64.StdEncoding.DecodeString("H4sIAAAJbogA/+x963bcttbY/zwFPN9JLHVpZuw4cb8qkr7qYidKfFF1OWmapmdhSMwMLA7JEKDkiaLzRn2Kvlj3BkASJMEh5yLZbU7WijwkgQ1gA9h3bOw9OXl/fPnL2SsylbPg4Iu9J/3+F8MhOY7iecInU0m2jrfJ18+ef0Mup4xczENPTnk4IYepnEaJGEBhLH855YLESTRJ6IzAz3HCGBHRWN7ShO2SeZQSj4YkYT4XMuGjVDLCJaGhP4wSMot8Pp7DCwSVhj5LiITWJEtmgkRj9fD9uyvyPQtZQgNylo4C7pE33GOhYIRC0/hGTJlPRnNV/DV0AKFdmD6Q1xEAppJH4Q5hHIok5IYlAp7Ji6wNA3CHQJ+2qMRuJySKsdI2AqPhnARUFlWbhl+M0ic8VLCnUQwjmgJUGPctDwIyYiQVbJwGOwRKkp9PL394f3WJ4A7f/UJ+Pjw/P3x3+ct3UBhQDQXYDdOg+CwOOECGcSU0lHPs/ttX58c/QPnDo9M3p5e/wAgQ0OvTy3evLi7I6/fn5JCcHZ5fnh5fvTk8J2dX52fvL14NyAVjbegda1izCLDoM0l5kE/7LzCvAjoX+GRKbxjMr8f4DXSNEg9WUJe5C6JwgqBwlFC4wOOAnI5JGMkdIqCPe1Mp493h8Pb2djAJ00GUTIaBhiGGB4Mv+n1YvLiGYYLCyX6PhT0STvo0jvd7Ilu16pUXhTKJgoAl+718PR/nL3vEC6gQ+z0sGkT0uoeAGfUPviBkbwbjJ96UJoLJ/V4qx/1/7xUfsI999nvKb/Z7/71/ddg/jmYxrLlRwAAsNMFCqHX6ap/5E2bVC+mM7fduOLuNo0RaRW+5L6f7PruBkfbVww6sJy45DfrCowHbfz54VgPkM+ElXC1bC1atGFVbuFYi4OE1TGQAeIPP0oOVxz2ENE3YGGoJGLoY8tlkOKY3+GUQA2YPvsC6ksuAHRRU4k9yd4dzeqJG8A6a3dq+v98b6nJ5axoyLG8/SoajKJKwe2g89IQongYzHg7gTc/0Tc4DBhueyV4VjunhGIY1hBXHbul8qYrYbAQbPOGAyKaae0O9Jr7YG0X+XEHy+U11fb2CMUlrbR3sDaGUxhVQWnIZxWREE4KrF9+F9CZffvQGv+h/+hIKmp8+G9M0gFUCMJkqxyeKrqnxmH4YINgXykNsWX2DryIGOlxqoz8CKuJD32BOsy9BNIl6RCReacLxbV+yj7L/8hs162TKkEns91583SN6sfaeP//PvSEMFBvKW40rTSIQMuW+z8L+R9E7cC+TOK+fBhaADBPWT8Wr8kGqacW54DCraQzUxGen4TgiX31FrMdByG4t1Kh6QIklsAQ5jwG3+iGnCCMZZu3hT/i/Hyd8RpO5+i1m2R7RdAbI03Xe/NZ2qZ3KREyCeTzFvUTyX31vym4S+DeNexk2v2IzEX/nAAMbJBTImYpf/RsapPBXM6r93t2dPXIsIeT9fe/gSr+FpUjuvjSlv7wvT59qaKixYeEYCHAZ42Y0fhLFfnQbljFLDXL+rVctB6t7MkESCfyZmgcbSjuqIliKNOG0H9ARbtVXPpc51vaGtNSRYi3lHZixMK3ODwwu77M9oSDCyAsmJdA3gbPaqXflGaxM2kEGzupwGbkLO8R9vW86deb3xIt81tafaXRLTk/aupOjkd8AqVTUrXOnxTSViPpOnY7G49Yea3CrYTCBvUAT2akvUBmKT1v6c64hPiQG6QiEwk5dBk6VyD6bxXLe0u1DhLmg03vDNHATgOKLYXH4A4il5msNLEmXR0b4midCAke7Bdk7DOYoVN6GhIMACBKlEEBivyMGpyj2hihcGKZZcF6k9k8A/phPTkMUQnJKA4ALDljqTNCf+f3nX9usw/oOeGABUX/7ptkyUauWRVz7qtTe9IVFlktllPTTy9YIeceYz3wQKF4c5LhrbgDFjSqpiq0pRDVN4yBNlFgAkrkAXQN0B0FRNEddA8RqQj3Jb6CGP7DUulmK02A6JqO8kBLjgV2WQQ8sFl2a+ubuj0Geq/DcDlxXs1f1jxF/QOMLAsP2H3UnV7lgbUkFsNvG/GPPMZnlF6VH66GQEcubg03SACRCWMuVpV9a5Bk8VTEKUJcGzRj0eBQhAzaW20Vt52Z4uWgv9CdJBAIJ4f5+b6ygi8UbwmyeXGiFqUpYzKjM6qN+rH+9gW7WxaTGHVaWFqDzAY1FJkTEoPKjSvNvWScz4UM/9+/u/sZDn30ECYgouR4gpImIkl0SRzysL1FXT5SiylA/gFEhxcrGdCGpTMWWftgm+/vkKeqg0OunWiuVMumbZpXUvAt6EpY4YwmotJJOmKk8OD0BSfhLx2JSXQIa46IslWIdhM2p71f2wd1d3oP7+8UAi61YiPREqQkZkGMsmOEDcY4IA43fm7pR5hhCXdTNYfRvpwwk3DS8DpW8eKV/1GXY7pAEqPjMR1D61+qwBOy7GEFd6B9rQPJoqDnQhfm1Oizu4zq5ipHGn0CBNki1vujl7JynWuvKILCwu4RsLd4A266eNYBzv1f8tUxa6ltK7fGCtpXIRGmjZeSGFHRHMSFV5I6Hu0RXhL2/T57ddyAmDr6uCko6CnL5QT+ov2hn8NH85ZtntDiqheZClcysFK5vifsDfpq2s1GDqihmYQsrNezojMppzk6hhcbG/XzYSEuMip/TJQSjbEl+w7iGTQODEWfi4gyUoeDXfKn9NuAh6M3cjcXOKDGiYl/wSRtOXiVJlKyDjaYRrIyatUY+CaJRm3b5PZShAUGKzzY68okC/JoHTJA/CQ1u6Vy8S2cjltzf12gSl9A50/wO+WcjuKO5VOBGPAQt5P7+6FOgdRrN2rD6JvIeBKkBwt0YThW0TaG0cROHoFHpLh+QZ+ttZS+IUr+PpoUgolUZqTr+96BavR8rdWr1OWgorSxotv0kukXF0WKTufXRNY0FSjYwiwjMMYm0caTrza9p+RwE//dh4OKSS0worMDrbnzqLRWgBzzERFba+4WJRaLRpvB3OgmjhJ2hU3U9FKahN2XeNWvbDrpBgi1ygXZl8f8PMs8ZiuOnqCkCu70gT/bJyzVJTWd7BHrSs5Y3IEhVhgIUQXwKHqcUrT4NZKupFxUy8jNfT4pUzQm91QvNdCOLA5mwsOnlG6AkSHzXWx8KBWNtJV4kCEBjBFtTfChXOB9gz6GxAR1LLaMe4B90OcPK+q+kvfihBLbiw1B2n87hv/7bt33fJz/8sDubPb2vq1L2f937gpyLCtOt5oFumJLAe7ciBh9QiasrrS6rTzejqipqDKsNplQaTjDgwc1m0VnaIllZ8kjmMHfKI+0cJe4iXZkmyPEUOy4WmmTV6N1GKreGvBhTmfnScsO0GPzQwvK0YpoGMlsiOApLm2UMrUhZZaiW57NMMDt0Pmahx4M2LRggt09nk72nm/W9YT8tZaUvNzaOkpkxiLtiCFbxX1DfNxjuhNsgFW0ePSCdGuIC/HbCYPVxmmRVbrjgygI16w0r/gzbG6G91JY3Qo2+7I5QQTEYBKZjntZxVSzwPGjgx+MJOh9+LSJPtrZ/6+jea3I+GC+DidhCyB39Cx1N+XtA/0KploHqgQrysAY00AM5PcHpy8vmJn2/CLDJq2xX+F/VUOp26qGRtDTKxeZRQHSrY8dpAd2E/bPZ+tkos27eNnBiipHzLhaaRrEV2g2Zh85X8etTGUkaPEWT3ygu6eJDgQZ1Z9nTUGnul/hoV9lukmYaZZkN4K4T37+KHwpvUSq7I+59Kj8LzMlWQeDwLbmSPOB/KCf96jgTcyHZbAD/dDHWPcxofSqmo4gmbYvk+Oxqo4P24tT4oioGM3gMQdhLaLD7/P7+yxWwkcnbpiVo/TAMoxR0tfc/oR0BA+DHPATCBhI4NZ8uQDlniVl8zVbNTjgdgegxjZI214Sx059w4aF0P18Vp03aU+ZYRFxUhvmago7hD0BVm8gpitPPiqBBYHvauSxSD2OD2vTUg/c/talxC7927uYTdzeNltWmTcdRjFg2ggWgboIBxFN8l8U0BNRjMxXWMIpAhJuZ93n89t2du38fQOLYevo/w6fbreqza7n1F436/n7orrWGVt389ZEpLW0L3Py7jpddndqYgNtmw5N7ZA12BKcVoaOCUzyjDH7OZpFkRgoXthjuktysoCBTY+WgoJJoHuExHS3Rio1HBmU9rcjsDxUZpMEbQ0EhfHcMDvKiWRww5Gy/1mX93wb/kEYoCRWP2n22iZihh1c1VDPl+JJGRPW6RBuZ4irayG51pXgiHuK8fKooGS2HLj3rywTKtKPAR96vZGFUrE6sp3WCq1KhQ6vw34cM4nHs6JYgnvad/SnDdDIpxFZPHOviER3eyym1HdUz11LvoOG6qi2t7Hb08zzCDGxcNV4D+130ZFe95VXmh3Qw4km/dmspsu11cKnxgIBKHGjNBfekQC+eKcVOFif+VsSHZwC1+vGvgERarXbETu3wg42nd9GaCCnwcYqnK/3UW6BjdbSrABcV9eN2taiGvL1NIEKFK3y+tGhzKtAa5Oc44CBd/r1NVeq6lR4UYWzOuoTCKie9YGz5zVQmCNrR7UIatnABDZxQNN/9SZYqf7BPXrz8tufcuewGV37TFOjuljZpxzb3GpvMiGo7oCxwoFcNHOitvWx0s9qVZisXmfVn7UjD+hEMd1zaBriTYxTKRtTbIb2VeNWjxzU0efb36GpubeP/s9TNh/Bs04O/iA97iQPJHX3YGuJGfdi1I3fa9DUsH7DDVypIX7gPnDL8po+u2aTgE588dVl4qmh9F0kbpescP7UMeIAPNN1ZaMGWZzQIgPzA28ElV9FXmk4jbd4VAsjzLnRElcIgrgQYvh/MM9MfVlNzUM4K4V76GzhyapmYmshIsdzVYtMrpNth9jYlJPdXPO5h09IeyE9p56lJ8PWRcjt0y1iS0QjzCJ1kfl/7LezEH1/UN0YtZUlT8o9yvg+L9psiSuEzBN+kD1IGrTQRbJAnBRqETA7ru+MijTEZDxmS11GSzhoPxXdqWUDTEw4axmgAWtcwb9v6lTCYS4GW87qsiLk6yLkusF5HFqDAg2YmUTIf+pGXopvJJJWp23yszw+OFi5E6kLKUbogXcaGGncsCkCch8qw3zQPi/Mg4CZ6x+RtlFxrCokRljTId5N+QttlqEspuoKOCLSGo1dRR2wiIQFS+xFGOFPzoI+aFSG5T49zJUdzr6dAcvNx5AbxUuYAM4IiGQDoJzOBtu8RI2gQVHnR0CXDMMcZxURdINvNdOoulStNBZFD10mhYw1g4cpkDvC+mrIg4CZ/jSHje0M15AI75ri9ykXQgJokL5IhIguQtMZfwKmOPEcmD8dRjof6VOdogLEWTQ4y83y1/JnaneSW5vLeYDBoGqVOurNokGlWYsEYcyibGGLe4GZGmCVkaRxglgAmGx/meMn7nbn2s8Hm0I61R4S51m8xnCLjBdRTS7exn6cnjT3k/u+w1QKaTKAHcyYqaAXyEonsix6DSa5jTZGJeTxV7rEx99RmrUwX+WqGUS7fkZLTzI5KLDxYNqe8he1E8A8KJ0rNm0VhBBPjMf2I0SvIR+/uZnM8xW+zfcz1lR2fg4+56KPr9Ed4TIpAIW0WCykoOjod2O/J8D8Q+n4GVcd81hBrRo7KVY3MZQ6aQvPK29cFx1ShkY6U42a/13/uGL8q2vc5DSKzj/rBxCls648mTqJB4NZlUIiupgSbflPxZil/7hPsPCy2Vx9ByFX7tATIyNy26jL9pgPYTlBRqXSCXaDoaQA18X0PFUCTSg5/9vIcggj9lZq9BY53S320D8A/hR3YVwzu6S6xQQ18Y7MZ/M2cU8Ygp4YSPk/k3HF2XiX5spAHncg6jN7obM+dAF/GkrX6PIwxB44xpNUwbiMAd0bhSrT2iRq4SfVX2Xw9o1TgW4UVdYpChRFg6IHuXuE9B+bye8rxSJPCR183BYjBQGnjgsXwqz4+98iwbjahkqqgatXRSvGmUTpMEDrRqa3LbXF/h2qXyDYqdTnwHjHRAHd30CpBllPv1zDrmNPQk6nPDet9AXFTJmMnLkskzmovzz4IEkisaVujUalmaW1YnHrx5obV2vc4USOC3mJGJj9bkyhOKRJLlByFR/lGuILTMM8Uq7LXkQNisrD1iCFxkf6sgmIMwAG5QIwITKRLkIngTwCrpxII6RZXZzD97UGj5cnhrncSONyoW2siA/Tjn6fAl2FRIUSqUkrpYjvkmrEYcTADoq8z5UrrJIDKTAWogqqwVUq4EHgoSEbRMmNcMLOKbg3yXdlCn6rzi6lZItXTUUDD6432SaH5JKMPnTqm1hqMouigH8EiwS4GUXStac6AnMosjy+imHz7NYr6375UqW6ph8sV4xZgyoDkCbMeojEBUQy+6eWng1DEjlYHRG1djpiqZFZmA14q1p3m+I7F5ktVzMkmkLjnLAIFrcVMQqliWMVF97sR+ndU525QAB2kqbYE3LQNA8VKkppNyy50urxQSJBfcGJyHpgRFS9IhZ5GFGEH5GeTgZr6QM8lV/EpUYm2CMyrDUs0pyWFRWfGqpnflhzLkwcZSxqjUVENRKWrw2Oestic+VAFJhbEVGhE5USsj2XTi87wULRjHGY/W4UTYLboOvHbFwQu0qKJ1Vdq3rcLmXRbsY7pe6WYmxfNZpQIFgP5wCnp8XhX57bOO4oUpufPYZa418M5i1mihFGaygitGl4hb2SJxE3l7jNWEX8uWDDudZlG2yCJuQ5G0UeXxOCcQmsaNdZzCI2YL8V01BRvd/yFw9fW0J22KbNga2MHzh4LfZ28fhYpV7VMYwfeu7mj/t+aDDugpDYXteiPzU3DYTjPSW+WZlOLOhTpYdZuRs5ucwruZzSvkJaAdKPwvNyENRI8dGI5Z2/hVDk8XK5yC2a+mNYqRc1zT6psEOaEq1BJIXLFuHk9tEwEDI15UhEc0w6iVyWMsK4pMBK4A8PVEcppwjAQNEhnYdNxFeciXzpbZhVtTV+X3hNCoYSZw8l2aoXeAVmcKtK01zwdDeEACz4s6RcvecVwuS1hMHE4Dztlq60mhrcyN9EblvvHy4y+JM7/LU9Ft75L8QLaXOQ77zKiTPzLRqQOBUDfMbePwVanXAYz4Ohth/nQstqhv24bAipGZR6zeFzKp6JjGZRQWJ8y2BBMsiWCGkCFbY1qOFFAG0fZ4rAteW6tXL+t9lZd7jO3ty5pZe2Q9KBufF3O5OqK61nUxuYssZq2tlpi7UAT1/cV2HGjRdfu0kA/VCy6DSUaLLqqD5rPW9xdnSxyhsDZdxO0SX02ElFZUiyV+phl3jH1Re7XBltviyb1OmOEllk3DfnvKTN5UrFKTNFqEu73hv/rV9r/47D/P571/0v/H4Pf7p7vvPzm/m/DRuVLjaubNVMVdduYGiYnN+I1fC8smhd4MRDhxqkFgxprx7CpOSBvjbEO3wlUw1GIDYJcczdibqNxbPnOawOZRrUhccr+Nc4WTG5A1GU23rRtL1y0+qvd6movXLVfZrEt263c3EpEdbK3Xn5T2AWVGh8oB4HTNLiT2QWVKVBZY2C0W4PtHWUXJFv9bfVF3fom0H1Ktv6xXYIPO3UBVpzyd5PcuD6dw6zDbZROl2mndU6dBiv3yqmSlyFxqnpnIqdLr0zmdPXMT5WAhhDljqd8P9QcQ3omyk6rUt2GxV/3T+X1tHPKPLxR7RcOqqKU009l1kuDr0p9fQiKqxfJIpqrSxRUF58z26bZqMYNorLqos0NVgOS38wg6sEiUFcQjvHSwdzwz3AlDNSFjpIDHMvKv/XP7cwnhaczlQmY5PfAjfNU1WQPt2qRLkPBQfebej3YCG460VVrr5VIWIzI6k5bH42KJOVkm82kpFawo+xUqVcXodwJRMmW2O5KaapNZFFZ5ZcLqIpmCc105bwKK18EoFjt9549sHz0ZPFELDNfek3qb4SbjxZzDUFZDBne33fDDKdE5ikYHhteJB91X7BLGGiXUyVermnY62bWVUUXGrO6mrJeV9NI14y7rsTPDQar5p3SaMtqsTrqtJpoY4yTSCprGxkn0QypM6a7JDO8pi8Ky046fXdstYhtCs7sxAJzGRn2gfGMmU/FyORuQ+ZyJPBzmuZStuu6Gb8pNfWjTje6vEz7ZMSlnn0TsUEwW4Ly0aNAjQqWmeQBQX8Q1Hh9eEnGuGgUC3Y6Z7qThAfZ4RUxV4/ZnONUmS6a0WqTI+rzaP0lo8E0rhfsW9E17QLA0GsjRwKhZo519C4itUFteB19bpgQeP20CxcX6sNfDx+SYq4uPEVfR0n27WGxsrygasVmLBzl/v5TPd9PO8q3uvRPjMXNoq1dZpFU25lhoktBuUAx/gPDQmYxhlPq0QhUDikZCJm/MDqCorCgS2JeNR/tGNrOr+6QL87GNDn4nDp8MbTeAf7Nprwp3MNai1q2tgDoMHnreQ2J2gZTFqafP6ax0Z55t+prlyiHUBbSMZQvJhdmHQMHd5CXKna4tgXN7kKLDlpbydWu5t20RH79EY1em7b91XsOU9yl03iPv+qhisGkkuBRD5AQQ5aN4OF152VIUkZWO1OlrMJb+vFwwhaQpmrBxfTJsTdqOsVjUSn3oZ2M/qge5JFVNAjmORyu9IC5DhxWTcop1YalGf3IZ+mM0AnDltlHjzFtxS2W+FgPMAiiWx0wZGm6g9xN46ahLRTe2HMAsjqkZIDqsaB5ardwPKgrUqd4Bo1mKMVYpmsWS8JUCNmLZ5lavVOp5tN5Yy0EWS0PkHzMWNFUBz7ukDSUPKghsanKLWPXS3Ka8krtHbw1zcBDZ2ZTgaE5TvXlOmynCiujpI/Jc6pbuoHxVIuVuU82iRJPrxueY83mFhqgYU3sYKQcfn+WF7L2c4KT3RyKv/KI2riUk6iVx4WLc00e9ch8QGfOLDjBClsnI47a55KTymW8Lm5Y5Y1U/rSyt6Wh24t30kL6qjwKt+ogSr5Ki2MAQio7xBbIAjdMh0rnhDALBnLwKxOkbW4IWc8q0SUw8ZPFIBoLXBaDaMUeLpT2uwcfZsGgefChMutlYgE092jBh8aU2JaSt4qx9cMPs6Vvwg9NwyYHlJ2zizgyzrrSzZrmP89oRDMTXU6bOs5R6YXhPkeVhciqUxRC+/bQFsztENcJU5blEZO3eHg6C9JAR6GWDj08/y1YKLjyVyB7UDwDZEpvCtIh9STIlVl9DPgoAj26JiR6yLDL/GqdcthliVn+K+xyxbDLTYVZLnH/0QbCLItRZQGS2jUgjswwVhusnSCrYbRWW50Gi5kFVcqBjrdu6rif5lvSlg0wNX1tjzA1BT/zEFNHkOciJK4Z22nnqdAnpLSbh5jwLFAc0NiCNqwAdI4qY99DyRAoMHVLjyAGwbvn3+LKyEqWGc00GZZf5DqWSrpVN1v8txQWKZmk+mgtETobEnCNuLyuyNYerSTVaUowJIf//szG8ThFBlHOJkQPtnerY/fz9E8+zGaU8D8wRRRUDfohTTBbmxlDRUyUBzpI5YmJSoFpkwfw3q8N9jTM9DjjE50AewsxoA13vVLvBmwAfTXhM16Q+mw731m+39T0f2pt+gKwEzASgGYYoKvW92gCMrfiqLDZUMpThqEiiAmDujq13d74W6BRvLHtGX5Fj07RtioqurQ+HLa2fqxOmckdbeHS4UZaVlHJdnAuqNoNDc3Bc7CmSGHnistItTvW20rMn4U+1WPh7u+HoBDpnV0Mv5KXbRUxxsX0K7LNMqzkryW4LMvoLpjE6RYNLE6Yz585f6spmaXjDNkYN35ooS2q6NGDDrSufpLrhl0O/ys4RQIAq/Iy1hs5i9+rkFUxsJt/iBgb55gxDpaF5lC3OtKNGbLIWRLJCHBN9HfSdiK9gowa1BVRUu/doyHmLf14zrybn0YxKA+noRfNUInGSxQAJzMuydZP/GjYJR4SEWJDW85WbmGj1KXHRMQFC33d6vtUTqI1EZFDWwcRRZdWQcQCKrIUxhqsYisbvKoyRajuiLk6C89yuaJAJb7WJfzeAiOZhTe7RmMfN2n1+pyQ2XBToY1RXeQwDJdDa63ao+D2c1/mmVFE54xkp0WWSWed6unMPL+HqS8c84WFdH5LttyMOSr+5fbDG3UeZNF2UCWW3g3VWp/LZliJ+eVb29xaqWSQKiUh+mMHb6BtUH6yiIKUyZHV+IqClHMcSzkpPpFMbmQ/QPrV6YrCaAZiSdRBg4O89UdbcFcC1TQcLNCoqbovUVm9MJ67wwpTcoFgS68THKxu+tFGegZVbyO8s9kx2uxjtxHnoBaNOs4L1UZedOUhRr+xsw2OjE8/XF6eXSiHO4zDJSMKdvnmooVym8nHgk3U+GGDjR8VbRfKbniE5nCWOFCmvpvPHVleqcpfAIWHYRTOZ1EqgCphTNA5Q7u/bf20VuD5kjpKXl67DUp+7syUOY1ur87PEnbD2S16as3tvL0D8075CDY7D/X304QMXe+XJYz1zCRnp+QnNu+QvcLvlOgbc+FmDO3sFCBjXFuv32vIhKsgZ8bbHPsLzbjNF58IJnWbW7oH20DuWcgw4Z/75pLGmXCG+dQvNPksUjdlltN/GdrXNrRrCpMoCtNgbE/dmYrUEEfUu/aTKFaRdhKTSKrX12w+imiCcR00EJ/SJk9owGBk6m8/u9JgOTv9IQY/k0ai/B8bdUzrfMFeMo/R0Zvas8OFPj/qUx7MVbpgO4oogZlQKT9hRcUACjeqirJWIUeC/2EyAdO4CIcFIGNzFtV4lnH2VPgsgNZnHX28VSQ/wBon0Uz1zMrBp2eNTigPaz5zO9Au/6WvMe+nSWA5rKHhsq9ax8bSySTBs9nQpFphAhaZOaGbjoAiBHNCbwAhypJHJbn7EsB+eV/ryHIEt7qdixgwjSnDB3sVpnluf0TiZH6WloyTxsRJHmZcbqG4t0u/P8EJ+pN8EPoWTv0RBpuwR6DKZv84qDKFD7G8Ot8MRf6FNYfMdCXIOtTJFeDkoT+7Y1c7UWS8SPchyHFsVk8TWc5X4efkBN0EwW2Wf/9FaT97Souk6HMmWquJZuvcGLgsEXjHGKYT1oe6mi8nw0KL7kbS9yHpm+zx/iV1lz2xb0wydyS9T1Wgj/JMn2Iag4xgqHtj8yB29aD+9vEiAjw4p58wRouFwjJGmzt787y5GAqddRjZXMjhLSX76uWhuqNsa2xHsluX56rV0sdZ6zBNd3cI8RTToP1Kf8MrmzKdWX85NHdO47fyFbvqhufszqixujEAq2e/8eZ8CkRBva7VLC1K1UfDzKk+IQOYfYpHgmBTT9Di+atGhg5b+q35y6+68ep92KWYKVMxh5BPDvUwQnzh2Yy8Dl4aaT/klBvW1Bxxcst9Od0FLC7u6OCcIZ28v/+y6ebchtaXbug4ijm8BSr5PuETHi7fZHnAes+s3IlXoOaoUzzr9iO7aHbZrpylQbAK4sutZ5cbrtA4dHpB6/bGRVEZ0+pgBCnusBbgR3PJxAmG5sIe5CFN5vf3R2TY3itV8TLCOFWrpuvwnMPQUS5k7/jiAu7Szdo1ByCbsNDftSGttG/X2q9fP/uyFktpT0PvQG/YIrzT4lQdt2p7G3qb6ExKkdqtec6zTi2279Tl+sCyzbp6Jxq2aXs/TgwnXg7nXXZp97YLU3JdGlHiSOUewcNRlFatQ4UkQvFrWRCxhYyyUGJYrIKYiRnT57mMYV+ZqO5HpAFICvmtksVllMUbdSMi1GZSDKHGEETkqK8Aff3ty0FszZG6esYDUZIGfBLukv7zl/HHHpkyvGV6v/f82bMeUbjc7714+bI3PNgbJcNCljWyvC3BTp9nQ8hj+0s6Biy6ub7D+isPfn4Hc/T8G/IjvY5G5ChKJnlC1uKE/TG61TiIkFEiijD8pgOXrdeZF/c2Y2bNfhoqXGCjTUcS8eLeQwrUmRxxNlJeUV77HvoJKKYnaTilM2eBgH2kmE6WfJ/QsbNEIqdpQg4/YtLE81c/kwtvOgPkO8umfsJBHTxK5TVGccJvV7EjFiKUNPij8Sv3p5Gzw0cwZz56Rqc84LET/DHotCMCfwN6S+fOEtME1LQfIxa4vp7QkMNg39JE/p//7SzAwpDjBRqBwHMYjgIYJcmvyQ+M+4F7Zl7NeADfBaxQJ4jXLOAfYUMHjMvQDUIXucJNGIOm2VTse1BUOWB0kia+aOjwj8CHhTnB01QENAdywtnM3cqPkYcnE/4eCeecvMFkxT9EAt0d9a+Aag80j5M/OPXdS+YtB90bJuUSB+MqoNdDzHBh4VmJxAkGSwXkTTpyLoszHoE+dMQ++NT1+XwOFPsCJagb95xdRjMqyDGGloTOBi5TzCVyHoGM04DlvzMmOUwEDWnI3CVg3Rwl7JpXvhaXabt112biZ11tHKrTOqJC6kQ0lrcq4wnwN7TwqFxCyJejsUX6GknYbVQjYObW8dJl65MoAH45AHI71JaO7yMMwJ4kdKaCjt/A15Rixg56sENcJPtrYqphGAXQ5UHptvFqk2hkGXE5Sr1rJlWz1zTxOQ0jMQS2+BH4XuXFopYN1YAORPEUJq9D43joZTCJoknA1LXq8VCENI7n/UkEGMh/N7f6XI33QhdcZtjWXe4a60PlnfUobOLeQfF7GCRpc/MvANXYeXIaeku1+SH9kA7R9xlg5HTvoPzc3OA3QNXDKETZgLyR/lJtgm7vywSHi+ey/BEguPJmwezuwL5PYPv7NEnJZcLxV0iXaf6GyyQNh78DU+kdWA8NjS67jnFrgGD3QZjtc6iff7xoHtSzvsKonsKd9jnE8TA5iiIJChCN1ah6B0fZ84JVqhu6vOXIXqotZXSrJswCEfWB4AgPtC0plDyLypt61MKkLpGNPfsX83gNPuijzqpwx3r9nCKuD6GvNIfuXfnwe8qSufmn//Xg2eBF57r5jAw/iOLBXR3xOnRhNvs4STnaw4MsAE1dMuBAvak7zO3TQMwShlOYAjFb2O2GqiZMDcQlMYT9GMrj/MXa8PJPa8LUhztB6QcNRt3xAI2cZO/WhaiW/8ag2bd7bAxo6U7djUGNoxjjh9eDN+YByq5DGoDML96pYzOv1bu1wGW25E2AUoatDQAKQU9PaLAGJAEiKqYaGarLENiFfqyAqsIyqruSFvTt6/hTLNsBoC5NdKmR+HyxN0Qf4QH8O5Uz4BH/FwAA//8BAAD//9MAGcOL0wAA") gr, _ = gzip.NewReader(bytes.NewBuffer(bs)) bs, _ = ioutil.ReadAll(gr) assets["index.html"] = bs