diff --git a/.gitignore b/.gitignore index 27b93b5..d8fd397 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,5 @@ .idea/ on_exit_*.txt -restictray \ No newline at end of file +restictray +restictray.app/ +.DS_Store diff --git a/TODO.md b/TODO.md new file mode 100644 index 0000000..c8bab67 --- /dev/null +++ b/TODO.md @@ -0,0 +1,14 @@ + +# TODO + +- [ ] Write README +- [ ] `restic backup` can take a long time: stream output to logging somehow to keep track of what it's doing. +- [ ] Make Restictray non-dependent on existing config in `~/.restic`: + - [ ] Create default files if not existing? + - [ ] Create a config dialog in https://developer.fyne.io/ +- [ ] Add additional resilience: + - [ ] What if SSH backup and network goes down? Do a `ping` before backup? Is there a timeout from the `restic` command itself? + - [ ] If something goes wrong, menu shows error and app becomes unusable. Perhaps not all errors (e.g. above one) have to be this way. + - [X] Is backing up while mounted ok? => yes + - [ ] `restic backup` can result in `Warning: at least one source file could not be read\n: exit status 3`. This returns an error, but the backup itself seems to be all right. + - [ ] Verify backups with `restic check`? If not okay, remove (snapshot/folder?) and rebackup? What's the plan then? \ No newline at end of file diff --git a/build.sh b/build.sh new file mode 100755 index 0000000..51ad9d1 --- /dev/null +++ b/build.sh @@ -0,0 +1,6 @@ +#!/bin/zsh +# create the restictray.app folder using "fyne package -os darwin -icon icon.png", see https://developer.fyne.io/started/packaging +rm -rf restictray.app +fyne package -os darwin -icon icon-big.png +cp build/Info.plist ./restictray.app/Contents/Info.plist +cp build/restic ./restictray.app/Contents/MacOS/restic diff --git a/build/Info.plist b/build/Info.plist new file mode 100644 index 0000000..dea5635 --- /dev/null +++ b/build/Info.plist @@ -0,0 +1,36 @@ + + + + + CFBundleName + restictray + CFBundleExecutable + restictray + CFBundleIdentifier + com.brainbaking.restictray + CFBundleIconFile + icon.icns + CFBundleShortVersionString + 0.0.1 + CFBundleSupportedPlatforms + + MacOSX + + CFBundleVersion + 1 + NSHighResolutionCapable + + LSUIElement + + NSSupportsAutomaticGraphicsSwitching + + CFBundleInfoDictionaryVersion + 6.0 + CFBundlePackageType + APPL + LSApplicationCategoryType + public.app-category. + LSMinimumSystemVersion + 10.11 + + \ No newline at end of file diff --git a/build/restic b/build/restic new file mode 100755 index 0000000..ffe57ff Binary files /dev/null and b/build/restic differ diff --git a/go.mod b/go.mod index fef26c0..9ade12b 100644 --- a/go.mod +++ b/go.mod @@ -5,6 +5,7 @@ go 1.19 require ( fyne.io/systray v1.10.0 github.com/rs/zerolog v1.29.0 + gopkg.in/natefinch/lumberjack.v2 v2.2.1 ) require ( @@ -12,5 +13,5 @@ require ( github.com/mattn/go-colorable v0.1.12 // indirect github.com/mattn/go-isatty v0.0.14 // indirect github.com/tevino/abool v1.2.0 // indirect - golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6 // indirect + golang.org/x/sys v0.6.0 // indirect ) diff --git a/go.sum b/go.sum index 540a127..236f77f 100644 --- a/go.sum +++ b/go.sum @@ -15,5 +15,8 @@ github.com/tevino/abool v1.2.0 h1:heAkClL8H6w+mK5md9dzsuohKeXHUpY7Vw0ZCKW+huA= github.com/tevino/abool v1.2.0/go.mod h1:qc66Pna1RiIsPa7O4Egxxs9OqkuxDX55zznh9K07Tzg= golang.org/x/sys v0.0.0-20200515095857-1151b9dac4a9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6 h1:foEbQz/B0Oz6YIqu/69kfXPYeFQAuuMYFkjaqXzl5Wo= golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.6.0 h1:MVltZSvRTcU2ljQOhs94SXPftV6DCNnZViHeQps87pQ= +golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +gopkg.in/natefinch/lumberjack.v2 v2.2.1 h1:bBRl1b0OH9s/DuPhuXpNl+VtCaJXFZ5/uEFST95x9zc= +gopkg.in/natefinch/lumberjack.v2 v2.2.1/go.mod h1:YD8tP3GAjkrDg1eZH7EGmyESg/lsYskCTPBJVb9jqSc= diff --git a/icon-big.png b/icon-big.png new file mode 100644 index 0000000..a42324a Binary files /dev/null and b/icon-big.png differ diff --git a/icon.png b/icon.png new file mode 100644 index 0000000..6b9ce61 Binary files /dev/null and b/icon.png differ diff --git a/main.go b/main.go index 3a27e67..4391d21 100644 --- a/main.go +++ b/main.go @@ -3,9 +3,9 @@ package main import ( "brainbaking.com/restictray/restic" "fyne.io/systray" - "fyne.io/systray/example/icon" "github.com/rs/zerolog" "github.com/rs/zerolog/log" + "gopkg.in/natefinch/lumberjack.v2" "os" "strconv" "time" @@ -15,39 +15,53 @@ import ( var wrapper *restic.Wrapper func addMenuQuit() { - systray.AddSeparator() - addMenuWithQuitAction("Quit", "Quit Restictray") + mQuit := systray.AddMenuItem("Quit", "Quit Restictray") + go func() { + <-mQuit.ClickedCh + log.Info().Msg("Requesting quit") + wrapper.Cleanup() + systray.Quit() + }() } func addMenuError(err error) { - addMenuWithQuitAction("❗ "+err.Error(), "Restictray Error") + mnuError := systray.AddMenuItem("❗ "+err.Error(), "Restictray Error") + go func() { + <-mnuError.ClickedCh + restic.OpenLogs() + }() } func handleError(err error) { log.Err(err).Msg("") systray.ResetMenu() addMenuError(err) + systray.AddSeparator() addMenuQuit() } -func addMenuWithQuitAction(title string, tooltip string) { - mQuit := systray.AddMenuItem(title, tooltip) - go func() { - <-mQuit.ClickedCh - log.Info().Msg("Requesting quit") - systray.Quit() - }() -} - func main() { // init and setup logging - log.Logger = log.Output(zerolog.ConsoleWriter{Out: os.Stderr}) + rollingLog := &lumberjack.Logger{ + Filename: restic.LogFile(), + MaxSize: 500, // megabytes + MaxBackups: 3, + } + + if restic.IsDev() { + zerolog.SetGlobalLevel(zerolog.DebugLevel) + log.Logger = log.Output(zerolog.ConsoleWriter{Out: os.Stderr}) + } else { + zerolog.SetGlobalLevel(zerolog.InfoLevel) + log.Logger = zerolog.New(rollingLog).With().Timestamp().Logger() + } wrapper = &restic.Wrapper{} // bootstrap systray (this is a blocking call, second func is onExit) systray.Run(onSystrayReady, func() {}) } +// Updates snapshot information in restic wrapper and menu labels. This is a blocking call. func updateSnapshots(cnf *restic.Config, mnuLatest *systray.MenuItem, mnuNext *systray.MenuItem, mnuBackupNow *systray.MenuItem) { err := wrapper.UpdateLatestSnapshots(cnf) if err != nil { @@ -74,7 +88,7 @@ func isBackupNeeded(cnf *restic.Config) bool { // See https://github.com/fyne-io/systray/tree/master/example for more examples func onSystrayReady() { - systray.SetTemplateIcon(icon.Data, icon.Data) + systray.SetTemplateIcon(restic.TimeMachineIcon, restic.TimeMachineIcon) systray.SetTooltip("Restictray") cnf, err := restic.ReadConfig() @@ -89,47 +103,56 @@ func onSystrayReady() { mnuBackupNow := systray.AddMenuItem("Backup now", "Backup now") mnuBackupNow.Disable() mnuBrowse := systray.AddMenuItem("Browse backups in Finder...", "Mount and browse backups") + mnuLogs := systray.AddMenuItem("Open logfile...", "Open logging file") + mnuConfig := systray.AddMenuItem("Open config file...", "Open config file") + systray.AddSeparator() addMenuQuit() go updateSnapshots(cnf, mnuLatestSnapshot, mnuNextSnapshot, mnuBackupNow) backupCheckTime := make(chan bool, 1) backupCheckFn := func() { - time.Sleep(3 * time.Second) + time.Sleep(1 * time.Hour) backupCheckTime <- true } go backupCheckFn() for { select { + case <-mnuConfig.ClickedCh: + restic.OpenConfigFile() + case <-mnuLogs.ClickedCh: + restic.OpenLogs() case <-backupCheckTime: if !mnuBackupNow.Disabled() && isBackupNeeded(cnf) { - go onClickedMenuBackupNow(mnuBackupNow, cnf, func() { + go backupNow(mnuBackupNow, cnf, func() { updateSnapshots(cnf, mnuLatestSnapshot, mnuNextSnapshot, mnuBackupNow) go backupCheckFn() }) } else { - log.Debug().Msg("Backup not yet needed/in progress/impossible") + log.Info().Msg("Backup not yet needed/in progress/impossible") go backupCheckFn() } case <-mnuBackupNow.ClickedCh: - go onClickedMenuBackupNow(mnuBackupNow, cnf, func() { + go backupNow(mnuBackupNow, cnf, func() { updateSnapshots(cnf, mnuLatestSnapshot, mnuNextSnapshot, mnuBackupNow) }) case <-mnuBrowse.ClickedCh: - // Restic allows backing up and consulting snapshots while mounted - go onClickedMenuBrowse(mnuBrowse, cnf) + go mountBackups(cnf) } } } -func onClickedMenuBrowse(browse *systray.MenuItem, cnf *restic.Config) { +// Allows for browsing inside Restic backups by the "mount" command, using MacFuse internally. This is a NON-blocking call. +// Restic allows backing up and consulting snapshots while mounted +func mountBackups(cnf *restic.Config) { err := wrapper.MountBackups(cnf) if err != nil { handleError(err) } } -func onClickedMenuBackupNow(mnu *systray.MenuItem, cnf *restic.Config, onDone func()) { +// Disables the menu and triggers a restic backup. This is a blocking call. +func backupNow(mnu *systray.MenuItem, cnf *restic.Config, onDoneFn func()) { log.Debug().Msg("Backup triggered") mnu.SetTitle("🔄 Backup in progress...") mnu.Disable() @@ -138,5 +161,5 @@ func onClickedMenuBackupNow(mnu *systray.MenuItem, cnf *restic.Config, onDone fu if err != nil { handleError(err) } - onDone() + onDoneFn() } diff --git a/restic/config.go b/restic/config.go index 6e392c4..ada8d7a 100644 --- a/restic/config.go +++ b/restic/config.go @@ -20,15 +20,33 @@ const ( ) var home, _ = os.UserHomeDir() +var executable, _ = os.Executable() +var isDev = os.Getenv("RESTICTRAY_DEV") -func (cnf *Config) PasswordFile() string { +func IsDev() bool { + return isDev != "" +} + +func PasswordFile() string { return home + "/.restic/password.txt" } -func (cnf *Config) ExcludeFile() string { +func LogFile() string { + return home + "/.restic/log.txt" +} + +func ExcludeFile() string { return home + "/.restic/excludes.txt" } +func ConfigFile() string { + return home + "/.restic/config.json" +} + +func (cnf *Config) MountDir() string { + return home + "/.restic/mnt" +} + func (cnf *Config) CreateMountDirIfDoesntExist() error { if _, err := os.Stat(cnf.MountDir()); os.IsNotExist(err) { return os.Mkdir(cnf.MountDir(), os.ModePerm) @@ -36,12 +54,8 @@ func (cnf *Config) CreateMountDirIfDoesntExist() error { return nil } -func (cnf *Config) MountDir() string { - return home + "/.restic/mnt" -} - func ReadConfig() (*Config, error) { - confData, err := os.ReadFile(home + "/.restic/config.json") + confData, err := os.ReadFile(ConfigFile()) if err != nil { return nil, fmt.Errorf("No config.json found: %w", err) } diff --git a/restic/icon.go b/restic/icon.go new file mode 100644 index 0000000..20b7af9 --- /dev/null +++ b/restic/icon.go @@ -0,0 +1,830 @@ +package restic + +// TimeMachineIcon is generated with https://github.com/cratonica/2goarray +var TimeMachineIcon = []byte{ + 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, + 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0xc8, 0x00, 0x00, 0x00, 0xb3, + 0x08, 0x04, 0x00, 0x00, 0x00, 0x66, 0xb4, 0x9b, 0x17, 0x00, 0x00, 0x00, + 0x04, 0x67, 0x41, 0x4d, 0x41, 0x00, 0x00, 0xb1, 0x8f, 0x0b, 0xfc, 0x61, + 0x05, 0x00, 0x00, 0x00, 0x20, 0x63, 0x48, 0x52, 0x4d, 0x00, 0x00, 0x7a, + 0x26, 0x00, 0x00, 0x80, 0x84, 0x00, 0x00, 0xfa, 0x00, 0x00, 0x00, 0x80, + 0xe8, 0x00, 0x00, 0x75, 0x30, 0x00, 0x00, 0xea, 0x60, 0x00, 0x00, 0x3a, + 0x98, 0x00, 0x00, 0x17, 0x70, 0x9c, 0xba, 0x51, 0x3c, 0x00, 0x00, 0x00, + 0x02, 0x62, 0x4b, 0x47, 0x44, 0x00, 0xff, 0x87, 0x8f, 0xcc, 0xbf, 0x00, + 0x00, 0x00, 0x09, 0x70, 0x48, 0x59, 0x73, 0x00, 0x00, 0x00, 0x60, 0x00, + 0x00, 0x00, 0x60, 0x00, 0xf0, 0x6b, 0x42, 0xcf, 0x00, 0x00, 0x00, 0x07, + 0x74, 0x49, 0x4d, 0x45, 0x07, 0xe7, 0x03, 0x05, 0x09, 0x06, 0x08, 0xe0, + 0xbb, 0x1f, 0x43, 0x00, 0x00, 0x25, 0x6b, 0x49, 0x44, 0x41, 0x54, 0x78, + 0xda, 0xed, 0x9d, 0x67, 0x78, 0x55, 0xc5, 0xd6, 0xc7, 0x7f, 0xfb, 0x94, + 0x9c, 0x24, 0x27, 0xbd, 0x13, 0x48, 0x0f, 0x21, 0x84, 0x90, 0x90, 0x10, + 0x6a, 0x28, 0x01, 0x42, 0x91, 0x22, 0x45, 0xa3, 0x14, 0x15, 0x54, 0x8a, + 0x22, 0x2a, 0x5e, 0x45, 0x14, 0x0b, 0x62, 0x43, 0x51, 0xf0, 0x4a, 0x11, + 0x10, 0x54, 0x04, 0x6c, 0xa0, 0x22, 0x52, 0x45, 0x29, 0x8a, 0x52, 0xa4, + 0x09, 0x04, 0x21, 0x74, 0x12, 0x02, 0x04, 0x48, 0xef, 0xc9, 0x49, 0xe6, + 0xfd, 0x80, 0x5c, 0x04, 0x25, 0x7b, 0x9f, 0x1e, 0x7c, 0xfd, 0xcf, 0xf3, + 0xf8, 0x41, 0x76, 0x66, 0x56, 0x39, 0x33, 0xb3, 0x66, 0xcd, 0x9a, 0xb5, + 0x24, 0x6e, 0x31, 0xe4, 0xe0, 0xcb, 0x62, 0xd2, 0xd9, 0xc3, 0x66, 0xe0, + 0x27, 0xa7, 0xef, 0x7c, 0xb2, 0x1a, 0x65, 0x37, 0x2a, 0x0d, 0x17, 0xd1, + 0x17, 0xbc, 0xb4, 0x11, 0xf9, 0xce, 0x4e, 0x41, 0x95, 0x9a, 0x2a, 0x04, + 0xa0, 0x46, 0x83, 0x16, 0x6d, 0x6d, 0xee, 0x59, 0x4d, 0xb9, 0x9b, 0xe4, + 0x26, 0xf2, 0x4f, 0x38, 0x16, 0x7b, 0x95, 0x5d, 0xca, 0x88, 0xaa, 0xaa, + 0x39, 0xe1, 0x91, 0x1d, 0x91, 0xd3, 0x2f, 0xb7, 0x63, 0x39, 0x74, 0x26, + 0x8a, 0x0e, 0xdc, 0xc7, 0x19, 0x42, 0xed, 0xcd, 0x1a, 0x00, 0x92, 0xbd, + 0x09, 0x50, 0x8a, 0x1c, 0xfc, 0x58, 0xc4, 0x7e, 0x36, 0xb3, 0x9f, 0x5d, + 0x8e, 0x5f, 0x04, 0x9c, 0x08, 0xcf, 0x8d, 0xc9, 0x89, 0x2a, 0x8f, 0xaa, + 0x0a, 0xab, 0xf0, 0xa9, 0x74, 0x36, 0x38, 0xd6, 0x20, 0x10, 0xb2, 0xcc, + 0x4a, 0x48, 0x68, 0x85, 0x54, 0xa1, 0x2d, 0x76, 0xce, 0xd7, 0x9d, 0xd6, + 0x1f, 0xf5, 0x3a, 0xea, 0x95, 0xee, 0x77, 0xec, 0xf1, 0xcb, 0xcd, 0x2b, + 0xe3, 0x68, 0x4f, 0x27, 0xce, 0xd0, 0x9d, 0x24, 0xbb, 0xf2, 0x79, 0x0b, + 0x28, 0xe4, 0x43, 0x7a, 0xb0, 0x88, 0xed, 0xac, 0xe1, 0xb0, 0x6e, 0x41, + 0xe8, 0xb1, 0xb8, 0x4b, 0x6d, 0x2e, 0xc6, 0x95, 0x34, 0x2e, 0xf3, 0xaf, + 0x72, 0xaa, 0x96, 0x55, 0x41, 0xdd, 0x50, 0xa1, 0x46, 0x57, 0xe6, 0x78, + 0xde, 0xe5, 0xa8, 0xfe, 0x57, 0xdf, 0x5f, 0x9b, 0xfe, 0x3e, 0xe5, 0x9c, + 0x5f, 0x55, 0x37, 0x7a, 0xf3, 0x1f, 0x76, 0xd0, 0xce, 0xde, 0x6c, 0xd7, + 0x47, 0xac, 0x45, 0x30, 0x99, 0xf6, 0xc0, 0x74, 0x8f, 0xbb, 0x3b, 0xb5, + 0x7a, 0x26, 0x72, 0xad, 0xdf, 0x59, 0x67, 0x83, 0x5a, 0x60, 0xf1, 0xa6, + 0x16, 0x4e, 0x95, 0xbe, 0xa7, 0xc3, 0xbe, 0x69, 0xf3, 0x64, 0xbf, 0xa4, + 0x85, 0x6e, 0xd0, 0x8f, 0x99, 0x34, 0x65, 0x9d, 0x1d, 0x78, 0xae, 0xa7, + 0x33, 0xe4, 0x34, 0x93, 0x69, 0xcb, 0x6a, 0xd6, 0xf0, 0x96, 0xc7, 0xf7, + 0x2d, 0xce, 0x76, 0x2f, 0x4c, 0x2d, 0x89, 0x29, 0x75, 0x31, 0x58, 0x7d, + 0x5c, 0x2d, 0x8e, 0x79, 0x3e, 0x19, 0x0d, 0x36, 0x87, 0x6d, 0xb8, 0x6d, + 0xef, 0x3d, 0xc5, 0x23, 0xb8, 0x9b, 0x0c, 0xfa, 0x12, 0x69, 0x6f, 0x71, + 0xd8, 0x17, 0x47, 0x10, 0x3c, 0x8b, 0x17, 0xbb, 0x75, 0x43, 0x5b, 0x77, + 0x7a, 0x35, 0x68, 0xa7, 0xbe, 0x58, 0x65, 0x85, 0x39, 0x51, 0x57, 0xd3, + 0x08, 0x8f, 0xe2, 0xe0, 0xcd, 0xed, 0x9f, 0x1e, 0x17, 0x2f, 0xb4, 0x71, + 0xcc, 0x42, 0x70, 0xc8, 0xde, 0x42, 0xb1, 0x0f, 0x72, 0x58, 0xc3, 0x11, + 0xee, 0x07, 0x5e, 0x6e, 0x70, 0xfb, 0xc8, 0xc8, 0x95, 0x1e, 0xb9, 0x1a, + 0x1b, 0xab, 0xe2, 0xcf, 0xcd, 0x41, 0xf8, 0xe6, 0xc4, 0x7e, 0x3e, 0xe0, + 0x8e, 0x0f, 0x7d, 0xe0, 0x19, 0x04, 0x3f, 0xda, 0x5b, 0x3c, 0xb6, 0xc5, + 0x76, 0xde, 0xe0, 0x13, 0x6e, 0x43, 0xa8, 0x1e, 0x8c, 0x6e, 0x3b, 0x39, + 0x28, 0xdd, 0xa9, 0xc6, 0x7e, 0xaa, 0xb8, 0xd6, 0x24, 0xe1, 0x52, 0x15, + 0xb1, 0x2b, 0xf9, 0xd1, 0xc9, 0xe1, 0x70, 0x07, 0xd9, 0xcc, 0xb4, 0xb7, + 0x98, 0x6c, 0x83, 0x4b, 0xcc, 0xe3, 0x3b, 0x52, 0x11, 0x52, 0x5a, 0x62, + 0xd2, 0x1c, 0xbf, 0xb3, 0xf6, 0x9c, 0x17, 0x7f, 0xd7, 0x74, 0xa2, 0xd1, + 0xf1, 0x96, 0x93, 0x87, 0x46, 0xc0, 0x1d, 0x08, 0x96, 0xdb, 0x5b, 0x5c, + 0xd6, 0xc6, 0xbb, 0xe4, 0x32, 0x18, 0x21, 0x0d, 0x48, 0x8c, 0x9e, 0xe3, + 0x71, 0xc1, 0x1a, 0x36, 0x94, 0x25, 0x9a, 0x46, 0x78, 0x1d, 0x8f, 0x99, + 0x7c, 0x6f, 0xc4, 0x95, 0xe5, 0x6b, 0xbb, 0xbd, 0x85, 0x66, 0x2d, 0xec, + 0x04, 0xfe, 0x03, 0x8c, 0x8b, 0x6b, 0x35, 0xc7, 0xf3, 0x82, 0xad, 0x37, + 0x6f, 0xe3, 0x95, 0xe2, 0x7b, 0xbc, 0xc3, 0xe4, 0xa9, 0xe1, 0x30, 0x95, + 0x7b, 0x38, 0x63, 0x6f, 0xe1, 0x59, 0x1e, 0x4f, 0x31, 0x0f, 0x98, 0x1a, + 0xd2, 0xee, 0x25, 0xdf, 0x33, 0xf5, 0x6d, 0x99, 0xba, 0x59, 0x73, 0x10, + 0x21, 0x87, 0x7b, 0x8c, 0x5d, 0xe2, 0x15, 0xcf, 0x7a, 0x16, 0xd9, 0x5b, + 0x80, 0x96, 0xc4, 0x36, 0xca, 0xb9, 0x8d, 0x2d, 0xfa, 0xde, 0x23, 0x42, + 0x0f, 0x38, 0xd8, 0x5d, 0xcc, 0xc6, 0x35, 0xe7, 0x9a, 0xa8, 0x4d, 0x69, + 0xbd, 0x84, 0x66, 0x0c, 0x82, 0xa3, 0xf6, 0x16, 0xa4, 0x25, 0x50, 0x4e, + 0x5f, 0xde, 0x02, 0x46, 0x24, 0x35, 0x5f, 0xa1, 0xaf, 0xb2, 0xb7, 0x78, + 0x4d, 0x6b, 0x9e, 0x45, 0x49, 0x73, 0x9e, 0x0c, 0x87, 0xa5, 0xbc, 0x45, + 0x95, 0xbd, 0x05, 0x6a, 0x1e, 0x3e, 0x40, 0x90, 0xca, 0xa7, 0x5e, 0x3d, + 0x9f, 0x0b, 0x38, 0x2f, 0xd9, 0x5d, 0xb0, 0xa6, 0x37, 0xb5, 0x08, 0x39, + 0x3c, 0x68, 0xc4, 0x05, 0xc7, 0x91, 0xc0, 0x6a, 0x8b, 0x49, 0x47, 0x6d, + 0x5b, 0x65, 0x54, 0xe0, 0x8c, 0x44, 0x5b, 0xfa, 0x25, 0x2f, 0x9d, 0xb3, + 0xef, 0xc1, 0x02, 0x57, 0xdb, 0x8e, 0x6e, 0x59, 0x08, 0x0a, 0x7d, 0xb2, + 0x6f, 0xfb, 0x3e, 0x3c, 0x21, 0x3d, 0x2b, 0xef, 0x36, 0x3a, 0x59, 0x50, + 0x29, 0x36, 0xc3, 0x1e, 0x60, 0x34, 0xbf, 0x39, 0xf7, 0x79, 0x34, 0x20, + 0xdb, 0xfa, 0x73, 0x43, 0x12, 0x92, 0xb0, 0xfe, 0x28, 0x1a, 0x11, 0x7c, + 0x20, 0x6d, 0x90, 0x50, 0xbd, 0x40, 0x9a, 0x45, 0x54, 0x62, 0x43, 0xe7, + 0xe2, 0x7b, 0x0c, 0xa1, 0x1d, 0x69, 0xa1, 0x6b, 0xa6, 0x1c, 0x1d, 0x5a, + 0xa2, 0xb1, 0x64, 0xcf, 0x12, 0x6a, 0x34, 0xb5, 0xda, 0x32, 0x4d, 0xb1, + 0x43, 0xb1, 0xba, 0xa0, 0xfa, 0xa2, 0xaf, 0xa4, 0x2e, 0x3b, 0x7e, 0x4a, + 0x5b, 0xab, 0xa6, 0x1a, 0xb5, 0x2e, 0x22, 0xac, 0x54, 0x9b, 0x2b, 0x39, + 0x07, 0x96, 0x3b, 0xd7, 0x78, 0x56, 0x39, 0x1b, 0x9c, 0xab, 0xa5, 0x5a, + 0xcc, 0x73, 0xdb, 0xdf, 0x08, 0xcf, 0xe2, 0xd8, 0x99, 0xf7, 0x4f, 0x5f, + 0x99, 0xbf, 0x92, 0x8f, 0xb8, 0xdf, 0x6c, 0x5e, 0x6c, 0x84, 0x17, 0x09, + 0x60, 0x2c, 0x0f, 0x74, 0xfd, 0x71, 0xda, 0x99, 0x96, 0x96, 0xf1, 0xda, + 0x4a, 0x68, 0xd1, 0x95, 0xeb, 0x2f, 0x39, 0x9f, 0xd2, 0x65, 0xe8, 0x8f, + 0x79, 0x65, 0x6a, 0xb3, 0x02, 0xf3, 0x1c, 0x0b, 0x5a, 0x55, 0x94, 0x97, + 0x8e, 0x96, 0xa8, 0x95, 0x6a, 0xae, 0x7e, 0x27, 0x34, 0x30, 0x5b, 0xf2, + 0x74, 0xdd, 0xe2, 0xe0, 0xe0, 0x73, 0xc6, 0xb3, 0x2a, 0xb8, 0x30, 0xac, + 0xa4, 0x71, 0x51, 0x58, 0x59, 0x48, 0x95, 0x7f, 0x85, 0xce, 0x52, 0xfe, + 0x63, 0x9d, 0x88, 0x5a, 0xd3, 0x63, 0xe2, 0x17, 0xbf, 0xaf, 0x21, 0x9d, + 0x61, 0x66, 0xf5, 0x64, 0xd1, 0x5f, 0xea, 0xcd, 0x50, 0x4b, 0x0f, 0x0a, + 0x98, 0xa2, 0x59, 0x73, 0xff, 0xea, 0x29, 0x17, 0x1b, 0x98, 0xdf, 0x9f, + 0x06, 0xe7, 0x52, 0xa7, 0x13, 0x6e, 0xbf, 0x35, 0xda, 0xef, 0xbd, 0x2f, + 0xea, 0x54, 0xf7, 0x4b, 0x5d, 0x4a, 0xa1, 0x39, 0xfe, 0x08, 0x54, 0x48, + 0x6c, 0xc4, 0x9d, 0x24, 0x0c, 0x94, 0xe0, 0x41, 0x2e, 0x6a, 0x32, 0x0c, + 0x3f, 0x73, 0x80, 0x2e, 0x79, 0x12, 0xe2, 0x42, 0x09, 0x17, 0x39, 0x8c, + 0x90, 0x3e, 0x74, 0xfe, 0xd9, 0xb7, 0x30, 0xfa, 0x5c, 0x6c, 0x7e, 0xeb, + 0xc2, 0xe6, 0x25, 0x21, 0x15, 0x4e, 0xe6, 0x2a, 0xa6, 0x52, 0x3a, 0xd4, + 0xb7, 0x20, 0x34, 0x79, 0x42, 0xfc, 0xfa, 0x99, 0x3c, 0xc9, 0x74, 0x33, + 0x7a, 0xb2, 0xc1, 0x0c, 0x59, 0xcc, 0x2c, 0x02, 0xb9, 0xcb, 0x75, 0xc1, + 0x0b, 0x7b, 0xc7, 0x15, 0x39, 0x99, 0xd7, 0x97, 0x03, 0xae, 0x97, 0xdc, + 0xf6, 0x34, 0xfc, 0x25, 0x70, 0x6b, 0xe4, 0xef, 0xaf, 0x5d, 0x96, 0x44, + 0x0f, 0x5a, 0x11, 0x4b, 0x12, 0xe5, 0xc4, 0x29, 0xee, 0x63, 0x19, 0xd1, + 0x6c, 0xe0, 0x10, 0x27, 0xf8, 0x09, 0xa1, 0x7e, 0xd6, 0xf7, 0x58, 0x5c, + 0x66, 0x72, 0x41, 0xd7, 0x8b, 0x4d, 0x4b, 0xbd, 0xcd, 0x55, 0x8b, 0xcf, + 0xa5, 0xd6, 0x2f, 0xad, 0x99, 0xff, 0x58, 0x8d, 0x8a, 0x77, 0xad, 0x2f, + 0x56, 0x53, 0x91, 0x09, 0x3c, 0xc4, 0x9b, 0x81, 0x6d, 0xbe, 0xd0, 0x99, + 0xe5, 0xbf, 0xd5, 0x08, 0xcf, 0xfc, 0xf0, 0x75, 0x5d, 0xc6, 0x8f, 0x8e, + 0xff, 0xd1, 0x11, 0x6e, 0xe3, 0x69, 0xd6, 0x31, 0xcb, 0x4c, 0xda, 0x3a, + 0xb3, 0x81, 0x67, 0xe8, 0x0c, 0x7c, 0xe7, 0xda, 0xaf, 0x45, 0xc7, 0x49, + 0x51, 0x3f, 0xbb, 0x17, 0x99, 0xe7, 0x4b, 0x73, 0x29, 0xeb, 0xfa, 0xe6, + 0xd7, 0xfa, 0xe7, 0x18, 0x4e, 0xb6, 0xbd, 0x05, 0xff, 0xf7, 0x58, 0x8e, + 0x20, 0x88, 0x97, 0x62, 0x22, 0xd7, 0x6a, 0xcd, 0x60, 0xd3, 0xd9, 0x10, + 0xf8, 0x5b, 0xd2, 0xcb, 0x0f, 0xb4, 0xdd, 0xe8, 0x08, 0xc3, 0x59, 0x48, + 0x8a, 0x45, 0xcf, 0xc7, 0xf9, 0x08, 0x96, 0x72, 0x1b, 0xf0, 0xb5, 0xeb, + 0xb0, 0x94, 0xc4, 0x19, 0x0d, 0x32, 0x1c, 0xcd, 0xa0, 0xd5, 0xa9, 0x26, + 0x6e, 0xde, 0x92, 0x80, 0xa1, 0x44, 0xd7, 0x47, 0xc7, 0xca, 0xa3, 0x08, + 0x42, 0x19, 0x9d, 0x10, 0xbd, 0xcf, 0xd4, 0xdf, 0x9d, 0x24, 0xdc, 0xcb, + 0xa2, 0xd6, 0xf7, 0x19, 0x3e, 0xc9, 0x1f, 0x06, 0x33, 0x97, 0xa6, 0x1c, + 0xb7, 0x12, 0xad, 0x95, 0x08, 0x16, 0xd0, 0x0d, 0x98, 0x1c, 0xd2, 0xfd, + 0xe1, 0xc8, 0xad, 0xfa, 0x72, 0x53, 0x55, 0xa2, 0x13, 0x89, 0xdf, 0x4e, + 0x08, 0xec, 0x0f, 0x94, 0xda, 0x5b, 0x01, 0xd7, 0xe3, 0x0c, 0x82, 0x4e, + 0xa4, 0x26, 0x04, 0xee, 0x33, 0xed, 0x34, 0x20, 0x09, 0xf7, 0xfc, 0xc8, + 0xa5, 0x03, 0x7a, 0x6e, 0x73, 0x09, 0x67, 0x3c, 0xb6, 0xf0, 0x1a, 0x5d, + 0x66, 0x29, 0x35, 0x4c, 0x02, 0x16, 0xb8, 0xf5, 0x1d, 0x18, 0xbb, 0xde, + 0xbd, 0xdc, 0x34, 0xca, 0x35, 0x22, 0xe4, 0xdb, 0xd1, 0xc1, 0xe1, 0x08, + 0x0a, 0xec, 0xad, 0x84, 0x6b, 0xc8, 0x44, 0x00, 0x4f, 0xf4, 0xf4, 0x3d, + 0x68, 0xa2, 0x32, 0x8a, 0x9b, 0x2c, 0x1d, 0xd0, 0xa9, 0x5c, 0xdb, 0x8d, + 0x4f, 0x78, 0x9e, 0xef, 0x6d, 0x48, 0xf9, 0x39, 0x04, 0x6f, 0x10, 0xc1, + 0x4e, 0xfd, 0xb0, 0x81, 0x31, 0xeb, 0x5d, 0x4c, 0x9a, 0x29, 0x2a, 0x11, + 0xbf, 0x63, 0x4e, 0x42, 0xdf, 0xfa, 0xa3, 0x92, 0xf7, 0x11, 0xc0, 0x73, + 0xb7, 0x37, 0x3e, 0x67, 0x0a, 0x3b, 0xfa, 0xea, 0x98, 0xef, 0xee, 0xeb, + 0x77, 0x59, 0x9b, 0xcc, 0xfb, 0xbc, 0xc8, 0x3e, 0xc5, 0xa3, 0xa6, 0x93, + 0xc1, 0x2c, 0x86, 0x91, 0x46, 0x1a, 0x77, 0x33, 0x91, 0xef, 0xc8, 0xe3, + 0xa2, 0x49, 0xf4, 0x9f, 0xe4, 0x51, 0x3e, 0x21, 0x8e, 0xf5, 0xfa, 0x7e, + 0x77, 0x45, 0xef, 0x74, 0x34, 0xc1, 0x1c, 0x51, 0x8b, 0x96, 0xfb, 0x66, + 0xb5, 0xe8, 0x04, 0x7c, 0x6e, 0x6f, 0x65, 0xc0, 0x21, 0x04, 0x31, 0xf4, + 0x4e, 0x0a, 0x3d, 0x69, 0x3c, 0x23, 0x5a, 0x11, 0xbc, 0xef, 0xf6, 0x07, + 0xbf, 0x75, 0x8d, 0xe3, 0x3d, 0x1e, 0xe3, 0x88, 0xe2, 0x31, 0x2b, 0x69, + 0xcd, 0xab, 0x70, 0x65, 0x7a, 0x5d, 0x6d, 0x40, 0x24, 0x0f, 0x21, 0xf8, + 0xc9, 0x04, 0x2e, 0x2e, 0x30, 0x80, 0x79, 0xc0, 0x7c, 0x9f, 0x8e, 0x8f, + 0x36, 0x38, 0x66, 0xfc, 0x2e, 0xa8, 0x16, 0x4d, 0x7e, 0x4c, 0x6b, 0xd8, + 0x8d, 0xa6, 0x64, 0x1a, 0x31, 0xaa, 0x15, 0x0e, 0x86, 0x2f, 0xd3, 0x8c, + 0x58, 0x12, 0x13, 0xbe, 0x5f, 0x90, 0x13, 0x66, 0xdc, 0x5f, 0x4a, 0x78, + 0xe7, 0x87, 0xcd, 0xeb, 0xf9, 0xde, 0x5b, 0x67, 0x3b, 0xe2, 0xcf, 0x30, + 0xdc, 0x15, 0x07, 0x15, 0x6c, 0x26, 0x88, 0x4e, 0xf8, 0x78, 0xf7, 0x18, + 0x16, 0xd3, 0xba, 0x90, 0x5a, 0x00, 0x9c, 0xf0, 0xa8, 0x89, 0x39, 0x19, + 0x79, 0xda, 0x69, 0x8b, 0x74, 0xe6, 0x24, 0x2b, 0xe9, 0x6f, 0x24, 0x1f, + 0x01, 0xc0, 0x2c, 0x20, 0xef, 0xf2, 0xd6, 0x59, 0x8f, 0x6c, 0xf8, 0x75, + 0xe2, 0x91, 0xbb, 0x8a, 0xf5, 0xc6, 0xfc, 0x7d, 0x0d, 0x47, 0x3b, 0x55, + 0xce, 0x1d, 0xfc, 0xd0, 0xd9, 0x73, 0x2f, 0x58, 0x5e, 0xc8, 0xca, 0x51, + 0x4a, 0x33, 0xd2, 0x98, 0x12, 0x17, 0x69, 0xf4, 0x56, 0xee, 0x28, 0x9a, + 0x6d, 0x7d, 0xb0, 0xbb, 0x90, 0xc6, 0x03, 0x1b, 0x8d, 0x1c, 0x75, 0x2a, + 0x4f, 0x31, 0x37, 0xbc, 0xf5, 0x7a, 0xc7, 0x3f, 0x39, 0x14, 0x25, 0x21, + 0x09, 0x95, 0x70, 0xaa, 0x6d, 0x78, 0xb8, 0x67, 0x5f, 0x30, 0xdd, 0x7b, + 0xf5, 0x3d, 0x82, 0x81, 0x08, 0xed, 0x6d, 0x03, 0x83, 0xf7, 0x1a, 0x7b, + 0xaf, 0xa9, 0x11, 0x89, 0xdf, 0x2e, 0x0e, 0x98, 0xc4, 0x63, 0xf6, 0x53, + 0x48, 0x0a, 0xdd, 0x98, 0x18, 0xd8, 0xf8, 0x07, 0x63, 0xa7, 0xb8, 0x67, + 0x5e, 0xca, 0x6b, 0x1f, 0xfb, 0xb5, 0xe6, 0x57, 0x93, 0xec, 0xf7, 0x85, + 0xfc, 0xe2, 0xd8, 0x7a, 0xe9, 0xcd, 0xce, 0x3a, 0x41, 0x87, 0x5f, 0x09, + 0x9b, 0x64, 0x16, 0x57, 0xe3, 0xf8, 0x08, 0x2d, 0xff, 0x09, 0x6e, 0xbd, + 0xd0, 0xb5, 0xc2, 0x38, 0xbe, 0x74, 0x22, 0x6e, 0xde, 0x57, 0xfa, 0x71, + 0x3c, 0x69, 0x1f, 0x75, 0xbc, 0xcd, 0x73, 0x2c, 0xf2, 0x48, 0xfa, 0xda, + 0x38, 0x75, 0xa8, 0x45, 0xe8, 0xde, 0x41, 0x3d, 0x85, 0xf4, 0x32, 0xe1, + 0x64, 0x98, 0x34, 0x6e, 0x7f, 0x06, 0x27, 0x78, 0xe4, 0xde, 0xac, 0x7f, + 0xe7, 0x8a, 0xae, 0xdd, 0x5a, 0x9b, 0xc9, 0xd9, 0x21, 0x60, 0x38, 0x95, + 0xba, 0x3e, 0x0f, 0x04, 0x66, 0x1a, 0x37, 0xf7, 0x1d, 0x6b, 0xba, 0xbc, + 0x29, 0xd4, 0xef, 0xb2, 0xc4, 0xf6, 0xea, 0x58, 0xca, 0x02, 0x4a, 0x75, + 0xed, 0xdf, 0x71, 0xa8, 0x35, 0x86, 0x60, 0xe7, 0xda, 0x84, 0xcf, 0x9e, + 0x0d, 0x0f, 0xe0, 0x27, 0xde, 0x33, 0x79, 0xe4, 0x0e, 0xf4, 0xe9, 0xef, + 0x5c, 0x7d, 0xf3, 0x5f, 0x69, 0xca, 0xfd, 0xc1, 0x16, 0xe0, 0xef, 0x55, + 0x96, 0x00, 0x0f, 0xb7, 0x89, 0xda, 0x6c, 0xdc, 0xd2, 0xe5, 0x52, 0x76, + 0xdb, 0x58, 0xd8, 0x63, 0xeb, 0x30, 0xbb, 0x35, 0xfc, 0x06, 0x74, 0x1f, + 0xe7, 0x52, 0x69, 0x0c, 0xb1, 0x6e, 0x05, 0x5d, 0x5f, 0xdc, 0xe2, 0x36, + 0x06, 0xb8, 0x60, 0xc6, 0xd8, 0x7a, 0x62, 0x87, 0x6a, 0x6e, 0x6a, 0x9c, + 0xaa, 0x45, 0xf4, 0x13, 0x96, 0xe1, 0x71, 0x2b, 0x82, 0x0e, 0x4c, 0xf1, + 0x6f, 0xf3, 0xa1, 0xde, 0x60, 0x0c, 0x97, 0x3e, 0x17, 0xd3, 0x7a, 0x05, + 0x01, 0x8b, 0x6d, 0xa7, 0x8e, 0x63, 0x80, 0x9a, 0x21, 0xb7, 0x79, 0x5f, + 0x34, 0x86, 0x50, 0xbf, 0xcc, 0x3e, 0x43, 0x04, 0xd3, 0x99, 0xca, 0x37, + 0x66, 0x8c, 0x5d, 0x09, 0x74, 0x7c, 0xee, 0xe6, 0xbf, 0x5a, 0x95, 0x48, + 0x9c, 0x65, 0x9e, 0xc2, 0xaf, 0x21, 0x1d, 0x15, 0x63, 0x39, 0xa8, 0xef, + 0xf1, 0xa2, 0x67, 0x89, 0x31, 0x9c, 0x36, 0x3a, 0xf8, 0x58, 0x4c, 0x1f, + 0x6e, 0xb7, 0x9d, 0x42, 0xfa, 0x93, 0xc6, 0x13, 0x51, 0xa1, 0x46, 0x9c, + 0xcb, 0x55, 0x22, 0xfc, 0xf0, 0xa0, 0x0e, 0xb0, 0x9c, 0x69, 0x66, 0x8e, + 0x2d, 0x80, 0xb0, 0x29, 0x37, 0x0f, 0xb3, 0x93, 0x44, 0xa3, 0x0f, 0x05, + 0x79, 0x16, 0xe2, 0x34, 0x8b, 0x57, 0xf8, 0x00, 0xa1, 0xee, 0x7d, 0x5f, + 0xc0, 0x65, 0x63, 0xb8, 0x8d, 0x59, 0x35, 0xdb, 0x73, 0x02, 0x6f, 0xdb, + 0x46, 0x1d, 0x9f, 0xf1, 0x12, 0x5f, 0xba, 0x36, 0x5f, 0xae, 0x3c, 0xf6, + 0x50, 0x25, 0x42, 0xb7, 0x4e, 0x6a, 0x05, 0x82, 0xad, 0x66, 0x8f, 0xbe, + 0x1f, 0x21, 0x25, 0x2e, 0xa9, 0x6b, 0xab, 0x8d, 0xdc, 0x98, 0xee, 0xf8, + 0xa5, 0x05, 0xf9, 0x5d, 0xcb, 0x06, 0x60, 0x74, 0x9a, 0xbf, 0x11, 0x47, + 0x5f, 0x5d, 0x6d, 0xbb, 0x57, 0x85, 0x6a, 0x15, 0x67, 0xad, 0xaf, 0x8e, + 0xc3, 0xec, 0x07, 0xba, 0x4d, 0x52, 0x1e, 0xb1, 0xae, 0x16, 0x4d, 0x36, + 0x8e, 0x0c, 0xeb, 0x8f, 0x65, 0x5e, 0x5e, 0x8c, 0x46, 0xa8, 0x82, 0x97, + 0xd7, 0x35, 0x9e, 0xf7, 0xb6, 0x67, 0x5c, 0x26, 0x58, 0x94, 0xe7, 0x0d, + 0x1c, 0x00, 0xfa, 0x24, 0x07, 0x1e, 0x51, 0xae, 0x12, 0x8f, 0xa2, 0xbb, + 0xee, 0x04, 0x41, 0xb9, 0xf5, 0x55, 0x12, 0xc6, 0x7d, 0xa9, 0xca, 0x77, + 0x0f, 0x8d, 0x88, 0xdd, 0x38, 0x25, 0x2c, 0x15, 0xcc, 0xbe, 0x62, 0xba, + 0x82, 0x35, 0x6c, 0x76, 0x6a, 0xb8, 0xb1, 0xae, 0x11, 0x03, 0x4f, 0xbd, + 0x12, 0xf4, 0x86, 0x85, 0x79, 0x5e, 0x88, 0x40, 0xc7, 0xbd, 0xed, 0x83, + 0x8e, 0x28, 0x37, 0x83, 0xc3, 0x8f, 0xbc, 0x18, 0x3d, 0x8a, 0x97, 0xac, + 0xab, 0x8c, 0x4f, 0x98, 0xc4, 0x3b, 0x0d, 0x9a, 0x6c, 0x57, 0x3e, 0x3b, + 0x62, 0x36, 0xbe, 0x1a, 0x36, 0x10, 0x8c, 0x70, 0x1b, 0xd6, 0x8d, 0xe9, + 0xcc, 0xf0, 0x0a, 0x3e, 0x50, 0xd7, 0x98, 0x6e, 0x99, 0x3d, 0xc3, 0x7a, + 0x59, 0x9c, 0xf3, 0x6f, 0x10, 0x38, 0x73, 0x6f, 0x7b, 0xe5, 0xb3, 0x44, + 0x2d, 0x5a, 0x2e, 0x3e, 0xea, 0x38, 0xdf, 0x62, 0x9c, 0xff, 0x0d, 0x2e, + 0xb3, 0x1d, 0xa1, 0xea, 0xf8, 0xa6, 0xd2, 0xf8, 0x5c, 0x49, 0x84, 0x6c, + 0x1c, 0x1f, 0xd6, 0x0b, 0x38, 0x6d, 0x31, 0x1a, 0x06, 0x73, 0xb7, 0x9f, + 0xfb, 0xa1, 0xba, 0x17, 0x8b, 0xd1, 0xed, 0xee, 0xb5, 0x02, 0xf7, 0x9b, + 0x10, 0x38, 0xd1, 0x37, 0x39, 0x40, 0xf1, 0x5e, 0xe2, 0x52, 0xd1, 0x77, + 0x84, 0x39, 0x8e, 0x1c, 0x59, 0xdc, 0x46, 0x67, 0xee, 0xea, 0xea, 0x9d, + 0xaf, 0x54, 0x1d, 0x51, 0xe9, 0x0f, 0x37, 0x1d, 0xc0, 0x15, 0x33, 0xd9, + 0x52, 0x78, 0x8e, 0x49, 0xcd, 0xfc, 0xea, 0x5c, 0x30, 0xf5, 0xe5, 0x9d, + 0x53, 0x92, 0xad, 0xc2, 0xff, 0x4a, 0x04, 0x30, 0x26, 0x4d, 0xb9, 0xc5, + 0x15, 0x9c, 0xf1, 0x7c, 0xf4, 0x18, 0xe6, 0x5a, 0x47, 0x1d, 0x1b, 0x79, + 0x85, 0xf9, 0x5e, 0x91, 0xdf, 0x2b, 0x25, 0xa6, 0xc1, 0x89, 0x51, 0xc9, + 0x20, 0x2c, 0x7c, 0x47, 0xd0, 0x83, 0xd4, 0xe6, 0xae, 0xb9, 0x75, 0x8d, + 0xeb, 0x50, 0xdd, 0x6e, 0x50, 0x80, 0x75, 0x44, 0xc0, 0x62, 0xd2, 0x81, + 0xde, 0xf7, 0x79, 0x29, 0x3c, 0x97, 0x68, 0x44, 0xcb, 0x79, 0x42, 0xf3, + 0x25, 0xbf, 0x5b, 0x83, 0x18, 0x01, 0x74, 0x1e, 0xef, 0xa8, 0xd0, 0x55, + 0xe2, 0x9d, 0x7b, 0xcf, 0x9d, 0x6a, 0x04, 0x39, 0x16, 0xa6, 0x22, 0x89, + 0xee, 0x1d, 0x9d, 0x8a, 0xeb, 0x54, 0x88, 0xe8, 0xf4, 0x48, 0x00, 0x85, + 0x56, 0x52, 0xc9, 0x46, 0x36, 0x20, 0xd4, 0xdd, 0x9f, 0x77, 0x52, 0x18, + 0xc9, 0xef, 0x5e, 0xd4, 0xbf, 0x57, 0x53, 0xee, 0xb4, 0x3c, 0x21, 0xd3, + 0x48, 0xe3, 0xb1, 0xa6, 0x0d, 0x4e, 0x28, 0x5c, 0x3d, 0xab, 0x7a, 0x3f, + 0x09, 0xeb, 0xf9, 0xd0, 0xe2, 0x74, 0x24, 0x73, 0xfb, 0x9d, 0xfa, 0x3a, + 0x4d, 0x6e, 0x95, 0x68, 0x32, 0x01, 0xca, 0xac, 0xa4, 0x10, 0x58, 0xcd, + 0x5b, 0x6c, 0xd5, 0xb5, 0x7c, 0x5f, 0x69, 0x6c, 0x4d, 0xc4, 0xa6, 0xb9, + 0x5e, 0x2f, 0x18, 0x7d, 0xc9, 0x20, 0x83, 0x93, 0xac, 0x44, 0xa8, 0x92, + 0xe6, 0x28, 0x73, 0xb4, 0x69, 0x44, 0x9b, 0xf9, 0x59, 0xba, 0x37, 0x99, + 0x63, 0x05, 0x71, 0xf8, 0x12, 0x33, 0x58, 0x2b, 0xa3, 0x90, 0x76, 0x73, + 0xb1, 0xc0, 0x11, 0xf4, 0xe6, 0x18, 0xc2, 0x70, 0x5e, 0xf7, 0x8f, 0xde, + 0xac, 0xcc, 0x04, 0x76, 0xaa, 0x49, 0x19, 0x6b, 0xf1, 0xad, 0xfd, 0x29, + 0x7a, 0x30, 0xaa, 0x8b, 0x57, 0x9e, 0xb2, 0xcd, 0xbc, 0xc9, 0xd6, 0x97, + 0xfc, 0x87, 0xf3, 0xb8, 0x95, 0xc4, 0xd1, 0x7d, 0x92, 0x46, 0x66, 0xfc, + 0xa0, 0xf9, 0xfc, 0x71, 0x93, 0x68, 0x1d, 0x64, 0xa3, 0xa6, 0x0b, 0xe3, + 0xdb, 0x34, 0xca, 0x54, 0x36, 0x47, 0x82, 0x0e, 0x4f, 0x09, 0x7f, 0xd2, + 0x92, 0x2e, 0xf9, 0x75, 0xcc, 0xe5, 0x84, 0x43, 0xec, 0x32, 0x65, 0xce, + 0x92, 0x80, 0xf3, 0x8f, 0x74, 0x8a, 0x45, 0x32, 0x31, 0xe4, 0xa0, 0x6e, + 0xe4, 0x00, 0xb1, 0x53, 0xe4, 0x6e, 0x60, 0x42, 0x56, 0x08, 0xad, 0xb5, + 0x62, 0xba, 0xae, 0xe0, 0x38, 0x02, 0xb8, 0xe3, 0x01, 0x37, 0x45, 0x71, + 0x2a, 0x0e, 0xa2, 0xed, 0x64, 0x8b, 0xce, 0x91, 0xd1, 0x24, 0xd2, 0x23, + 0xd5, 0xb5, 0x48, 0xc9, 0xe0, 0xce, 0xd5, 0x29, 0xe3, 0xc0, 0x5a, 0x8f, + 0x89, 0xf3, 0x81, 0xb0, 0x77, 0xe4, 0x96, 0x8a, 0xb0, 0x9f, 0xbf, 0x72, + 0x7e, 0xdf, 0xaa, 0x0a, 0x81, 0xdd, 0x7c, 0x86, 0xd0, 0xb6, 0x9c, 0xad, + 0x6c, 0x27, 0xf1, 0x39, 0x3e, 0x38, 0xa2, 0xbf, 0x85, 0x7c, 0x15, 0xfc, + 0xce, 0xab, 0xac, 0x73, 0x08, 0x5d, 0xa6, 0x64, 0xc5, 0x54, 0x89, 0xe6, + 0xcb, 0xbf, 0xd3, 0xff, 0xd7, 0x6a, 0x6f, 0xbb, 0xd7, 0x21, 0xd4, 0xf1, + 0x5f, 0xcb, 0x51, 0xe1, 0xb5, 0xe3, 0x51, 0xb7, 0x47, 0xad, 0xac, 0x10, + 0x98, 0xc7, 0x78, 0x5e, 0x09, 0x8e, 0xd8, 0xab, 0x44, 0x21, 0x6a, 0x11, + 0x33, 0x19, 0xb2, 0x2c, 0x33, 0xf0, 0x34, 0x5a, 0x90, 0x9a, 0xaa, 0x57, + 0x34, 0x3f, 0xfc, 0x4f, 0x8f, 0x8a, 0xef, 0xc3, 0x23, 0x56, 0x13, 0x42, + 0x1a, 0x1b, 0xd4, 0x7e, 0x2b, 0xe4, 0xa8, 0x68, 0x78, 0xe6, 0xcd, 0x90, + 0x77, 0xac, 0xae, 0x10, 0x00, 0x4f, 0x86, 0x0d, 0xf4, 0x2c, 0x56, 0x22, + 0x19, 0xaf, 0xe3, 0x43, 0x23, 0xee, 0x64, 0x9b, 0x25, 0x06, 0xfd, 0x9c, + 0x0b, 0xba, 0x68, 0x45, 0xf3, 0xc3, 0xa9, 0xb6, 0xd7, 0x53, 0x56, 0x75, + 0x15, 0xb0, 0x8c, 0x65, 0xae, 0x0d, 0xb7, 0xc9, 0xd1, 0xe1, 0x7e, 0xb6, + 0x77, 0x98, 0x2d, 0xae, 0x87, 0xb2, 0x58, 0x8b, 0xd0, 0x24, 0xcd, 0x52, + 0x62, 0x7b, 0x6a, 0x44, 0xeb, 0xbf, 0xec, 0x23, 0x2a, 0x53, 0x06, 0xfd, + 0x92, 0x4f, 0x79, 0x3e, 0xf9, 0x62, 0x2f, 0x79, 0x31, 0x4b, 0x34, 0xda, + 0x34, 0x68, 0xe1, 0xf3, 0x7c, 0x6a, 0x45, 0x11, 0xec, 0x61, 0xb7, 0xae, + 0xd6, 0x5d, 0xee, 0x2b, 0x83, 0xa3, 0xd6, 0xbd, 0xc2, 0x8a, 0x54, 0x5c, + 0x45, 0x10, 0xd9, 0x3c, 0x60, 0x68, 0x37, 0xc3, 0xff, 0xb0, 0xfc, 0xb7, + 0x06, 0xce, 0xdf, 0xfb, 0x6a, 0xf8, 0x64, 0x4e, 0x98, 0x3b, 0xe8, 0x6e, + 0x84, 0x2a, 0x7e, 0xbe, 0x12, 0xfb, 0xca, 0xb3, 0x78, 0x78, 0xbf, 0x36, + 0xa4, 0x59, 0x55, 0x04, 0x43, 0x18, 0xd2, 0xd0, 0xed, 0x98, 0x1c, 0x25, + 0x6e, 0x15, 0x69, 0xa9, 0xfd, 0xac, 0x4a, 0xc7, 0x35, 0x08, 0x20, 0x75, + 0x8c, 0xb3, 0x82, 0xdb, 0x21, 0x9d, 0x48, 0x79, 0xd4, 0xec, 0xf5, 0x63, + 0x15, 0xc3, 0x19, 0xd3, 0xd4, 0x2f, 0x5b, 0xc9, 0xb6, 0xd5, 0x7a, 0x89, + 0xd0, 0x2e, 0xb7, 0x72, 0x56, 0x90, 0xf1, 0x8c, 0x6f, 0xe1, 0x2b, 0x7b, + 0x1a, 0x72, 0xa8, 0x8c, 0xef, 0x65, 0x64, 0x20, 0xa5, 0xc9, 0xd8, 0xce, + 0xdb, 0x7c, 0xea, 0x19, 0xf9, 0x83, 0x92, 0x7d, 0x24, 0x7c, 0xdb, 0x7b, + 0x1e, 0xaf, 0x73, 0xf9, 0x7f, 0x7f, 0x6b, 0xc2, 0x92, 0xd5, 0x97, 0x8f, + 0xd9, 0xd3, 0x2f, 0x3f, 0x50, 0xfe, 0x4b, 0x8f, 0xf3, 0xcd, 0xde, 0xe9, + 0x5a, 0x9d, 0x4e, 0x88, 0x55, 0xd9, 0xdf, 0xc1, 0x0e, 0xca, 0x64, 0x9f, + 0xe6, 0x49, 0x0e, 0xc1, 0xe1, 0xd6, 0xf2, 0x65, 0xdd, 0x88, 0x76, 0x64, + 0x32, 0x2b, 0x3f, 0x7e, 0x8e, 0x92, 0x35, 0x32, 0x27, 0x61, 0x65, 0xf2, + 0x17, 0xe6, 0xbc, 0x4a, 0x34, 0xf0, 0x2e, 0xef, 0xfb, 0x86, 0xee, 0x56, + 0xb2, 0x65, 0xb5, 0x7a, 0x47, 0xb0, 0x8b, 0x4a, 0x2b, 0xb3, 0xdf, 0x92, + 0xde, 0x3d, 0x9c, 0x64, 0x0f, 0x63, 0x5a, 0xd1, 0xe2, 0x71, 0x77, 0xab, + 0x1c, 0x4c, 0xff, 0x0e, 0x07, 0xf8, 0x9c, 0x74, 0x7d, 0xe2, 0x7a, 0x79, + 0xb3, 0x47, 0x12, 0x4d, 0x16, 0x09, 0xd5, 0xb5, 0xfb, 0x7e, 0xa3, 0x67, + 0xc8, 0x87, 0x2c, 0x61, 0x55, 0xbb, 0xcb, 0xcd, 0xe5, 0xbf, 0xf4, 0x3e, + 0xd7, 0xfa, 0xc3, 0x7b, 0xd9, 0x87, 0xce, 0xca, 0xcc, 0x0b, 0x6a, 0xbc, + 0xe5, 0x07, 0xa9, 0xa1, 0xc2, 0xa3, 0x10, 0xad, 0x95, 0x69, 0xb9, 0x8a, + 0x38, 0x36, 0xf1, 0x40, 0x69, 0xe2, 0x7c, 0x0f, 0xd9, 0x39, 0x22, 0xc8, + 0x4d, 0x1d, 0xd3, 0x64, 0xb5, 0x89, 0x11, 0x9b, 0xc0, 0x4e, 0x84, 0xaa, + 0xc5, 0x22, 0x79, 0xcd, 0xab, 0x45, 0xcb, 0x19, 0xc2, 0x7c, 0xfb, 0x41, + 0x01, 0xdc, 0x09, 0x1f, 0xa6, 0x91, 0xbd, 0x00, 0x90, 0x44, 0xab, 0x0f, + 0x61, 0xbd, 0x0d, 0xe8, 0xb9, 0x82, 0x52, 0x56, 0xf2, 0xbb, 0x3e, 0x4e, + 0xc1, 0x1c, 0x71, 0x10, 0xa9, 0x7f, 0x3a, 0x18, 0x18, 0x39, 0x43, 0x32, + 0x58, 0xc4, 0xa3, 0xc1, 0xe7, 0x3b, 0xc9, 0xdb, 0x05, 0x5e, 0x97, 0x9b, + 0x2f, 0x1d, 0xc2, 0x7e, 0x1b, 0xb0, 0x5e, 0x48, 0xc3, 0x70, 0xa1, 0xe0, + 0x79, 0xf7, 0x59, 0xac, 0xeb, 0xef, 0xbd, 0x1e, 0x7a, 0x76, 0x72, 0x7b, + 0x69, 0xc8, 0x7c, 0x67, 0xd9, 0x39, 0x52, 0xc5, 0xe9, 0x5e, 0xab, 0x9d, + 0x4d, 0xbc, 0x41, 0x7c, 0x95, 0x40, 0x92, 0x87, 0xea, 0x64, 0xc3, 0x28, + 0x25, 0x91, 0xb8, 0x54, 0x68, 0x6d, 0xa1, 0x8e, 0x2c, 0xa0, 0xe9, 0xeb, + 0x4a, 0x4c, 0xf0, 0xf0, 0xf5, 0x45, 0xba, 0x74, 0x1b, 0x50, 0x74, 0x15, + 0xd9, 0x4c, 0x65, 0xbe, 0x5b, 0xc4, 0x56, 0x79, 0xca, 0xdc, 0x73, 0xef, + 0x68, 0xd9, 0x97, 0x3d, 0x80, 0xd1, 0x0f, 0x76, 0xc2, 0xc9, 0x56, 0x35, + 0xbe, 0xad, 0x4a, 0x36, 0x87, 0x90, 0x5b, 0x59, 0xc4, 0xe2, 0x5e, 0xd5, + 0xb6, 0x78, 0x15, 0xa1, 0x05, 0x8a, 0x5d, 0x94, 0x58, 0xf2, 0x06, 0x8f, + 0x4f, 0xb5, 0x65, 0xd6, 0xb6, 0x30, 0xfe, 0x84, 0x86, 0x08, 0xa4, 0xa2, + 0x94, 0x4f, 0xcf, 0x26, 0x57, 0xca, 0xcc, 0xdf, 0x52, 0xaf, 0xd3, 0xdd, + 0xf6, 0xec, 0x59, 0x05, 0x18, 0xbd, 0x64, 0x6d, 0xe5, 0x91, 0xe0, 0xc2, + 0x64, 0x05, 0x0b, 0xd6, 0xb6, 0x61, 0xdb, 0x06, 0xd0, 0xc6, 0x06, 0x6c, + 0xff, 0x8a, 0xd0, 0xb8, 0x87, 0x28, 0x51, 0x48, 0x81, 0x7a, 0x8b, 0x7a, + 0x97, 0x0d, 0x28, 0xba, 0x86, 0x73, 0x3c, 0x41, 0xab, 0x75, 0x5e, 0x27, + 0xe5, 0xbe, 0x33, 0x90, 0xd7, 0x63, 0xd5, 0x1f, 0xbe, 0x68, 0xa3, 0x14, + 0xf2, 0x25, 0xdf, 0x91, 0xd9, 0xbe, 0x44, 0x36, 0xb2, 0xdf, 0x91, 0xc8, + 0x55, 0x69, 0x25, 0xc7, 0xf1, 0xb1, 0x01, 0xd3, 0xdf, 0xb1, 0x54, 0xba, + 0xa4, 0x28, 0xeb, 0x97, 0x73, 0x40, 0x63, 0xef, 0xa6, 0x36, 0xa0, 0xe8, + 0x1a, 0x1a, 0x32, 0x91, 0x69, 0xa7, 0xfd, 0xd7, 0xc9, 0x0b, 0xb9, 0x28, + 0x61, 0x4d, 0xd3, 0x6d, 0xd4, 0x60, 0xa4, 0x42, 0xa2, 0x39, 0x49, 0x56, + 0xa7, 0x4a, 0x59, 0xf6, 0x3d, 0xce, 0xc6, 0xad, 0x1f, 0x4d, 0x67, 0x9b, + 0x30, 0x9d, 0x8a, 0xde, 0xc5, 0x49, 0xc1, 0x21, 0x15, 0xca, 0xd4, 0x3b, + 0x54, 0x16, 0xf1, 0xac, 0x1a, 0x81, 0xdf, 0xe9, 0x41, 0xe3, 0x55, 0x2e, + 0xb2, 0xb1, 0xa3, 0x25, 0x5e, 0x47, 0xda, 0x7e, 0x8c, 0x1a, 0x23, 0x15, + 0xb2, 0x96, 0x19, 0x3e, 0x79, 0xed, 0xe4, 0x2e, 0x42, 0x25, 0x7c, 0xb7, + 0xbc, 0x7d, 0x62, 0x94, 0x8d, 0x42, 0xef, 0xb7, 0xb3, 0x4d, 0x5b, 0xe5, + 0xac, 0xe4, 0x4b, 0xa1, 0xf7, 0xf5, 0x71, 0xb0, 0x09, 0x4d, 0xd7, 0xd0, + 0x80, 0x8e, 0xb4, 0xdf, 0xe9, 0xba, 0x57, 0xee, 0xbb, 0x2a, 0x2e, 0xa5, + 0x08, 0xcd, 0x0f, 0x18, 0xb9, 0xa9, 0x6f, 0xc4, 0x29, 0xb2, 0x30, 0x54, + 0xee, 0x2b, 0x5d, 0xb5, 0xe7, 0x37, 0x4d, 0x6a, 0x6c, 0xf5, 0xf2, 0xf4, + 0x38, 0x92, 0x43, 0xa9, 0xb2, 0xf3, 0x9e, 0x53, 0x85, 0xa7, 0xad, 0xd3, + 0x55, 0x36, 0x45, 0x20, 0x15, 0x26, 0x7c, 0x7f, 0x21, 0xb9, 0xa6, 0xce, + 0xef, 0x04, 0x97, 0x9b, 0x3f, 0xe1, 0x2b, 0xce, 0x1b, 0x35, 0x43, 0x46, + 0xf3, 0x1d, 0x59, 0x2d, 0xcb, 0xdd, 0xe4, 0xbe, 0x73, 0x3d, 0xd5, 0x74, + 0x47, 0x27, 0x9a, 0xd9, 0x88, 0xe5, 0x46, 0x04, 0xf9, 0x3b, 0x78, 0x2b, + 0xf9, 0xb2, 0x92, 0x23, 0x2a, 0x5b, 0x9a, 0xbd, 0x57, 0x70, 0x98, 0x2e, + 0x34, 0xfa, 0xc1, 0xb9, 0x48, 0xee, 0xbb, 0xe2, 0xa0, 0xf4, 0xe8, 0x9d, + 0x9c, 0x37, 0x46, 0x21, 0xbd, 0x11, 0x52, 0x61, 0x1b, 0xb9, 0x9c, 0x52, + 0x12, 0x81, 0x7b, 0xe7, 0x5d, 0x78, 0x88, 0x44, 0x1b, 0x31, 0xbc, 0x87, + 0x5d, 0x52, 0xb9, 0xb2, 0xac, 0x5f, 0xda, 0xe0, 0xf0, 0x4b, 0x36, 0xa2, + 0xea, 0x1a, 0x62, 0xb8, 0x93, 0xfe, 0x87, 0x7d, 0x64, 0x5d, 0x16, 0x55, + 0xce, 0x97, 0x92, 0x76, 0xd0, 0xc0, 0x98, 0x25, 0xeb, 0x20, 0xbf, 0xfb, + 0x94, 0xc5, 0xcb, 0x19, 0x98, 0x0e, 0xc2, 0x73, 0x83, 0x4b, 0x8d, 0xf5, + 0x6f, 0xaf, 0xaf, 0xa2, 0x98, 0x06, 0x3e, 0x35, 0x8a, 0xdc, 0x65, 0xb5, + 0x64, 0xeb, 0xe0, 0x08, 0xd1, 0x36, 0xa3, 0xed, 0x0a, 0xc6, 0x22, 0xe5, + 0xc5, 0x6f, 0x51, 0x25, 0xd4, 0xbd, 0xf7, 0x1a, 0x28, 0x69, 0x2d, 0x34, + 0x2b, 0x0d, 0x46, 0xcc, 0x90, 0xfd, 0xa4, 0x87, 0x96, 0xc9, 0x7a, 0xd2, + 0x5d, 0x73, 0xa3, 0x76, 0x0f, 0xc6, 0xd2, 0x6f, 0x31, 0x6e, 0x0e, 0x09, + 0x95, 0xaf, 0xa4, 0x48, 0x21, 0x35, 0x08, 0xbf, 0x4a, 0x3c, 0x6d, 0x46, + 0xd9, 0x55, 0x1c, 0xa1, 0x25, 0x0d, 0x7f, 0x71, 0x94, 0x4d, 0x57, 0x57, + 0xda, 0x6c, 0xa2, 0xf7, 0x76, 0xe5, 0x4b, 0x56, 0x09, 0x3b, 0x39, 0xdb, + 0x44, 0xc1, 0x0e, 0x72, 0xb8, 0xff, 0xe9, 0x2e, 0x36, 0x64, 0xf7, 0x34, + 0x47, 0x55, 0xd5, 0x0a, 0xbf, 0x55, 0x05, 0x08, 0x56, 0xd8, 0x90, 0xb6, + 0x2b, 0x68, 0x4a, 0x07, 0xa2, 0xf7, 0xeb, 0xcf, 0xcb, 0x7d, 0x57, 0x1a, + 0x78, 0x32, 0xf4, 0x80, 0x72, 0x85, 0xe8, 0xc9, 0x22, 0x3f, 0xb6, 0x5a, + 0x66, 0xb5, 0x56, 0xe1, 0xb4, 0xad, 0x4f, 0xb1, 0x79, 0x79, 0x39, 0x8d, + 0x43, 0x21, 0x0d, 0xc2, 0x94, 0x5d, 0x81, 0x0a, 0x72, 0xb4, 0xa8, 0xa2, + 0x6c, 0x48, 0xdb, 0x55, 0x84, 0x33, 0x28, 0xd3, 0xf1, 0x80, 0xdc, 0x57, + 0x55, 0xee, 0x85, 0xb1, 0xbb, 0x94, 0x2b, 0xe4, 0x5b, 0x6a, 0x1c, 0xca, + 0x9b, 0xc9, 0x9d, 0x41, 0x74, 0xb5, 0x8d, 0xf6, 0x37, 0xe5, 0xa0, 0xcd, + 0x58, 0xbd, 0x08, 0xe4, 0xeb, 0x95, 0xde, 0x49, 0xbb, 0x86, 0xfc, 0xe4, + 0x6c, 0x43, 0x67, 0xd6, 0xff, 0xf0, 0x18, 0x1d, 0xaa, 0xfc, 0x0e, 0xc8, + 0x9d, 0xa7, 0xab, 0xb9, 0x14, 0x7d, 0x59, 0xf9, 0xa6, 0x7e, 0x9c, 0x19, + 0x1e, 0x15, 0x11, 0x72, 0x5f, 0xe9, 0xf2, 0x02, 0x0e, 0x79, 0x19, 0x91, + 0x21, 0xd4, 0x5c, 0x68, 0x80, 0x02, 0x67, 0xa5, 0x0a, 0x29, 0x72, 0x5c, + 0xad, 0xb5, 0x66, 0x40, 0xd2, 0xcd, 0x70, 0x9c, 0x08, 0xdc, 0xf6, 0x6a, + 0x0d, 0x35, 0x75, 0x4a, 0xbb, 0x96, 0x82, 0xc6, 0xa5, 0x0e, 0x8a, 0x67, + 0xc8, 0xef, 0x1c, 0x0b, 0x28, 0xf3, 0x95, 0xfb, 0xca, 0x39, 0x2b, 0xe6, + 0xac, 0xed, 0xd4, 0x01, 0xbb, 0x11, 0x5a, 0x8f, 0x50, 0xa5, 0x42, 0x56, + 0xf9, 0x39, 0x7b, 0x7a, 0x58, 0xfa, 0x11, 0x80, 0x02, 0x34, 0xa6, 0x25, + 0xfe, 0x19, 0x8e, 0x05, 0x72, 0xdf, 0x55, 0x47, 0xcc, 0xf4, 0x56, 0xac, + 0x90, 0x7d, 0x1c, 0xf3, 0x2f, 0x97, 0x4d, 0x9e, 0xaf, 0x3f, 0x3a, 0xb1, + 0xd0, 0x56, 0x27, 0x10, 0xf8, 0x9e, 0x55, 0x2c, 0x17, 0x97, 0x14, 0xe7, + 0x1e, 0x2e, 0xf1, 0x3a, 0xd8, 0x7c, 0x19, 0x5d, 0xc9, 0xb5, 0x19, 0x85, + 0x57, 0xd1, 0x84, 0xc6, 0xd9, 0x3a, 0xd9, 0x07, 0xea, 0xe5, 0x7e, 0x27, + 0x03, 0x15, 0x2a, 0xa4, 0x8a, 0x23, 0x94, 0x46, 0x18, 0x64, 0xcc, 0x4b, + 0x35, 0x8e, 0xe9, 0x52, 0x4d, 0x4f, 0x1b, 0x31, 0x79, 0x94, 0xee, 0xec, + 0xe1, 0x8b, 0x30, 0x79, 0x53, 0xfc, 0x2a, 0x4a, 0x9c, 0xf6, 0xbe, 0x32, + 0x20, 0x21, 0x01, 0x2f, 0x8b, 0xbe, 0x70, 0x54, 0x82, 0xe6, 0xbc, 0x5c, + 0xe4, 0x72, 0x5a, 0xee, 0xab, 0x0a, 0xd7, 0x33, 0x0d, 0x35, 0x00, 0x85, + 0xa8, 0x28, 0xa1, 0x0c, 0x28, 0xe7, 0xef, 0x6f, 0x1c, 0x4f, 0x51, 0x46, + 0x45, 0xe3, 0x1a, 0x99, 0x0e, 0xb5, 0x35, 0x3e, 0x19, 0xdd, 0x58, 0x48, + 0x0f, 0x9a, 0x11, 0x44, 0x00, 0x3a, 0x5c, 0xd0, 0xe2, 0x8a, 0x84, 0x13, + 0x8e, 0xa8, 0x71, 0x65, 0x1a, 0x2f, 0x62, 0x54, 0x5a, 0xb6, 0x9b, 0x22, + 0x0f, 0x2f, 0x06, 0x12, 0x16, 0xfe, 0xcd, 0xfc, 0xb2, 0x18, 0xe5, 0x7f, + 0x95, 0xd9, 0x7c, 0xc5, 0x47, 0x77, 0xdd, 0xdf, 0x62, 0xdf, 0x6f, 0x2c, + 0xb7, 0x72, 0xf8, 0xde, 0xf5, 0x48, 0x43, 0x32, 0xc4, 0x1d, 0x57, 0xc9, + 0xbc, 0x50, 0xa9, 0x71, 0xac, 0x0c, 0xc7, 0x85, 0x2b, 0x5b, 0xe3, 0x9f, + 0x32, 0x15, 0xfe, 0x7d, 0x73, 0x68, 0xf2, 0xad, 0x6c, 0x74, 0x60, 0xf1, + 0x7d, 0xa9, 0x65, 0xfa, 0x4c, 0xf5, 0xcd, 0xfa, 0xb8, 0x36, 0x74, 0x02, + 0xc2, 0xcc, 0xe2, 0x0e, 0x0f, 0x31, 0x92, 0xe9, 0xe1, 0x31, 0x9b, 0x8d, + 0x4d, 0x94, 0xa6, 0x12, 0x4d, 0x7e, 0x1b, 0x93, 0xd0, 0x04, 0x01, 0x9c, + 0xb3, 0x99, 0x42, 0x0a, 0x71, 0x22, 0x69, 0xb4, 0xdc, 0x33, 0x05, 0xb5, + 0x88, 0x79, 0x4d, 0x93, 0xf8, 0xc8, 0x39, 0xb7, 0x73, 0xa2, 0x81, 0x67, + 0x4a, 0x50, 0x2d, 0x50, 0x73, 0x53, 0x1d, 0x4a, 0x9a, 0xdc, 0xb6, 0x72, + 0xc3, 0x56, 0x38, 0x6d, 0x99, 0xdd, 0xa2, 0xe0, 0x62, 0x96, 0x43, 0xb5, + 0x13, 0x8e, 0xe8, 0x90, 0xd0, 0x20, 0xa1, 0xe1, 0x4a, 0x5d, 0x66, 0x49, + 0x6a, 0x9e, 0x97, 0x71, 0x56, 0x8f, 0x3b, 0x8d, 0xa4, 0xd0, 0xdd, 0x6c, + 0x30, 0xc7, 0xde, 0x99, 0xc3, 0x49, 0x9a, 0x7a, 0xcc, 0x7a, 0xeb, 0x68, + 0x8a, 0xdc, 0xac, 0xbd, 0x11, 0xb5, 0x1c, 0x8d, 0x2f, 0xfe, 0xa8, 0xc5, + 0x48, 0x69, 0x37, 0x84, 0xe2, 0x46, 0x2c, 0x7e, 0x18, 0xe8, 0xc4, 0x19, + 0x7a, 0x12, 0xc8, 0x41, 0x6e, 0xa7, 0x1a, 0xcb, 0xbf, 0xd7, 0x75, 0x27, + 0x16, 0xd7, 0xb3, 0xea, 0xca, 0xea, 0x3a, 0x17, 0x7d, 0x81, 0x4b, 0x84, + 0xe6, 0xc2, 0x8b, 0x27, 0xfd, 0x04, 0x59, 0x0a, 0x52, 0xa2, 0xc8, 0x0b, + 0xb0, 0x4a, 0x9d, 0xd9, 0x04, 0x68, 0x53, 0x57, 0x8e, 0xff, 0x02, 0x0a, + 0xb9, 0x88, 0xcb, 0x6b, 0xd2, 0x86, 0x3d, 0x26, 0xb3, 0x97, 0xc5, 0x09, + 0xc6, 0x4a, 0x9d, 0x9e, 0xca, 0x18, 0x64, 0x4a, 0xfa, 0x7c, 0xc1, 0xb9, + 0x78, 0xc3, 0xb2, 0xc4, 0x1f, 0x2f, 0x1d, 0x0d, 0xad, 0xca, 0x3f, 0xe3, + 0x58, 0xe2, 0x52, 0x9c, 0x77, 0xb1, 0xaa, 0x5a, 0x9d, 0xe7, 0x61, 0x68, + 0x59, 0x9e, 0x24, 0xc0, 0x1d, 0x2f, 0x1a, 0xe3, 0x47, 0x39, 0x5d, 0x38, + 0x4b, 0x7f, 0xda, 0xe1, 0xc6, 0x19, 0xaa, 0x69, 0x6c, 0x32, 0xbd, 0x00, + 0x51, 0x48, 0x97, 0x74, 0x95, 0x15, 0x32, 0x0a, 0xc9, 0x42, 0x13, 0x35, + 0xed, 0xec, 0xeb, 0x65, 0x0e, 0x96, 0x7e, 0x30, 0x20, 0xea, 0xfc, 0x37, + 0xaf, 0xc3, 0xd1, 0x0b, 0x02, 0x90, 0xf5, 0x48, 0xdf, 0x14, 0x63, 0x38, + 0x4a, 0x9b, 0xd4, 0xf4, 0xb1, 0xa6, 0x47, 0xb3, 0x5f, 0x0c, 0xbb, 0x14, + 0x26, 0x71, 0x01, 0x51, 0x73, 0xb2, 0x56, 0x5d, 0xa9, 0x2a, 0xd9, 0x57, + 0x55, 0x9d, 0xb3, 0xba, 0xbc, 0xec, 0x4c, 0x42, 0x55, 0xe1, 0x29, 0xbf, + 0x52, 0xce, 0x6b, 0x72, 0x9d, 0x4b, 0x4a, 0x2f, 0x56, 0x1b, 0xb4, 0x79, + 0x0d, 0x6a, 0xdd, 0xca, 0x25, 0x01, 0xbe, 0xf8, 0x13, 0x49, 0x23, 0xaa, + 0x68, 0xcd, 0x51, 0x46, 0xd2, 0x9e, 0x0a, 0x8c, 0x29, 0xf5, 0xe0, 0x86, + 0x94, 0x2b, 0x15, 0x52, 0xa7, 0xeb, 0x49, 0xa0, 0x0f, 0xd6, 0x0c, 0xf9, + 0xe0, 0x58, 0xcf, 0x8c, 0xee, 0x26, 0x73, 0x66, 0x02, 0x1c, 0x6b, 0x9b, + 0xcd, 0xff, 0xef, 0x19, 0x61, 0x72, 0xa5, 0x8c, 0x6d, 0xa4, 0x13, 0xec, + 0x36, 0x61, 0x62, 0x81, 0x59, 0x7e, 0x42, 0x81, 0xa0, 0x16, 0xd4, 0x06, + 0x35, 0x5a, 0x5c, 0x0a, 0x21, 0xf8, 0x32, 0x90, 0x83, 0x44, 0x16, 0xd4, + 0x68, 0x0d, 0xfb, 0x2b, 0x29, 0xfe, 0xbd, 0xaa, 0xfa, 0xc2, 0xfa, 0xea, + 0xb2, 0xcc, 0xb8, 0xd2, 0xa2, 0x53, 0xfe, 0x25, 0xaa, 0x1c, 0x4d, 0xae, + 0x53, 0x49, 0xc5, 0xc5, 0xaa, 0x4a, 0x8f, 0xc2, 0xc4, 0x5a, 0xa9, 0x12, + 0x20, 0x14, 0x35, 0x09, 0x18, 0x68, 0x4f, 0x29, 0x03, 0x68, 0x81, 0xb8, + 0xa9, 0xeb, 0x23, 0x80, 0xda, 0x52, 0xa7, 0xb2, 0x02, 0x19, 0xaa, 0xb4, + 0x3e, 0x9a, 0xd7, 0x0a, 0xa2, 0xa7, 0x5f, 0x68, 0x57, 0xe8, 0x62, 0x55, + 0x1d, 0x5c, 0x87, 0x46, 0xdb, 0x7b, 0x2e, 0x69, 0x69, 0x52, 0x6a, 0xe3, + 0x2b, 0xf8, 0x81, 0x95, 0x84, 0x74, 0x3f, 0xdd, 0xd1, 0x1a, 0x67, 0xee, + 0xab, 0x6a, 0xaa, 0x56, 0xa3, 0xc3, 0xad, 0x18, 0xc2, 0x72, 0x81, 0x6c, + 0x24, 0xb2, 0x91, 0x0c, 0x5a, 0xc3, 0xbe, 0x4a, 0x55, 0xd1, 0x8e, 0xd2, + 0x9a, 0x8b, 0x6b, 0x2b, 0x83, 0x4e, 0xfb, 0x95, 0x15, 0x9f, 0x08, 0x2d, + 0xbb, 0x7c, 0x5a, 0x5b, 0x5e, 0x7b, 0xa1, 0xba, 0xcc, 0xb7, 0xb0, 0x85, + 0x41, 0xaa, 0x86, 0x24, 0x52, 0x18, 0x46, 0x31, 0x9d, 0x6e, 0xe8, 0x39, + 0x1e, 0x51, 0xf1, 0x89, 0x6c, 0xb4, 0x77, 0x89, 0xe0, 0x4b, 0x84, 0x43, + 0xb3, 0x0f, 0x6d, 0x57, 0xf4, 0xd4, 0xa5, 0xac, 0xd7, 0x00, 0xf3, 0x6e, + 0xb6, 0xbf, 0xa0, 0x56, 0x1b, 0xf5, 0x85, 0xbd, 0x0b, 0xee, 0x49, 0x42, + 0x25, 0xd4, 0x42, 0x27, 0x74, 0xe5, 0xee, 0xc5, 0xee, 0x59, 0x81, 0x19, + 0x0d, 0xb6, 0x34, 0xfd, 0x26, 0xee, 0xbf, 0x49, 0x8f, 0xf5, 0xec, 0x3d, + 0x31, 0x52, 0x48, 0x1f, 0x32, 0xef, 0x06, 0xaa, 0x7b, 0xf3, 0x8a, 0xc6, + 0x7b, 0x95, 0x5c, 0xaf, 0x5e, 0x19, 0xcc, 0x67, 0x38, 0x0f, 0x25, 0x05, + 0xe4, 0xd8, 0x8a, 0x8d, 0x16, 0x2b, 0xf6, 0x3b, 0x7d, 0x64, 0xd6, 0xc1, + 0x6c, 0x30, 0xf7, 0x35, 0xf5, 0x32, 0x29, 0xa7, 0xbc, 0xb5, 0x9b, 0x4a, + 0x68, 0x84, 0x73, 0x65, 0x60, 0x66, 0xf7, 0xa7, 0x8f, 0xe8, 0x3e, 0x67, + 0xd3, 0x75, 0x54, 0x4f, 0xa7, 0x54, 0x13, 0xb1, 0x5a, 0xae, 0x07, 0xe7, + 0x0c, 0xe0, 0x1c, 0x42, 0xea, 0x30, 0xd5, 0x36, 0xe5, 0x4f, 0xbd, 0x73, + 0xef, 0xe9, 0xd0, 0x81, 0x07, 0xcd, 0x50, 0xc7, 0x7d, 0xf8, 0xd2, 0x6d, + 0xa4, 0xce, 0xee, 0xc2, 0xaf, 0xab, 0xb9, 0x55, 0xf6, 0x1e, 0x7d, 0xa3, + 0x61, 0xb3, 0x11, 0xa1, 0x89, 0x97, 0x55, 0x88, 0x43, 0x86, 0x0a, 0x8e, + 0x32, 0x49, 0xf4, 0x5a, 0x10, 0xa0, 0xe0, 0x4d, 0x9c, 0xb9, 0x50, 0x13, + 0xb2, 0x74, 0xc9, 0xf6, 0x77, 0xcd, 0xc8, 0xcf, 0x0b, 0xdd, 0xb8, 0xc4, + 0xd9, 0xf8, 0xfa, 0x5d, 0xec, 0xb4, 0xc8, 0xe1, 0xc8, 0x88, 0x4f, 0xdd, + 0xaf, 0x7f, 0x15, 0x1f, 0x04, 0x0a, 0x1e, 0x66, 0xd4, 0x4a, 0x2a, 0x48, + 0x61, 0x2a, 0xcf, 0x9f, 0x8c, 0x9d, 0xe3, 0x6c, 0xcd, 0xcc, 0x13, 0x00, + 0xf8, 0x9d, 0xec, 0x38, 0x77, 0x6c, 0xcd, 0x19, 0xb3, 0x5e, 0x8c, 0xf8, + 0xf0, 0xab, 0x53, 0x55, 0x8c, 0x3d, 0x9c, 0xe8, 0xc6, 0xa0, 0x30, 0x7c, + 0xad, 0xff, 0xf5, 0xef, 0xf2, 0x5d, 0x50, 0x52, 0x56, 0x55, 0xe3, 0xa0, + 0x01, 0x58, 0xc1, 0x41, 0x82, 0x3f, 0x3d, 0x79, 0xe7, 0x91, 0x14, 0x6b, + 0x12, 0xe9, 0x48, 0xe3, 0xb9, 0xef, 0x1e, 0x31, 0xdd, 0xdc, 0xbd, 0x82, + 0x75, 0x48, 0x8e, 0x65, 0x8a, 0xc2, 0x7e, 0xec, 0x89, 0x0a, 0xe7, 0x0a, + 0x9f, 0xc2, 0xeb, 0x4a, 0x02, 0x55, 0xa1, 0x24, 0xd7, 0x8a, 0xa1, 0x52, + 0x03, 0x30, 0x90, 0x66, 0x94, 0xe6, 0xb7, 0xff, 0xef, 0xf9, 0x56, 0x85, + 0x96, 0xf1, 0xfc, 0xfd, 0x2d, 0x02, 0xb6, 0xf7, 0x5b, 0xdc, 0xc6, 0xec, + 0x3b, 0xed, 0xaf, 0x91, 0xc8, 0xb7, 0x1e, 0x91, 0x16, 0x82, 0xc6, 0xc9, + 0xdd, 0xe7, 0x7a, 0xa7, 0x4e, 0x36, 0x21, 0x0a, 0xaa, 0x4a, 0x6b, 0xae, + 0x9e, 0x63, 0xd6, 0xf2, 0x36, 0x9f, 0xac, 0x0d, 0x5a, 0x6e, 0xd2, 0xb3, + 0x75, 0x45, 0x70, 0xa9, 0x88, 0x9f, 0x39, 0xfd, 0xe2, 0x66, 0x06, 0x99, + 0xd9, 0x4f, 0x01, 0xf9, 0x58, 0xaa, 0x3e, 0xa7, 0xf5, 0x50, 0x4b, 0xf1, + 0x0d, 0xd9, 0xb9, 0xd2, 0x51, 0x52, 0x24, 0xec, 0x7f, 0x0a, 0x09, 0x21, + 0x8b, 0x61, 0xd5, 0x6d, 0x66, 0xfa, 0x58, 0xc9, 0x01, 0x2a, 0x11, 0xb6, + 0xfe, 0xa9, 0x95, 0x13, 0xf9, 0xc0, 0xec, 0x9e, 0xe2, 0x88, 0x43, 0x51, + 0x28, 0xaf, 0x9d, 0x21, 0xdd, 0xb0, 0x34, 0xaf, 0x66, 0x0e, 0xf9, 0xb2, + 0x5b, 0x9f, 0xe3, 0xb5, 0x93, 0xfe, 0x13, 0x4c, 0xe7, 0x83, 0x7d, 0x11, + 0x0b, 0xad, 0x13, 0x8e, 0xec, 0x95, 0x17, 0x37, 0xfd, 0x3f, 0xe5, 0xbb, + 0x89, 0x37, 0xbb, 0xa7, 0x7b, 0x18, 0x5e, 0xeb, 0xa9, 0x34, 0xee, 0xc7, + 0x6e, 0x90, 0x70, 0xad, 0xbd, 0xfe, 0x67, 0xd3, 0x0f, 0x07, 0x47, 0xc9, + 0x43, 0xee, 0xef, 0x5c, 0xfe, 0xec, 0x7a, 0xd9, 0xc2, 0x23, 0xf4, 0x58, + 0xe8, 0x2f, 0x1b, 0xae, 0x62, 0x3c, 0x34, 0x44, 0x7c, 0xb2, 0x74, 0xdb, + 0x5c, 0x3e, 0xb1, 0x40, 0x5f, 0xa1, 0x3c, 0x54, 0xa2, 0xb3, 0x6e, 0x26, + 0x02, 0x0b, 0xc0, 0x50, 0x7c, 0xea, 0xdc, 0xf5, 0xc9, 0xff, 0xcf, 0x93, + 0xed, 0xac, 0x95, 0x8d, 0x49, 0x70, 0xf9, 0x73, 0xd4, 0xc9, 0x10, 0x80, + 0xac, 0x3e, 0x73, 0x72, 0xe7, 0x94, 0x59, 0xb8, 0x32, 0x55, 0xc0, 0xc9, + 0x4e, 0x73, 0xc6, 0xd5, 0xb6, 0xb7, 0x48, 0x5f, 0x89, 0x48, 0x35, 0x6d, + 0x0f, 0x9f, 0xc2, 0xd8, 0x7b, 0x10, 0xdb, 0xc2, 0xa9, 0x34, 0xa8, 0x40, + 0x73, 0x5d, 0x9e, 0x9f, 0x5d, 0x48, 0xba, 0x22, 0xd9, 0xe5, 0xa7, 0x28, + 0xfb, 0x3a, 0xd1, 0xef, 0x62, 0x03, 0xa1, 0x9f, 0x9f, 0x4a, 0x3b, 0x9c, + 0x6a, 0x49, 0x3b, 0xdf, 0x89, 0xa8, 0xf7, 0xde, 0xce, 0x30, 0xd7, 0xdc, + 0xbd, 0x8a, 0x72, 0x5a, 0xe1, 0xf1, 0xb3, 0x63, 0x45, 0xa9, 0xa3, 0x05, + 0x49, 0xb4, 0x38, 0xdc, 0x8f, 0xf7, 0xc9, 0xb9, 0x3e, 0x54, 0x51, 0x42, + 0xe3, 0x2f, 0x79, 0xd5, 0xfd, 0x57, 0x12, 0xb5, 0x17, 0xaf, 0x53, 0x48, + 0x2b, 0xe2, 0x28, 0x2e, 0x6a, 0x33, 0xfd, 0x7c, 0x9b, 0x7c, 0xd9, 0xf8, + 0x12, 0xe5, 0x08, 0xdc, 0x7e, 0xe7, 0x92, 0x2e, 0x58, 0xea, 0x75, 0x5f, + 0x04, 0xaf, 0xa3, 0xde, 0x7f, 0xe8, 0x44, 0xa9, 0xad, 0xde, 0x3b, 0x98, + 0x00, 0x8f, 0xaa, 0xf8, 0xa5, 0x69, 0xa5, 0xe2, 0xba, 0x52, 0x60, 0x17, + 0x08, 0x0c, 0x32, 0xc8, 0x1c, 0x2a, 0x24, 0x82, 0x6e, 0xfc, 0x5f, 0x39, + 0x6c, 0x44, 0x68, 0x5b, 0x2d, 0x32, 0xaf, 0x66, 0xf2, 0x9f, 0x9b, 0x6b, + 0x79, 0xda, 0x90, 0x48, 0x2c, 0x99, 0x55, 0x5a, 0x00, 0xed, 0xa6, 0x1a, + 0x5b, 0x2f, 0xcd, 0xba, 0x4d, 0x12, 0x6a, 0xa1, 0x15, 0xce, 0xd5, 0xae, + 0xf9, 0x9e, 0x27, 0x1a, 0xfd, 0x94, 0x32, 0xea, 0xa4, 0x6e, 0xc5, 0x75, + 0x6f, 0xe2, 0x73, 0x71, 0xa6, 0xa5, 0x82, 0x3b, 0xf5, 0xd8, 0xd7, 0x6e, + 0xd8, 0x2d, 0xfc, 0x79, 0x8f, 0x05, 0xd5, 0x09, 0xd3, 0x4f, 0x77, 0xb9, + 0x64, 0x89, 0xa2, 0x4d, 0xa8, 0x88, 0x58, 0xff, 0xcc, 0x37, 0xdb, 0xe9, + 0x8c, 0x82, 0x5c, 0x1c, 0x0a, 0xb1, 0x86, 0x41, 0xb8, 0x7d, 0x72, 0xec, + 0x9e, 0xcb, 0x8d, 0x2c, 0xa8, 0x65, 0x23, 0xb9, 0x92, 0x50, 0x0b, 0x8d, + 0x41, 0x2a, 0x73, 0xaa, 0x24, 0xd7, 0xb1, 0x50, 0x7d, 0x41, 0x9b, 0xe3, + 0x9c, 0xa3, 0x3b, 0xeb, 0x9d, 0xa3, 0x3a, 0x1b, 0x70, 0xa9, 0x6d, 0xde, + 0xe8, 0xd2, 0xed, 0xd4, 0x32, 0xf0, 0x4f, 0x7f, 0xe1, 0xa5, 0x28, 0x6a, + 0x47, 0x23, 0x3c, 0x2f, 0xfd, 0x65, 0xfb, 0x4e, 0xe4, 0x41, 0x74, 0x07, + 0x93, 0x17, 0x16, 0xbe, 0x6c, 0x09, 0x07, 0x9e, 0x57, 0x6e, 0xcb, 0xe9, + 0xe3, 0xca, 0xc3, 0x19, 0x67, 0x41, 0x71, 0xf4, 0xe5, 0x20, 0xcd, 0xd3, + 0x3b, 0x7c, 0xb6, 0x73, 0x82, 0xf5, 0xad, 0x5f, 0x09, 0xd5, 0x95, 0x30, + 0x8d, 0x0a, 0x87, 0x2a, 0x4d, 0x99, 0xba, 0x50, 0x57, 0x2c, 0x72, 0x5c, + 0x0b, 0x0d, 0x99, 0x3e, 0x45, 0x65, 0x67, 0xc2, 0x4a, 0xf2, 0xb3, 0x13, + 0xca, 0x8b, 0x2f, 0x77, 0xab, 0x18, 0x5a, 0x2a, 0xd5, 0x00, 0xb4, 0xc1, + 0x0d, 0x15, 0x85, 0x6c, 0x65, 0x27, 0x4f, 0x5d, 0xd7, 0xcf, 0xe7, 0x08, + 0x4d, 0x44, 0xa4, 0x9c, 0xeb, 0x44, 0x55, 0x21, 0x9d, 0xfc, 0x8b, 0x42, + 0xda, 0x32, 0x8b, 0x91, 0x04, 0x2c, 0x3c, 0x3b, 0xe0, 0x8c, 0xd9, 0x21, + 0x88, 0x1a, 0xa2, 0x3f, 0x5d, 0xb8, 0x6d, 0x1f, 0x4d, 0x2c, 0x62, 0xf0, + 0x5e, 0xc3, 0x3e, 0xc6, 0xd2, 0x60, 0x76, 0x76, 0xea, 0xa9, 0x04, 0xcb, + 0xf5, 0x29, 0xa1, 0x02, 0xb4, 0x88, 0x4a, 0x87, 0x6a, 0x4d, 0x99, 0xaa, + 0x48, 0x5b, 0x6c, 0xc8, 0xf1, 0xaf, 0x29, 0x39, 0x15, 0x50, 0x5e, 0x73, + 0xd6, 0x35, 0x8f, 0x1c, 0xe7, 0xfc, 0xf0, 0xd2, 0xf2, 0xdc, 0xce, 0x55, + 0x61, 0x25, 0xc9, 0xb5, 0x52, 0xed, 0x71, 0x1a, 0xe1, 0x84, 0x06, 0x90, + 0xa8, 0x65, 0x0a, 0xbf, 0x71, 0x82, 0x3b, 0xd8, 0x59, 0x07, 0xc5, 0xbf, + 0xb9, 0x95, 0x84, 0xca, 0xd1, 0xa0, 0x2d, 0xf6, 0xcf, 0xbe, 0xa9, 0xe9, + 0xd3, 0x7b, 0xf8, 0x96, 0xf7, 0xcb, 0xcc, 0x3c, 0x25, 0x06, 0x9f, 0x1a, + 0xd6, 0xab, 0xe4, 0x68, 0x1b, 0xee, 0xb1, 0x9c, 0xdc, 0xfe, 0x07, 0x4f, + 0x52, 0xfb, 0x6c, 0x5e, 0x72, 0xd9, 0xc4, 0x7b, 0x75, 0x35, 0x5a, 0x6a, + 0x2b, 0x1c, 0x6b, 0x6b, 0x8b, 0x74, 0x65, 0x0e, 0x25, 0xe2, 0xa2, 0x67, + 0x45, 0xd1, 0xa9, 0x46, 0x55, 0x05, 0x27, 0x1b, 0x96, 0xd5, 0x5e, 0x70, + 0xcc, 0x0f, 0x2d, 0x2d, 0xce, 0x4d, 0xaa, 0x2c, 0x2c, 0x9e, 0x8c, 0x54, + 0x0d, 0x10, 0x8b, 0x20, 0x94, 0x50, 0xaa, 0xe8, 0xcc, 0x6f, 0xdc, 0x49, + 0x1b, 0x8a, 0x91, 0x7d, 0x28, 0x73, 0x1d, 0xfa, 0xa3, 0x6a, 0xbe, 0x71, + 0x53, 0x91, 0xcc, 0xc3, 0xfd, 0xc0, 0x8c, 0x91, 0xa9, 0x7f, 0x7b, 0xe2, + 0x38, 0xc0, 0x26, 0xc2, 0xbe, 0x3a, 0x7d, 0xf7, 0xe1, 0xdb, 0xcc, 0x31, + 0x7f, 0x1d, 0x45, 0xd4, 0xec, 0xa9, 0x47, 0x2d, 0x65, 0xee, 0x5e, 0x8f, + 0x1f, 0x71, 0xa3, 0xc5, 0xda, 0x94, 0x17, 0x77, 0xbf, 0x59, 0x6a, 0xb4, + 0x1f, 0x45, 0x22, 0xf8, 0xb8, 0xdb, 0xdc, 0x06, 0x05, 0x97, 0xb3, 0x1a, + 0x95, 0x39, 0xe4, 0x69, 0x8b, 0x5a, 0x57, 0xaa, 0x8b, 0x1f, 0xad, 0x95, + 0xaa, 0xb3, 0xff, 0xf8, 0xf7, 0x50, 0x0c, 0xa8, 0xd0, 0xf0, 0x3b, 0x1b, + 0x29, 0xa7, 0x1a, 0x37, 0xd2, 0xe1, 0x8f, 0xd2, 0x4c, 0x0b, 0xc0, 0x84, + 0xb2, 0x5e, 0xf9, 0x24, 0xd1, 0x30, 0xaa, 0xca, 0x43, 0x56, 0x62, 0x67, + 0xee, 0xba, 0x59, 0xd8, 0x71, 0x34, 0xad, 0x19, 0xdc, 0xd5, 0xab, 0xd0, + 0x1c, 0xcb, 0x23, 0xec, 0xa7, 0x69, 0x5e, 0xcf, 0x5a, 0xa7, 0x28, 0x03, + 0xb0, 0x9e, 0x77, 0x11, 0xea, 0xdb, 0xa7, 0xba, 0x1a, 0x55, 0x35, 0x11, + 0xa1, 0x16, 0xc1, 0xbf, 0x8c, 0x4a, 0x84, 0x26, 0x84, 0xd0, 0x87, 0xfe, + 0x0c, 0x63, 0x26, 0xe3, 0xd8, 0x85, 0x35, 0x2b, 0x43, 0x09, 0x20, 0x69, + 0x9a, 0x9c, 0xe5, 0x2a, 0x89, 0xe8, 0x9b, 0xe7, 0xb1, 0xad, 0xe6, 0x47, + 0x84, 0x26, 0x69, 0x9e, 0xe9, 0xe6, 0xaf, 0x4b, 0xe9, 0xed, 0x83, 0xfc, + 0x2d, 0xe0, 0xbb, 0xba, 0x39, 0x46, 0x32, 0x09, 0xa1, 0xeb, 0xf0, 0x98, + 0xb7, 0xa2, 0xec, 0xc1, 0x57, 0x9a, 0x4e, 0xc4, 0xae, 0x7a, 0x2e, 0xea, + 0x2e, 0x04, 0xb2, 0x09, 0x48, 0x2c, 0x88, 0xb9, 0xfc, 0xac, 0x0b, 0xdb, + 0x20, 0x7b, 0x7d, 0x2b, 0xda, 0x8f, 0xae, 0xe3, 0xe4, 0xb8, 0x8c, 0x47, + 0x78, 0xba, 0x79, 0xc3, 0x33, 0xa6, 0xda, 0xe5, 0x71, 0xcb, 0xd2, 0x75, + 0x73, 0xf8, 0xd9, 0xaa, 0x8c, 0xce, 0x61, 0x31, 0x42, 0x95, 0x76, 0x67, + 0xc8, 0x11, 0x65, 0x3f, 0x1c, 0xef, 0x82, 0xae, 0xd3, 0x16, 0x78, 0x0f, + 0x01, 0xd6, 0xd8, 0x50, 0x1d, 0xf0, 0x30, 0xe3, 0x22, 0x7d, 0x64, 0x93, + 0xf4, 0xbb, 0x96, 0x0e, 0x4e, 0xe9, 0x51, 0x57, 0x37, 0x02, 0x48, 0x79, + 0xc6, 0xb8, 0xba, 0xb6, 0x57, 0x9b, 0xdf, 0xc5, 0x11, 0x6d, 0xba, 0xf1, + 0x90, 0xd5, 0x59, 0xfd, 0x8a, 0x9f, 0x81, 0x89, 0x51, 0x2d, 0xdf, 0xf3, + 0xcd, 0xaf, 0x5b, 0x29, 0x6e, 0x55, 0xb1, 0x3f, 0x0c, 0xed, 0x21, 0x54, + 0x4f, 0x33, 0xca, 0xe2, 0x05, 0x65, 0xea, 0xc6, 0x5e, 0xe2, 0x48, 0xbd, + 0xc3, 0xa9, 0x5a, 0x4e, 0x66, 0xfe, 0xc7, 0xc7, 0x37, 0xfc, 0x4f, 0xdd, + 0xcc, 0xfe, 0x87, 0xd7, 0xfd, 0x22, 0x7e, 0x35, 0x5e, 0x1d, 0x5a, 0xd1, + 0xf1, 0x2d, 0x21, 0x65, 0x59, 0xb1, 0x80, 0xca, 0x35, 0x9c, 0x42, 0xf0, + 0x08, 0x42, 0xf3, 0x70, 0xc7, 0xa4, 0x59, 0x0d, 0x8f, 0x3a, 0x57, 0x68, + 0xc4, 0xf5, 0x11, 0x5b, 0x2a, 0xe1, 0x58, 0xe3, 0x77, 0x3e, 0xf6, 0xab, + 0x7e, 0x03, 0x37, 0x79, 0x74, 0xe2, 0x27, 0x93, 0x8a, 0x83, 0x9b, 0x87, + 0x6a, 0x20, 0x76, 0x86, 0x7c, 0xe4, 0x5b, 0xe4, 0xda, 0x73, 0xba, 0x15, + 0x75, 0xbd, 0x31, 0xbc, 0x03, 0xe0, 0x62, 0xff, 0xe9, 0x39, 0x8b, 0x4a, + 0x8c, 0x74, 0xe4, 0xf9, 0xa7, 0x77, 0x98, 0xf3, 0xb8, 0x18, 0xf0, 0x57, + 0xcf, 0x8c, 0x15, 0x10, 0x06, 0x7c, 0xc5, 0x0e, 0x43, 0xee, 0xd6, 0x5d, + 0x5b, 0x5f, 0x68, 0xb8, 0x27, 0xfe, 0x52, 0xcb, 0xfc, 0xc8, 0xaa, 0x86, + 0x0e, 0xfe, 0x15, 0xa8, 0xa1, 0x58, 0x75, 0xde, 0x27, 0xcb, 0x6b, 0x4f, + 0xe8, 0xae, 0xf9, 0xa7, 0xda, 0x54, 0x9e, 0x27, 0x00, 0x57, 0x46, 0xd8, + 0x80, 0xa6, 0xeb, 0xf1, 0x1e, 0xf3, 0x7c, 0xa6, 0x76, 0x91, 0x3b, 0x14, + 0xaa, 0x71, 0xfd, 0x35, 0xb0, 0x52, 0xc6, 0xaa, 0x3d, 0xca, 0x3c, 0xb6, + 0x3b, 0x46, 0x7f, 0x61, 0x5c, 0x5c, 0xa3, 0xb3, 0xa1, 0xcf, 0x58, 0x9b, + 0x73, 0xcd, 0x36, 0x8e, 0xf3, 0x1c, 0xb1, 0x80, 0x90, 0x76, 0x38, 0x7d, + 0xe6, 0xfd, 0xb2, 0xf7, 0x7f, 0xbd, 0xd7, 0xb8, 0x09, 0x35, 0x34, 0x60, + 0x14, 0x5b, 0x98, 0x69, 0x8b, 0x92, 0xa7, 0x7f, 0x83, 0xf3, 0xf4, 0x61, + 0x60, 0x8a, 0x5b, 0xa9, 0xac, 0xd4, 0x2a, 0x7b, 0xf4, 0x4e, 0xe2, 0x52, + 0xdd, 0xaf, 0x70, 0xa3, 0x78, 0x8d, 0xd7, 0x2b, 0xda, 0xce, 0xbc, 0xd4, + 0x25, 0x57, 0xf6, 0x6a, 0xe5, 0x1a, 0x1a, 0x6d, 0x1a, 0xf2, 0x49, 0x7b, + 0x52, 0x2c, 0xea, 0x50, 0x94, 0xc7, 0x95, 0xdb, 0x96, 0x2c, 0x1a, 0x31, + 0x53, 0x44, 0x95, 0x5f, 0xb1, 0x61, 0x6b, 0x78, 0x83, 0x4c, 0x4a, 0x88, + 0x61, 0x01, 0x60, 0x8b, 0x84, 0x83, 0x7f, 0x45, 0x00, 0x6b, 0x48, 0xe8, + 0x2a, 0x7f, 0x5a, 0x72, 0x3d, 0x1f, 0xf3, 0xbb, 0x40, 0x56, 0xcc, 0x7b, + 0xf9, 0x09, 0x41, 0xf2, 0x0c, 0xa5, 0xc5, 0xae, 0x10, 0x9e, 0x45, 0x83, + 0x7a, 0xb4, 0xc4, 0x4b, 0xae, 0xe3, 0xff, 0x27, 0xa8, 0x61, 0x26, 0xef, + 0xfb, 0x84, 0xef, 0x93, 0x97, 0x5b, 0xe3, 0x6f, 0x84, 0xc3, 0x2a, 0x25, + 0x5d, 0xbe, 0xcb, 0x08, 0x9e, 0x89, 0x68, 0xa8, 0xb0, 0xb8, 0xa8, 0x5a, + 0x24, 0x2e, 0x14, 0xda, 0xb5, 0xb6, 0x28, 0xbf, 0x7b, 0x4b, 0x60, 0x1d, + 0xed, 0x18, 0xd4, 0xcb, 0xb5, 0x4c, 0xde, 0x0c, 0x4a, 0x7e, 0x12, 0xa6, + 0x2a, 0xeb, 0x54, 0x00, 0x9d, 0x1f, 0x52, 0x56, 0x09, 0x3a, 0x30, 0x6b, + 0x42, 0x8b, 0xd1, 0x2c, 0xb6, 0xb7, 0x1c, 0xea, 0x0d, 0x8e, 0x21, 0x54, + 0x2d, 0x17, 0xca, 0xef, 0xc1, 0x9e, 0x85, 0xf7, 0xb6, 0xbd, 0x53, 0xe9, + 0x61, 0xf5, 0x10, 0x6f, 0xb3, 0xc8, 0xab, 0xf1, 0x26, 0x79, 0x75, 0x38, + 0x88, 0x94, 0xe7, 0xac, 0x5b, 0xbc, 0xe5, 0xd6, 0xc2, 0x5e, 0xfe, 0xc3, + 0x73, 0x51, 0x81, 0x0a, 0xea, 0xb6, 0x35, 0xde, 0xf9, 0x8d, 0x87, 0x11, + 0x3f, 0xe3, 0xe1, 0xb4, 0x67, 0x70, 0x7f, 0x0f, 0x59, 0x4b, 0x21, 0x62, + 0xcf, 0xeb, 0x01, 0x4f, 0xb1, 0xcc, 0xde, 0x72, 0xa8, 0x57, 0xe8, 0xf2, + 0x84, 0x7c, 0xa4, 0xbe, 0x46, 0x24, 0xbf, 0x66, 0xd4, 0x0f, 0x79, 0x2d, + 0x9f, 0x20, 0x1c, 0x5a, 0x7c, 0x5c, 0xf7, 0xd4, 0x73, 0xa9, 0xe8, 0x3f, + 0xec, 0xdf, 0xf9, 0x71, 0x0d, 0xbb, 0x78, 0x8b, 0xb9, 0x5e, 0x61, 0x3b, + 0xe4, 0xe7, 0x87, 0x47, 0xc9, 0xf0, 0x94, 0xfe, 0x75, 0xdc, 0xa6, 0xfc, + 0x0d, 0xde, 0xa2, 0x2f, 0x23, 0xe2, 0xeb, 0x2a, 0xe2, 0xa2, 0x12, 0x31, + 0x5f, 0xfe, 0xe4, 0x34, 0xd7, 0x82, 0x45, 0xb9, 0x6f, 0x75, 0x3c, 0x40, + 0x28, 0x5d, 0xef, 0x70, 0x56, 0xe0, 0x8d, 0x8e, 0xdc, 0xb6, 0xc2, 0x63, + 0x91, 0xb1, 0xdd, 0x17, 0x00, 0x1d, 0xa6, 0xdc, 0xfc, 0x59, 0x8f, 0xef, + 0xe5, 0x31, 0x9d, 0xfa, 0xf1, 0x92, 0xbd, 0xa5, 0x50, 0x6f, 0x70, 0x96, + 0xf7, 0x58, 0xad, 0x6f, 0xbc, 0x5e, 0x5e, 0x1d, 0x5a, 0xd1, 0x6e, 0xa2, + 0x09, 0x2b, 0xcb, 0xf7, 0xbc, 0xc8, 0x1b, 0x41, 0xe1, 0x07, 0x6e, 0xd6, + 0x69, 0xfb, 0xb7, 0x85, 0xb4, 0x0b, 0x1b, 0xbc, 0xfa, 0xb9, 0x45, 0xd0, + 0x87, 0x18, 0xee, 0x1a, 0xa8, 0xa4, 0xea, 0xa7, 0x77, 0xce, 0xc8, 0xf8, + 0xa1, 0x6c, 0x31, 0x7e, 0x08, 0x01, 0xf4, 0x1e, 0xf1, 0xf7, 0x53, 0xb0, + 0x61, 0xfa, 0xc4, 0xd0, 0xb1, 0x56, 0xa8, 0x03, 0x7d, 0xab, 0x62, 0x33, + 0x33, 0xf8, 0x56, 0x1f, 0xad, 0xa8, 0xc2, 0x4e, 0xd4, 0xe7, 0x42, 0xbb, + 0xdc, 0x94, 0x41, 0xf6, 0xf2, 0x32, 0xcb, 0xf4, 0x4d, 0xd7, 0xfc, 0x75, + 0x10, 0xbd, 0xa1, 0xb7, 0xf5, 0x3d, 0xed, 0xb7, 0x18, 0x42, 0xe8, 0x3e, + 0x48, 0xaf, 0x60, 0x7e, 0x38, 0x57, 0xf5, 0xb8, 0x23, 0xda, 0xd4, 0xa4, + 0xa1, 0x6d, 0x88, 0x65, 0x58, 0x37, 0xcf, 0xfc, 0x1b, 0x75, 0x1c, 0xfb, + 0xfd, 0xb7, 0xee, 0xd3, 0xed, 0xe0, 0xd8, 0xae, 0xaf, 0xd8, 0xc7, 0x5b, + 0xbc, 0xef, 0x1d, 0xa9, 0xa0, 0x72, 0x08, 0x22, 0x78, 0xd7, 0x74, 0x9f, + 0x57, 0x4d, 0xbd, 0xc8, 0xcb, 0x63, 0x23, 0x42, 0x95, 0x30, 0xf3, 0xfa, + 0xa8, 0x41, 0xef, 0x82, 0x11, 0xa9, 0x6d, 0x6d, 0x9a, 0xec, 0xa8, 0xbe, + 0x43, 0x00, 0xa9, 0x8f, 0x3a, 0x2a, 0xf0, 0x6d, 0x38, 0x88, 0x0e, 0x13, + 0xcc, 0x3a, 0x2a, 0x2c, 0x61, 0x1c, 0xcf, 0x34, 0x6d, 0x74, 0xe2, 0xba, + 0xed, 0x7c, 0xb6, 0x50, 0xef, 0xb4, 0xf1, 0x2d, 0x5c, 0x7d, 0xc6, 0x07, + 0x8c, 0x61, 0x52, 0x93, 0x20, 0xd9, 0x52, 0x97, 0x08, 0x84, 0xdf, 0xf1, + 0xc7, 0x23, 0x1e, 0x60, 0xb3, 0x39, 0xc3, 0x09, 0xa0, 0xdb, 0x13, 0xd7, + 0xb4, 0x1f, 0x78, 0xe8, 0x99, 0xc8, 0xd1, 0x76, 0xc8, 0x86, 0x5b, 0x5f, + 0x71, 0x81, 0xf5, 0x08, 0x75, 0xab, 0xf7, 0x94, 0xd5, 0xc2, 0x4d, 0x9e, + 0x01, 0x79, 0xe6, 0x0d, 0xb8, 0x9c, 0xe7, 0x99, 0xed, 0x15, 0xfd, 0xcb, + 0x1f, 0xdb, 0x79, 0x55, 0x8f, 0x07, 0x55, 0x80, 0xed, 0x73, 0xaa, 0xd7, + 0x5f, 0xf8, 0x71, 0x9f, 0xc2, 0x6a, 0xd1, 0x01, 0x17, 0x9e, 0x4a, 0xbc, + 0x0f, 0x0b, 0x54, 0x79, 0x77, 0x61, 0xf0, 0x40, 0xf7, 0x52, 0x84, 0x4a, + 0xb4, 0x58, 0xf5, 0xbd, 0xcb, 0x0c, 0x0b, 0x07, 0x8a, 0xde, 0xca, 0x58, + 0xc0, 0x44, 0x66, 0x06, 0x37, 0x51, 0x58, 0x4f, 0xbd, 0xed, 0x1c, 0x21, + 0x1d, 0x31, 0xff, 0xe9, 0x51, 0x26, 0x5f, 0x63, 0x70, 0x48, 0x5c, 0xac, + 0x12, 0x01, 0xe7, 0x1e, 0x69, 0x93, 0x4a, 0x8a, 0xbd, 0xa5, 0x50, 0x6f, + 0xb0, 0x93, 0x15, 0x08, 0x75, 0xe7, 0x59, 0xca, 0xd2, 0x94, 0x04, 0xe4, + 0x3c, 0x9e, 0x38, 0xc2, 0xcc, 0x44, 0x87, 0x7f, 0xe0, 0x7d, 0xee, 0x62, + 0x4c, 0x8b, 0xc6, 0x47, 0x53, 0x9f, 0x00, 0x51, 0xcf, 0x1f, 0x97, 0xd9, + 0x0e, 0xd5, 0x08, 0xe0, 0xae, 0x21, 0xee, 0x25, 0xca, 0xe6, 0x47, 0x87, + 0xff, 0x0a, 0x55, 0x26, 0x05, 0x37, 0xf4, 0x62, 0x52, 0xe0, 0xed, 0x39, + 0x1a, 0x60, 0x50, 0xbd, 0x18, 0xab, 0x39, 0xa6, 0x2a, 0xef, 0xf6, 0x97, + 0xcc, 0x50, 0xff, 0x5f, 0x91, 0x8c, 0x9e, 0xe8, 0xa6, 0xdf, 0xac, 0xc8, + 0x6c, 0xa2, 0xe4, 0x6b, 0xff, 0x13, 0xbd, 0x7b, 0x95, 0x1d, 0x1f, 0xc9, + 0x8d, 0xb9, 0xe3, 0x4c, 0x7a, 0xde, 0x19, 0xc8, 0x2e, 0x0a, 0x6a, 0x8b, + 0x0e, 0x54, 0xa0, 0xfe, 0x57, 0x1d, 0x7f, 0xe0, 0x03, 0xb2, 0x89, 0xf4, + 0x9e, 0x36, 0xfd, 0xac, 0x22, 0x75, 0xe8, 0x68, 0xb1, 0xf8, 0xa3, 0xe3, + 0x42, 0x41, 0xb2, 0x8d, 0x7f, 0x61, 0x12, 0x56, 0xb2, 0x18, 0xa1, 0x4d, + 0x7e, 0x53, 0x69, 0xda, 0xa8, 0xf0, 0xdd, 0xd3, 0x1b, 0x4c, 0xb0, 0x61, + 0x65, 0xde, 0xff, 0x67, 0x98, 0xc5, 0x4e, 0xa0, 0xff, 0x23, 0xee, 0x15, + 0xca, 0xd4, 0xe1, 0x5a, 0xde, 0x67, 0xb0, 0xad, 0xeb, 0xc5, 0xfd, 0x3f, + 0x42, 0x26, 0x82, 0x78, 0xee, 0xe9, 0xef, 0x77, 0x59, 0x99, 0x3a, 0x54, + 0xa2, 0xc5, 0x17, 0xe9, 0x8e, 0xef, 0x93, 0x65, 0x6f, 0xc2, 0xff, 0x99, + 0x38, 0x83, 0xc0, 0x9d, 0x11, 0xed, 0xfd, 0x8e, 0x2a, 0x53, 0x07, 0xc2, + 0x3f, 0xf3, 0x91, 0xc4, 0xdb, 0x79, 0xd1, 0xde, 0x84, 0xff, 0x33, 0xf1, + 0x3e, 0xd0, 0x9c, 0xd7, 0xda, 0x35, 0x51, 0x18, 0xb7, 0x86, 0x70, 0x34, + 0x74, 0x78, 0xf4, 0xdf, 0xc8, 0x03, 0x2b, 0xe1, 0x59, 0x20, 0x86, 0x01, + 0xe1, 0xe1, 0xbf, 0x2a, 0x8d, 0x7e, 0x96, 0x44, 0xd4, 0x8a, 0x85, 0x2e, + 0x93, 0x58, 0x62, 0x6f, 0xd2, 0xff, 0x89, 0xb8, 0x80, 0xa0, 0x1f, 0xfd, + 0xc2, 0x02, 0x37, 0x2a, 0x4f, 0x59, 0xdb, 0x20, 0xf3, 0xfe, 0xc4, 0x5e, + 0x57, 0xde, 0x15, 0xfc, 0x0b, 0xcb, 0xe2, 0x2b, 0x04, 0x6a, 0x5e, 0x69, + 0x1d, 0xb4, 0x55, 0xb9, 0x3a, 0xf4, 0x95, 0x3d, 0xc7, 0x80, 0xe0, 0x0b, + 0x7b, 0x13, 0xff, 0xcf, 0xc3, 0x56, 0xce, 0x90, 0xc0, 0xd8, 0xf6, 0x4d, + 0x8f, 0x28, 0x7f, 0xaa, 0xa1, 0x11, 0x6d, 0x16, 0x1d, 0xd6, 0xcd, 0x62, + 0xa5, 0xbd, 0x89, 0xff, 0xe7, 0xe1, 0x33, 0xbe, 0x05, 0x86, 0xf4, 0x6c, + 0x70, 0x44, 0xf9, 0xec, 0x90, 0x44, 0x93, 0xdd, 0x53, 0x43, 0x47, 0xff, + 0x6b, 0x5d, 0x59, 0x1a, 0xf3, 0x79, 0x81, 0xb7, 0x11, 0xea, 0xee, 0xf7, + 0x05, 0x5c, 0x54, 0xaa, 0x0c, 0x04, 0x22, 0xe0, 0xdc, 0xc3, 0x5d, 0x9b, + 0xc1, 0xbf, 0xae, 0x58, 0xcb, 0x22, 0x13, 0x18, 0xc1, 0x37, 0x6e, 0x9d, + 0xa6, 0x28, 0xf3, 0xe9, 0x5e, 0x6d, 0xee, 0x65, 0x03, 0x46, 0x81, 0xe0, + 0xb8, 0xbd, 0x19, 0xf8, 0x67, 0x61, 0x1e, 0x3f, 0x11, 0xcc, 0x13, 0xe1, + 0xb1, 0x9f, 0x39, 0x19, 0xf5, 0x36, 0x59, 0x57, 0xd3, 0x6d, 0x9a, 0xd0, + 0x7c, 0xf4, 0xef, 0x33, 0x0d, 0x4b, 0xe2, 0x14, 0xe1, 0xbc, 0x8a, 0x90, + 0xee, 0xeb, 0x1f, 0xb2, 0xcf, 0xb8, 0x74, 0x0a, 0x0e, 0xa2, 0xc5, 0xc7, + 0x8b, 0xf4, 0x8f, 0x28, 0x7d, 0x8e, 0xf3, 0x2f, 0x94, 0xe0, 0x53, 0xf6, + 0xd3, 0x8e, 0xa5, 0xfe, 0xdd, 0x5e, 0xf3, 0x2e, 0x30, 0x46, 0x19, 0x08, + 0x95, 0x88, 0x5c, 0xf5, 0x4e, 0xe0, 0x70, 0xb3, 0x0a, 0x10, 0xfc, 0x8b, + 0xeb, 0xb0, 0x13, 0x78, 0x16, 0x21, 0x3d, 0xd4, 0x3d, 0xf6, 0x67, 0x47, + 0xa3, 0x94, 0x81, 0x90, 0x44, 0xcc, 0x9e, 0x09, 0x91, 0xa3, 0xb1, 0x4c, + 0x02, 0x50, 0xbb, 0x61, 0x3e, 0x1f, 0x30, 0xc7, 0xde, 0x44, 0x00, 0x50, + 0x41, 0x3b, 0xde, 0x01, 0xde, 0x68, 0xd4, 0xfe, 0x75, 0xdf, 0x3c, 0x63, + 0x8b, 0xc8, 0x48, 0x22, 0x68, 0xdf, 0xe3, 0x09, 0x7a, 0x60, 0x9d, 0xbd, + 0x19, 0x31, 0x15, 0x3b, 0xe0, 0x8f, 0x64, 0xe4, 0x63, 0x29, 0xe6, 0x17, + 0xbb, 0xd2, 0x92, 0xc5, 0xf3, 0x2c, 0x22, 0x9a, 0xd5, 0xfa, 0xbe, 0xf7, + 0x86, 0xff, 0x66, 0x4a, 0x7d, 0x15, 0xdf, 0x7d, 0xfd, 0x13, 0x62, 0x10, + 0xb7, 0x6a, 0x10, 0xe1, 0x39, 0xa6, 0x30, 0x13, 0x18, 0x1d, 0xd1, 0x62, + 0x46, 0x8b, 0x49, 0xe3, 0xa3, 0x84, 0xf4, 0x00, 0x07, 0xf8, 0xcc, 0x2e, + 0xb4, 0x1c, 0xe6, 0x1d, 0x96, 0xd3, 0x03, 0xa1, 0xed, 0x9b, 0x12, 0xb3, + 0x5a, 0xaf, 0xf0, 0xe2, 0xe9, 0xfa, 0xe6, 0xbd, 0x2f, 0x25, 0x21, 0x08, + 0x81, 0xa2, 0xc7, 0xce, 0xf5, 0x0f, 0xfb, 0x81, 0xbb, 0xc8, 0xd3, 0xa6, + 0xde, 0x1d, 0x78, 0x50, 0x2d, 0x34, 0xa2, 0x61, 0x66, 0x97, 0x77, 0x1e, + 0x6b, 0x2e, 0xb8, 0x8f, 0x4d, 0x2c, 0xb6, 0xa9, 0xfd, 0xbe, 0x85, 0x67, + 0xf9, 0x8c, 0x0e, 0x08, 0xed, 0xbd, 0x9d, 0x62, 0x97, 0xba, 0x15, 0x98, + 0x52, 0xed, 0x4a, 0x12, 0x7e, 0xfb, 0xba, 0x26, 0x34, 0x44, 0x98, 0x90, + 0xee, 0xac, 0x1e, 0xe0, 0x02, 0x2f, 0x33, 0x13, 0x18, 0x13, 0x1e, 0x3b, + 0xdf, 0xe5, 0x7f, 0x4f, 0x4b, 0x35, 0xc2, 0x3f, 0x3b, 0xfe, 0x9d, 0x31, + 0x6d, 0x85, 0xb6, 0x3d, 0x6f, 0x63, 0x9b, 0xe8, 0xc8, 0xc3, 0x08, 0x9e, + 0x27, 0x92, 0x9d, 0xfa, 0x3e, 0x5d, 0x9a, 0x2e, 0xf5, 0xcc, 0x37, 0xad, + 0x58, 0x9a, 0x24, 0x42, 0xf6, 0xdd, 0x99, 0x10, 0x8a, 0xb8, 0x35, 0x1d, + 0x25, 0xfb, 0x80, 0x34, 0x72, 0xb5, 0xa9, 0x77, 0x37, 0x38, 0x78, 0xa3, + 0x85, 0xaf, 0x16, 0xbe, 0x79, 0xcd, 0x3f, 0x4d, 0xbb, 0xfd, 0x23, 0x37, + 0xb8, 0x87, 0x4d, 0xcc, 0xb0, 0x5a, 0xfd, 0xda, 0x23, 0x34, 0x67, 0x3e, + 0x43, 0x80, 0xd7, 0xfc, 0xba, 0xdc, 0xdd, 0x64, 0x9d, 0x5b, 0xb1, 0xa9, + 0x75, 0xe0, 0x54, 0xa2, 0xd9, 0x9e, 0x27, 0x13, 0x62, 0x10, 0xcc, 0xb0, + 0xb7, 0x68, 0x4d, 0xc1, 0x34, 0x16, 0x72, 0xe3, 0xdc, 0xb8, 0xf1, 0xf7, + 0xe6, 0x5a, 0x1e, 0xf6, 0x53, 0xf2, 0xf8, 0x07, 0xa2, 0x84, 0xc6, 0x93, + 0x7b, 0xf9, 0x89, 0x87, 0x2d, 0x4a, 0x41, 0x1e, 0x1d, 0x58, 0xce, 0x03, + 0xc0, 0x26, 0xc7, 0x91, 0x6d, 0x93, 0x5e, 0x6e, 0xf4, 0x9b, 0x7c, 0x6e, + 0xab, 0xba, 0x8e, 0x81, 0x51, 0xab, 0x9e, 0x8d, 0x74, 0x41, 0xdc, 0x50, + 0xa5, 0xed, 0x96, 0x40, 0x06, 0xf0, 0x20, 0x42, 0xdb, 0xe3, 0x6f, 0xe6, + 0xc6, 0x5f, 0x19, 0xf5, 0xce, 0x6c, 0xfe, 0x45, 0x97, 0xbb, 0xef, 0x6d, + 0x28, 0xd4, 0xae, 0xdc, 0xcb, 0xc7, 0xdc, 0xc3, 0x6e, 0x33, 0xc7, 0xdf, + 0x8d, 0x60, 0x1e, 0x43, 0x81, 0xc3, 0x8e, 0x0f, 0xc7, 0xa7, 0x8c, 0x0f, + 0x5f, 0xe7, 0x95, 0x6f, 0x5e, 0xc6, 0x6c, 0xc7, 0x9a, 0x84, 0x8f, 0x67, + 0x07, 0x3e, 0x8c, 0xd9, 0x31, 0xed, 0xf6, 0xc0, 0x1b, 0xac, 0x00, 0x26, + 0x85, 0x27, 0xce, 0x97, 0xcf, 0x05, 0x72, 0x75, 0xae, 0x38, 0x56, 0x7b, + 0x67, 0x24, 0x7c, 0xd6, 0xeb, 0xfe, 0xe1, 0x51, 0xdb, 0x1c, 0xa1, 0x2d, + 0xa3, 0x98, 0x43, 0x15, 0xc6, 0x56, 0xaf, 0x58, 0xc9, 0x21, 0x3e, 0x66, + 0x14, 0xf1, 0xc0, 0xa7, 0x6e, 0xf7, 0xb7, 0x6a, 0x3f, 0xbe, 0xf1, 0x3a, + 0x9f, 0x8b, 0xe6, 0x17, 0x0e, 0x74, 0x2b, 0x4b, 0x9d, 0xb6, 0x54, 0x3f, + 0x92, 0x4e, 0x66, 0xbc, 0xf8, 0xb0, 0x46, 0x0e, 0x57, 0x05, 0xa8, 0xa0, + 0x3b, 0xad, 0x79, 0x5b, 0x35, 0xf4, 0xce, 0xed, 0x2f, 0x9c, 0x8d, 0x35, + 0xae, 0x84, 0x91, 0x84, 0xae, 0x56, 0x7f, 0xc1, 0xe5, 0x80, 0xd7, 0xb6, + 0xc0, 0x5d, 0x81, 0xbf, 0x0f, 0xcf, 0xe9, 0x50, 0xe9, 0x45, 0x18, 0x11, + 0x38, 0xb1, 0x9b, 0x28, 0xfc, 0x71, 0x43, 0x07, 0x38, 0xa1, 0x05, 0x6a, + 0x28, 0xa3, 0x96, 0x7c, 0xb2, 0x39, 0x83, 0x0f, 0x71, 0x1c, 0xe4, 0x0c, + 0x35, 0x1c, 0x47, 0x48, 0x5f, 0xbb, 0x6e, 0x08, 0x38, 0x1b, 0x9b, 0xdd, + 0x3a, 0x2f, 0xb9, 0xa4, 0x79, 0xb1, 0xbb, 0x25, 0x72, 0x64, 0xfb, 0x9f, + 0x6f, 0x3b, 0xf9, 0x9b, 0x8f, 0xc6, 0x19, 0xaa, 0xcd, 0x7a, 0x60, 0x60, + 0xe1, 0x4a, 0x21, 0xca, 0xb0, 0x07, 0x1d, 0x6e, 0x44, 0xf8, 0x77, 0x9a, + 0x70, 0x70, 0x4c, 0x81, 0xd1, 0x55, 0x78, 0x05, 0x15, 0xaa, 0x8a, 0xc0, + 0xdc, 0xc0, 0xb3, 0xbd, 0x8e, 0x56, 0x3a, 0x66, 0x6f, 0x38, 0xd6, 0xfc, + 0x90, 0xfe, 0x88, 0x57, 0x96, 0x94, 0xab, 0x2a, 0x12, 0xf9, 0x42, 0xaa, + 0xa5, 0x96, 0x5a, 0xf8, 0xd3, 0x7f, 0xaf, 0x34, 0x21, 0x24, 0x9d, 0xca, + 0x1f, 0xbc, 0xdd, 0x54, 0x0d, 0xdd, 0x83, 0x9b, 0x35, 0x2e, 0x6f, 0x52, + 0x1c, 0x52, 0xe6, 0x5b, 0xa9, 0xb1, 0xcc, 0xfd, 0x84, 0x86, 0xd0, 0x3d, + 0x5d, 0x9e, 0x5e, 0xb0, 0x69, 0x01, 0xfe, 0x66, 0x5a, 0x56, 0x76, 0x98, + 0x21, 0xa7, 0x08, 0x45, 0x62, 0x7c, 0xab, 0x0d, 0x6f, 0x9e, 0xe8, 0x52, + 0x69, 0x81, 0xfe, 0x54, 0x68, 0x50, 0x57, 0xea, 0xaa, 0x6a, 0x8b, 0xab, + 0x8b, 0x1d, 0xd1, 0xa0, 0x41, 0xe2, 0x4a, 0xc2, 0x7c, 0xb8, 0x12, 0x3d, + 0x6b, 0xa0, 0x8a, 0x2a, 0x70, 0xd0, 0x7b, 0x55, 0x48, 0x55, 0x5a, 0x9c, + 0x0c, 0xd4, 0x62, 0xc9, 0x40, 0x1c, 0xbd, 0x21, 0xea, 0xd3, 0xbe, 0x93, + 0x97, 0x9d, 0x3e, 0xc8, 0x52, 0x1e, 0xb0, 0xbd, 0x40, 0xcd, 0xc5, 0x29, + 0xdc, 0x18, 0x94, 0x1a, 0x74, 0xc6, 0xde, 0xe5, 0x85, 0x2d, 0xd3, 0x24, + 0xe1, 0x97, 0x9d, 0xfa, 0xe8, 0x0e, 0xe7, 0x51, 0xc0, 0x41, 0x0b, 0x48, + 0xc7, 0x2e, 0x4b, 0x96, 0x9a, 0x5a, 0x21, 0x55, 0xa9, 0xfe, 0x01, 0xd7, + 0x99, 0x3a, 0x11, 0xbe, 0xb1, 0xd3, 0x4b, 0xf3, 0x7f, 0xe9, 0x41, 0x20, + 0x15, 0xd4, 0xeb, 0xa2, 0x3f, 0x37, 0xc7, 0x29, 0x04, 0x30, 0xa1, 0x69, + 0xd2, 0xc7, 0xae, 0xb2, 0x09, 0x9f, 0xea, 0x73, 0x93, 0x84, 0x5f, 0x4e, + 0xa7, 0xe7, 0xe6, 0x7a, 0x75, 0x46, 0x30, 0xcb, 0xde, 0x42, 0x35, 0x0f, + 0x19, 0x08, 0x06, 0x53, 0xe2, 0xd0, 0x77, 0x60, 0xe8, 0xb6, 0xfa, 0x5d, + 0xf7, 0xf9, 0xe6, 0xcd, 0xd9, 0x10, 0xb5, 0xf2, 0xc1, 0x64, 0x78, 0x81, + 0x6e, 0xb7, 0x40, 0xe5, 0x51, 0x59, 0x54, 0xf3, 0x10, 0xf3, 0x08, 0xe2, + 0x35, 0xbf, 0xae, 0xcf, 0x06, 0x9c, 0xac, 0x5f, 0xe5, 0x8b, 0xe4, 0x9b, + 0x46, 0x04, 0x1d, 0xe9, 0xf5, 0xd0, 0x72, 0xd7, 0x7e, 0x9c, 0xe0, 0x5b, + 0x7b, 0x8b, 0xd2, 0x72, 0x58, 0x06, 0x4c, 0x00, 0x1e, 0x6b, 0xda, 0x76, + 0x8e, 0xd7, 0x45, 0xd3, 0xdc, 0x78, 0xb6, 0x6f, 0x2a, 0xe1, 0x93, 0xd3, + 0xea, 0x8d, 0x89, 0xe1, 0xf0, 0x3a, 0xa3, 0xed, 0x2d, 0x42, 0xcb, 0x63, + 0x35, 0x82, 0x34, 0x84, 0xf4, 0x60, 0x72, 0xd2, 0x32, 0x8f, 0xa2, 0xfa, + 0x6e, 0x77, 0x49, 0xc2, 0xbb, 0xa8, 0xc5, 0xa2, 0xc1, 0x89, 0x42, 0x7a, + 0x1c, 0xc1, 0x76, 0xf3, 0xd9, 0xaf, 0x9f, 0x98, 0xc3, 0xf7, 0x74, 0x46, + 0x38, 0xa4, 0xa5, 0x36, 0x59, 0xe6, 0x56, 0x6f, 0x95, 0xa2, 0x12, 0x9e, + 0x45, 0x71, 0xcb, 0x46, 0x74, 0x13, 0x0e, 0x03, 0x49, 0xe7, 0x4b, 0x7b, + 0x0b, 0xcd, 0xba, 0xb8, 0xcc, 0x34, 0x56, 0xd0, 0x99, 0x13, 0x0e, 0x03, + 0x52, 0xe3, 0x97, 0x79, 0xe5, 0xd6, 0xb7, 0xe5, 0x4b, 0x2d, 0xbc, 0x73, + 0x5b, 0x2d, 0xbb, 0xa7, 0x5b, 0xa9, 0x43, 0x0f, 0x7e, 0x60, 0xee, 0xff, + 0x8f, 0xe8, 0xdc, 0x7d, 0x3c, 0xcf, 0x07, 0x74, 0x40, 0x38, 0xa4, 0xb5, + 0x4e, 0x9c, 0xed, 0x7f, 0xba, 0xbe, 0x58, 0x5f, 0x3a, 0xe1, 0x7f, 0xba, + 0xcd, 0xec, 0xa1, 0xad, 0x85, 0x43, 0x2a, 0x5f, 0xf1, 0x96, 0x9d, 0x32, + 0xc8, 0xdb, 0x09, 0x39, 0x7c, 0xc2, 0x8f, 0xf4, 0x45, 0x48, 0xe3, 0x1b, + 0x77, 0x7f, 0x3a, 0x6c, 0xbb, 0xbe, 0xc4, 0x9e, 0x73, 0x45, 0x25, 0xf4, + 0x25, 0x91, 0xdb, 0xbb, 0x3f, 0x3d, 0xbe, 0xb1, 0x90, 0x06, 0xf0, 0x0b, + 0x5f, 0x28, 0xa8, 0x87, 0xfe, 0x8f, 0xc4, 0x7a, 0x8e, 0x31, 0x12, 0x78, + 0xcf, 0xa3, 0x4f, 0x6a, 0xf3, 0xd9, 0xfe, 0x19, 0xce, 0x06, 0x5b, 0xef, + 0x2b, 0x92, 0x70, 0x36, 0x34, 0xc8, 0x88, 0x9d, 0xdd, 0x3b, 0xf5, 0x63, + 0x0f, 0x18, 0xc5, 0x69, 0x36, 0xd8, 0x5b, 0x28, 0xf6, 0xc6, 0x1e, 0x04, + 0xd3, 0x48, 0x00, 0x26, 0x06, 0xf7, 0x1b, 0x1a, 0xbf, 0xa4, 0xc1, 0x49, + 0x67, 0x83, 0x2d, 0x66, 0x8b, 0x4a, 0x38, 0x55, 0x06, 0x9e, 0x88, 0x5b, + 0xd2, 0x77, 0xe8, 0xe4, 0x60, 0x48, 0x60, 0x16, 0x82, 0x74, 0x9b, 0x72, + 0x6e, 0xa7, 0xfb, 0x10, 0x65, 0x98, 0x4e, 0x12, 0xdf, 0xf2, 0x2d, 0x47, + 0x55, 0xcf, 0x07, 0xef, 0x4b, 0x3a, 0x97, 0x92, 0xdf, 0x31, 0x3f, 0xb4, + 0xdc, 0xcd, 0x80, 0xe5, 0x9f, 0x4c, 0x4a, 0x68, 0xd1, 0x17, 0xb9, 0x1e, + 0xf5, 0xdd, 0xe1, 0xf1, 0x7d, 0xf2, 0xfe, 0x29, 0x59, 0xd1, 0xb5, 0x77, + 0xd0, 0x95, 0xfd, 0x3c, 0x69, 0x73, 0x9e, 0xeb, 0xb5, 0x42, 0x00, 0x8a, + 0xf8, 0x8a, 0x26, 0x7c, 0xc3, 0x0f, 0xec, 0x65, 0xb6, 0xcf, 0x8f, 0x91, + 0x99, 0x2d, 0x2f, 0xb7, 0x29, 0x8d, 0x2f, 0x0f, 0x29, 0x77, 0x33, 0x48, + 0xe6, 0x27, 0xa6, 0x50, 0xa3, 0xad, 0x71, 0xcc, 0x77, 0xcf, 0x76, 0x3f, + 0xe0, 0xb3, 0x23, 0x64, 0x6f, 0xbb, 0x8c, 0xd1, 0xf9, 0xb1, 0x0c, 0xa0, + 0x2f, 0xc7, 0x18, 0x84, 0xde, 0xec, 0xde, 0x4d, 0x41, 0xbd, 0x57, 0xc8, + 0x55, 0xac, 0x23, 0x86, 0xaf, 0xd8, 0xc4, 0x6a, 0x84, 0x34, 0xc5, 0xfb, + 0x50, 0xe8, 0xc5, 0x66, 0xb9, 0xcd, 0x8b, 0x1a, 0x57, 0x46, 0x56, 0x06, + 0x54, 0xe8, 0x6b, 0x1d, 0x0c, 0x12, 0x0a, 0xf3, 0x86, 0xa8, 0x90, 0xd0, + 0xd6, 0x6a, 0xca, 0xb4, 0x79, 0x0e, 0xe7, 0x5d, 0xcf, 0x38, 0x1f, 0x72, + 0x4f, 0x0f, 0x3e, 0xd6, 0xf1, 0xdc, 0x98, 0x3c, 0x9d, 0x18, 0x44, 0x3b, + 0xfa, 0xb3, 0x9f, 0xfe, 0x76, 0xe5, 0xf3, 0x96, 0x51, 0xc8, 0x55, 0xdc, + 0x4d, 0x1f, 0x8e, 0x73, 0x80, 0xcd, 0x14, 0x72, 0xc6, 0xe1, 0x3d, 0xdf, + 0xec, 0x90, 0xec, 0x46, 0xc5, 0x41, 0x86, 0x46, 0x86, 0xc0, 0x1c, 0x9d, + 0x6f, 0xe3, 0x62, 0x4d, 0xbe, 0x70, 0xf0, 0x70, 0xf5, 0xaf, 0xc4, 0x40, + 0x0d, 0x35, 0x5c, 0xa9, 0x71, 0xab, 0x41, 0x87, 0xda, 0x50, 0x90, 0xe5, + 0x5e, 0x2d, 0x9d, 0xd3, 0x5f, 0xd0, 0x9e, 0x0a, 0x38, 0xe7, 0x70, 0xcc, + 0xfd, 0x74, 0xd4, 0xc5, 0x17, 0x8a, 0xa4, 0x9a, 0x28, 0x12, 0xe8, 0x40, + 0x0a, 0x3f, 0xf0, 0x84, 0xbd, 0x59, 0x03, 0xe0, 0xff, 0x00, 0xf9, 0x70, + 0x45, 0xff, 0xdd, 0xbf, 0xcc, 0xbd, 0x00, 0x00, 0x00, 0x25, 0x74, 0x45, + 0x58, 0x74, 0x64, 0x61, 0x74, 0x65, 0x3a, 0x63, 0x72, 0x65, 0x61, 0x74, + 0x65, 0x00, 0x32, 0x30, 0x32, 0x33, 0x2d, 0x30, 0x33, 0x2d, 0x30, 0x35, + 0x54, 0x30, 0x39, 0x3a, 0x30, 0x33, 0x3a, 0x30, 0x32, 0x2b, 0x30, 0x30, + 0x3a, 0x30, 0x30, 0x17, 0xd6, 0x30, 0xcf, 0x00, 0x00, 0x00, 0x25, 0x74, + 0x45, 0x58, 0x74, 0x64, 0x61, 0x74, 0x65, 0x3a, 0x6d, 0x6f, 0x64, 0x69, + 0x66, 0x79, 0x00, 0x32, 0x30, 0x32, 0x33, 0x2d, 0x30, 0x33, 0x2d, 0x30, + 0x35, 0x54, 0x30, 0x39, 0x3a, 0x30, 0x32, 0x3a, 0x34, 0x35, 0x2b, 0x30, + 0x30, 0x3a, 0x30, 0x30, 0xc8, 0xa4, 0xd3, 0x39, 0x00, 0x00, 0x00, 0x28, + 0x74, 0x45, 0x58, 0x74, 0x64, 0x61, 0x74, 0x65, 0x3a, 0x74, 0x69, 0x6d, + 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x00, 0x32, 0x30, 0x32, 0x33, 0x2d, + 0x30, 0x33, 0x2d, 0x30, 0x35, 0x54, 0x30, 0x39, 0x3a, 0x30, 0x36, 0x3a, + 0x30, 0x38, 0x2b, 0x30, 0x30, 0x3a, 0x30, 0x30, 0x73, 0xc7, 0x3d, 0xa6, + 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82, +} diff --git a/restic/wrapper.go b/restic/wrapper.go index 80024c8..2e15f5f 100644 --- a/restic/wrapper.go +++ b/restic/wrapper.go @@ -5,6 +5,7 @@ import ( "fmt" "github.com/rs/zerolog/log" "os/exec" + "path/filepath" "time" ) @@ -38,24 +39,45 @@ func (w *Wrapper) LastSnapshot() ResticSnapshot { return w.LatestSnapshots[len(w.LatestSnapshots)-1] } +// Cleanup should be called on Quit and terminates trailing commands. +// Note that https://pkg.go.dev/os/signal should be used (and possibly Prctl) to control death signal of 'forked' when exec.Command() is used +// Otherwise restic commands could outlive restictray's. Ignore this for now and only kill a possible trailing mount cmd +func (w *Wrapper) Cleanup() { + if w.mountCommand != nil && w.mountCommand.Process != nil { + // Could be killed or terminated due to manual unmount, ignore errors and retry anyway + w.mountCommand.Process.Kill() + // Sometimes not correctly unmounted causing consecutive open attempts of mounted folder to fail + exec.Command("umount", "restic").Run() + } +} + func resticCmd(args ...string) *exec.Cmd { - cmd := exec.Command("restic", args...) + // Running from GoLand: could be /private/var/folders/5s/csgpcjlx1wg9659_485vqz880000gn/T/GoLand/restictray + // Installed: could be /Applications/restictray/restictray.app/Contents/MacOS/restictray + // This isn't ideal but I don't want to fiddle with build flags + resticExec := filepath.Join(filepath.Dir(executable), "restic") + if IsDev() { + resticExec = "restic" // dev: assume in $PATH + } + + cmd := exec.Command(resticExec, args...) log.Debug().Msg(cmd.String()) return cmd } /* -Expected JSON format: +UpdateLatestSnapshots updates LatestSnapshots or returns an error. +Expected restic snapshot JSON format: [ { "time": "2023-03-01T16:15:34.111513+01:00", "tree": "d603aa4c6ce2bdef784dbdcd36461970d7f0cc8083d31f46d23cdb9bef172f0a", "paths": [ - "/Users/wgroeneveld" + "/Users/user" ], - "hostname": "Wouters-M1-Air.local", - "username": "wgroeneveld", + "hostname": "M1-Air.local", + "username": "user", "uid": 501, "gid": 20, "id": "31ae2a213c5750c4f86ebe8a8e989a5d4de2963c911e7513f47ca227723a0d95", @@ -65,7 +87,7 @@ Expected JSON format: ] */ func (w *Wrapper) UpdateLatestSnapshots(c *Config) error { - cmd := resticCmd("--json", "--password-file", c.PasswordFile(), "-r", c.Repository, "snapshots") + cmd := resticCmd("--json", "--password-file", PasswordFile(), "-r", c.Repository, "snapshots") out, err := cmd.CombinedOutput() if err != nil { return fmt.Errorf("restic snapshots cmd: %s: %w", string(out), err) @@ -76,28 +98,38 @@ func (w *Wrapper) UpdateLatestSnapshots(c *Config) error { return err } - log.Debug().Any("snapshots", w.LatestSnapshots).Msg("update") + log.Info().Any("snapshots", w.LatestSnapshots).Msg("update") return nil } func (w *Wrapper) MountBackups(c *Config) error { c.CreateMountDirIfDoesntExist() - if w.mountCommand != nil && w.mountCommand.Process != nil { - // could be killed or terminted due to manual unmount, ignore errors and retry anyway - w.mountCommand.Process.Kill() - } + w.Cleanup() // Open the folder first: MacFuse could take a second; results in occasional weird errors otherwise. - openFolder(c.MountDir()) + err := openFolder(c.MountDir()) + if err != nil { + return err + } - w.mountCommand = resticCmd("--password-file", c.PasswordFile(), "-r", c.Repository, "mount", c.MountDir()) - err := w.mountCommand.Start() // restic's mount is a blocking call + w.mountCommand = resticCmd("--password-file", PasswordFile(), "-r", c.Repository, "mount", c.MountDir()) + err = w.mountCommand.Start() // restic's mount is a blocking call if err != nil { return fmt.Errorf("restic mount cmd: %w", err) } return nil } +// OpenConfigFile opens the restic config file using the NON-BLOCKING "open" command. +func OpenConfigFile() error { + return exec.Command("open", ConfigFile()).Run() +} + +// OpenLogs opens the restic logfile using the NON-BLOCKING "open" command. +func OpenLogs() error { + return exec.Command("open", LogFile()).Run() +} + func openFolder(folder string) error { cmd := exec.Command("open", folder) out, err := cmd.CombinedOutput() @@ -108,11 +140,11 @@ func openFolder(folder string) error { } func (w *Wrapper) Backup(c *Config) error { - cmd := resticCmd("--json", "--password-file", c.PasswordFile(), "-r", c.Repository, "--exclude-file", c.ExcludeFile(), "backup", c.Backup) + cmd := resticCmd("--json", "--password-file", PasswordFile(), "-r", c.Repository, "--exclude-file", ExcludeFile(), "backup", c.Backup) out, err := cmd.CombinedOutput() if err != nil { return fmt.Errorf("restic backup cmd: %s: %w", string(out), err) } - log.Debug().Str("out", string(out)).Msg("backup") + log.Info().Str("out", string(out)).Msg("backup") return nil }