From 3cdf19e9b7e46c57a9bb43ff02199177feb55768 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B8rn=20Erik=20Pedersen?= Date: Mon, 24 Jul 2017 09:00:23 +0200 Subject: [PATCH] :sparkles: Implement Page bundling and image handling MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This commit is not the smallest in Hugo's history. Some hightlights include: * Page bundles (for complete articles, keeping images and content together etc.). * Bundled images can be processed in as many versions/sizes as you need with the three methods `Resize`, `Fill` and `Fit`. * Processed images are cached inside `resources/_gen/images` (default) in your project. * Symbolic links (both files and dirs) are now allowed anywhere inside /content * A new table based build summary * The "Total in nn ms" now reports the total including the handling of the files inside /static. So if it now reports more than you're used to, it is just **more real** and probably faster than before (see below). A site building benchmark run compared to `v0.31.1` shows that this should be slightly faster and use less memory: ```bash ▶ ./benchSite.sh "TOML,num_langs=.*,num_root_sections=5,num_pages=(500|1000),tags_per_page=5,shortcodes,render" benchmark old ns/op new ns/op delta BenchmarkSiteBuilding/TOML,num_langs=1,num_root_sections=5,num_pages=500,tags_per_page=5,shortcodes,render-4 101785785 78067944 -23.30% BenchmarkSiteBuilding/TOML,num_langs=1,num_root_sections=5,num_pages=1000,tags_per_page=5,shortcodes,render-4 185481057 149159919 -19.58% BenchmarkSiteBuilding/TOML,num_langs=3,num_root_sections=5,num_pages=500,tags_per_page=5,shortcodes,render-4 103149918 85679409 -16.94% BenchmarkSiteBuilding/TOML,num_langs=3,num_root_sections=5,num_pages=1000,tags_per_page=5,shortcodes,render-4 203515478 169208775 -16.86% benchmark old allocs new allocs delta BenchmarkSiteBuilding/TOML,num_langs=1,num_root_sections=5,num_pages=500,tags_per_page=5,shortcodes,render-4 532464 391539 -26.47% BenchmarkSiteBuilding/TOML,num_langs=1,num_root_sections=5,num_pages=1000,tags_per_page=5,shortcodes,render-4 1056549 772702 -26.87% BenchmarkSiteBuilding/TOML,num_langs=3,num_root_sections=5,num_pages=500,tags_per_page=5,shortcodes,render-4 555974 406630 -26.86% BenchmarkSiteBuilding/TOML,num_langs=3,num_root_sections=5,num_pages=1000,tags_per_page=5,shortcodes,render-4 1086545 789922 -27.30% benchmark old bytes new bytes delta BenchmarkSiteBuilding/TOML,num_langs=1,num_root_sections=5,num_pages=500,tags_per_page=5,shortcodes,render-4 53243246 43598155 -18.12% BenchmarkSiteBuilding/TOML,num_langs=1,num_root_sections=5,num_pages=1000,tags_per_page=5,shortcodes,render-4 105811617 86087116 -18.64% BenchmarkSiteBuilding/TOML,num_langs=3,num_root_sections=5,num_pages=500,tags_per_page=5,shortcodes,render-4 54558852 44545097 -18.35% BenchmarkSiteBuilding/TOML,num_langs=3,num_root_sections=5,num_pages=1000,tags_per_page=5,shortcodes,render-4 106903858 86978413 -18.64% ``` Fixes #3651 Closes #3158 Fixes #1014 Closes #2021 Fixes #1240 Updates #3757 --- Gopkg.lock | 119 +++- Gopkg.toml | 8 +- commands/benchmark.go | 9 +- commands/commandeer.go | 34 +- commands/convert.go | 155 +++-- commands/hugo.go | 478 ++++++++++---- commands/import_jekyll.go | 1 - commands/list.go | 48 +- commands/list_config.go | 2 +- commands/new.go | 37 +- commands/server.go | 159 +++-- commands/static_syncer.go | 16 +- commands/undraft.go | 4 +- create/content_template_handler.go | 4 +- deps/deps.go | 10 + helpers/content.go | 7 + helpers/content_test.go | 22 + helpers/general.go | 4 +- helpers/language.go | 22 +- helpers/path.go | 46 +- helpers/path_test.go | 34 - helpers/pathspec.go | 36 ++ helpers/processing_stats.go | 116 ++++ hugolib/alias.go | 2 +- hugolib/alias_test.go | 4 +- hugolib/config.go | 12 +- hugolib/datafiles_test.go | 31 +- hugolib/fileInfo.go | 109 ++++ hugolib/fileInfo_test.go | 61 ++ hugolib/handler_base.go | 65 -- hugolib/handler_file.go | 59 -- hugolib/handler_meta.go | 128 ---- hugolib/handler_page.go | 157 ----- hugolib/handler_test.go | 77 --- hugolib/hugo_sites.go | 339 ++++++---- hugolib/hugo_sites_build.go | 34 +- hugolib/hugo_sites_build_test.go | 100 ++- hugolib/hugo_sites_multihost_test.go | 5 +- hugolib/hugolib.debug | Bin 0 -> 2464730 bytes hugolib/menu_old_test.go | 654 ------------------- hugolib/page.go | 156 ++++- hugolib/page_bundler.go | 188 ++++++ hugolib/page_bundler_capture.go | 683 ++++++++++++++++++++ hugolib/page_bundler_capture_test.go | 255 ++++++++ hugolib/page_bundler_handlers.go | 346 ++++++++++ hugolib/page_bundler_test.go | 379 +++++++++++ hugolib/page_collections.go | 13 + hugolib/page_collections_test.go | 2 +- hugolib/page_output.go | 74 ++- hugolib/page_paths.go | 41 +- hugolib/page_paths_test.go | 1 - hugolib/page_resource.go | 23 + hugolib/page_test.go | 4 +- hugolib/pagination.go | 6 +- hugolib/permalinks.go | 11 +- hugolib/prune_resources.go | 84 +++ hugolib/rss_test.go | 2 +- hugolib/shortcode_test.go | 5 +- hugolib/site.go | 763 +++++++++-------------- hugolib/siteJSONEncode_test.go | 10 +- hugolib/site_render.go | 31 +- hugolib/site_sections_test.go | 5 +- hugolib/site_stats_test.go | 101 +++ hugolib/site_test.go | 203 +++--- hugolib/site_url_test.go | 7 +- hugolib/testhelpers_test.go | 18 +- i18n/translationProvider.go | 20 +- resource/image.go | 551 ++++++++++++++++ resource/image_cache.go | 112 ++++ resource/image_test.go | 134 ++++ resource/resource.go | 275 ++++++++ resource/resource_test.go | 108 ++++ resource/testdata/sunset.jpg | Bin 0 -> 90587 bytes resource/testhelpers_test.go | 78 +++ source/content_directory_test.go | 11 +- source/dirs.go | 11 +- source/file.go | 172 ----- source/fileInfo.go | 213 +++++++ source/{inmemory.go => fileInfo_test.go} | 15 +- source/file_test.go | 62 -- source/filesystem.go | 108 +--- source/filesystem_test.go | 66 +- source/lazy_file_reader.go | 170 ----- source/lazy_file_reader_test.go | 236 ------- source/sourceSpec.go | 117 ++++ 85 files changed, 5791 insertions(+), 3287 deletions(-) create mode 100644 helpers/processing_stats.go create mode 100644 hugolib/fileInfo.go create mode 100644 hugolib/fileInfo_test.go delete mode 100644 hugolib/handler_base.go delete mode 100644 hugolib/handler_file.go delete mode 100644 hugolib/handler_meta.go delete mode 100644 hugolib/handler_page.go delete mode 100644 hugolib/handler_test.go create mode 100644 hugolib/hugolib.debug delete mode 100644 hugolib/menu_old_test.go create mode 100644 hugolib/page_bundler.go create mode 100644 hugolib/page_bundler_capture.go create mode 100644 hugolib/page_bundler_capture_test.go create mode 100644 hugolib/page_bundler_handlers.go create mode 100644 hugolib/page_bundler_test.go create mode 100644 hugolib/page_resource.go create mode 100644 hugolib/prune_resources.go create mode 100644 hugolib/site_stats_test.go create mode 100644 resource/image.go create mode 100644 resource/image_cache.go create mode 100644 resource/image_test.go create mode 100644 resource/resource.go create mode 100644 resource/resource_test.go create mode 100644 resource/testdata/sunset.jpg create mode 100644 resource/testhelpers_test.go delete mode 100644 source/file.go create mode 100644 source/fileInfo.go rename source/{inmemory.go => fileInfo_test.go} (65%) delete mode 100644 source/file_test.go delete mode 100644 source/lazy_file_reader.go delete mode 100644 source/lazy_file_reader_test.go create mode 100644 source/sourceSpec.go diff --git a/Gopkg.lock b/Gopkg.lock index 4233d9278..44f957d18 100644 --- a/Gopkg.lock +++ b/Gopkg.lock @@ -21,7 +21,13 @@ [[projects]] name = "github.com/alecthomas/chroma" - packages = [".","formatters","formatters/html","lexers","styles"] + packages = [ + ".", + "formatters", + "formatters/html", + "lexers", + "styles" + ] revision = "v0.2.0" [[projects]] @@ -54,21 +60,26 @@ version = "v1.1.0" [[projects]] - branch = "master" - name = "github.com/dchest/cssmin" + name = "github.com/disintegration/imaging" packages = ["."] - revision = "fb8d9b44afdc258bfff6052d3667521babcb2239" + revision = "v1.2.4" [[projects]] name = "github.com/dlclark/regexp2" - packages = [".","syntax"] + packages = [ + ".", + "syntax" + ] revision = "487489b64fb796de2e55f4e8a4ad1e145f80e957" version = "v1.1.6" [[projects]] branch = "master" name = "github.com/eknkc/amber" - packages = [".","parser"] + packages = [ + ".", + "parser" + ] revision = "cdade1c073850f4ffc70a829e31235ea6892853b" [[projects]] @@ -104,7 +115,17 @@ [[projects]] branch = "master" name = "github.com/hashicorp/hcl" - packages = [".","hcl/ast","hcl/parser","hcl/scanner","hcl/strconv","hcl/token","json/parser","json/scanner","json/token"] + packages = [ + ".", + "hcl/ast", + "hcl/parser", + "hcl/scanner", + "hcl/strconv", + "hcl/token", + "json/parser", + "json/scanner", + "json/token" + ] revision = "23c074d0eceb2b8a5bfdbb271ab780cde70f05a8" [[projects]] @@ -115,7 +136,10 @@ [[projects]] name = "github.com/jdkato/prose" - packages = ["internal/util","transform"] + packages = [ + "internal/util", + "transform" + ] revision = "20d3663d4bc9dd10d75abcde9d92e04b4861c674" version = "v1.1.0" @@ -133,7 +157,10 @@ [[projects]] name = "github.com/magefile/mage" - packages = ["mg","sh"] + packages = [ + "mg", + "sh" + ] revision = "2f974307b636f59c13b88704cf350a4772fef271" version = "v1.0.2" @@ -149,6 +176,12 @@ packages = ["."] revision = "54ffb37507cd7d2ccd4768855e84f9ff6c4352b6" +[[projects]] + name = "github.com/mattn/go-runewidth" + packages = ["."] + revision = "9e777a8366cce605130a531d2cd6363d07ad7317" + version = "v0.0.2" + [[projects]] name = "github.com/miekg/mmark" packages = ["."] @@ -163,10 +196,20 @@ [[projects]] name = "github.com/nicksnyder/go-i18n" - packages = ["i18n/bundle","i18n/language","i18n/translation"] + packages = [ + "i18n/bundle", + "i18n/language", + "i18n/translation" + ] revision = "0dc1626d56435e9d605a29875701721c54bc9bbd" version = "v1.10.0" +[[projects]] + branch = "master" + name = "github.com/olekukonko/tablewriter" + packages = ["."] + revision = "65fec0d89a572b4367094e2058d3ebe667de3b60" + [[projects]] name = "github.com/pelletier/go-toml" packages = ["."] @@ -193,7 +236,10 @@ [[projects]] name = "github.com/spf13/afero" - packages = [".","mem"] + packages = [ + ".", + "mem" + ] revision = "8d919cbe7e2627e417f3e45c3c0e489a5b7e2536" version = "v1.0.0" @@ -206,7 +252,10 @@ [[projects]] branch = "master" name = "github.com/spf13/cobra" - packages = [".","doc"] + packages = [ + ".", + "doc" + ] revision = "7b2c5ac9fc04fc5efafb60700713d4fa609b777b" [[projects]] @@ -241,7 +290,10 @@ [[projects]] name = "github.com/stretchr/testify" - packages = ["assert","require"] + packages = [ + "assert", + "require" + ] revision = "69483b4bd14f5845b5a1e55bca19e954e827f1d0" version = "v1.1.4" @@ -254,15 +306,32 @@ [[projects]] branch = "master" name = "golang.org/x/image" - packages = ["riff","vp8","vp8l","webp"] + packages = [ + "bmp", + "riff", + "tiff", + "tiff/lzw", + "vp8", + "vp8l", + "webp" + ] revision = "f7e31b4ea2e3413ab91b4e7d2dc83e5f8d19a44c" [[projects]] branch = "master" name = "golang.org/x/net" - packages = ["idna"] + packages = [ + "context", + "idna" + ] revision = "cd69bc3fc700721b709c3a59e16e24c67b58f6ff" +[[projects]] + branch = "master" + name = "golang.org/x/sync" + packages = ["errgroup"] + revision = "fd80eb99c8f653c847d294a001bdf2a3a6f768f5" + [[projects]] branch = "master" name = "golang.org/x/sys" @@ -272,7 +341,23 @@ [[projects]] branch = "master" name = "golang.org/x/text" - packages = ["collate","collate/build","internal/colltab","internal/gen","internal/tag","internal/triegen","internal/ucd","language","secure/bidirule","transform","unicode/bidi","unicode/cldr","unicode/norm","unicode/rangetable","width"] + packages = [ + "collate", + "collate/build", + "internal/colltab", + "internal/gen", + "internal/tag", + "internal/triegen", + "internal/ucd", + "language", + "secure/bidirule", + "transform", + "unicode/bidi", + "unicode/cldr", + "unicode/norm", + "unicode/rangetable", + "width" + ] revision = "c01e4764d870b77f8abe5096ee19ad20d80e8075" [[projects]] @@ -284,6 +369,6 @@ [solve-meta] analyzer-name = "dep" analyzer-version = 1 - inputs-digest = "d75b02c8a7c7d724120447dd438e7bef140d0f4d4986adda52eabbfe3db8271a" + inputs-digest = "2d9c34c260bc26814a0635c93009daeb9d8ffa56c29c0cff6827ae2d3e9ef96d" solver-name = "gps-cdcl" solver-version = 1 diff --git a/Gopkg.toml b/Gopkg.toml index c8f192974..cef7427ce 100644 --- a/Gopkg.toml +++ b/Gopkg.toml @@ -21,8 +21,8 @@ revision = "v1.1.0" [[constraint]] - branch = "master" - name = "github.com/dchest/cssmin" + name = "github.com/disintegration/imaging" + revision = "v1.2.4" [[constraint]] name = "github.com/magefile/mage" @@ -116,6 +116,10 @@ name = "github.com/stretchr/testify" version = "1.1.4" +[[constraint]] + branch = "master" + name = "github.com/olekukonko/tablewriter" + [[constraint]] name = "github.com/yosssi/ace" version = "0.0.5" diff --git a/commands/benchmark.go b/commands/benchmark.go index 51f2be876..77790e24a 100644 --- a/commands/benchmark.go +++ b/commands/benchmark.go @@ -48,12 +48,7 @@ func init() { } func benchmark(cmd *cobra.Command, args []string) error { - cfg, err := InitializeConfig(benchmarkCmd) - if err != nil { - return err - } - - c, err := newCommandeer(cfg) + c, err := InitializeConfig(false, nil, benchmarkCmd) if err != nil { return err } @@ -84,7 +79,7 @@ func benchmark(cmd *cobra.Command, args []string) error { t := time.Now() for i := 0; i < benchmarkTimes; i++ { - if err = c.resetAndBuildSites(false); err != nil { + if err = c.resetAndBuildSites(); err != nil { return err } } diff --git a/commands/commandeer.go b/commands/commandeer.go index f538ba619..a69ce2084 100644 --- a/commands/commandeer.go +++ b/commands/commandeer.go @@ -18,6 +18,7 @@ import ( "github.com/gohugoio/hugo/deps" "github.com/gohugoio/hugo/helpers" "github.com/gohugoio/hugo/hugofs" + src "github.com/gohugoio/hugo/source" ) type commandeer struct { @@ -25,7 +26,10 @@ type commandeer struct { pathSpec *helpers.PathSpec visitedURLs *types.EvictingStringQueue + staticDirsConfig []*src.Dirs + serverPorts []int + languages helpers.Languages configured bool } @@ -44,10 +48,6 @@ func (c *commandeer) PathSpec() *helpers.PathSpec { return c.pathSpec } -func (c *commandeer) languages() helpers.Languages { - return c.Cfg.Get("languagesSorted").(helpers.Languages) -} - func (c *commandeer) initFs(fs *hugofs.Fs) error { c.DepsCfg.Fs = fs ps, err := helpers.NewPathSpec(fs, c.Cfg) @@ -55,18 +55,26 @@ func (c *commandeer) initFs(fs *hugofs.Fs) error { return err } c.pathSpec = ps + + dirsConfig, err := c.createStaticDirsConfig() + if err != nil { + return err + } + c.staticDirsConfig = dirsConfig + return nil } -func newCommandeer(cfg *deps.DepsCfg) (*commandeer, error) { - l := cfg.Language - if l == nil { - l = helpers.NewDefaultLanguage(cfg.Cfg) - } - ps, err := helpers.NewPathSpec(cfg.Fs, l) - if err != nil { - return nil, err +func newCommandeer(cfg *deps.DepsCfg, running bool) (*commandeer, error) { + cfg.Running = running + + var languages helpers.Languages + + if l, ok := cfg.Cfg.Get("languagesSorted").(helpers.Languages); ok { + languages = l } - return &commandeer{DepsCfg: cfg, pathSpec: ps, visitedURLs: types.NewEvictingStringQueue(10)}, nil + c := &commandeer{DepsCfg: cfg, languages: languages, visitedURLs: types.NewEvictingStringQueue(10)} + + return c, nil } diff --git a/commands/convert.go b/commands/convert.go index 298ff6019..f63f8522f 100644 --- a/commands/convert.go +++ b/commands/convert.go @@ -14,12 +14,15 @@ package commands import ( - "errors" "fmt" - "path/filepath" "time" + src "github.com/gohugoio/hugo/source" + "github.com/gohugoio/hugo/hugolib" + + "path/filepath" + "github.com/gohugoio/hugo/parser" "github.com/spf13/cast" "github.com/spf13/cobra" @@ -78,81 +81,103 @@ func init() { } func convertContents(mark rune) error { - cfg, err := InitializeConfig() + if outputDir == "" && !unsafe { + return newUserError("Unsafe operation not allowed, use --unsafe or set a different output path") + } + + c, err := InitializeConfig(false, nil) if err != nil { return err } - h, err := hugolib.NewHugoSites(*cfg) + h, err := hugolib.NewHugoSites(*c.DepsCfg) if err != nil { return err } + if err := h.Build(hugolib.BuildCfg{SkipRender: true}); err != nil { + return err + } + site := h.Sites[0] - if err = site.Initialise(); err != nil { - return err - } - - if site.Source == nil { - panic("site.Source not set") - } - if len(site.Source.Files()) < 1 { - return errors.New("No source files found") - } - - contentDir := site.PathSpec.AbsPathify(site.Cfg.GetString("contentDir")) - site.Log.FEEDBACK.Println("processing", len(site.Source.Files()), "content files") - for _, file := range site.Source.Files() { - site.Log.INFO.Println("Attempting to convert", file.LogicalName()) - page, err := site.NewPage(file.LogicalName()) - if err != nil { + site.Log.FEEDBACK.Println("processing", len(site.AllPages), "content files") + for _, p := range site.AllPages { + if err := convertAndSavePage(p, site, mark); err != nil { return err } - - psr, err := parser.ReadFrom(file.Contents) - if err != nil { - site.Log.ERROR.Println("Error processing file:", file.Path()) - return err - } - metadata, err := psr.Metadata() - if err != nil { - site.Log.ERROR.Println("Error processing file:", file.Path()) - return err - } - - // better handling of dates in formats that don't have support for them - if mark == parser.FormatToLeadRune("json") || mark == parser.FormatToLeadRune("yaml") || mark == parser.FormatToLeadRune("toml") { - newMetadata := cast.ToStringMap(metadata) - for k, v := range newMetadata { - switch vv := v.(type) { - case time.Time: - newMetadata[k] = vv.Format(time.RFC3339) - } - } - metadata = newMetadata - } - - page.SetDir(filepath.Join(contentDir, file.Dir())) - page.SetSourceContent(psr.Content()) - if err = page.SetSourceMetaData(metadata, mark); err != nil { - site.Log.ERROR.Printf("Failed to set source metadata for file %q: %s. For more info see For more info see https://github.com/gohugoio/hugo/issues/2458", page.FullFilePath(), err) - continue - } - - if outputDir != "" { - if err = page.SaveSourceAs(filepath.Join(outputDir, page.FullFilePath())); err != nil { - return fmt.Errorf("Failed to save file %q: %s", page.FullFilePath(), err) - } - } else { - if unsafe { - if err = page.SaveSource(); err != nil { - return fmt.Errorf("Failed to save file %q: %s", page.FullFilePath(), err) - } - } else { - site.Log.FEEDBACK.Println("Unsafe operation not allowed, use --unsafe or set a different output path") - } - } } return nil } + +func convertAndSavePage(p *hugolib.Page, site *hugolib.Site, mark rune) error { + // The resources are not in .Site.AllPages. + for _, r := range p.Resources.ByType("page") { + if err := convertAndSavePage(r.(*hugolib.Page), site, mark); err != nil { + return err + } + } + + if p.Filename() == "" { + // No content file. + return nil + } + + site.Log.INFO.Println("Attempting to convert", p.LogicalName()) + newPage, err := site.NewPage(p.LogicalName()) + if err != nil { + return err + } + + f, _ := p.File.(src.ReadableFile) + file, err := f.Open() + if err != nil { + site.Log.ERROR.Println("Error reading file:", p.Path()) + file.Close() + return nil + } + + psr, err := parser.ReadFrom(file) + if err != nil { + site.Log.ERROR.Println("Error processing file:", p.Path()) + file.Close() + return err + } + + file.Close() + + metadata, err := psr.Metadata() + if err != nil { + site.Log.ERROR.Println("Error processing file:", p.Path()) + return err + } + + // better handling of dates in formats that don't have support for them + if mark == parser.FormatToLeadRune("json") || mark == parser.FormatToLeadRune("yaml") || mark == parser.FormatToLeadRune("toml") { + newMetadata := cast.ToStringMap(metadata) + for k, v := range newMetadata { + switch vv := v.(type) { + case time.Time: + newMetadata[k] = vv.Format(time.RFC3339) + } + } + metadata = newMetadata + } + + newPage.SetSourceContent(psr.Content()) + if err = newPage.SetSourceMetaData(metadata, mark); err != nil { + site.Log.ERROR.Printf("Failed to set source metadata for file %q: %s. For more info see For more info see https://github.com/gohugoio/hugo/issues/2458", newPage.FullFilePath(), err) + return nil + } + + newFilename := p.Filename() + if outputDir != "" { + newFilename = filepath.Join(outputDir, p.Dir(), newPage.LogicalName()) + } + + if err = newPage.SaveSourceAs(newFilename); err != nil { + return fmt.Errorf("Failed to save file %q: %s", newFilename, err) + } + + return nil +} diff --git a/commands/hugo.go b/commands/hugo.go index 7b50d0bb3..200a5e1c3 100644 --- a/commands/hugo.go +++ b/commands/hugo.go @@ -18,6 +18,10 @@ package commands import ( "fmt" "io/ioutil" + "sort" + "sync/atomic" + + "golang.org/x/sync/errgroup" "github.com/gohugoio/hugo/hugofs" @@ -58,6 +62,13 @@ import ( // provide a cleaner external API, but until then, this is it. var Hugo *hugolib.HugoSites +const ( + ansiEsc = "\u001B" + clearLine = "\r\033[K" + hideCursor = ansiEsc + "[?25l" + showCursor = ansiEsc + "[?25h" +) + // Reset resets Hugo ready for a new full build. This is mainly only useful // for benchmark testing etc. via the CLI commands. func Reset() error { @@ -116,18 +127,20 @@ built with love by spf13 and friends in Go. Complete documentation is available at http://gohugo.io/.`, RunE: func(cmd *cobra.Command, args []string) error { - cfg, err := InitializeConfig() - if err != nil { - return err + + cfgInit := func(c *commandeer) error { + if buildWatch { + c.Set("disableLiveReload", true) + } + return nil } - c, err := newCommandeer(cfg) + c, err := InitializeConfig(buildWatch, cfgInit) if err != nil { return err } if buildWatch { - cfg.Cfg.Set("disableLiveReload", true) c.watchConfig() } @@ -149,6 +162,7 @@ var ( ) var ( + gc bool baseURL string cacheDir string contentDir string @@ -201,6 +215,7 @@ func AddCommands() { genCmd.AddCommand(genmanCmd) genCmd.AddCommand(createGenDocsHelper().cmd) genCmd.AddCommand(createGenChromaStyles().cmd) + } // initHugoBuilderFlags initializes all common flags, typically used by the @@ -240,6 +255,7 @@ func initHugoBuildCommonFlags(cmd *cobra.Command) { cmd.Flags().Bool("canonifyURLs", false, "if true, all relative URLs will be canonicalized using baseURL") cmd.Flags().StringVarP(&baseURL, "baseURL", "b", "", "hostname (and path) to the root, e.g. http://spf13.com/") cmd.Flags().Bool("enableGitInfo", false, "add Git revision, date and author info to the pages") + cmd.Flags().BoolVar(&gc, "gc", false, "enable to run some cleanup tasks (remove unused cache files) after the build") cmd.Flags().BoolVar(&nitro.AnalysisOn, "stepAnalysis", false, "display memory and timing of different steps of the program") cmd.Flags().Bool("templateMetrics", false, "display metrics about template executions") @@ -285,7 +301,7 @@ func init() { } // InitializeConfig initializes a config file with sensible default configuration flags. -func InitializeConfig(subCmdVs ...*cobra.Command) (*deps.DepsCfg, error) { +func InitializeConfig(running bool, doWithCommandeer func(c *commandeer) error, subCmdVs ...*cobra.Command) (*commandeer, error) { var cfg *deps.DepsCfg = &deps.DepsCfg{} @@ -294,13 +310,13 @@ func InitializeConfig(subCmdVs ...*cobra.Command) (*deps.DepsCfg, error) { config, err := hugolib.LoadConfig(osFs, source, cfgFile) if err != nil { - return cfg, err + return nil, err } // Init file systems. This may be changed at a later point. cfg.Cfg = config - c, err := newCommandeer(cfg) + c, err := newCommandeer(cfg, running) if err != nil { return nil, err } @@ -309,23 +325,29 @@ func InitializeConfig(subCmdVs ...*cobra.Command) (*deps.DepsCfg, error) { c.initializeFlags(cmdV) } + if baseURL != "" { + config.Set("baseURL", baseURL) + } + + if doWithCommandeer != nil { + if err := doWithCommandeer(c); err != nil { + return nil, err + } + } + if len(disableKinds) > 0 { c.Set("disableKinds", disableKinds) } logger, err := createLogger(cfg.Cfg) if err != nil { - return cfg, err + return nil, err } cfg.Logger = logger config.Set("logI18nWarnings", logI18nWarnings) - if baseURL != "" { - config.Set("baseURL", baseURL) - } - if !config.GetBool("relativeURLs") && config.GetString("baseURL") == "" { cfg.Logger.ERROR.Println("No 'baseURL' set in configuration or as a flag. Features like page menus will not work without one.") } @@ -350,17 +372,6 @@ func InitializeConfig(subCmdVs ...*cobra.Command) (*deps.DepsCfg, error) { } config.Set("workingDir", dir) - fs := hugofs.NewFrom(osFs, config) - - // Hugo writes the output to memory instead of the disk. - // This is only used for benchmark testing. Cause the content is only visible - // in memory. - if renderToMemory { - fs.Destination = new(afero.MemMapFs) - // Rendering to memoryFS, publish to Root regardless of publishDir. - c.Set("publishDir", "/") - } - if contentDir != "" { config.Set("contentDir", contentDir) } @@ -373,6 +384,17 @@ func InitializeConfig(subCmdVs ...*cobra.Command) (*deps.DepsCfg, error) { config.Set("cacheDir", cacheDir) } + fs := hugofs.NewFrom(osFs, config) + + // Hugo writes the output to memory instead of the disk. + // This is only used for benchmark testing. Cause the content is only visible + // in memory. + if config.GetBool("renderToMemory") { + fs.Destination = new(afero.MemMapFs) + // Rendering to memoryFS, publish to Root regardless of publishDir. + config.Set("publishDir", "/") + } + cacheDir = config.GetString("cacheDir") if cacheDir != "" { if helpers.FilePathSeparator != cacheDir[len(cacheDir)-1:] { @@ -397,7 +419,7 @@ func InitializeConfig(subCmdVs ...*cobra.Command) (*deps.DepsCfg, error) { themeDir := c.PathSpec().GetThemeDir() if themeDir != "" { if _, err := cfg.Fs.Source.Stat(themeDir); os.IsNotExist(err) { - return cfg, newSystemError("Unable to find theme Directory:", themeDir) + return nil, newSystemError("Unable to find theme Directory:", themeDir) } } @@ -408,7 +430,7 @@ func InitializeConfig(subCmdVs ...*cobra.Command) (*deps.DepsCfg, error) { helpers.CurrentHugoVersion.ReleaseVersion(), minVersion) } - return cfg, nil + return c, nil } @@ -482,17 +504,17 @@ func (c *commandeer) initializeFlags(cmd *cobra.Command) { "templateMetricsHints", } - // Remove these in Hugo 0.23. + // Remove these in Hugo 0.33. if cmd.Flags().Changed("disable404") { - helpers.Deprecated("command line", "--disable404", "Use --disableKinds=404", false) + helpers.Deprecated("command line", "--disable404", "Use --disableKinds=404", true) } if cmd.Flags().Changed("disableRSS") { - helpers.Deprecated("command line", "--disableRSS", "Use --disableKinds=RSS", false) + helpers.Deprecated("command line", "--disableRSS", "Use --disableKinds=RSS", true) } if cmd.Flags().Changed("disableSitemap") { - helpers.Deprecated("command line", "--disableSitemap", "Use --disableKinds=sitemap", false) + helpers.Deprecated("command line", "--disableSitemap", "Use --disableKinds=sitemap", true) } for _, key := range persFlagKeys { @@ -525,16 +547,71 @@ func (c *commandeer) watchConfig() { }) } +func (c *commandeer) fullBuild(watches ...bool) error { + var ( + g errgroup.Group + langCount map[string]uint64 + ) + + if !quiet { + fmt.Print(hideCursor + "Building sites … ") + defer func() { + fmt.Print(showCursor + clearLine) + }() + } + + g.Go(func() error { + cnt, err := c.copyStatic() + if err != nil { + return fmt.Errorf("Error copying static files: %s", err) + } + langCount = cnt + return nil + }) + + g.Go(func() error { + if err := c.buildSites(); err != nil { + return fmt.Errorf("Error building site: %s", err) + } + + return nil + }) + + if err := g.Wait(); err != nil { + return err + } + + for _, s := range Hugo.Sites { + s.ProcessingStats.Static = langCount[s.Language.Lang] + } + + if gc { + count, err := Hugo.GC() + if err != nil { + return err + } + for _, s := range Hugo.Sites { + // We have no way of knowing what site the garbage belonged to. + s.ProcessingStats.Cleaned = uint64(count) + } + } + + return nil + +} + func (c *commandeer) build(watches ...bool) error { - if err := c.copyStatic(); err != nil { - return fmt.Errorf("Error copying static files: %s", err) + defer c.timeTrack(time.Now(), "Total") + + if err := c.fullBuild(watches...); err != nil { + return err } - watch := false - if len(watches) > 0 && watches[0] { - watch = true - } - if err := c.buildSites(buildWatch || watch); err != nil { - return fmt.Errorf("Error building site: %s", err) + + // TODO(bep) Feedback? + if !quiet { + fmt.Println() + Hugo.PrintProcessingStats(os.Stdout) + fmt.Println() } if buildWatch { @@ -550,62 +627,101 @@ func (c *commandeer) build(watches ...bool) error { return nil } -func (c *commandeer) copyStatic() error { +func (c *commandeer) copyStatic() (map[string]uint64, error) { return c.doWithPublishDirs(c.copyStaticTo) } -func (c *commandeer) doWithPublishDirs(f func(dirs *src.Dirs, publishDir string) error) error { - publishDir := c.PathSpec().AbsPathify(c.Cfg.GetString("publishDir")) + helpers.FilePathSeparator - // If root, remove the second '/' - if publishDir == "//" { - publishDir = helpers.FilePathSeparator - } +func (c *commandeer) createStaticDirsConfig() ([]*src.Dirs, error) { + var dirsConfig []*src.Dirs - languages := c.languages() - - if !languages.IsMultihost() { + if !c.languages.IsMultihost() { dirs, err := src.NewDirs(c.Fs, c.Cfg, c.DepsCfg.Logger) if err != nil { - return err + return nil, err } - return f(dirs, publishDir) - } - - for _, l := range languages { - dir := filepath.Join(publishDir, l.Lang) - dirs, err := src.NewDirs(c.Fs, l, c.DepsCfg.Logger) - if err != nil { - return err - } - if err := f(dirs, dir); err != nil { - return err + dirsConfig = append(dirsConfig, dirs) + } else { + for _, l := range c.languages { + dirs, err := src.NewDirs(c.Fs, l, c.DepsCfg.Logger) + if err != nil { + return nil, err + } + dirsConfig = append(dirsConfig, dirs) } } - return nil + return dirsConfig, nil + } -func (c *commandeer) copyStaticTo(dirs *src.Dirs, publishDir string) error { +func (c *commandeer) doWithPublishDirs(f func(dirs *src.Dirs, publishDir string) (uint64, error)) (map[string]uint64, error) { + + langCount := make(map[string]uint64) + + for _, dirs := range c.staticDirsConfig { + + cnt, err := f(dirs, c.pathSpec.PublishDir) + if err != nil { + return langCount, err + } + + if dirs.Language == nil { + // Not multihost + for _, l := range c.languages { + langCount[l.Lang] = cnt + } + } else { + langCount[dirs.Language.Lang] = cnt + } + + } + + return langCount, nil +} + +type countingStatFs struct { + afero.Fs + statCounter uint64 +} + +func (fs *countingStatFs) Stat(name string) (os.FileInfo, error) { + f, err := fs.Fs.Stat(name) + if err == nil { + if !f.IsDir() { + atomic.AddUint64(&fs.statCounter, 1) + } + } + return f, err +} + +func (c *commandeer) copyStaticTo(dirs *src.Dirs, publishDir string) (uint64, error) { // If root, remove the second '/' if publishDir == "//" { publishDir = helpers.FilePathSeparator } + if dirs.Language != nil { + // Multihost setup. + publishDir = filepath.Join(publishDir, dirs.Language.Lang) + } + staticSourceFs, err := dirs.CreateStaticFs() if err != nil { - return err + return 0, err } if staticSourceFs == nil { c.Logger.WARN.Println("No static directories found to sync") - return nil + return 0, nil } + fs := &countingStatFs{Fs: staticSourceFs} + syncer := fsync.NewSyncer() syncer.NoTimes = c.Cfg.GetBool("noTimes") syncer.NoChmod = c.Cfg.GetBool("noChmod") - syncer.SrcFs = staticSourceFs + syncer.SrcFs = fs syncer.DestFs = c.Fs.Destination // Now that we are using a unionFs for the static directories // We can effectively clean the publishDir on initial sync @@ -622,12 +738,30 @@ func (c *commandeer) copyStaticTo(dirs *src.Dirs, publishDir string) error { // because we are using a baseFs (to get the union right). // set sync src to root - return syncer.Sync(publishDir, helpers.FilePathSeparator) + err = syncer.Sync(publishDir, helpers.FilePathSeparator) + if err != nil { + return 0, err + } + + // Sync runs Stat 3 times for every source file (which sounds much) + numFiles := fs.statCounter / 3 + + return numFiles, err +} + +func (c *commandeer) timeTrack(start time.Time, name string) { + elapsed := time.Since(start) + c.Logger.FEEDBACK.Printf("%s in %v ms", name, int(1000*elapsed.Seconds())) } // getDirList provides NewWatcher() with a list of directories to watch for changes. func (c *commandeer) getDirList() ([]string, error) { var a []string + + // To handle nested symlinked content dirs + var seen = make(map[string]bool) + var nested []string + dataDir := c.PathSpec().AbsPathify(c.Cfg.GetString("dataDir")) i18nDir := c.PathSpec().AbsPathify(c.Cfg.GetString("i18nDir")) staticSyncer, err := newStaticSyncer(c) @@ -638,86 +772,121 @@ func (c *commandeer) getDirList() ([]string, error) { layoutDir := c.PathSpec().GetLayoutDirPath() staticDirs := staticSyncer.d.AbsStaticDirs - walker := func(path string, fi os.FileInfo, err error) error { - if err != nil { - if path == dataDir && os.IsNotExist(err) { - c.Logger.WARN.Println("Skip dataDir:", err) - return nil - } - - if path == i18nDir && os.IsNotExist(err) { - c.Logger.WARN.Println("Skip i18nDir:", err) - return nil - } - - if path == layoutDir && os.IsNotExist(err) { - c.Logger.WARN.Println("Skip layoutDir:", err) - return nil - } - - if os.IsNotExist(err) { - for _, staticDir := range staticDirs { - if path == staticDir && os.IsNotExist(err) { - c.Logger.WARN.Println("Skip staticDir:", err) - } + newWalker := func(allowSymbolicDirs bool) func(path string, fi os.FileInfo, err error) error { + return func(path string, fi os.FileInfo, err error) error { + if err != nil { + if path == dataDir && os.IsNotExist(err) { + c.Logger.WARN.Println("Skip dataDir:", err) + return nil } - // Ignore. + + if path == i18nDir && os.IsNotExist(err) { + c.Logger.WARN.Println("Skip i18nDir:", err) + return nil + } + + if path == layoutDir && os.IsNotExist(err) { + c.Logger.WARN.Println("Skip layoutDir:", err) + return nil + } + + if os.IsNotExist(err) { + for _, staticDir := range staticDirs { + if path == staticDir && os.IsNotExist(err) { + c.Logger.WARN.Println("Skip staticDir:", err) + } + } + // Ignore. + return nil + } + + c.Logger.ERROR.Println("Walker: ", err) return nil } - c.Logger.ERROR.Println("Walker: ", err) - return nil - } - - // Skip .git directories. - // Related to https://github.com/gohugoio/hugo/issues/3468. - if fi.Name() == ".git" { - return nil - } - - if fi.Mode()&os.ModeSymlink == os.ModeSymlink { - link, err := filepath.EvalSymlinks(path) - if err != nil { - c.Logger.ERROR.Printf("Cannot read symbolic link '%s', error was: %s", path, err) + // Skip .git directories. + // Related to https://github.com/gohugoio/hugo/issues/3468. + if fi.Name() == ".git" { return nil } - linkfi, err := c.Fs.Source.Stat(link) - if err != nil { - c.Logger.ERROR.Printf("Cannot stat '%s', error was: %s", link, err) - return nil + + if fi.Mode()&os.ModeSymlink == os.ModeSymlink { + link, err := filepath.EvalSymlinks(path) + if err != nil { + c.Logger.ERROR.Printf("Cannot read symbolic link '%s', error was: %s", path, err) + return nil + } + linkfi, err := helpers.LstatIfOs(c.Fs.Source, link) + if err != nil { + c.Logger.ERROR.Printf("Cannot stat %q: %s", link, err) + return nil + } + if !allowSymbolicDirs && !linkfi.Mode().IsRegular() { + c.Logger.ERROR.Printf("Symbolic links for directories not supported, skipping %q", path) + return nil + } + + if allowSymbolicDirs && linkfi.IsDir() { + // afero.Walk will not walk symbolic links, so wee need to do it. + if !seen[path] { + seen[path] = true + nested = append(nested, path) + } + return nil + } + + fi = linkfi } - if !linkfi.Mode().IsRegular() { - c.Logger.ERROR.Printf("Symbolic links for directories not supported, skipping '%s'", path) + + if fi.IsDir() { + if fi.Name() == ".git" || + fi.Name() == "node_modules" || fi.Name() == "bower_components" { + return filepath.SkipDir + } + a = append(a, path) } return nil } - - if fi.IsDir() { - if fi.Name() == ".git" || - fi.Name() == "node_modules" || fi.Name() == "bower_components" { - return filepath.SkipDir - } - a = append(a, path) - } - return nil } + symLinkWalker := newWalker(true) + regularWalker := newWalker(false) + // SymbolicWalk will log anny ERRORs - _ = helpers.SymbolicWalk(c.Fs.Source, dataDir, walker) - _ = helpers.SymbolicWalk(c.Fs.Source, c.PathSpec().AbsPathify(c.Cfg.GetString("contentDir")), walker) - _ = helpers.SymbolicWalk(c.Fs.Source, i18nDir, walker) - _ = helpers.SymbolicWalk(c.Fs.Source, layoutDir, walker) + _ = helpers.SymbolicWalk(c.Fs.Source, dataDir, regularWalker) + _ = helpers.SymbolicWalk(c.Fs.Source, c.PathSpec().AbsPathify(c.Cfg.GetString("contentDir")), symLinkWalker) + _ = helpers.SymbolicWalk(c.Fs.Source, i18nDir, regularWalker) + _ = helpers.SymbolicWalk(c.Fs.Source, layoutDir, regularWalker) for _, staticDir := range staticDirs { - _ = helpers.SymbolicWalk(c.Fs.Source, staticDir, walker) + _ = helpers.SymbolicWalk(c.Fs.Source, staticDir, regularWalker) } if c.PathSpec().ThemeSet() { themesDir := c.PathSpec().GetThemeDir() - _ = helpers.SymbolicWalk(c.Fs.Source, filepath.Join(themesDir, "layouts"), walker) - _ = helpers.SymbolicWalk(c.Fs.Source, filepath.Join(themesDir, "i18n"), walker) - _ = helpers.SymbolicWalk(c.Fs.Source, filepath.Join(themesDir, "data"), walker) + _ = helpers.SymbolicWalk(c.Fs.Source, filepath.Join(themesDir, "layouts"), regularWalker) + _ = helpers.SymbolicWalk(c.Fs.Source, filepath.Join(themesDir, "i18n"), regularWalker) + _ = helpers.SymbolicWalk(c.Fs.Source, filepath.Join(themesDir, "data"), regularWalker) } + if len(nested) > 0 { + for { + + toWalk := nested + nested = nested[:0] + + for _, d := range toWalk { + _ = helpers.SymbolicWalk(c.Fs.Source, d, symLinkWalker) + } + + if len(nested) == 0 { + break + } + } + } + + a = helpers.UniqueStrings(a) + sort.Strings(a) + return a, nil } @@ -728,17 +897,17 @@ func (c *commandeer) recreateAndBuildSites(watching bool) (err error) { if !quiet { c.Logger.FEEDBACK.Println("Started building sites ...") } - return Hugo.Build(hugolib.BuildCfg{CreateSitesFromConfig: true, Watching: watching, PrintStats: !quiet}) + return Hugo.Build(hugolib.BuildCfg{CreateSitesFromConfig: true}) } -func (c *commandeer) resetAndBuildSites(watching bool) (err error) { +func (c *commandeer) resetAndBuildSites() (err error) { if err = c.initSites(); err != nil { return } if !quiet { c.Logger.FEEDBACK.Println("Started building sites ...") } - return Hugo.Build(hugolib.BuildCfg{ResetState: true, Watching: watching, PrintStats: !quiet}) + return Hugo.Build(hugolib.BuildCfg{ResetState: true}) } func (c *commandeer) initSites() error { @@ -755,17 +924,16 @@ func (c *commandeer) initSites() error { return nil } -func (c *commandeer) buildSites(watching bool) (err error) { +func (c *commandeer) buildSites() (err error) { if err := c.initSites(); err != nil { return err } - if !quiet { - c.Logger.FEEDBACK.Println("Started building sites ...") - } - return Hugo.Build(hugolib.BuildCfg{Watching: watching, PrintStats: !quiet}) + return Hugo.Build(hugolib.BuildCfg{}) } func (c *commandeer) rebuildSites(events []fsnotify.Event) error { + defer c.timeTrack(time.Now(), "Total") + if err := c.initSites(); err != nil { return err } @@ -776,7 +944,7 @@ func (c *commandeer) rebuildSites(events []fsnotify.Event) error { // Make sure we always render the home page visited[home] = true } - return Hugo.Build(hugolib.BuildCfg{PrintStats: !quiet, Watching: true, RecentlyVisited: visited}, events...) + return Hugo.Build(hugolib.BuildCfg{RecentlyVisited: visited}, events...) } // newWatcher creates a new watcher to watch filesystem events. @@ -818,6 +986,37 @@ func (c *commandeer) newWatcher(serve bool, dirList ...string) error { staticEvents := []fsnotify.Event{} dynamicEvents := []fsnotify.Event{} + // Special handling for symbolic links inside /content. + filtered := []fsnotify.Event{} + for _, ev := range evs { + // Check the most specific first, i.e. files. + contentMapped := Hugo.ContentChanges.GetSymbolicLinkMappings(ev.Name) + if len(contentMapped) > 0 { + for _, mapped := range contentMapped { + filtered = append(filtered, fsnotify.Event{Name: mapped, Op: ev.Op}) + } + continue + } + + // Check for any symbolic directory mapping. + + dir, name := filepath.Split(ev.Name) + + contentMapped = Hugo.ContentChanges.GetSymbolicLinkMappings(dir) + + if len(contentMapped) == 0 { + filtered = append(filtered, ev) + continue + } + + for _, mapped := range contentMapped { + mappedFilename := filepath.Join(mapped, name) + filtered = append(filtered, fsnotify.Event{Name: mappedFilename, Op: ev.Op}) + } + } + + evs = filtered + for _, ev := range evs { ext := filepath.Ext(ev.Name) baseName := filepath.Base(ev.Name) @@ -894,7 +1093,7 @@ func (c *commandeer) newWatcher(serve bool, dirList ...string) error { if c.Cfg.GetBool("forceSyncStatic") { c.Logger.FEEDBACK.Printf("Syncing all static files\n") - err := c.copyStatic() + _, err := c.copyStatic() if err != nil { utils.StopOnErr(c.Logger, err, "Error copying static files to publish dir") } @@ -932,8 +1131,9 @@ func (c *commandeer) newWatcher(serve bool, dirList ...string) error { } } + c.Logger.FEEDBACK.Println("\nChange detected, rebuilding site") - const layout = "2006-01-02 15:04 -0700" + const layout = "2006-01-02 15:04:05.000 -0700" c.Logger.FEEDBACK.Println(time.Now().Format(layout)) if err := c.rebuildSites(dynamicEvents); err != nil { @@ -950,6 +1150,7 @@ func (c *commandeer) newWatcher(serve bool, dirList ...string) error { if onePageName != "" { p = Hugo.GetContentPage(onePageName) } + } if p != nil { @@ -978,6 +1179,9 @@ func (c *commandeer) newWatcher(serve bool, dirList ...string) error { func pickOneWriteOrCreatePath(events []fsnotify.Event) string { name := "" + // Some editors (for example notepad.exe on Windows) triggers a change + // both for directory and file. So we pick the longest path, which should + // be the file itself. for _, ev := range events { if (ev.Op&fsnotify.Write == fsnotify.Write || ev.Op&fsnotify.Create == fsnotify.Create) && len(ev.Name) > len(name) { name = ev.Name diff --git a/commands/import_jekyll.go b/commands/import_jekyll.go index 3d89fee0d..98094dbb7 100644 --- a/commands/import_jekyll.go +++ b/commands/import_jekyll.go @@ -468,7 +468,6 @@ func convertJekyllPost(s *hugolib.Site, path, relPath, targetDir string, draft b return err } - page.SetDir(targetParentDir) page.SetSourceContent([]byte(content)) page.SetSourceMetaData(newmetadata, parser.FormatToLeadRune("yaml")) page.SaveSourceAs(targetFile) diff --git a/commands/list.go b/commands/list.go index b2a6b5395..b391f204e 100644 --- a/commands/list.go +++ b/commands/list.go @@ -43,20 +43,16 @@ var listDraftsCmd = &cobra.Command{ Short: "List all drafts", Long: `List all of the drafts in your content directory.`, RunE: func(cmd *cobra.Command, args []string) error { - - cfg, err := InitializeConfig() + cfgInit := func(c *commandeer) error { + c.Set("buildDrafts", true) + return nil + } + c, err := InitializeConfig(false, cfgInit) if err != nil { return err } - c, err := newCommandeer(cfg) - if err != nil { - return err - } - - c.Set("buildDrafts", true) - - sites, err := hugolib.NewHugoSites(*cfg) + sites, err := hugolib.NewHugoSites(*c.DepsCfg) if err != nil { return newSystemError("Error creating sites", err) @@ -84,20 +80,16 @@ var listFutureCmd = &cobra.Command{ Long: `List all of the posts in your content directory which will be posted in the future.`, RunE: func(cmd *cobra.Command, args []string) error { - - cfg, err := InitializeConfig() + cfgInit := func(c *commandeer) error { + c.Set("buildFuture", true) + return nil + } + c, err := InitializeConfig(false, cfgInit) if err != nil { return err } - c, err := newCommandeer(cfg) - if err != nil { - return err - } - - c.Set("buildFuture", true) - - sites, err := hugolib.NewHugoSites(*cfg) + sites, err := hugolib.NewHugoSites(*c.DepsCfg) if err != nil { return newSystemError("Error creating sites", err) @@ -125,20 +117,16 @@ var listExpiredCmd = &cobra.Command{ Long: `List all of the posts in your content directory which has already expired.`, RunE: func(cmd *cobra.Command, args []string) error { - - cfg, err := InitializeConfig() + cfgInit := func(c *commandeer) error { + c.Set("buildExpired", true) + return nil + } + c, err := InitializeConfig(false, cfgInit) if err != nil { return err } - c, err := newCommandeer(cfg) - if err != nil { - return err - } - - c.Set("buildExpired", true) - - sites, err := hugolib.NewHugoSites(*cfg) + sites, err := hugolib.NewHugoSites(*c.DepsCfg) if err != nil { return newSystemError("Error creating sites", err) diff --git a/commands/list_config.go b/commands/list_config.go index f47f6e144..031bff73f 100644 --- a/commands/list_config.go +++ b/commands/list_config.go @@ -33,7 +33,7 @@ func init() { } func printConfig(cmd *cobra.Command, args []string) error { - cfg, err := InitializeConfig(configCmd) + cfg, err := InitializeConfig(false, nil, configCmd) if err != nil { return err diff --git a/commands/new.go b/commands/new.go index b30c49aa2..974bb4ae3 100644 --- a/commands/new.go +++ b/commands/new.go @@ -86,21 +86,19 @@ as you see fit.`, // NewContent adds new content to a Hugo site. func NewContent(cmd *cobra.Command, args []string) error { - cfg, err := InitializeConfig() + cfgInit := func(c *commandeer) error { + if cmd.Flags().Changed("editor") { + c.Set("newContentEditor", contentEditor) + } + return nil + } + + c, err := InitializeConfig(false, cfgInit) if err != nil { return err } - c, err := newCommandeer(cfg) - if err != nil { - return err - } - - if cmd.Flags().Changed("editor") { - c.Set("newContentEditor", contentEditor) - } - if len(args) < 1 { return newUserError("path needs to be provided") } @@ -115,6 +113,8 @@ func NewContent(cmd *cobra.Command, args []string) error { kind = contentType } + cfg := c.DepsCfg + ps, err := helpers.NewPathSpec(cfg.Fs, cfg.Cfg) if err != nil { return err @@ -130,7 +130,7 @@ func NewContent(cmd *cobra.Command, args []string) error { return nil, err } - if err := Hugo.Build(hugolib.BuildCfg{SkipRender: true, PrintStats: false}); err != nil { + if err := Hugo.Build(hugolib.BuildCfg{SkipRender: true}); err != nil { return nil, err } @@ -240,7 +240,7 @@ func NewSite(cmd *cobra.Command, args []string) error { // NewTheme creates a new Hugo theme. func NewTheme(cmd *cobra.Command, args []string) error { - cfg, err := InitializeConfig() + c, err := InitializeConfig(false, nil) if err != nil { return err @@ -250,14 +250,11 @@ func NewTheme(cmd *cobra.Command, args []string) error { return newUserError("theme name needs to be provided") } - c, err := newCommandeer(cfg) - if err != nil { - return err - } - createpath := c.PathSpec().AbsPathify(filepath.Join(c.Cfg.GetString("themesDir"), args[0])) jww.INFO.Println("creating theme at", createpath) + cfg := c.DepsCfg + if x, _ := helpers.Exists(createpath, cfg.Fs.Source); x { return newUserError(createpath, "already exists") } @@ -375,7 +372,11 @@ func newContentPathSection(path string) (string, string) { var section string // assume the first directory is the section (kind) if strings.Contains(createpath[1:], helpers.FilePathSeparator) { - section = helpers.GuessSection(createpath) + parts := strings.Split(strings.TrimPrefix(createpath, helpers.FilePathSeparator), helpers.FilePathSeparator) + if len(parts) > 0 { + section = parts[0] + } + } return createpath, section diff --git a/commands/server.go b/commands/server.go index e1cc56749..21137619d 100644 --- a/commands/server.go +++ b/commands/server.go @@ -110,109 +110,94 @@ func init() { } func server(cmd *cobra.Command, args []string) error { - cfg, err := InitializeConfig(serverCmd) - if err != nil { - return err + // If a Destination is provided via flag write to disk + if destination != "" { + renderToDisk = true } - c, err := newCommandeer(cfg) - if err != nil { - return err - } - - if cmd.Flags().Changed("disableLiveReload") { - c.Set("disableLiveReload", disableLiveReload) - } - - if cmd.Flags().Changed("navigateToChanged") { - c.Set("navigateToChanged", navigateToChanged) - } - - if cmd.Flags().Changed("disableFastRender") { - c.Set("disableFastRender", disableFastRender) - } - - if serverWatch { - c.Set("watch", true) - } - - if c.Cfg.GetBool("watch") { - serverWatch = true - c.watchConfig() - } - - languages := c.languages() - serverPorts := make([]int, 1) - - if languages.IsMultihost() { - if !serverAppend { - return newSystemError("--appendPort=false not supported when in multihost mode") + cfgInit := func(c *commandeer) error { + c.Set("renderToMemory", !renderToDisk) + if cmd.Flags().Changed("navigateToChanged") { + c.Set("navigateToChanged", navigateToChanged) + } + if cmd.Flags().Changed("disableLiveReload") { + c.Set("disableLiveReload", disableLiveReload) + } + if cmd.Flags().Changed("disableFastRender") { + c.Set("disableFastRender", disableFastRender) + } + if serverWatch { + c.Set("watch", true) } - serverPorts = make([]int, len(languages)) - } - currentServerPort := serverPort + serverPorts := make([]int, 1) - for i := 0; i < len(serverPorts); i++ { - l, err := net.Listen("tcp", net.JoinHostPort(serverInterface, strconv.Itoa(currentServerPort))) - if err == nil { - l.Close() - serverPorts[i] = currentServerPort + if c.languages.IsMultihost() { + if !serverAppend { + return newSystemError("--appendPort=false not supported when in multihost mode") + } + serverPorts = make([]int, len(c.languages)) + } + + currentServerPort := serverPort + + for i := 0; i < len(serverPorts); i++ { + l, err := net.Listen("tcp", net.JoinHostPort(serverInterface, strconv.Itoa(currentServerPort))) + if err == nil { + l.Close() + serverPorts[i] = currentServerPort + } else { + if i == 0 && serverCmd.Flags().Changed("port") { + // port set explicitly by user -- he/she probably meant it! + return newSystemErrorF("Server startup failed: %s", err) + } + jww.ERROR.Println("port", serverPort, "already in use, attempting to use an available port") + sp, err := helpers.FindAvailablePort() + if err != nil { + return newSystemError("Unable to find alternative port to use:", err) + } + serverPorts[i] = sp.Port + } + + currentServerPort = serverPorts[i] + 1 + } + + c.serverPorts = serverPorts + + c.Set("port", serverPort) + if liveReloadPort != -1 { + c.Set("liveReloadPort", liveReloadPort) } else { - if i == 0 && serverCmd.Flags().Changed("port") { - // port set explicitly by user -- he/she probably meant it! - return newSystemErrorF("Server startup failed: %s", err) - } - jww.ERROR.Println("port", serverPort, "already in use, attempting to use an available port") - sp, err := helpers.FindAvailablePort() - if err != nil { - return newSystemError("Unable to find alternative port to use:", err) - } - serverPorts[i] = sp.Port + c.Set("liveReloadPort", serverPorts[0]) } - currentServerPort = serverPorts[i] + 1 - } - - c.serverPorts = serverPorts - - c.Set("port", serverPort) - if liveReloadPort != -1 { - c.Set("liveReloadPort", liveReloadPort) - } else { - c.Set("liveReloadPort", serverPorts[0]) - } - - if languages.IsMultihost() { - for i, language := range languages { - baseURL, err = fixURL(language, baseURL, serverPorts[i]) + if c.languages.IsMultihost() { + for i, language := range c.languages { + baseURL, err := fixURL(language, baseURL, serverPorts[i]) + if err != nil { + return err + } + language.Set("baseURL", baseURL) + } + } else { + baseURL, err := fixURL(c.Cfg, baseURL, serverPorts[0]) if err != nil { return err } - language.Set("baseURL", baseURL) + c.Set("baseURL", baseURL) } - } else { - baseURL, err = fixURL(c.Cfg, baseURL, serverPorts[0]) - if err != nil { - return err - } - c.Set("baseURL", baseURL) + + return nil + } if err := memStats(); err != nil { jww.ERROR.Println("memstats error:", err) } - // If a Destination is provided via flag write to disk - if destination != "" { - renderToDisk = true - } - - // Hugo writes the output to memory instead of the disk - if !renderToDisk { - cfg.Fs.Destination = new(afero.MemMapFs) - // Rendering to memoryFS, publish to Root regardless of publishDir. - c.Set("publishDir", "/") + c, err := InitializeConfig(true, cfgInit, serverCmd) + if err != nil { + return err } if err := c.build(serverWatch); err != nil { @@ -223,6 +208,10 @@ func server(cmd *cobra.Command, args []string) error { s.RegisterMediaTypes() } + if serverWatch { + c.watchConfig() + } + // Watch runs its own server as part of the routine if serverWatch { diff --git a/commands/static_syncer.go b/commands/static_syncer.go index 98b745e4c..a04904f95 100644 --- a/commands/static_syncer.go +++ b/commands/static_syncer.go @@ -44,15 +44,20 @@ func (s *staticSyncer) isStatic(path string) bool { func (s *staticSyncer) syncsStaticEvents(staticEvents []fsnotify.Event) error { c := s.c - syncFn := func(dirs *src.Dirs, publishDir string) error { + syncFn := func(dirs *src.Dirs, publishDir string) (uint64, error) { staticSourceFs, err := dirs.CreateStaticFs() if err != nil { - return err + return 0, err + } + + if dirs.Language != nil { + // Multihost setup + publishDir = filepath.Join(publishDir, dirs.Language.Lang) } if staticSourceFs == nil { c.Logger.WARN.Println("No static directories found to sync") - return nil + return 0, nil } syncer := fsync.NewSyncer() @@ -127,9 +132,10 @@ func (s *staticSyncer) syncsStaticEvents(staticEvents []fsnotify.Event) error { } } - return nil + return 0, nil } - return c.doWithPublishDirs(syncFn) + _, err := c.doWithPublishDirs(syncFn) + return err } diff --git a/commands/undraft.go b/commands/undraft.go index 8d4bffb93..fbd2d4c3a 100644 --- a/commands/undraft.go +++ b/commands/undraft.go @@ -36,7 +36,7 @@ If the content's draft status is 'False', nothing is done.`, // to false and setting its publish date to now. If the specified content is // not a draft, it will log an error. func Undraft(cmd *cobra.Command, args []string) error { - cfg, err := InitializeConfig() + c, err := InitializeConfig(false, nil) if err != nil { return err @@ -46,6 +46,8 @@ func Undraft(cmd *cobra.Command, args []string) error { return newUserError("a piece of content needs to be specified") } + cfg := c.DepsCfg + location := args[0] // open the file f, err := cfg.Fs.Source.Open(location) diff --git a/create/content_template_handler.go b/create/content_template_handler.go index d73c52a24..0a444abf6 100644 --- a/create/content_template_handler.go +++ b/create/content_template_handler.go @@ -45,7 +45,7 @@ type ArchetypeFileData struct { // The target content file. Note that the .Content will be empty, as that // has not been created yet. - *source.File + source.File } const ( @@ -82,7 +82,7 @@ func executeArcheTypeAsTemplate(s *hugolib.Site, kind, targetPath, archetypeFile ) sp := source.NewSourceSpec(s.Deps.Cfg, s.Deps.Fs) - f := sp.NewFile(targetPath) + f := sp.NewFileInfo("", targetPath, nil) data := ArchetypeFileData{ Type: kind, diff --git a/deps/deps.go b/deps/deps.go index a7d77b5b1..ac89d6cd6 100644 --- a/deps/deps.go +++ b/deps/deps.go @@ -10,6 +10,7 @@ import ( "github.com/gohugoio/hugo/hugofs" "github.com/gohugoio/hugo/metrics" "github.com/gohugoio/hugo/output" + "github.com/gohugoio/hugo/source" "github.com/gohugoio/hugo/tpl" jww "github.com/spf13/jwalterweatherman" ) @@ -33,6 +34,9 @@ type Deps struct { // The ContentSpec to use *helpers.ContentSpec `json:"-"` + // The SourceSpec to use + SourceSpec *source.SourceSpec `json:"-"` + // The configuration to use Cfg config.Provider `json:"-"` @@ -122,6 +126,8 @@ func New(cfg DepsCfg) (*Deps, error) { return nil, err } + sp := source.NewSourceSpec(cfg.Language, fs) + d := &Deps{ Fs: fs, Log: logger, @@ -130,6 +136,7 @@ func New(cfg DepsCfg) (*Deps, error) { WithTemplate: cfg.WithTemplate, PathSpec: ps, ContentSpec: contentSpec, + SourceSpec: sp, Cfg: cfg.Language, Language: cfg.Language, } @@ -194,4 +201,7 @@ type DepsCfg struct { // i18n handling. TranslationProvider ResourceProvider + + // Whether we are in running (server) mode + Running bool } diff --git a/helpers/content.go b/helpers/content.go index ca93d7d9e..f2cfc9b0f 100644 --- a/helpers/content.go +++ b/helpers/content.go @@ -47,6 +47,10 @@ type ContentSpec struct { // SummaryLength is the length of the summary that Hugo extracts from a content. summaryLength int + BuildFuture bool + BuildExpired bool + BuildDrafts bool + Highlight func(code, lang, optsStr string) (string, error) defatultPygmentsOpts map[string]string @@ -62,6 +66,9 @@ func NewContentSpec(cfg config.Provider) (*ContentSpec, error) { footnoteAnchorPrefix: cfg.GetString("footnoteAnchorPrefix"), footnoteReturnLinkContents: cfg.GetString("footnoteReturnLinkContents"), summaryLength: cfg.GetInt("summaryLength"), + BuildFuture: cfg.GetBool("buildFuture"), + BuildExpired: cfg.GetBool("buildExpired"), + BuildDrafts: cfg.GetBool("buildDrafts"), cfg: cfg, } diff --git a/helpers/content_test.go b/helpers/content_test.go index c10ad881b..2f8884c55 100644 --- a/helpers/content_test.go +++ b/helpers/content_test.go @@ -19,9 +19,12 @@ import ( "strings" "testing" + "github.com/spf13/viper" + "github.com/miekg/mmark" "github.com/russross/blackfriday" "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" ) const tstHTMLContent = "
content foobar. Follow up

This is some text.
And some more.

" @@ -73,6 +76,25 @@ func TestBytesToHTML(t *testing.T) { assert.Equal(t, template.HTML("dobedobedo"), BytesToHTML([]byte("dobedobedo"))) } +func TestNewContentSpec(t *testing.T) { + cfg := viper.New() + assert := require.New(t) + + cfg.Set("summaryLength", 32) + cfg.Set("buildFuture", true) + cfg.Set("buildExpired", true) + cfg.Set("buildDrafts", true) + + spec, err := NewContentSpec(cfg) + + assert.NoError(err) + assert.Equal(32, spec.summaryLength) + assert.True(spec.BuildFuture) + assert.True(spec.BuildExpired) + assert.True(spec.BuildDrafts) + +} + var benchmarkTruncateString = strings.Repeat("This is a sentence about nothing.", 20) func BenchmarkTestTruncateWordsToWholeSentence(b *testing.B) { diff --git a/helpers/general.go b/helpers/general.go index 4517a3232..4bb4eb584 100644 --- a/helpers/general.go +++ b/helpers/general.go @@ -365,8 +365,8 @@ func SliceToLower(s []string) []string { return l } -// Md5String takes a string and returns its MD5 hash. -func Md5String(f string) string { +// MD5String takes a string and returns its MD5 hash. +func MD5String(f string) string { h := md5.New() h.Write([]byte(f)) return hex.EncodeToString(h.Sum([]byte{})) diff --git a/helpers/language.go b/helpers/language.go index d9f3f69ed..3cb388abb 100644 --- a/helpers/language.go +++ b/helpers/language.go @@ -53,7 +53,16 @@ func (l *Language) String() string { // NewLanguage creates a new language. func NewLanguage(lang string, cfg config.Provider) *Language { - return &Language{Lang: lang, Cfg: cfg, params: make(map[string]interface{})} + params := make(map[string]interface{}) + // Merge with global config. + globalParams := cfg.GetStringMap("params") + for k, v := range globalParams { + if _, ok := params[k]; !ok { + params[k] = v + } + } + l := &Language{Lang: lang, Cfg: cfg, params: params} + return l } // NewDefaultLanguage creates the default language for a config.Provider. @@ -88,17 +97,6 @@ func (l Languages) Swap(i, j int) { l[i], l[j] = l[j], l[i] } // Params retunrs language-specific params merged with the global params. func (l *Language) Params() map[string]interface{} { - l.paramsInit.Do(func() { - // Merge with global config. - // TODO(bep) consider making this part of a constructor func. - - globalParams := l.Cfg.GetStringMap("params") - for k, v := range globalParams { - if _, ok := l.params[k]; !ok { - l.params[k] = v - } - } - }) return l.params } diff --git a/helpers/path.go b/helpers/path.go index 57f02da68..44d53d018 100644 --- a/helpers/path.go +++ b/helpers/path.go @@ -277,6 +277,12 @@ func Ext(in string) string { return ext } +// FileAndExt takes a path and returns the file and extension separated, +// the extension including the delmiter, i.e. ".md". +func FileAndExt(in string) (string, string) { + return fileAndExt(in, fpb) +} + // Filename takes a path, strips out the extension, // and returns the name of the file. func Filename(in string) (name string) { @@ -348,40 +354,6 @@ func GetRelativePath(path, base string) (final string, err error) { return name, nil } -// GuessSection returns the section given a source path. -// A section is the part between the root slash and the second slash -// or before the first slash. -func GuessSection(in string) string { - parts := strings.Split(in, FilePathSeparator) - // This will include an empty entry before and after paths with leading and trailing slashes - // eg... /sect/one/ -> ["", "sect", "one", ""] - - // Needs to have at least a value and a slash - if len(parts) < 2 { - return "" - } - - // If it doesn't have a leading slash and value and file or trailing slash, then return "" - if parts[0] == "" && len(parts) < 3 { - return "" - } - - // strip leading slash - if parts[0] == "" { - parts = parts[1:] - } - - // if first directory is "content", return second directory - if parts[0] == "content" { - if len(parts) > 2 { - return parts[1] - } - return "" - } - - return parts[0] -} - // PathPrep prepares the path using the uglify setting to create paths on // either the form /section/name/index.html or /section/name.html. func PathPrep(ugly bool, in string) string { @@ -504,7 +476,7 @@ func SymbolicWalk(fs afero.Fs, root string, walker filepath.WalkFunc) error { } func getRealFileInfo(fs afero.Fs, path string) (os.FileInfo, string, error) { - fileInfo, err := lstatIfOs(fs, path) + fileInfo, err := LstatIfOs(fs, path) realPath := path if err != nil { @@ -516,7 +488,7 @@ func getRealFileInfo(fs afero.Fs, path string) (os.FileInfo, string, error) { if err != nil { return nil, "", fmt.Errorf("Cannot read symbolic link '%s', error was: %s", path, err) } - fileInfo, err = lstatIfOs(fs, link) + fileInfo, err = LstatIfOs(fs, link) if err != nil { return nil, "", fmt.Errorf("Cannot stat '%s', error was: %s", link, err) } @@ -539,7 +511,7 @@ func GetRealPath(fs afero.Fs, path string) (string, error) { // Code copied from Afero's path.go // if the filesystem is OsFs use Lstat, else use fs.Stat -func lstatIfOs(fs afero.Fs, path string) (info os.FileInfo, err error) { +func LstatIfOs(fs afero.Fs, path string) (info os.FileInfo, err error) { _, ok := fs.(*afero.OsFs) if ok { info, err = os.Lstat(path) diff --git a/helpers/path_test.go b/helpers/path_test.go index 8d895d762..bb5125034 100644 --- a/helpers/path_test.go +++ b/helpers/path_test.go @@ -638,40 +638,6 @@ func TestFileAndExt(t *testing.T) { } -func TestGuessSection(t *testing.T) { - type test struct { - input, expected string - } - - data := []test{ - {"/", ""}, - {"", ""}, - {"/content", ""}, - {"content/", ""}, - {"/content/", ""}, // /content/ is a special case. It will never be the section - {"/blog", ""}, - {"/blog/", "blog"}, - {"blog", ""}, - {"content/blog", ""}, - {"/content/blog/", "blog"}, - {"/content/blog", ""}, // Lack of trailing slash indicates 'blog' is not a directory. - {"content/blog/", "blog"}, - {"/contents/myblog/", "contents"}, - {"/contents/yourblog", "contents"}, - {"/contents/ourblog/", "contents"}, - {"/content/myblog/", "myblog"}, - {"/content/yourblog", ""}, - {"/content/ourblog/", "ourblog"}, - } - - for i, d := range data { - expected := GuessSection(filepath.FromSlash(d.input)) - if d.expected != expected { - t.Errorf("Test %d failed. Expected %q got %q", i, d.expected, expected) - } - } -} - func TestPathPrep(t *testing.T) { } diff --git a/helpers/pathspec.go b/helpers/pathspec.go index 164d242a0..d5a2c92e8 100644 --- a/helpers/pathspec.go +++ b/helpers/pathspec.go @@ -15,6 +15,7 @@ package helpers import ( "fmt" + "strings" "github.com/gohugoio/hugo/config" "github.com/gohugoio/hugo/hugofs" @@ -31,6 +32,7 @@ type PathSpec struct { canonifyURLs bool language *Language + //StatsCounter *siteSta // pagination path handling paginatePath string @@ -38,10 +40,12 @@ type PathSpec struct { theme string // Directories + contentDir string themesDir string layoutDir string workingDir string staticDirs []string + PublishDir string // The PathSpec looks up its config settings in both the current language // and then in the global Viper config. @@ -52,6 +56,8 @@ type PathSpec struct { defaultContentLanguage string multilingual bool + ProcessingStats *ProcessingStats + // The file systems to use Fs *hugofs.Fs @@ -79,6 +85,11 @@ func NewPathSpec(fs *hugofs.Fs, cfg config.Provider) (*PathSpec, error) { staticDirs = append(staticDirs, getStringOrStringSlice(cfg, "staticDir", i)...) } + var lang string + if l, ok := cfg.(*Language); ok { + lang = l.Lang + } + ps := &PathSpec{ Fs: fs, Cfg: cfg, @@ -91,13 +102,23 @@ func NewPathSpec(fs *hugofs.Fs, cfg config.Provider) (*PathSpec, error) { defaultContentLanguage: cfg.GetString("defaultContentLanguage"), paginatePath: cfg.GetString("paginatePath"), BaseURL: baseURL, + contentDir: cfg.GetString("contentDir"), themesDir: cfg.GetString("themesDir"), layoutDir: cfg.GetString("layoutDir"), workingDir: cfg.GetString("workingDir"), staticDirs: staticDirs, theme: cfg.GetString("theme"), + ProcessingStats: NewProcessingStats(lang), } + publishDir := ps.AbsPathify(cfg.GetString("publishDir")) + FilePathSeparator + // If root, remove the second '/' + if publishDir == "//" { + publishDir = FilePathSeparator + } + + ps.PublishDir = publishDir + if language, ok := cfg.(*Language); ok { ps.language = language } @@ -129,6 +150,11 @@ func (p *PathSpec) PaginatePath() string { return p.paginatePath } +// ContentDir returns the configured workingDir. +func (p *PathSpec) ContentDir() string { + return p.contentDir +} + // WorkingDir returns the configured workingDir. func (p *PathSpec) WorkingDir() string { return p.workingDir @@ -153,3 +179,13 @@ func (p *PathSpec) Theme() string { func (p *PathSpec) ThemesDir() string { return p.themesDir } + +// PermalinkForBaseURL creates a permalink from the given link and baseURL. +func (p *PathSpec) PermalinkForBaseURL(link, baseURL string) string { + link = strings.TrimPrefix(link, "/") + if !strings.HasSuffix(baseURL, "/") { + baseURL += "/" + } + return baseURL + link + +} diff --git a/helpers/processing_stats.go b/helpers/processing_stats.go new file mode 100644 index 000000000..36dfcda69 --- /dev/null +++ b/helpers/processing_stats.go @@ -0,0 +1,116 @@ +// Copyright 2017 The Hugo Authors. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package helpers + +import ( + "io" + "strconv" + "sync/atomic" + + "github.com/olekukonko/tablewriter" +) + +type ProcessingStats struct { + Name string + + Pages uint64 + PaginatorPages uint64 + Static uint64 + ProcessedImages uint64 + Files uint64 + Aliases uint64 + Sitemaps uint64 + Cleaned uint64 +} + +type processingStatsTitleVal struct { + name string + val uint64 +} + +func (s *ProcessingStats) toVals() []processingStatsTitleVal { + return []processingStatsTitleVal{ + processingStatsTitleVal{"Pages", s.Pages}, + processingStatsTitleVal{"Paginator pages", s.PaginatorPages}, + processingStatsTitleVal{"Non-page files", s.Files}, + processingStatsTitleVal{"Static files", s.Static}, + processingStatsTitleVal{"Processed images", s.ProcessedImages}, + processingStatsTitleVal{"Aliases", s.Aliases}, + processingStatsTitleVal{"Sitemaps", s.Sitemaps}, + processingStatsTitleVal{"Cleaned", s.Cleaned}, + } +} + +func NewProcessingStats(name string) *ProcessingStats { + return &ProcessingStats{Name: name} +} + +func (s *ProcessingStats) Incr(counter *uint64) { + atomic.AddUint64(counter, 1) +} + +func (s *ProcessingStats) Add(counter *uint64, amount int) { + atomic.AddUint64(counter, uint64(amount)) +} + +func (s *ProcessingStats) Table(w io.Writer) { + titleVals := s.toVals() + data := make([][]string, len(titleVals)) + for i, tv := range titleVals { + data[i] = []string{tv.name, strconv.Itoa(int(tv.val))} + } + + table := tablewriter.NewWriter(w) + + table.AppendBulk(data) + table.SetHeader([]string{"", s.Name}) + table.SetBorder(false) + table.Render() + +} + +func ProcessingStatsTable(w io.Writer, stats ...*ProcessingStats) { + names := make([]string, len(stats)+1) + + var data [][]string + + for i := 0; i < len(stats); i++ { + stat := stats[i] + names[i+1] = stat.Name + + titleVals := stat.toVals() + + if i == 0 { + data = make([][]string, len(titleVals)) + } + + for j, tv := range titleVals { + if i == 0 { + data[j] = []string{tv.name, strconv.Itoa(int(tv.val))} + } else { + data[j] = append(data[j], strconv.Itoa(int(tv.val))) + } + + } + + } + + table := tablewriter.NewWriter(w) + + table.AppendBulk(data) + table.SetHeader(names) + table.SetBorder(false) + table.Render() + +} diff --git a/hugolib/alias.go b/hugolib/alias.go index a3fe5c24a..dbb864384 100644 --- a/hugolib/alias.go +++ b/hugolib/alias.go @@ -109,7 +109,7 @@ func (s *Site) publishDestAlias(allowRoot bool, path, permalink string, p *Page) return err } - return s.publish(targetPath, aliasContent) + return s.publish(&s.PathSpec.ProcessingStats.Aliases, targetPath, aliasContent) } diff --git a/hugolib/alias_test.go b/hugolib/alias_test.go index 1d6824dba..abbda5f35 100644 --- a/hugolib/alias_test.go +++ b/hugolib/alias_test.go @@ -51,7 +51,9 @@ func TestAlias(t *testing.T) { writeSource(t, fs, filepath.Join("content", "page.md"), pageWithAlias) writeSource(t, fs, filepath.Join("layouts", "_default", "single.html"), basicTemplate) - buildSingleSite(t, deps.DepsCfg{Fs: fs, Cfg: cfg}, BuildCfg{}) + s := buildSingleSite(t, deps.DepsCfg{Fs: fs, Cfg: cfg}, BuildCfg{}) + + require.Len(t, s.rawAllPages, 1) // the real page th.assertFileContent(filepath.Join("public", "page", "index.html"), "For some moments the old man") diff --git a/hugolib/config.go b/hugolib/config.go index 62098aeea..c83f38cce 100644 --- a/hugolib/config.go +++ b/hugolib/config.go @@ -64,22 +64,21 @@ func LoadConfig(fs afero.Fs, relativeSourcePath, configFilename string) (*viper. v.RegisterAlias("indexes", "taxonomies") - // Remove these in Hugo 0.23. + // Remove these in Hugo 0.33. if v.IsSet("disable404") { - helpers.Deprecated("site config", "disable404", "Use disableKinds=[\"404\"]", false) + helpers.Deprecated("site config", "disable404", "Use disableKinds=[\"404\"]", true) } if v.IsSet("disableRSS") { - helpers.Deprecated("site config", "disableRSS", "Use disableKinds=[\"RSS\"]", false) + helpers.Deprecated("site config", "disableRSS", "Use disableKinds=[\"RSS\"]", true) } if v.IsSet("disableSitemap") { - // NOTE: Do not remove this until Hugo 0.24, ERROR in 0.23. - helpers.Deprecated("site config", "disableSitemap", "Use disableKinds= [\"sitemap\"]", false) + helpers.Deprecated("site config", "disableSitemap", "Use disableKinds= [\"sitemap\"]", true) } if v.IsSet("disableRobotsTXT") { - helpers.Deprecated("site config", "disableRobotsTXT", "Use disableKinds= [\"robotsTXT\"]", false) + helpers.Deprecated("site config", "disableRobotsTXT", "Use disableKinds= [\"robotsTXT\"]", true) } if err := loadDefaultSettingsFor(v); err != nil { @@ -176,6 +175,7 @@ func loadDefaultSettingsFor(v *viper.Viper) error { v.SetDefault("contentDir", "content") v.SetDefault("layoutDir", "layouts") v.SetDefault("staticDir", "static") + v.SetDefault("resourceDir", "resources") v.SetDefault("archetypeDir", "archetypes") v.SetDefault("publishDir", "public") v.SetDefault("dataDir", "data") diff --git a/hugolib/datafiles_test.go b/hugolib/datafiles_test.go index b62fb197d..cdc5e0684 100644 --- a/hugolib/datafiles_test.go +++ b/hugolib/datafiles_test.go @@ -27,16 +27,15 @@ import ( jww "github.com/spf13/jwalterweatherman" "github.com/gohugoio/hugo/parser" - "github.com/gohugoio/hugo/source" "github.com/stretchr/testify/require" ) func TestDataDirJSON(t *testing.T) { t.Parallel() - sources := []source.ByteSource{ - {Name: filepath.FromSlash("data/test/foo.json"), Content: []byte(`{ "bar": "foofoo" }`)}, - {Name: filepath.FromSlash("data/test.json"), Content: []byte(`{ "hello": [ { "world": "foo" } ] }`)}, + sources := [][2]string{ + {filepath.FromSlash("data/test/foo.json"), `{ "bar": "foofoo" }`}, + {filepath.FromSlash("data/test.json"), `{ "hello": [ { "world": "foo" } ] }`}, } expected, err := parser.HandleJSONMetaData([]byte(`{ "test": { "hello": [{ "world": "foo" }] , "foo": { "bar":"foofoo" } } }`)) @@ -51,8 +50,8 @@ func TestDataDirJSON(t *testing.T) { func TestDataDirToml(t *testing.T) { t.Parallel() - sources := []source.ByteSource{ - {Name: filepath.FromSlash("data/test/kung.toml"), Content: []byte("[foo]\nbar = 1")}, + sources := [][2]string{ + {"data/test/kung.toml", "[foo]\nbar = 1"}, } expected, err := parser.HandleTOMLMetaData([]byte("[test]\n[test.kung]\n[test.kung.foo]\nbar = 1")) @@ -67,12 +66,12 @@ func TestDataDirToml(t *testing.T) { func TestDataDirYAMLWithOverridenValue(t *testing.T) { t.Parallel() - sources := []source.ByteSource{ + sources := [][2]string{ // filepath.Walk walks the files in lexical order, '/' comes before '.'. Simulate this: - {Name: filepath.FromSlash("data/a.yaml"), Content: []byte("a: 1")}, - {Name: filepath.FromSlash("data/test/v1.yaml"), Content: []byte("v1-2: 2")}, - {Name: filepath.FromSlash("data/test/v2.yaml"), Content: []byte("v2:\n- 2\n- 3")}, - {Name: filepath.FromSlash("data/test.yaml"), Content: []byte("v1: 1")}, + {filepath.FromSlash("data/a.yaml"), "a: 1"}, + {filepath.FromSlash("data/test/v1.yaml"), "v1-2: 2"}, + {filepath.FromSlash("data/test/v2.yaml"), "v2:\n- 2\n- 3"}, + {filepath.FromSlash("data/test.yaml"), "v1: 1"}, } expected := map[string]interface{}{"a": map[string]interface{}{"a": 1}, @@ -85,10 +84,10 @@ func TestDataDirYAMLWithOverridenValue(t *testing.T) { func TestDataDirMultipleSources(t *testing.T) { t.Parallel() - sources := []source.ByteSource{ - {Name: filepath.FromSlash("data/test/first.toml"), Content: []byte("bar = 1")}, - {Name: filepath.FromSlash("themes/mytheme/data/test/first.toml"), Content: []byte("bar = 2")}, - {Name: filepath.FromSlash("data/test/second.toml"), Content: []byte("tender = 2")}, + sources := [][2]string{ + {filepath.FromSlash("data/test/first.toml"), "bar = 1"}, + {filepath.FromSlash("themes/mytheme/data/test/first.toml"), "bar = 2"}, + {filepath.FromSlash("data/test/second.toml"), "tender = 2"}, } expected, _ := parser.HandleTOMLMetaData([]byte("[test.first]\nbar = 1\n[test.second]\ntender=2")) @@ -98,7 +97,7 @@ func TestDataDirMultipleSources(t *testing.T) { } -func doTestDataDir(t *testing.T, expected interface{}, sources []source.ByteSource, configKeyValues ...interface{}) { +func doTestDataDir(t *testing.T, expected interface{}, sources [][2]string, configKeyValues ...interface{}) { var ( cfg, fs = newTestCfg() ) diff --git a/hugolib/fileInfo.go b/hugolib/fileInfo.go new file mode 100644 index 000000000..14dd8dbf9 --- /dev/null +++ b/hugolib/fileInfo.go @@ -0,0 +1,109 @@ +// Copyright 2017-present The Hugo Authors. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package hugolib + +import ( + "os" + "strings" + + "github.com/gohugoio/hugo/helpers" + "github.com/gohugoio/hugo/source" +) + +// fileInfo implements the File and ReadableFile interface. +var ( + _ source.File = (*fileInfo)(nil) + _ source.ReadableFile = (*fileInfo)(nil) +) + +type fileInfo struct { + bundleTp bundleDirType + source.ReadableFile + overriddenLang string +} + +func (fi *fileInfo) Lang() string { + if fi.overriddenLang != "" { + return fi.overriddenLang + } + return fi.ReadableFile.Lang() +} + +func (fi *fileInfo) isOwner() bool { + return fi.bundleTp > bundleNot +} + +func isContentFile(filename string) bool { + return contentFileExtensionsSet[strings.TrimPrefix(helpers.Ext(filename), ".")] +} + +func (fi *fileInfo) isContentFile() bool { + return contentFileExtensionsSet[fi.Ext()] +} + +func newFileInfo(sp *source.SourceSpec, baseDir, filename string, fi os.FileInfo, tp bundleDirType) *fileInfo { + + baseFi := sp.NewFileInfo(baseDir, filename, fi) + f := &fileInfo{ + bundleTp: tp, + ReadableFile: baseFi, + } + + return f + +} + +type bundleDirType int + +const ( + bundleNot bundleDirType = iota + + // All from here are bundles in one form or another. + bundleLeaf + bundleBranch +) + +// Returns the given file's name's bundle type and whether it is a content +// file or not. +func classifyBundledFile(name string) (bundleDirType, bool) { + if !isContentFile(name) { + return bundleNot, false + } + if strings.HasPrefix(name, "_index.") { + return bundleBranch, true + } + + if strings.HasPrefix(name, "index.") { + return bundleLeaf, true + } + + return bundleNot, true +} + +func (b bundleDirType) String() string { + switch b { + case bundleNot: + return "Not a bundle" + case bundleLeaf: + return "Regular bundle" + case bundleBranch: + return "Branch bundle" + } + + return "" +} + +func (b bundleDirType) isBundle() bool { + return b > bundleNot +} diff --git a/hugolib/fileInfo_test.go b/hugolib/fileInfo_test.go new file mode 100644 index 000000000..18579c078 --- /dev/null +++ b/hugolib/fileInfo_test.go @@ -0,0 +1,61 @@ +// Copyright 2017-present The Hugo Authors. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package hugolib + +import ( + "testing" + + "path/filepath" + + "github.com/gohugoio/hugo/source" + "github.com/stretchr/testify/require" +) + +func TestBundleFileInfo(t *testing.T) { + t.Parallel() + + assert := require.New(t) + cfg, fs := newTestBundleSourcesMultilingual(t) + sourceSpec := source.NewSourceSpec(cfg, fs) + + for _, this := range []struct { + filename string + check func(f *fileInfo) + }{ + {"/path/to/file.md", func(fi *fileInfo) { + assert.Equal("md", fi.Ext()) + assert.Equal("en", fi.Lang()) + assert.False(fi.isOwner()) + assert.True(fi.isContentFile()) + }}, + {"/path/to/file.JPG", func(fi *fileInfo) { + assert.Equal("jpg", fi.Ext()) + assert.False(fi.isContentFile()) + }}, + {"/path/to/file.nn.png", func(fi *fileInfo) { + assert.Equal("png", fi.Ext()) + assert.Equal("nn", fi.Lang()) + assert.Equal("file", fi.TranslationBaseName()) + assert.False(fi.isContentFile()) + }}, + } { + fi := newFileInfo( + sourceSpec, + filepath.FromSlash("/work/base"), + filepath.FromSlash(this.filename), + nil, bundleNot) + this.check(fi) + } + +} diff --git a/hugolib/handler_base.go b/hugolib/handler_base.go deleted file mode 100644 index d7e4a63a3..000000000 --- a/hugolib/handler_base.go +++ /dev/null @@ -1,65 +0,0 @@ -// Copyright 2015 The Hugo Authors. All rights reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package hugolib - -import ( - "github.com/gohugoio/hugo/source" -) - -// Handler is used for processing files of a specific type. -type Handler interface { - FileConvert(*source.File, *Site) HandledResult - PageConvert(*Page) HandledResult - Read(*source.File, *Site) HandledResult - Extensions() []string -} - -// Handle identifies functionality associated with certain file extensions. -type Handle struct { - extensions []string -} - -// Extensions returns a list of extensions. -func (h Handle) Extensions() []string { - return h.extensions -} - -// HandledResult describes the results of a file handling operation. -type HandledResult struct { - page *Page - file *source.File - err error -} - -// HandledResult is an error -func (h HandledResult) Error() string { - if h.err != nil { - if h.page != nil { - return "Error: " + h.err.Error() + " for " + h.page.File.LogicalName() - } - if h.file != nil { - return "Error: " + h.err.Error() + " for " + h.file.LogicalName() - } - } - return h.err.Error() -} - -func (h HandledResult) String() string { - return h.Error() -} - -// Page returns the affected page. -func (h HandledResult) Page() *Page { - return h.page -} diff --git a/hugolib/handler_file.go b/hugolib/handler_file.go deleted file mode 100644 index 82ea85fb2..000000000 --- a/hugolib/handler_file.go +++ /dev/null @@ -1,59 +0,0 @@ -// Copyright 2015 The Hugo Authors. All rights reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package hugolib - -import ( - "bytes" - - "github.com/dchest/cssmin" - "github.com/gohugoio/hugo/source" -) - -func init() { - RegisterHandler(new(cssHandler)) - RegisterHandler(new(defaultHandler)) -} - -type basicFileHandler Handle - -func (h basicFileHandler) Read(f *source.File, s *Site) HandledResult { - return HandledResult{file: f} -} - -func (h basicFileHandler) PageConvert(*Page) HandledResult { - return HandledResult{} -} - -type defaultHandler struct{ basicFileHandler } - -func (h defaultHandler) Extensions() []string { return []string{"*"} } -func (h defaultHandler) FileConvert(f *source.File, s *Site) HandledResult { - err := s.publish(f.Path(), f.Contents) - if err != nil { - return HandledResult{err: err} - } - return HandledResult{file: f} -} - -type cssHandler struct{ basicFileHandler } - -func (h cssHandler) Extensions() []string { return []string{"css"} } -func (h cssHandler) FileConvert(f *source.File, s *Site) HandledResult { - x := cssmin.Minify(f.Bytes()) - err := s.publish(f.Path(), bytes.NewReader(x)) - if err != nil { - return HandledResult{err: err} - } - return HandledResult{file: f} -} diff --git a/hugolib/handler_meta.go b/hugolib/handler_meta.go deleted file mode 100644 index c1aaf5f8c..000000000 --- a/hugolib/handler_meta.go +++ /dev/null @@ -1,128 +0,0 @@ -// Copyright 2015 The Hugo Authors. All rights reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package hugolib - -import ( - "errors" - - "fmt" - - "github.com/gohugoio/hugo/source" -) - -var handlers []Handler - -// MetaHandler abstracts reading and converting functionality of a Handler. -type MetaHandler interface { - // Read the Files in and register - Read(*source.File, *Site, HandleResults) - - // Generic Convert Function with coordination - Convert(interface{}, *Site, HandleResults) - - Handle() Handler -} - -// HandleResults is a channel for HandledResult. -type HandleResults chan<- HandledResult - -// NewMetaHandler creates a MetaHandle for a given extensions. -func NewMetaHandler(in string) *MetaHandle { - x := &MetaHandle{ext: in} - x.Handler() - return x -} - -// MetaHandle is a generic MetaHandler that internally uses -// the globally registered handlers for handling specific file types. -type MetaHandle struct { - handler Handler - ext string -} - -func (mh *MetaHandle) Read(f *source.File, s *Site, results HandleResults) { - if h := mh.Handler(); h != nil { - results <- h.Read(f, s) - return - } - - results <- HandledResult{err: errors.New("No handler found"), file: f} -} - -// Convert handles the conversion of files and pages. -func (mh *MetaHandle) Convert(i interface{}, s *Site, results HandleResults) { - h := mh.Handler() - - if f, ok := i.(*source.File); ok { - results <- h.FileConvert(f, s) - return - } - - if p, ok := i.(*Page); ok { - if p == nil { - results <- HandledResult{err: errors.New("file resulted in a nil page")} - return - } - - if h == nil { - results <- HandledResult{err: fmt.Errorf("No handler found for page '%s'. Verify the markup is supported by Hugo.", p.FullFilePath())} - return - } - - results <- h.PageConvert(p) - } -} - -// Handler finds the registered handler for the used extensions. -func (mh *MetaHandle) Handler() Handler { - if mh.handler == nil { - mh.handler = FindHandler(mh.ext) - - // if no handler found, use default handler - if mh.handler == nil { - mh.handler = FindHandler("*") - } - } - return mh.handler -} - -// FindHandler finds a Handler in the globally registered handlers. -func FindHandler(ext string) Handler { - for _, h := range Handlers() { - if HandlerMatch(h, ext) { - return h - } - } - return nil -} - -// HandlerMatch checks if the given extensions matches. -func HandlerMatch(h Handler, ext string) bool { - for _, x := range h.Extensions() { - if ext == x { - return true - } - } - return false -} - -// RegisterHandler adds a handler to the globally registered ones. -func RegisterHandler(h Handler) { - handlers = append(handlers, h) -} - -// Handlers returns the globally registered handlers. -func Handlers() []Handler { - return handlers -} diff --git a/hugolib/handler_page.go b/hugolib/handler_page.go deleted file mode 100644 index c9e22fe76..000000000 --- a/hugolib/handler_page.go +++ /dev/null @@ -1,157 +0,0 @@ -// Copyright 2016 The Hugo Authors. All rights reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package hugolib - -import ( - "fmt" - - "github.com/gohugoio/hugo/helpers" - "github.com/gohugoio/hugo/source" -) - -func init() { - RegisterHandler(new(markdownHandler)) - RegisterHandler(new(htmlHandler)) - RegisterHandler(new(asciidocHandler)) - RegisterHandler(new(rstHandler)) - RegisterHandler(new(pandocHandler)) - RegisterHandler(new(mmarkHandler)) - RegisterHandler(new(orgHandler)) -} - -type basicPageHandler Handle - -func (b basicPageHandler) Read(f *source.File, s *Site) HandledResult { - page, err := s.NewPage(f.Path()) - - if err != nil { - return HandledResult{file: f, err: err} - } - - if _, err := page.ReadFrom(f.Contents); err != nil { - return HandledResult{file: f, err: err} - } - - // In a multilanguage setup, we use the first site to - // do the initial processing. - // That site may be different than where the page will end up, - // so we do the assignment here. - // We should clean up this, but that will have to wait. - s.assignSiteByLanguage(page) - - return HandledResult{file: f, page: page, err: err} -} - -func (b basicPageHandler) FileConvert(*source.File, *Site) HandledResult { - return HandledResult{} -} - -type markdownHandler struct { - basicPageHandler -} - -func (h markdownHandler) Extensions() []string { return []string{"mdown", "markdown", "md"} } -func (h markdownHandler) PageConvert(p *Page) HandledResult { - return commonConvert(p) -} - -type htmlHandler struct { - basicPageHandler -} - -func (h htmlHandler) Extensions() []string { return []string{"html", "htm"} } - -func (h htmlHandler) PageConvert(p *Page) HandledResult { - if p.rendered { - panic(fmt.Sprintf("Page %q already rendered, does not need conversion", p.BaseFileName())) - } - - // Work on a copy of the raw content from now on. - p.createWorkContentCopy() - - if err := p.processShortcodes(); err != nil { - p.s.Log.ERROR.Println(err) - } - - return HandledResult{err: nil} -} - -type asciidocHandler struct { - basicPageHandler -} - -func (h asciidocHandler) Extensions() []string { return []string{"asciidoc", "adoc", "ad"} } -func (h asciidocHandler) PageConvert(p *Page) HandledResult { - return commonConvert(p) -} - -type rstHandler struct { - basicPageHandler -} - -func (h rstHandler) Extensions() []string { return []string{"rest", "rst"} } -func (h rstHandler) PageConvert(p *Page) HandledResult { - return commonConvert(p) -} - -type pandocHandler struct { - basicPageHandler -} - -func (h pandocHandler) Extensions() []string { return []string{"pandoc", "pdc"} } -func (h pandocHandler) PageConvert(p *Page) HandledResult { - return commonConvert(p) -} - -type mmarkHandler struct { - basicPageHandler -} - -func (h mmarkHandler) Extensions() []string { return []string{"mmark"} } -func (h mmarkHandler) PageConvert(p *Page) HandledResult { - return commonConvert(p) -} - -type orgHandler struct { - basicPageHandler -} - -func (h orgHandler) Extensions() []string { return []string{"org"} } -func (h orgHandler) PageConvert(p *Page) HandledResult { - return commonConvert(p) -} - -func commonConvert(p *Page) HandledResult { - if p.rendered { - panic(fmt.Sprintf("Page %q already rendered, does not need conversion", p.BaseFileName())) - } - - // Work on a copy of the raw content from now on. - p.createWorkContentCopy() - - if err := p.processShortcodes(); err != nil { - p.s.Log.ERROR.Println(err) - } - - // TODO(bep) these page handlers need to be re-evaluated, as it is hard to - // process a page in isolation. See the new preRender func. - if p.s.Cfg.GetBool("enableEmoji") { - p.workContent = helpers.Emojify(p.workContent) - } - - p.workContent = p.replaceDivider(p.workContent) - p.workContent = p.renderContent(p.workContent) - - return HandledResult{err: nil} -} diff --git a/hugolib/handler_test.go b/hugolib/handler_test.go deleted file mode 100644 index aa58d1c43..000000000 --- a/hugolib/handler_test.go +++ /dev/null @@ -1,77 +0,0 @@ -// Copyright 2015 The Hugo Authors. All rights reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package hugolib - -import ( - "path/filepath" - "testing" - - "github.com/gohugoio/hugo/deps" - "github.com/gohugoio/hugo/helpers" -) - -func TestDefaultHandler(t *testing.T) { - t.Parallel() - - var ( - cfg, fs = newTestCfg() - ) - - cfg.Set("verbose", true) - cfg.Set("uglyURLs", true) - - writeSource(t, fs, filepath.FromSlash("content/sect/doc1.html"), "---\nmarkup: markdown\n---\n# title\nsome *content*") - writeSource(t, fs, filepath.FromSlash("content/sect/doc2.html"), "more content") - writeSource(t, fs, filepath.FromSlash("content/sect/doc3.md"), "# doc3\n*some* content") - writeSource(t, fs, filepath.FromSlash("content/sect/doc4.md"), "---\ntitle: doc4\n---\n# doc4\n*some content*") - writeSource(t, fs, filepath.FromSlash("content/sect/doc3/img1.png"), "‰PNG  ��� IHDR����������:~›U��� IDATWcø��ZMoñ����IEND®B`‚") - writeSource(t, fs, filepath.FromSlash("content/sect/img2.gif"), "GIF89a��€��ÿÿÿ���,�������D�;") - writeSource(t, fs, filepath.FromSlash("content/sect/img2.spf"), "****FAKE-FILETYPE****") - writeSource(t, fs, filepath.FromSlash("content/doc7.html"), "doc7 content") - writeSource(t, fs, filepath.FromSlash("content/sect/doc8.html"), "---\nmarkup: md\n---\n# title\nsome *content*") - - writeSource(t, fs, filepath.FromSlash("layouts/_default/single.html"), "{{.Content}}") - writeSource(t, fs, filepath.FromSlash("head"), "") - writeSource(t, fs, filepath.FromSlash("head_abs"), "title\n\n

some content

\n"}, - {filepath.FromSlash("public/sect/doc2.html"), "more content"}, - {filepath.FromSlash("public/sect/doc3.html"), "\n\n

doc3

\n\n

some content

\n"}, - {filepath.FromSlash("public/sect/doc3/img1.png"), string([]byte("‰PNG  ��� IHDR����������:~›U��� IDATWcø��ZMoñ����IEND®B`‚"))}, - {filepath.FromSlash("public/sect/img2.gif"), string([]byte("GIF89a��€��ÿÿÿ���,�������D�;"))}, - {filepath.FromSlash("public/sect/img2.spf"), string([]byte("****FAKE-FILETYPE****"))}, - {filepath.FromSlash("public/doc7.html"), "doc7 content"}, - {filepath.FromSlash("public/sect/doc8.html"), "\n\n

title

\n\n

some content

\n"}, - } - - for _, test := range tests { - file, err := fs.Destination.Open(test.doc) - if err != nil { - t.Fatalf("Did not find %s in target.", test.doc) - } - - content := helpers.ReaderToString(file) - - if content != test.expected { - t.Errorf("%s content expected:\n%q\ngot:\n%q", test.doc, test.expected, content) - } - } - -} diff --git a/hugolib/hugo_sites.go b/hugolib/hugo_sites.go index bf488b9be..4211e91f6 100644 --- a/hugolib/hugo_sites.go +++ b/hugolib/hugo_sites.go @@ -15,10 +15,13 @@ package hugolib import ( "errors" + "io" + "path/filepath" + "sort" "strings" "sync" - "path/filepath" + "github.com/gohugoio/hugo/resource" "github.com/gohugoio/hugo/deps" "github.com/gohugoio/hugo/helpers" @@ -32,20 +35,40 @@ import ( type HugoSites struct { Sites []*Site - runMode runmode - multilingual *Multilingual // Multihost is set if multilingual and baseURL set on the language level. multihost bool + // If this is running in the dev server. + running bool + *deps.Deps + + // Keeps track of bundle directories and symlinks to enable partial rebuilding. + ContentChanges *contentChangeMap } func (h *HugoSites) IsMultihost() bool { return h != nil && h.multihost } +func (h *HugoSites) PrintProcessingStats(w io.Writer) { + stats := make([]*helpers.ProcessingStats, len(h.Sites)) + for i := 0; i < len(h.Sites); i++ { + stats[i] = h.Sites[i].PathSpec.ProcessingStats + } + helpers.ProcessingStatsTable(w, stats...) +} + +func (h *HugoSites) langSite() map[string]*Site { + m := make(map[string]*Site) + for _, s := range h.Sites { + m[s.Language.Lang] = s + } + return m +} + // GetContentPage finds a Page with content given the absolute filename. // Returns nil if none found. func (h *HugoSites) GetContentPage(filename string) *Page { @@ -58,12 +81,29 @@ func (h *HugoSites) GetContentPage(filename string) *Page { rel := strings.TrimPrefix(filename, contendDir) rel = strings.TrimPrefix(rel, helpers.FilePathSeparator) - pos := s.rawAllPages.findPagePosByFilePath(rel) + for _, s := range h.Sites { - if pos == -1 { - return nil + pos := s.rawAllPages.findPagePosByFilePath(rel) + + if pos == -1 { + continue + } + return s.rawAllPages[pos] } - return s.rawAllPages[pos] + + // If not found already, this may be bundled in another content file. + rel = filepath.Dir(rel) + for _, s := range h.Sites { + + pos := s.rawAllPages.findFirstPagePosByFilePathPrefix(rel) + + if pos == -1 { + continue + } + return s.rawAllPages[pos] + } + + return nil } @@ -81,10 +121,20 @@ func newHugoSites(cfg deps.DepsCfg, sites ...*Site) (*HugoSites, error) { return nil, err } + var contentChangeTracker *contentChangeMap + + // Only needed in server mode. + // TODO(bep) clean up the running vs watching terms + if cfg.Running { + contentChangeTracker = &contentChangeMap{symContent: make(map[string]map[string]bool)} + } + h := &HugoSites{ - multilingual: langConfig, - multihost: cfg.Cfg.GetBool("multihost"), - Sites: sites} + running: cfg.Running, + multilingual: langConfig, + multihost: cfg.Cfg.GetBool("multihost"), + ContentChanges: contentChangeTracker, + Sites: sites} for _, s := range sites { s.owner = h @@ -143,6 +193,10 @@ func applyDepsIfNeeded(cfg deps.DepsCfg, sites ...*Site) error { d.OutputFormatsConfig = s.outputFormatsConfig s.Deps = d } + s.resourceSpec, err = resource.NewSpec(s.Deps.PathSpec, s.mediaTypesConfig) + if err != nil { + return err + } } @@ -258,10 +312,6 @@ func (h *HugoSites) toSiteInfos() []*SiteInfo { // BuildCfg holds build options used to, as an example, skip the render step. type BuildCfg struct { - // Whether we are in watch (server) mode - Watching bool - // Print build stats at the end of a build - PrintStats bool // Reset site state before build. Use to force full rebuilds. ResetState bool // Re-creates the sites from configuration before a build. @@ -304,11 +354,12 @@ func (h *HugoSites) renderCrossSitesArtifacts() error { smLayouts := []string{"sitemapindex.xml", "_default/sitemapindex.xml", "_internal/_default/sitemapindex.xml"} - return s.renderAndWriteXML("sitemapindex", + return s.renderAndWriteXML(&s.PathSpec.ProcessingStats.Sitemaps, "sitemapindex", sitemapDefault.Filename, h.toSiteInfos(), s.appendThemeTemplates(smLayouts)...) } func (h *HugoSites) assignMissingTranslations() error { + // This looks heavy, but it should be a small number of nodes by now. allPages := h.findAllPagesByKindNotIn(KindPage) for _, nodeType := range []string{KindHome, KindSection, KindTaxonomy, KindTaxonomyTerm} { @@ -427,73 +478,57 @@ func (h *HugoSites) createMissingPages() error { return nil } -func (s *Site) assignSiteByLanguage(p *Page) { - - pageLang := p.Lang() - - if pageLang == "" { - panic("Page language missing: " + p.Title) +func (h *HugoSites) removePageByPathPrefix(path string) { + for _, s := range h.Sites { + s.removePageByPathPrefix(path) } +} - for _, site := range s.owner.Sites { - if strings.HasPrefix(site.Language.Lang, pageLang) { - p.s = site - p.Site = &site.Info - return - } +func (h *HugoSites) removePageByPath(path string) { + for _, s := range h.Sites { + s.removePageByPath(path) } - } func (h *HugoSites) setupTranslations() { - - master := h.Sites[0] - - for _, p := range master.rawAllPages { - if p.Lang() == "" { - panic("Page language missing: " + p.Title) - } - - if p.Kind == kindUnknown { - p.Kind = p.s.kindFromSections(p.sections) - } - - if !p.s.isEnabled(p.Kind) { - continue - } - - shouldBuild := p.shouldBuild() - - for i, site := range h.Sites { - // The site is assigned by language when read. - if site == p.s { - site.updateBuildStats(p) - if shouldBuild { - site.Pages = append(site.Pages, p) - } + for _, s := range h.Sites { + for _, p := range s.rawAllPages { + if p.Kind == kindUnknown { + p.Kind = p.s.kindFromSections(p.sections) } - if !shouldBuild { + if !p.s.isEnabled(p.Kind) { continue } - if i == 0 { - site.AllPages = append(site.AllPages, p) + shouldBuild := p.shouldBuild() + s.updateBuildStats(p) + if shouldBuild { + s.Pages = append(s.Pages, p) } } + } + allPages := make(Pages, 0) + + for _, s := range h.Sites { + allPages = append(allPages, s.Pages...) + } + + allPages.Sort() + + for _, s := range h.Sites { + s.AllPages = allPages } // Pull over the collections from the master site for i := 1; i < len(h.Sites); i++ { - h.Sites[i].AllPages = h.Sites[0].AllPages h.Sites[i].Data = h.Sites[0].Data } if len(h.Sites) > 1 { - pages := h.Sites[0].AllPages - allTranslations := pagesToTranslationsMap(pages) - assignTranslationsToPages(allTranslations, pages) + allTranslations := pagesToTranslationsMap(allPages) + assignTranslationsToPages(allTranslations, allPages) } } @@ -501,6 +536,7 @@ func (s *Site) preparePagesForRender(cfg *BuildCfg) { pageChan := make(chan *Page) wg := &sync.WaitGroup{} + numWorkers := getGoMaxProcs() * 4 for i := 0; i < numWorkers; i++ { @@ -508,77 +544,10 @@ func (s *Site) preparePagesForRender(cfg *BuildCfg) { go func(pages <-chan *Page, wg *sync.WaitGroup) { defer wg.Done() for p := range pages { - if !p.shouldRenderTo(s.rc.Format) { - // No need to prepare - continue + if err := p.prepareForRender(cfg); err != nil { + s.Log.ERROR.Printf("Failed to prepare page %q for render: %s", p.BaseFileName(), err) + } - var shortcodeUpdate bool - if p.shortcodeState != nil { - shortcodeUpdate = p.shortcodeState.updateDelta() - } - - if !shortcodeUpdate && !cfg.whatChanged.other && p.rendered { - // No need to process it again. - continue - } - - // If we got this far it means that this is either a new Page pointer - // or a template or similar has changed so wee need to do a rerendering - // of the shortcodes etc. - - // Mark it as rendered - p.rendered = true - - // If in watch mode or if we have multiple output formats, - // we need to keep the original so we can - // potentially repeat this process on rebuild. - needsACopy := cfg.Watching || len(p.outputFormats) > 1 - var workContentCopy []byte - if needsACopy { - workContentCopy = make([]byte, len(p.workContent)) - copy(workContentCopy, p.workContent) - } else { - // Just reuse the same slice. - workContentCopy = p.workContent - } - - if p.Markup == "markdown" { - tmpContent, tmpTableOfContents := helpers.ExtractTOC(workContentCopy) - p.TableOfContents = helpers.BytesToHTML(tmpTableOfContents) - workContentCopy = tmpContent - } - - var err error - if workContentCopy, err = handleShortcodes(p, workContentCopy); err != nil { - s.Log.ERROR.Printf("Failed to handle shortcodes for page %s: %s", p.BaseFileName(), err) - } - - if p.Markup != "html" { - - // Now we know enough to create a summary of the page and count some words - summaryContent, err := p.setUserDefinedSummaryIfProvided(workContentCopy) - - if err != nil { - s.Log.ERROR.Printf("Failed to set user defined summary for page %q: %s", p.Path(), err) - } else if summaryContent != nil { - workContentCopy = summaryContent.content - } - - p.Content = helpers.BytesToHTML(workContentCopy) - - if summaryContent == nil { - if err := p.setAutoSummary(); err != nil { - s.Log.ERROR.Printf("Failed to set user auto summary for page %q: %s", p.pathOrTitle(), err) - } - } - - } else { - p.Content = helpers.BytesToHTML(workContentCopy) - } - - //analyze for raw stats - p.analyzePage() - } }(pageChan, wg) } @@ -646,3 +615,113 @@ func (h *HugoSites) findAllPagesByKind(kind string) Pages { func (h *HugoSites) findAllPagesByKindNotIn(kind string) Pages { return h.findPagesByKindNotIn(kind, h.Sites[0].AllPages) } + +func (h *HugoSites) findPagesByShortcode(shortcode string) Pages { + var pages Pages + for _, s := range h.Sites { + pages = append(pages, s.findPagesByShortcode(shortcode)...) + } + return pages +} + +// Used in partial reloading to determine if the change is in a bundle. +type contentChangeMap struct { + mu sync.RWMutex + branches []string + leafs []string + + // Hugo supports symlinked content (both directories and files). This + // can lead to situations where the same file can be referenced from several + // locations in /content -- which is really cool, but also means we have to + // go an extra mile to handle changes. + // This map is only used in watch mode. + // It maps either file to files or the real dir to a set of content directories where it is in use. + symContent map[string]map[string]bool + symContentMu sync.Mutex +} + +func (m *contentChangeMap) add(filename string, tp bundleDirType) { + m.mu.Lock() + dir := filepath.Dir(filename) + switch tp { + case bundleBranch: + m.branches = append(m.branches, dir) + case bundleLeaf: + m.leafs = append(m.leafs, dir) + default: + panic("invalid bundle type") + } + m.mu.Unlock() +} + +// Track the addition of bundle dirs. +func (m *contentChangeMap) handleBundles(b *bundleDirs) { + for _, bd := range b.bundles { + m.add(bd.fi.Filename(), bd.tp) + } +} + +// resolveAndRemove resolves the given filename to the root folder of a bundle, if relevant. +// It also removes the entry from the map. It will be re-added again by the partial +// build if it still is a bundle. +func (m *contentChangeMap) resolveAndRemove(filename string) (string, string, bundleDirType) { + m.mu.RLock() + defer m.mu.RUnlock() + + dir, name := filepath.Split(filename) + dir = strings.TrimSuffix(dir, helpers.FilePathSeparator) + fileTp, isContent := classifyBundledFile(name) + + // If the file itself is a bundle, no need to look further: + if fileTp > bundleNot { + return dir, dir, fileTp + } + + // This may be a member of a bundle. Start with branch bundles, the most specific. + if !isContent { + for i, b := range m.branches { + if b == dir { + m.branches = append(m.branches[:i], m.branches[i+1:]...) + return dir, dir, bundleBranch + } + } + } + + // And finally the leaf bundles, which can contain anything. + for i, l := range m.leafs { + if strings.HasPrefix(dir, l) { + m.leafs = append(m.leafs[:i], m.leafs[i+1:]...) + return dir, dir, bundleLeaf + } + } + + // Not part of any bundle + return dir, filename, bundleNot +} + +func (m *contentChangeMap) addSymbolicLinkMapping(from, to string) { + m.symContentMu.Lock() + mm, found := m.symContent[from] + if !found { + mm = make(map[string]bool) + m.symContent[from] = mm + } + mm[to] = true + m.symContentMu.Unlock() +} + +func (m *contentChangeMap) GetSymbolicLinkMappings(dir string) []string { + mm, found := m.symContent[dir] + if !found { + return nil + } + dirs := make([]string, len(mm)) + i := 0 + for dir, _ := range mm { + dirs[i] = dir + i++ + } + + sort.Strings(dirs) + return dirs +} diff --git a/hugolib/hugo_sites_build.go b/hugolib/hugo_sites_build.go index c0749e388..b2b394eb5 100644 --- a/hugolib/hugo_sites_build.go +++ b/hugolib/hugo_sites_build.go @@ -15,7 +15,6 @@ package hugolib import ( "bytes" - "time" "errors" @@ -30,7 +29,7 @@ func (h *HugoSites) Build(config BuildCfg, events ...fsnotify.Event) error { h.Metrics.Reset() } - t0 := time.Now() + //t0 := time.Now() // Need a pointer as this may be modified. conf := &config @@ -63,10 +62,6 @@ func (h *HugoSites) Build(config BuildCfg, events ...fsnotify.Event) error { return err } - if config.PrintStats { - h.Log.FEEDBACK.Printf("total in %v ms\n", int(1000*time.Since(t0).Seconds())) - } - if h.Metrics != nil { var b bytes.Buffer h.Metrics.WriteMetrics(&b) @@ -101,8 +96,6 @@ func (h *HugoSites) init(config *BuildCfg) error { } } - h.runMode.Watching = config.Watching - return nil } @@ -115,12 +108,10 @@ func (h *HugoSites) initRebuild(config *BuildCfg) error { return errors.New("Rebuild does not support 'ResetState'.") } - if !config.Watching { + if !h.running { return errors.New("Rebuild called when not in watch mode") } - h.runMode.Watching = config.Watching - if config.whatChanged.source { // This is for the non-renderable content pages (rarely used, I guess). // We could maybe detect if this is really needed, but it should be @@ -147,7 +138,7 @@ func (h *HugoSites) process(config *BuildCfg, events ...fsnotify.Event) error { if len(events) > 0 { // This is a rebuild - changed, err := firstSite.reProcess(events) + changed, err := firstSite.processPartial(events) config.whatChanged = &changed return err } @@ -188,25 +179,19 @@ func (h *HugoSites) assemble(config *BuildCfg) error { } for _, s := range h.Sites { - s.siteStats = &siteStats{} for _, p := range s.Pages { // May have been set in front matter if len(p.outputFormats) == 0 { p.outputFormats = s.outputFormats[p.Kind] } - - cnt := len(p.outputFormats) - if p.Kind == KindPage { - s.siteStats.pageCountRegular += cnt + for _, r := range p.Resources.ByType(pageResourceType) { + r.(*Page).outputFormats = p.outputFormats } - s.siteStats.pageCount += cnt - if err := p.initTargetPathDescriptor(); err != nil { - return err - } - if err := p.initURLs(); err != nil { + if err := p.initPaths(); err != nil { return err } + } s.assembleMenus() s.refreshPageCaches() @@ -222,7 +207,6 @@ func (h *HugoSites) assemble(config *BuildCfg) error { } func (h *HugoSites) render(config *BuildCfg) error { - for _, s := range h.Sites { s.initRenderFormats() for i, rf := range s.renderFormats { @@ -235,10 +219,6 @@ func (h *HugoSites) render(config *BuildCfg) error { } } } - - if !config.SkipRender && config.PrintStats { - s.Stats() - } } if !config.SkipRender { diff --git a/hugolib/hugo_sites_build_test.go b/hugolib/hugo_sites_build_test.go index 6b3522d6f..3d66f7fe6 100644 --- a/hugolib/hugo_sites_build_test.go +++ b/hugolib/hugo_sites_build_test.go @@ -16,7 +16,6 @@ import ( "github.com/gohugoio/hugo/deps" "github.com/gohugoio/hugo/helpers" "github.com/gohugoio/hugo/hugofs" - "github.com/gohugoio/hugo/source" "github.com/spf13/afero" "github.com/spf13/viper" "github.com/stretchr/testify/require" @@ -26,6 +25,7 @@ type testSiteConfig struct { DefaultContentLanguage string DefaultContentLanguageInSubdir bool Fs afero.Fs + Running bool } func TestMultiSitesMainLangInRoot(t *testing.T) { @@ -226,7 +226,7 @@ func doTestMultiSitesBuild(t *testing.T, configTemplate, configSuffix string) { gp1 := sites.GetContentPage(filepath.FromSlash("content/sect/doc1.en.md")) require.NotNil(t, gp1) require.Equal(t, "doc1", gp1.Title) - gp2 := sites.GetContentPage(filepath.FromSlash("content/sect/notfound.md")) + gp2 := sites.GetContentPage(filepath.FromSlash("content/dummysect/notfound.md")) require.Nil(t, gp2) enSite := sites.Sites[0] @@ -238,7 +238,6 @@ func doTestMultiSitesBuild(t *testing.T, configTemplate, configSuffix string) { if len(enSite.RegularPages) != 4 { t.Fatal("Expected 4 english pages") } - require.Len(t, enSite.Source.Files(), 14, "should have 13 source files") require.Len(t, enSite.AllPages, 28, "should have 28 total pages (including translations and index types)") doc1en := enSite.RegularPages[0] @@ -401,12 +400,11 @@ func TestMultiSitesRebuild(t *testing.T) { if !isCI() { defer leaktest.CheckTimeout(t, 30*time.Second)() } - siteConfig := testSiteConfig{Fs: afero.NewMemMapFs(), DefaultContentLanguage: "fr", DefaultContentLanguageInSubdir: true} + siteConfig := testSiteConfig{Running: true, Fs: afero.NewMemMapFs(), DefaultContentLanguage: "fr", DefaultContentLanguageInSubdir: true} sites := createMultiTestSites(t, siteConfig, multiSiteTOMLConfigTemplate) fs := sites.Fs - cfg := BuildCfg{Watching: true} th := testHelper{sites.Cfg, fs, t} - + cfg := BuildCfg{} err := sites.Build(cfg) if err != nil { @@ -446,8 +444,10 @@ func TestMultiSitesRebuild(t *testing.T) { // * Change a template // * Change language file { - nil, - []fsnotify.Event{{Name: "content/sect/doc2.en.md", Op: fsnotify.Remove}}, + func(t *testing.T) { + fs.Source.Remove("content/sect/doc2.en.md") + }, + []fsnotify.Event{{Name: filepath.FromSlash("content/sect/doc2.en.md"), Op: fsnotify.Remove}}, func(t *testing.T) { require.Len(t, enSite.RegularPages, 3, "1 en removed") @@ -467,9 +467,9 @@ func TestMultiSitesRebuild(t *testing.T) { writeNewContentFile(t, fs, "new_fr_1", "2016-07-30", "content/new1.fr.md", 10) }, []fsnotify.Event{ - {Name: "content/new1.en.md", Op: fsnotify.Create}, - {Name: "content/new2.en.md", Op: fsnotify.Create}, - {Name: "content/new1.fr.md", Op: fsnotify.Create}, + {Name: filepath.FromSlash("content/new1.en.md"), Op: fsnotify.Create}, + {Name: filepath.FromSlash("content/new2.en.md"), Op: fsnotify.Create}, + {Name: filepath.FromSlash("content/new1.fr.md"), Op: fsnotify.Create}, }, func(t *testing.T) { require.Len(t, enSite.RegularPages, 5) @@ -490,7 +490,7 @@ func TestMultiSitesRebuild(t *testing.T) { doc1 += "CHANGED" writeSource(t, fs, p, doc1) }, - []fsnotify.Event{{Name: "content/sect/doc1.en.md", Op: fsnotify.Write}}, + []fsnotify.Event{{Name: filepath.FromSlash("content/sect/doc1.en.md"), Op: fsnotify.Write}}, func(t *testing.T) { require.Len(t, enSite.RegularPages, 5) doc1 := readDestination(t, fs, "public/en/sect/doc1-slug/index.html") @@ -506,8 +506,8 @@ func TestMultiSitesRebuild(t *testing.T) { } }, []fsnotify.Event{ - {Name: "content/new1renamed.en.md", Op: fsnotify.Rename}, - {Name: "content/new1.en.md", Op: fsnotify.Rename}, + {Name: filepath.FromSlash("content/new1renamed.en.md"), Op: fsnotify.Rename}, + {Name: filepath.FromSlash("content/new1.en.md"), Op: fsnotify.Rename}, }, func(t *testing.T) { require.Len(t, enSite.RegularPages, 5, "Rename") @@ -523,7 +523,7 @@ func TestMultiSitesRebuild(t *testing.T) { templateContent += "{{ print \"Template Changed\"}}" writeSource(t, fs, template, templateContent) }, - []fsnotify.Event{{Name: "layouts/_default/single.html", Op: fsnotify.Write}}, + []fsnotify.Event{{Name: filepath.FromSlash("layouts/_default/single.html"), Op: fsnotify.Write}}, func(t *testing.T) { require.Len(t, enSite.RegularPages, 5) require.Len(t, enSite.AllPages, 30) @@ -540,7 +540,7 @@ func TestMultiSitesRebuild(t *testing.T) { langContent = strings.Replace(langContent, "Bonjour", "Salut", 1) writeSource(t, fs, languageFile, langContent) }, - []fsnotify.Event{{Name: "i18n/fr.yaml", Op: fsnotify.Write}}, + []fsnotify.Event{{Name: filepath.FromSlash("i18n/fr.yaml"), Op: fsnotify.Write}}, func(t *testing.T) { require.Len(t, enSite.RegularPages, 5) require.Len(t, enSite.AllPages, 30) @@ -563,7 +563,7 @@ func TestMultiSitesRebuild(t *testing.T) { writeSource(t, fs, "layouts/shortcodes/shortcode.html", "Modified Shortcode: {{ i18n \"hello\" }}") }, []fsnotify.Event{ - {Name: "layouts/shortcodes/shortcode.html", Op: fsnotify.Write}, + {Name: filepath.FromSlash("layouts/shortcodes/shortcode.html"), Op: fsnotify.Write}, }, func(t *testing.T) { require.Len(t, enSite.RegularPages, 5) @@ -1097,16 +1097,16 @@ hello: } // Sources - sources := []source.ByteSource{ - {Name: filepath.FromSlash("root.en.md"), Content: []byte(`--- + sources := [][2]string{ + {filepath.FromSlash("root.en.md"), `--- title: root weight: 10000 slug: root publishdate: "2000-01-01" --- # root -`)}, - {Name: filepath.FromSlash("sect/doc1.en.md"), Content: []byte(`--- +`}, + {filepath.FromSlash("sect/doc1.en.md"), `--- title: doc1 weight: 1 slug: doc1-slug @@ -1122,8 +1122,8 @@ publishdate: "2000-01-01" {{< lingo >}} NOTE: slug should be used as URL -`)}, - {Name: filepath.FromSlash("sect/doc1.fr.md"), Content: []byte(`--- +`}, + {filepath.FromSlash("sect/doc1.fr.md"), `--- title: doc1 weight: 1 plaques: @@ -1140,8 +1140,8 @@ publishdate: "2000-01-04" NOTE: should be in the 'en' Page's 'Translations' field. NOTE: date is after "doc3" -`)}, - {Name: filepath.FromSlash("sect/doc2.en.md"), Content: []byte(`--- +`}, + {filepath.FromSlash("sect/doc2.en.md"), `--- title: doc2 weight: 2 publishdate: "2000-01-02" @@ -1149,8 +1149,8 @@ publishdate: "2000-01-02" # doc2 *some content* NOTE: without slug, "doc2" should be used, without ".en" as URL -`)}, - {Name: filepath.FromSlash("sect/doc3.en.md"), Content: []byte(`--- +`}, + {filepath.FromSlash("sect/doc3.en.md"), `--- title: doc3 weight: 3 publishdate: "2000-01-03" @@ -1163,8 +1163,8 @@ url: /superbob # doc3 *some content* NOTE: third 'en' doc, should trigger pagination on home page. -`)}, - {Name: filepath.FromSlash("sect/doc4.md"), Content: []byte(`--- +`}, + {filepath.FromSlash("sect/doc4.md"), `--- title: doc4 weight: 4 plaques: @@ -1175,8 +1175,8 @@ publishdate: "2000-01-05" *du contenu francophone* NOTE: should use the defaultContentLanguage and mark this doc as 'fr'. NOTE: doesn't have any corresponding translation in 'en' -`)}, - {Name: filepath.FromSlash("other/doc5.fr.md"), Content: []byte(`--- +`}, + {filepath.FromSlash("other/doc5.fr.md"), `--- title: doc5 weight: 5 publishdate: "2000-01-06" @@ -1184,45 +1184,45 @@ publishdate: "2000-01-06" # doc5 *autre contenu francophone* NOTE: should use the "permalinks" configuration with :filename -`)}, +`}, // Add some for the stats - {Name: filepath.FromSlash("stats/expired.fr.md"), Content: []byte(`--- + {filepath.FromSlash("stats/expired.fr.md"), `--- title: expired publishdate: "2000-01-06" expiryDate: "2001-01-06" --- # Expired -`)}, - {Name: filepath.FromSlash("stats/future.fr.md"), Content: []byte(`--- +`}, + {filepath.FromSlash("stats/future.fr.md"), `--- title: future weight: 6 publishdate: "2100-01-06" --- # Future -`)}, - {Name: filepath.FromSlash("stats/expired.en.md"), Content: []byte(`--- +`}, + {filepath.FromSlash("stats/expired.en.md"), `--- title: expired weight: 7 publishdate: "2000-01-06" expiryDate: "2001-01-06" --- # Expired -`)}, - {Name: filepath.FromSlash("stats/future.en.md"), Content: []byte(`--- +`}, + {filepath.FromSlash("stats/future.en.md"), `--- title: future weight: 6 publishdate: "2100-01-06" --- # Future -`)}, - {Name: filepath.FromSlash("stats/draft.en.md"), Content: []byte(`--- +`}, + {filepath.FromSlash("stats/draft.en.md"), `--- title: expired publishdate: "2000-01-06" draft: true --- # Draft -`)}, - {Name: filepath.FromSlash("stats/tax.nn.md"), Content: []byte(`--- +`}, + {filepath.FromSlash("stats/tax.nn.md"), `--- title: Tax NN weight: 8 publishdate: "2000-01-06" @@ -1231,8 +1231,8 @@ lag: - Sogndal --- # Tax NN -`)}, - {Name: filepath.FromSlash("stats/tax.nb.md"), Content: []byte(`--- +`}, + {filepath.FromSlash("stats/tax.nb.md"), `--- title: Tax NB weight: 8 publishdate: "2000-01-06" @@ -1241,7 +1241,7 @@ lag: - Sogndal --- # Tax NB -`)}, +`}, } configFile := "multilangconfig." + configSuffix @@ -1252,10 +1252,8 @@ lag: fs := hugofs.NewFrom(mf, cfg) - // Hugo support using ByteSource's directly (for testing), - // but to make it more real, we write them to the mem file system. for _, s := range sources { - if err := afero.WriteFile(mf, filepath.Join("content", s.Name), s.Content, 0755); err != nil { + if err := afero.WriteFile(mf, filepath.Join("content", s[0]), []byte(s[1]), 0755); err != nil { t.Fatalf("Failed to write file: %s", err) } } @@ -1263,7 +1261,7 @@ lag: // Add some data writeSource(t, fs, "data/hugo.toml", "slogan = \"Hugo Rocks!\"") - sites, err := NewHugoSites(deps.DepsCfg{Fs: fs, Cfg: cfg}) //, Logger: newDebugLogger()}) + sites, err := NewHugoSites(deps.DepsCfg{Fs: fs, Cfg: cfg, Running: siteConfig.Running}) //, Logger: newDebugLogger()}) if err != nil { t.Fatalf("Failed to create sites: %s", err) @@ -1311,7 +1309,7 @@ func readFileFromFs(t testing.TB, fs afero.Fs, filename string) string { b, err := afero.ReadFile(fs, filename) if err != nil { // Print some debug info - root := strings.Split(filename, helpers.FilePathSeparator)[0] + root := "/" //strings.Split(filename, helpers.FilePathSeparator)[0] afero.Walk(fs, root, func(path string, info os.FileInfo, err error) error { if info != nil && !info.IsDir() { fmt.Println(" ", path) diff --git a/hugolib/hugo_sites_multihost_test.go b/hugolib/hugo_sites_multihost_test.go index af96c766d..0729f7d9d 100644 --- a/hugolib/hugo_sites_multihost_test.go +++ b/hugolib/hugo_sites_multihost_test.go @@ -47,13 +47,12 @@ languageName = "Nynorsk" ` - siteConfig := testSiteConfig{Fs: afero.NewMemMapFs(), DefaultContentLanguage: "fr", DefaultContentLanguageInSubdir: false} + siteConfig := testSiteConfig{Running: true, Fs: afero.NewMemMapFs(), DefaultContentLanguage: "fr", DefaultContentLanguageInSubdir: false} sites := createMultiTestSites(t, siteConfig, multiSiteTOMLConfigTemplate) fs := sites.Fs - cfg := BuildCfg{Watching: true} th := testHelper{sites.Cfg, fs, t} assert := require.New(t) - + cfg := BuildCfg{} err := sites.Build(cfg) assert.NoError(err) diff --git a/hugolib/hugolib.debug b/hugolib/hugolib.debug new file mode 100644 index 0000000000000000000000000000000000000000..fa1575f58248a8c4343267581b0e0dbc75503dc1 GIT binary patch literal 2464730 zcmbTf4RBmVwkDYO*1t+urBb;l%d+sbJb-u&G#J`V^ZfkUvTUqw`R7T(@LtSox}++} z^<1h_SCwqb(ecC*43A|ym|lkIVHk!bSjNK=1jDd|gJD>LAXqO$Fl*-Oh;~igK zXx3}9D&eh;6jbK6HnJ15)uq@%Gtq9%6&7lpP>LjiPf6U_>gi{MiP{BrCL4QgKkJ>r>f;jwH0S(iqCF-#94}~xa&0H>dHj5 z)rzatqktVv<}~cyjzCLEJm*Iy zH+$-MwJ}$Xt5}Z$Ju{k~+gmkAtJIK@XAp!6Ld?fBEgH_y;>lY;%&`c3-$05|pd4Q* zj}55QTCSU!Yc4lB;A7s)<;cj1#(dL>HQUb8km^;(1w1ufJA;BfN~I1pD|qsh!15(I zkXD(A_BfEuIEzW89EE@RiS|@=VYyyL>KU7uI$CWln)ew1Wv4r>T4TYa_$=oEQuR2Pj7;ZRZn-)pe9jo&ZSErX0ka~?qGnWi@j=h8kkaNnvH5Y z@2OupX_S<-znylK%GBE9(=%z-rDC1a1j!S2rd4jV)5SC@L1z$orq-xbPpA8&OuJKI z8I)e`%<0mFx$@lc>U5{v5?XTdy1!9j*}S~`8EGi}8Q6H2gimyJ$K9Xr+4mD zjt_K$^R-sHLold-N*XX{owTQ6ZqSTOEL1xt!xX*&g-ds!bhh4Xo>*S$&b@J`+mmQl zL1T}^qO7RI-b%$i=5*4}IWGETe7U9jrKeA24mOutZTBY*Yj?H)+&ffjEO)9% zdkYlmwBq4%10xkWqY|Wpp(-;4Ijv|&_a|r4%J~T~Om{;PD|l`2`FP9Cw3ZtXj_R7C ztkF3}6rgyV`Nz&9Dd}cbs^wN2oXajY8=d2PN>$1$_$%Ow0Kkw1W9aAs}S-%$3mP{7UQPWqDLQc2C7 zFqMI})N!y71SJ-04g5JruBlW&J-QAsq(7}Zl{rNE)2>U7{1hBhjt@RctB3=QV)4Xy zdBxTs9iQ3%v*mIENVf!&V(f%_` z8@7=2NrrksH|05qHM{!(Fc=i_RR+=EA@ug~a(%4UD7OMeSmKH%_eax54okU9PC&TL zn}IS~o0rv+9T39-^`)+vC-7l??$wjt_K+>E&6I zZzYHWs-pFf4T2T7Y2K z7L~=s2zEo~8AQEEp8LH5vs?_{4CL@&=;r!`Wl+dq5Ojpdnf_k0{u%p(bt##8& zu8doZ#AZ;9%&sccfa;5+5e}o=(xQQ~uo@uPL8=)AY&vo<>O-t<563+QXd5%_Qdbs} zJu32OV|4}Uw9Gw;>6Nx}h6s42>Mt3Sfo50Rbq~{I@Hv80m;yU0Hl?3e8gn$ND0n@o zHp~WBUW;OvnEBp!+Ai#vM5_wJI=ykNjJ01UOo=1JI&$R>ikeg|^b|HvQ( z3|koYy=J|_Cs+Aiqk2j|O3Pebr!-jGN11)c7n>DBJDyCVy?w`NytIX$V;RhZM0YH+ zs2_kVHs4mt-_fepk$JK@4OKW-J&I-`bx7OIY!EAl-Ya>lH^no@YT%BOImtgXl40xq zB38UoQ5Pnvb`SbV-4p8>!<^p&2RhZGt>(!Zj9p~Gdb+w&oi8uf zJLE=~*8^K9w`2f`GKbksmQZ~8$mQ=Kq!pd`U}G>4@jID8$gd;RKo95#)Gw(~-)2$5;^!lY@L%-$gt zryVVzuK$7Cs~ptyz8gR6oa$AQ09(Bm0^X|t`clj-9X}WA<;-b;0c{iGhhL7ZE2Yri zS>5WMVP8gK4g%b2q4R)qR4X##wKNw6K#x^vQ(h9tS$T!|-8cz!Xssvfwknb1ZKwl~F$m$ju0kQH+1Muw zK3z@EAnf|gek|)cPHw*4Xm)DzD_V%(i@g^s#?^7)i5*$;)cdi%0Wn>cV$CHO;SMse zG{dylaH{rQsb4v25Eh)SM1-tVaZdJ-%duL6eXO=4zgxE5QsrU{FiHPcSaSIf^9K?w zN z9)!bHxns3Y^=>=4lw-~F1fE@v6g%ch*fmZYvN7MuHK@?K?Y4})}j0r&P?)O355^Sq#r62Fv z@>~Ztc>l1ch7NNY}DW9l+Z-QKY6WAhGRt=2ynFP%Oc?^pire&w7|>P=S`Xz2CHGNt4rZe7V|Z^jSd2%0dZ@ytFWi;i#xw_@gL?mDx3%6`1xg=f;T|5 zZUpbaxTD2R{fYqDh2}guOrtFYXi-y8wWpqr4;1@tC+{9Wv1j80N~!1K1H*plFO_=H zKD-(qAWL754|wW)9J)@aH{t__)d4J`TNqDwJ7?nqFF3C2)CQCTNR>i51WPiWg7C4p zN{uy}b(2Vqwi~r&PEy4WC_l5zk%i(VKthWE^cc)#jpCA%E~!aCvB(8b>0cC5)f-q? zNhJo~Pl8OR#6?BXF6+B-{lwr3!CB{ldb8ZwbyGLSEfI`dvlk3hH^MCjVF(S-)I_5O zh6{bqIIy_})IAQEh%A+ufGewubT?8FIh+B+T4H)4FjQ(ef$1it$B+`j0x%1}ZZOw? zh1C*lQv5Ul%`hJauq>u9sMO)GuemZ58V_q}HBB^$N2wix#<_VvkFmJCh?%sF{^cBy z6_83$k7y?~coee|6(UVMD?KtY)PwN=R`}?X5rQfYp*|vmHh^#sLpo6lXW%XtODPc@ zr{p6)uPuje#`uOYAuu3Qw}G;5WWABTfZ3$71XUK>k?K@KQzEx*+Lm#pvt~TOrmTuR5nMAW=s>p z&j&Nhdhk5Kr|Y#j$hhcuL7Ictd1X&mC!xk6x1DJ@?*rX8Wyk-c7Xux2Z zRVCA67Iq0z(+32}2}s!VWXUyD3J@Uj7Q*65hahaOh2xYEb_+CoKnf>>yqypNEJ7<0 ztOfnZwlZD%iJ>I~0jiQk)x|XnDh=#{$IMY)kl_T~Mha<_`9QQi%(%T(hHtiF^IbPJ z*Q~dV$mgG8MtyXJ>9r-ee>2r>WS>eogvTDrOl?DAuLc94a%-&T1aVT z7x>4PZPL$}5Ci^m`qcF8x@kRqYau_ec+#aUhO7`IAZyo6U1V8EA*&1AyS3V(h#TgK z;ke4|GIKFcjt265TVtmw@7XV zWhX47bcP3)@=+(zz%t{*M1I7FfupC(L*@1f_g-uoE^VUH^DyHdW!k3vNL;nt`9*zldV;{o&9RVXj#C+96d$QIz@ogYGA|PE=SsVobG@DDaWo$NRGBxhv zMEe_R9h_+2)_@s5SDS|`rK`}Rrl~+~-RLR9NMXQzPHK@ngb8%7%$ANWPGWpCC^gf( zVV6#N4oL!&m}%a$Ch0l2PJ~vy+0cO(o+v3j!|?RX9fyJ5(wpC#Yz6rHNrF%S5@DbW zP8>ZPTJY3c*iz0&;wJbbK1h&&uM+pcflGbb=#*;>sG9qo!$4#a3qlWgPBmL6Y^HL2 zR6}z~1M7DZNco*Oy1~dmT~_=jj-I?p*cKIGP{I5x%hPm`EGwGN31K{lXAgRm(y^SX+|4TsXKomr5tDDM8Q%r(3l=*nE9QZ`8@nNGCb z-0PD(szK&$K(3}~JA80^Pr~*q&(^D)v&=kZ$7T-s8zg^_FinsN;a*s%!Hggy=2BPw zebIaf5jtFJGOGx+fyN1YJ!oEoMyIs<95Z=Dpn25>5YAwA90;pjln0|uAkq;CZeVexy^;B~7LH5z zZsRL$xD`SIUEYF)t+H^^s4n2ox@d<3AfTPj0#de-;k6d-bBiTi>MuRQwe49^^`1_P}T)Y$}C)1 z@7fM0#`WVR3YDi^u$#VVxU2&%THt7V@^-zG58;8h6oIwWVz5|XX;ycM--q32p}H`V zlU*#bP=c!q^b3nh=4OWuRyBk;gA<`A+Gs_+;wy;{?@+Z(R~{BEoX84<*Us$dOeT5P zGH(O-b{Epmk_OY4h8j*c6t@G)yYvn~K@O}z=S@NXLcHZWO~yT)KSEYSA`G}8wrNy7nut#6NHbJK}Scj;2v zebN?9XJml-prELYps1ZAaCzaJS;FTDS&BefSq(?ldibFTeAiI$?Yt3I0rbP&;I;;g z1`Dr8LsubB7qY-1IU$tx1)65AAL~)TXfwZQxUYjZ%@p|m@6EK}mhx|J=6%+NN|yp= z1pNr!6*L>V#(e-N-jgWw{T7>aG~A8BJQ6rM1G`i}`XeBeI&og!u*=dOa(ykJ_(N~l z6=h4m>HH9s^lMwVi+&3zz1{^auGsErdLTj}eZxZGM)UMqK%uaEq8>05hM<;0fwQgd zDOo_FunYPZT^xqvH{dYWZb(l%*ml(qV4YeTt3k*3kpDi5tM^IpZNyiQYGWVQ_c6A2X%iQ7|(MHWVTm z4=4IH)=St5dxY~d_X-{jChFn>J!Rzu?wcD(?XLGT^NiN$SAz(pZ)5s|--7`rh$BM4 z$w}FW&6`N%ojXmIQqMaE3ue4^pz@x$j!Z#-!H|w~VayXF#&ysI`RM~LGhUrtHh~!0o=U*^ zpkZj5Ffc=h^Qm7$&~yllNk(z?&e}w}_TO8ZNPqJ~Shsf-r{(zY+C(mo#9xEpg^9-4 z3M0L{i&14fzP6Z;M0!p1Rpy>9v$P>i*V?i8JeaiJNFES`&irMadMGm3|*t%Yi|96IRWC3X-E*g?teM*L+` z=M5d{il_=|9dsKkuM&uNC+Agx0h`}gg@ki%T*EdN)Ui+9#SL*d*nv|=)z)5~*|GJ< z{fxwdA(D!6hJQ5X$zl2em;~)|0g{Y=H0L#D3bKWAeW5>^O-1r8*;H!lvI{_N-1jzb zZT;H;f?%ph;Gcz*Xgr~@q+xUjVUTS}%pmtb&~|qW(Uol2)kr2$5(CHmb_o{>N~>xe;R>8QNYJ>_(UYA6u_XB79!w7 z09L%6p7Llfvl(i;B!9CA+_)|uLWzi>MimP}HVWI-l;hMq!ozxO^{$_*W1FK2iULJ6 zM2Jup3~ZpT%POXwx;y3(A=^RVQKKSb18Tv*KI0^ZeU(KFf2Db<2dB`$uQLdX^Ro#2 zV)!TKC;;H!;6haF)>O4Ks44_wR~j&mJ|8%;zyZ-Qsex8y)^=o}Y0~AoMFEuN#xMY) zJPlAI{BEc_)=;7|pNJ_3h#%E|9@l@Kls^nxjA=zkK5xgCM74p4gxbkky9(a4!>W;e zZLQ77$Z26wwKCCQm|<5d@(h3cGRf-JLyuRhOCi5uXc%b2YPE4G7y_M*N}+pVi!}&< zub}4_sR!4AqQB0i5h-kH2zqdbfZvYOk)Ym0_iE{)+J*Y~*b%flY}_)Nz5g_{Rmc#x zG(U;jQMvM3)iQ%L4YLB(?IUln71eS9MBKk0L(HnUQX5AN=8jJ^SWf_>6&a*`-h^&* zyyrD&$PuVTXUX39H zXaROstpfyZsg8iyWt$+;xJPir)Je5*K*M=FgPqMYo4rEj5YFG7-i$XM5A0Mo!`Yr{ zR~O5h2S9rYo66YDe8M@yAP6YG+Zy%mlufA$w!Q((GZ;;`^tj_RH^Ysl)YM4+lRD)fWr!&{<}66dqvL9g;B`n|Z%6EFi0FzIjwMtP z;!JI0=f#f1R?0 z;m7%-IE4bErg1_!K6KSowZ1MzgL9%FOdMzVR>UfK(m5B~!s#K_S=xd@oj*&B!>!b@ z6+Mt$0r@iN`Y)ylApol%IisZxkD~HG2;@V7^7K$71tV4YD#=*C@*-lCIpmWb+K$Pw z^B_3uO)oFvl-3HLhi7PR9GN%SZKTB!m=3e8+J;>l&&rYScHUe4`E)2~xy5RwR)(bc z5c+|{ZBvsNDw&yDr_R&i-oEk@N#o<*dWR>taP9*wYcd2u=On#J1ae_c@*o<(?>P-q~Bba=plRt+*#Uja}N0)QhQ zGB)vAxV4Ot+FH@|We`a@#~QAhs{U-b2I;|>yC|)>+m`A$;a+V4CN+ukJktCJ+|j%} zgj!MHuqZ$%7tc=0p;dHspo=5(=Q%(`IQUkaZvhSBFR(sPIN_Nrz;rcT zDDOo^NJJAb3ORsr0tJFRSZnY5(T^vM?qa<|ZAPQ>;3&COr9QprhO$};vLUbAf)|NL z2L;fCshZI_@kv#B6j2=8O+#h*O~h?A?A?%Q&v9shy(v}?29&fi(uZF0o}FHvhdqg> ztAe5s$GPfpoD^f9t3hL}?)=WWDsV8XQ&z*zIToe|hrV>X17x7X$I#aC_l7Xv`+JTK zn`DA2_PD#*SvdT`DJIX+@ABXPbO9Gw$~_7Xj+?7AbuTjo;j8ZRPOLqL7stoX{f^hb z!U}5@RH#(X2ksxQqZh4?HXq!0*7?9y&}iQ3&XIdu=Z!eE<{RVsnB#U6?~8PO&L{#cHb9fC$@ra!C;;Zg~CAHiYnU#q>fXW`=`)vevk47VkGS#*1Js;724|RW`0`LZ z@@CKq@g!;_{&>u`a|zbi2x2>-M!7<@Etxg%BPxNZ!Y^pTaJCPyIPBJGV&1o~Fi_=v z1pD@FND+8|(WrLlGO*We(g=2#+cad9VL?sakbJm#+d_TCCO715gy%(YW(Ry|K+~P9 zs;f0doN9@rB6_Vv>bd-8r@1dU-n<-KZ*Pq->jmer?ACx=XXD^gM1s}o+2r*%R8Qlm zR7ZQkL}np5TG&I8!LXZz=x|9mz75T6VbvN)y%jCk!#pb!4(%OnJMzWbCYPSjMwn@y zfYwq)9M!L*b{JaT1qc4Zg{ponUarT;?_(S(PiB;t!SPq<4tf(6+@~)=9A0)H550+{ zW?OkDp3Oo_s>X|sdIgha=2WeM1DJgD>WIoa3K+aVZ!EW3lht{67a(dAFe{b!;~Ye8 zk@7(dhj$QUin=z0c@=o1XwYKH3`r}^;Z72$X|33(%FzM_^iOxHONW;ifzqXivb?xo zr?;6h)Wj**02g%z^k#-+v{l~wJ5Gv^g>CjSS^}@QskdzOXt6bSnQw z11=o=R?MY8{ASRNQ2$jTRfTr2^g)fi>YS$tsIjaZV44rJ=tqaN(vSXXoMKB^DP(I4 zIH`ngj<9I^RXTBhd#=1xZNoRQf8$E7@i0kNrAu}3OAtW_%wnp+Q6J)Tem)IiA;?z{#vsyG>4J+ZdHA8&`xFW}dt3<`sjO;rEP&2%_uR4xf5Zk{--vCy~WEl7Xq zMY2Qsy~oqSuro}BxWqa)5L2(oyfMs-Gjpd>uQ{J)339!M$)t^gDHa6Gb`x`uBmCQ5 zthL2Ka#*)pswFd!_x%e2A@sJexd$$-ONuRZ)R#%4QDVFc+z)hie*dd{N% zagbIW45B8?<~HmZTV9+?|8=amyi|dL=+avl9i({mf;*a7qBd3-I|X@?6$lpHDv9&d zU8@h8C$}VvV=xO&z^ueg0J!X_T4xvnXTV?d;`n268s<61W*H}UP{Gxa*FRat0qpkS zvFW48DDCC;LPe+HJ%50DQx*l-wm%5x)=U}BlMX7w3I&S`LBw-;uxRi)i58s>Uh^}E zx#ew9%o~#FWnz49V-7l&DKI&WEy#s|f>mu_8H36swfZRxS*lrC$tiF3C!wzPpthD_ zf#tQGij^MpQpvj-wm@Tff1}faWp$Z*k@o$sGPJ^69J_N<%q3SRa3~Wefors)Agf$y zklP8Yl(>vZK?Td&=E)vfv*<&BBR{wAIJ^RQ@zT%qVp05t)BC!M6&Mw)`zDVLD(6k~ zVm3FnVocyjYA!QLi$MT!m57TiDS^Hohq`%Rmqzh1gp)Y_FvSC#QLO*DlPFgzN+-Ff zJO-K9z^eaeMLAln$z$djjxOL)*Lf3deZz`LWiE_V6viqL0KG%lH9!mOTGW>2-?w@V z(04sptI|%vVs!H>SVC!Vlkh*eInXF)RwnIq>=nfm$k_T!jQc$vitV#9y7 zT%8yptz9Reya`1!g;-F03fnremxc3} zBg!5XMf<;C`+wu+Agpl2q9(2-Ai*a^-c!_g@`M9<)sqtqLyt~kW>=ERX}j&(k$>xY zx7Lt3--K?7FpihR8E4tuo|DDfVtGj)vrgXY;U26MooCi$J&xxQHN1Cr7M0ha87h+d z9bHSgJ6W6Ja+_Xgit}{@=WXTMIr7clZVCq}FlKeOzA4Tavt`Mbq@cVkZM(`d1?*gX zC^njF8|Rp)Sgvkpg^*F{LbFv{;0D;zieAhWu}CnS6kkakiO2fwcHWsh0C|IsP!tuGxf&sKT-r0%{;+mZOay~9WJG4y~xc`tp{nlz*RSl9>$!O;o7TR%D>HLnNcCH zcii%>$BB~@&gwZ}OVR&a`Xyk*H|9-EPfx<#g1PT9?fP>|)>*O-{sE*96Mw`SCMZxUz6JfcudXTUt_>J-8H9F|oUD&tXLZ8wp+= z{)>$G>s_Nh+|nXXTfu6F6TMEWZg>P=os6Lg(uQyeCRd8DX1RAS%!f~TH{Ij_VxAHIU{n|=mL zKmxB+4xkW#p`QVaSPuQHa2G|&JnLquPs4YV!T`{a^b}!#o)Uef-j~PHTzz4)nfrc^ zZ*UZ32`V0U|8WObZ~{%~cUUL-uqA-Oj|P==rxOulMY>Z#vmE||R~70+XX=p(jAjpu zQ6b%>e3U}-)}$I5+0b=4EP*zyNk^i32Ue0`hs0S73|Eje9k1YPz7U7X!BqyMv%DCA za4-nL#*1h^{y`V$!p3Gw)2$<7aU7_7FQ7rv7fF9q+^yBLozdtfQCzG`x` zMm9M}UmZJWPbgBTP&3^6bv)5PgZjX`TQu)>KO~;MAG<;y!$_@T%=js0LvuLJ1dkndMpB=mmP+ zZDvN78I#IR`D$yQM?(wa)Ghs%zC{x(^}U^#S+IL|F>{&Ewm!HSN)`JiENdXyLvLh3 zWC2^Im@{IW`yj!qKMDuwHW*>mJFO*wQHpy88B8Kop?N`>xBIa7!Mwe*?T{EwM5z9+ zQ!vJ*AE9=s3PJ?zp*;5KL@W$e7ZSlq!iLM;=fD#!&@b8P zXtNoj6*u7qvU+!^R}dwNCccV41^>0a0Ce@{Nrsy`!U?CHR! z?5u22?uA}ZuU6lR!H)m^W)IEdwmZ#uS-74jC8_E9@&f*TBC!A0X82O<9wAaW6$KL` zWZc~rO`y0VF}_XT|7rKRnl0u1!`L>xqY@@=E%vB~pbnH&^$O<(nKho})S(`WdDwa4 z);%YuozeE{WVF|tHW08#zfM9iQ0=?1#bvC(u1tDUx0}u19`$l;^AnKg{3*F|c)GfX z9bJ{@E>g8+-egay+7fGvyTsTYV(#tbS_iK^>M5wyubf!xl-?@NOhLP2@Axa{uAENs zBn4Ne>NHw)I8RNeYHKqu-FYel@}A}oOyViK)f^&tT57Q9dRE7ez78?{()kF~Xxj|! z%j4=F9Q=h>#>&z$PFEU=vlVq7`Jk?o_(2SfY6WUjoKgtr+5qs6I5VuN<^l|I$LH#q zbHhXf7%WVZl_)<8nd63%o<=k@oJm;SQ1eoaD$(0d^g$$&gV9j{mo)ZRJUt}ZTk|hC zeX4||^kU$yzsrSV9x<@~2kEUU{sJxvf}1`w&l_^_Aje#d7bJk(4adHPd?ZIG9zxbo zZCAiBo#R?D8jbC(&_;KKNAbs2%x+46F58yPuysf=xd{v>5Hq=%cTR3wIk{~OCO1=S zBnM=zejXbg;-(N4zTSgcV}D7cz@3_75c5I=5c^|#T}Ve2ZgfQ?2n$DUBWElEGq6BM zS&6g2HeuY&HgFR)Wj9%0~BYq`lvG_glJmBb|UvOtYQPgi1q;otM4EM z4@&(f2XiZlXC=N;Ke-qw17D~5p=UOMFq_y$-iLzynEiFivwf~h?AC%&s|Tj6R5x4J z-b-GE>%QR~<`foAD$pzk!?}W`s&{h5#wFcF2>fPDhy zWxP^>0vW^S9BFoaR{_zDLs>AbF=gby2^a^SZOOumQM z9^8Ll<|~@~XurcY>t5|@?lYEaAX=D)X&ZtlHypD^Mh!x?X>wFap2|WzaS*`Agi1O2 z6}$?*@g6~B_4}hdpDA^gB(T!#!|O~gXnE(Y-m0g_u}-z4Qfo5~h852s%;^;ODX^K< zlIw(-x_1uYP91nwaDW!8H>^A5_raVj#&}9aCLO^5@>HfHLk3U0#THvF9r(4Gk(Ug9 zO+ns_rKsNu44uI;#AFt@sa>1HTN?tP)Kh)i2PHA;-ppnN6@*FdOK(Q>F!^NTgD24o|i;qKNsm5MFlkj)$KQSWsN8uzQe-k2Op* z=3wkS2A7JDUMg+Ez92%DH0xAGBGXJZ*pAz8NxjN;nvm+Y9~6X_-BZ`1PogwSxDnu} zlXkOdZ)Sbe&wo47o}EsXQJnL#=k|6#E_r;vcMMtvdJryinfvh?JJQB)0h@V-sVG^X zjm{25a6fQgNV@>R)zH4$qP~PkJ_(U>Il^#*^vqYdG8)H_T-5q?n1>^Nxa0Y*7=G@? zj{&$PD2oG8xcqwjY#d`<%3cV|uETrjTk@clgd8)IsEoQLui1LQ(+B!Kb<`g0 zILu1)Iy`=E=^=O0=OE3}Jft>vd_ZRHDpqI5u@pse5j$VjWnlnqFd@c_#uex**urK3 zR%>YvXk5wxCUpg}u_~7}>kLP3fWWGLLg*Yg6_MM81JqEDF#7ZVrS!xNH#fea^wqXB zN39I|jq2cKJW>Z$NEd)K1fEHLdLkg-wm)~Md_v@2vxQm}!&XU|?KW?^j7U0OM7se{ z$>@v-5{vtaU`33HH*oooz4YUx;5R*iCm)do;tj&HR0~a0*$xJ2)de3tV#GQZ^g_#smhb6NpDHgrviR(WI5+!F)=OD0z%-EplkOl}AhC-3_UfQ6* zHydh<%d(vpA`!hT)%>Q8;p=aU2AUg9(~`=o2!TK zcnC{Q<FMP==F;SLy?KD0HtS?T zVvbR7Xf}QL_#V^LZ~7GK=>N+7ZY01>uN%z@8n<8SWkk%Y4R+;Vb>=1C>VaG6vU^Av zLfnAM1d65yKI(Cwa-Yj6+7Ra)%-YApcd+5~dD!j(V6;Hr8*38W?J%j%5(O9QyA}Pd zPjSA0I#|6YF~ijyCnT6hBoWcBu-DqvpJ7_U6PA6j39)Jbbd}2&Jt-SlcP+^3JI)lp zUI4F50D^C{DCKZnaTV@7#HMM;3)D!&d3=|NXraK6e6 z@2%G(JM$RD+&`k6as{;dQEckzyiP+G#Lh~KR_{)aUZxW{HSSSr;5T0Qz8mFcCx`aw z;5Oqv)!FQ4x{?ur72E$aTZB&COtW(w&H>Q?tH1U}FJWD0DS;%s&|6~2DTkrfxjNuc zImr7@y+a4OBD8f$iVP&-ofIz*GhSp}O1xBNPvz(kmf3W;8gg}6xVy4grYs{;;~59h z9OrFR$p4rs0X~QX3tFH>PtitvFTx6LEUMMJoJm}?)5QpA5H$LYJi1?GbsQH2B320I zQxmd9GS@;3m+%QN829LD#5HXUv-(-zD1u)k{M|wbM=!(I!X)IKQ;Wtf>0WN4ePFq> zjBg`FlmC5&A+h4kj{x7B$DM>5vFbN@&7~lA=I`cFo}TP3td}E^_HI|=yGgW5k0~wy zy7K;A5@fGon~?os8ilOXu4&T8eQ)B#6v;Lx3Nzf6vG1}O^O|$kBpG%4?{j&2)5Yl3 zutrh8oqpH!CM5Gb`tq}Q;&Ag+NF~lEuRa-@dd7?qKw*fe)!)Zwo(+Z#b>9y)) z?)d;@y{fqmApcEPKHEn}s!oR?c`z}% zJP#?COAs%|>5t&tgawgN`pewQVQUM13i}(OKKtuls{KgAe%JeY6#DJ~DoN3is}H+V zFWAn2{tUG9>eKPjH#1uKIB4vro3>5k^M%u8`%Rd=h8r|~vFD|@;Qdh{%n!*$#@?cN`%qHQDWdU1-)p0)36qyv>**wboopczQ*^~@glOJJtDi_=e z|I$1Ot^s)#jR64`lEZ>KT8P0w_#5IYvC=___hYaerL)bPzj`r#2cn9stIZb27Ar4x zn8%EOQmbeCMu)6Mfae)4?m{wDiev^ottYwv+rhbnU?liT{US!6VMN~kI{BI5j-l!0 zc%B1DN5%xiLTaARZ#Rn~PE*?W!dy*U6s)sgxq}+gH?D)4n8zVqe!?OEj|(^tUN@H+ zO2~r$C|@iy%H#~DL2PhX%nBU%wL4XWpK$Jk)}~<|gio!0HZ*!JZ_>m=L!I%@N@my5 zELt$V@LU*N`XN8Q0Nm=?_#M~k{Ykq>3k=3cJ)qD3@i&0M_K6yXK`CPdIVk&g+- zqo2Y^^FD3K>23r2Ue8}qsbcuytAIHC&C^}_L_$<*{!uIkqg@P*fNZ^MhOao8;Art| zp(i2wO8x814iwP61z(XK{iY~jO0R?SZw=sk9<^Yt5FkeJ)wAv$d1g}5Xf%>qlw+el zOpfX-39F7sN#Br^V6w~rT?n6Y?)WaVL;kPhpT>Vjj$pDx2yjciUvC}VR>Q8vsmN$E zRY1{!!aQP&Dmo$wraH*|yUFj=Bp7#Z#JZu85fqEV{u0Xqf1iM#T#EhEzVBdJ%YgrI zF2Yi@6^9n8oS{iB#KK|6CyT}S}S0b zi{M8&r^N>UtDbEJ2J*dT+_~`YzZxIONpKayjd0X6o|9`G(Aijtz_;7x9V}4wN+qw} z2f7f*hQ0JQCr~2|0GmEhTQaC|`tQ{7vWX;Hwz8l?X;I?e>U;5# z;i)QJruCI${E|YoGVCJ*Iv)(Ai2QQP=#ZgZkA5pcRB-^G8xQ?jXPzLsSm_w|F4UkKn^gl0tqzl^OjbfN?VhSEE2OD+b-fJl0%n8zX->LQyh5 zGSmtzC{Z<71bSBv;Y?>+Gk=1}u$$Kut1EQFKv<%KPgKVw3^?3Z3>F*#; z*mg6GX}kFvj66R@{}Z_GEA{u}#I>9OfP(`8HX%}O?!%g+hD1XLcrshy4r6W9#YDe& zqPj9&mF=W9*lLTsm&xkGCP5o%3t^>=&^KVbuV+|ivpZ?*+Af7m;`H3=>yfjsP!0=- zEp2tMd52REVj4f9wJZ&xgQc;R@E|b+Li8_l>V>ft%kXIWt$C(PI88JeK@Lc-HWuI* zj$rw3og$Khg-ImmmoDOR^_o^v*+O3Eg+r>ae86K8@jp0&0OFZ!eeOAmx`y(4xf8)! ze7QFYv-+HK%#;1xu@yj30rt&82zT>#1GbiJ z8v*}Yr(~eRmWCum(SGJ^i$aDpm{1WMH(Nu<_jlL=Yx%PgC98kN&1-UsD;=15tG{-B z`if?jJ=h|aaU_P75e(HfEWnf8#D@T3JDwPHOnD?sd=OjM8)mG|h8xKm+nr`*0Bkry zBZ~wniXg4k>qc|q%{lp85$yc9x_`iZ+Wpl4R{+|?|02)t^Cl|IIhg&R7Tvabw^PBr zID!Z(5S+blYkct++z+52xnlL8TbL0P`h&bFG1D}a7g&29f~U7joeVup?F^PL__X38 zKEnD@0b4!qS#Y@H;K$--YibZG#X&WwbtYSopO>&bo!&i`R)3!u-Jv%~rGZ#LFg(eS@UdA$p+zE@uQ(Na z)s}bZn5x~vIXBAPK68H#gvdZxA@DC0!cOSjehQwsnDlCNNb3rx*VX!On z8mwO-h1g5i77gFw;BQqisnjdrByNhHt1nloFdET#$OnuE+?}t54qr`_DsENwb%D?C)YL(N( zPh={~dx>B5R@phGSc@D^hYgv2$-ZV|IZs71?D1Y}gn7P<0{QJ6Kb6_MC(01(ow^mG4(KQ%CxO5!+_Lcf=9|yI{2tc$N zTpdA*r~yM<@niXAe4YoNY(^?#dS7v$V54j^9>T`1dHy=m(`t41l{t8aIS$&8p>(0f z+U1ooJ!xFmvanpowVMVYNni5Xv?44Wi-e`(a=>w487o!TuQy%=)!vcATvb>oXI3Nw zhv%42|Hrva_$+JzGn)o#U(Z92YOoH_pyc(8eBpv*8aMA;|2Ss8bDIDs+9t*8LaxV^ z5c(aR2I=X!-Yvc6o^`I*CLod+!T2f!>UwUNaU#{#;T7fxeywexF8j!#yPZvjdGRnq zBOyUrGoS}k!&WUo(HN^tfEW;d0{o*+;CQ@h`x?Lr9DL)kmAHR?6M!CZpm#N^A(bq# z>8dp)a1Ft_LT_%Oej@lx6nxsA^N-N%zuRMp`76hhm223hNc{KX;en<Z5)Q#iRi|uozRcYJ^(l~_`&JkMT{OOCkB7uMb1TT!t|b7oP`Sp z&hee@dG}llXdL-Y71l8_r-sQs`A}?gaja481TKcQv=E#M^Ovs(>WyULaD0%}!>^BX zXY_UVBWEY{lAnMx0}nuo?#3#Fjcn}<09YG5m~2oxlIonNj?>j{Py+WyG?z9=pT$t; zrkK5M1~bg=(LudnHECNp{EwI0vR%rs+t2&9eg*Q*ZQ9DOyXx{Ht>{w%zvXPDQ_JMo z(^Xr2E)uq4M?k?D?y3aVRXE5CHL+DCzi?1U`HvL0V*8S@z-CL1h9FJ>RCshsoPj9l z7UyM0C3r7Yd4W<@dkX;&xAFC^KKBtHG|^8LY7BkfM9)Jxh~HhV>bU}~55o7`dLmTF zaJL0Fr`S}?z9ShrrrMY1&pAEniJbeEd)~R6Tcc0ra7j!2obz_(a?F%D{FoqS!fP;C zrarQv?YI?-f3SI_yfJ!tjz-=wA0pKFa)ugTE^9=dqgkH=469#(J+amtM#|5puc8}5 zuOhX(3#aFCl^Wtz$aFPm{0ZPY4l1rqiW~TP;+mE>e0r3ln>bU=CsdM~he)Jsp#Y{nD zH3AQ8*)FsQRz}vhQY8@IKvh;NT#H&c;EUqjT-eNz)N6Z`f~>Wl+>XUt<_ z@`y%|JFtKM_}JckKZda74pgfZ-uAHz*4tx=T~g?^qWn#(cZ+W69XB>VyNgz+NEM#Y z?)N0)%Oc(=QTP+heLu|YD)mMjAKiM#m12x8(zuidL1*atu3TS9>dzxV>&{&ea^902 zzLk&{Sm(R&8Rt#AFg~%YdKZdhmsz5z;dZBjVj zMx|C&nB2oz)K{rj1%%&dS>JRa{Nc+4;=>Rx#t^vzj-b?Zckc$3zw4TUulIn>x=s|q zSu*J88QcMihvd+VxefFHmkZFdouxXp_EVQ}_Yt4w@ps<>Qx~VOE#Tftc?rC_1w%w( z$k^mt=*95%>)Ws5hhwK&xA3sWeJ+Z_jz6v(AC-I9R>Y-&Z8^+~OH$;8^}T@l(yDZ* zT5cn}0k+;;mAf&!)v*^HM5w6J?L3NQN;5i^i3RLi%$*Q7h6YBAH`6oHJ$Oi}XD@S0 zA7C)tg0YEGT{Nj-L+*^R!U9k_=ty}?cB=3N##R-(>;{i=e4rLK?kqjw-sOS1hx8x0 z?8Z2Rd1k=JZE*MZ%GS_T^UY=lw~pc1Iq#U!O3??V8*Ro^6_FhcIuH$pHnRtfPg(mL zeU4Uf`|3Cl5K@v?6E1@H--8~NKZvvJb)IJ*O!|m);!$}23B)_g`N}qoPTw}}Dh5b* zVE-Lm(azZ;O9W zw8gWk`aVtj=EWfC36f8XzdpK0EXv5Wit=%{Dty)DR?PHZjeGB?g0$3{+B z+cOYwZtH**SO75k`l1_~Yx}4Sj43TeIRyg@pJxb)Ia!TITQh|+FSb1nyzS3qMBU>i zA%=TkDXGkKXQf`<0~42#<{qfSy_@Ylu!8e)r5jDXJ#HU9vWbQ-;AE8h2?Ti$wE8EI z0+r(3S|$lMP-n$w)!u_KnUNc>_HaPni!ZC9s(Ux>k$VXlm(JLcJiTf>u%RzEk{eLF zlJbYJOc2|Y;KTc{6)@4TS88KdKxM~yfnFU?C0KO!z&~?x`*GVoV#IZ%^rCECQ7$I+<~&A4?@7zxZ$&#=FVku>az+ zJ;R^4zEZpQ;3p_dcj?zG_M8Jb&vZJ}1Io`(L9C!IWP-pfHVH8R15n(VuPdOah#nzo zRDtz}E|EhCk)xmt(Ep~iM}6V`7QY56BLo@{gr3CMB6?5hbQ7|m1a&#nYRQpyuE|Lt z_R?@5%mF6#G%OiY0195T*|W}`AT5d>*Kkuws?S~CEUDFj7!)MwdpZ&%GI3E`YmbWP z>`yN9VL{39hnSwq8L7?NL-l-v!#8F&P>3lqCxv8jztC#4}A&d86!`-AzrQcae;Qg#f7f>A6pOV5q-c?sU4uk&Nv z7CttHPQ=mYHX=&Ol`$-IVS-kUEHPQ-XJISAZ&O|x%iZOSsO#0|y*TR_`^Xui+LCSM z1g@PnX?DS%!X_Dl9R&`@Zx4@=*YFDH6bmKiOf@Qj(dd3;pujHJ_G4n(kHNMl4ha+F zpV;hiwSGN^D{gRJjvpDfu; zPB&$egN2aPA`780I#`0n46WcAWNZ3tFP1i_2QlIx1y6DM$vnXnudEr2EzD>3Hc)BujOVqhJ&)CAQc zzPsPjk{`()2fwNFyJoi5-W9vE#H7R*UZ#F@bpn{T)@_ULEGMQ$Unm`)JV!+ZtrBVpMG1$hZuhQ4O7@hB|C3n*7wxMCEPYna6MOLaLwO|g^RdcWL|w*>Xll?MP$Y~kooB0 z;$AL!#uYx$vOJ6UW|;DL$XFTwE4FNYq=;zeR&93K6jhII)@`>CShVu{ zCE!x12*SKUE|szW64eLHO)+|I9Jk1eVjzv1S$&EwWJ|%iOzty&Q|4ovwLnF1x{m{= zLHy)q&3RUGc5{#6Pf!C?$hdM}bVyo;mg^D$pIXBVfr5z>BzKpmmI*ok3@Xo$JS)H1 zdFgy4xX($#NBBjE@;X+&5VV2<3zCE`gmKr~7_uyLZbOK#1>cJSzJM@<>_rOfCP@Ka z4kcbcD_Ugc$e~Hwu~^AH*E?RkT;I}$6Q{gL)5kg%LT=XfiHRk+8Pr$2w<>Gyhk#ri znZ;3fgy**TO>6HqxoKFQV@D@E6Y$)P=NA%tBZm`o_tlu)C?;agdsVQ&?pqahxxmpbmJO~IkBz$Mw)8^AS?8(g0 z<5>S9`%3(uxQ*v4RhIVym+RPhH-P$m9G5NQHa67^TH)kVSc{Gnky=d?8P`N0CTOI-;J4M{<<>yU(S3qDcs`w34Ky zjeR28#tvScoFCD{;FVxJVSAt-LVtb}F})f{v&B-}r!^H7utg=~JMSZcMD&*h(Plbz zEmXiG7}rJ*ytWSM>+4eT5E>nRzqT1z%OiMW<2>Ig72OEVgB)$=IWj+%;rT{H2fY~? zm29&Ge{6tFe=9=M+fw$|krWPKrGB$6<+l+&z5<5O0 zq#Yi1ToE`x8q_f!CpQKeXuqmm~l}XW?b8cE^evfJIi3fVeaZM zcFs7qc%k)jbEfg**o;KCa5aW*C`d0_&yGw0J_7+0GY$eusuGEN0kCaEj;?TX)-t7YAz8JQNywK!K zzkQ@$v0e?z$72KH>PIQrvMA`|UFJrkKiK{JmJ!S%a<>HT3V8wod!M;aP<_XUlG%>1 z5z_R!77_nPhcV-95EB%OwU_X1BYkH9Lc~X&ac~veh?;t@e?+9bF#<~gDL!^f`$wj* zt%2Cs@Zbv5?|1n7L?3^5^CwXOBK(DCq)wc8M5Kz`$HC_uOvj5P(0wA^bkU|*kdM|T z@Gx{25=0XO?`XTauoi%4U;_wHr#@Z_!OKhp0)r~%t&S$e9|GSujxfZB;;UafDa35t zdSvRzk(r+HOpVvaA9N4EEI?StAMAcSwx$A}9~6AX15HnfytAF8;8P1=o5?eE(Gsus zj06dQN0%CzXs;mjf6;w71|GvXbGCq6&iz99WV41qJe+;f5>cS|XwVTT(#$+xM_^dV zhj@9om;fU~?&@RVg=QDhANIcOxM&cZk}-S;l!GBJMQtC#eT@G1p}+SAHHub1Z};GC z9$cgoI~#{~cJhy-|6xCx;}T`4H_75IzI>{Z)EXHEB&&M87j4$%aW##}!$C-(QyFQY z&F9Fwv<2fplqBwGUgEKBX|n}E8UDKpC$O3g96NyvI=EG7#IR40h@zFj%VCQBMtnX^ zOM7(?pYn)^{>1oA5(WNh{3hl281PEREU7E>*0bKFG66_;VXSXMPhn>5;0{|k_R_jZ zw)NWb$$}t_J4sn>sJo?KyXT6)4t6|RioRis7NN#72HzmRilSq9fgnu& zsmqGCdPwX0ZZAp{VdPpIVDT-=f9f*5gFK9!Nl?0R?%*UMM{QO+j$0P=Ejd8&V)_=a zxhPRD`&%vjeUJPhDD5fucvg@Hk(=fBG-WFZJtgN8gK4keS6j?GhZ??TOGW)lI0hLhA@Eez zjIFwEB*n)quoJlD4AEb-+jLvr!fOF`n+f&Y0!!u5p)D9$gXDxcHc@MB@xcnDNQ51< zD&KMSoWA02iy-~HZ_8JZT6o^^eV;92^Y~jZN4yf-!kt7XBeghZhd>4{5UMv@hhY9= zwULp(2nS|b?Cj7pLyRHdw-_0IjtvT|6OeO|si~=3$M&l9z`58#HQ+4Z=OYI{k0uVP zkJ1N~^Bl)!=5~I03Jrs+kbBv9LL*_2!Y{$`z6Cm4mGnFNzgpp5)x#M!9*%x|5w138 zdAQ1^BJmO&g5 zE^JW_;Cj{ey=&3BrRQU3oh?>@^0>bwaF-HAut~1FC6Y`f!_)Hu_sD>9d?dVS6D+1H zI1Sn>U?6{zdK%UuZuIrf4{d==KCKmJ;s7>~H_m!-$YyBI z6IO(6xsqo?MCaB(!+gb>6clM_SOBOIjOWcNGfkXQwYQF05N^`+fRSuIwqfSzeiX?M z0k|XVAK+(5pBhrmv%rTfLu?+lxkH0}h&k+C;!^(u*d9(Csx=^NN1F&@9SpqGY_2tf59E;W_n=VIq#CM^M} z?@rZ7u_wMBDW+LLpd26Qu#IS`kt(Dh$S$1ekPr#%(Ikcaq6?dbr3!z(tv()FI%zqr&1lK`Q>7(>>%*avRN zne~Y{0MW*EQ6|GZ3|Juy*Q;QWMbpgY8BCI!V~lSdx8|+MWZf;3W_k|n)X0_NBNzNM zbqQMy7jWTIzy;(B$x@N}bja}VGj=d}NCDhlX>ul;5M3&|#!4Y9+^qiO)D|T}X)yjm z407usgggSxJ3#k}*$JY&Kfx{O@U&2iP2u`k?4rRzH-sOIF{EL9f*10^^R}#qbpj3) z03$+cwCi>VD_}@-6hpsF|I=V48~^H7;anc zAa?VG7(RfsutmKTdtxil`B&Q+Or{%E zt9O>8ZBMH!VBp&6gygb4E^y$>#ws1o1zD`;afdhXVop(SI~R+1#90ip-U+#Y$w36} z+70k>TG{~jIglu5{Z~o&i=^0K+0m$;lFxld<~)m`H>8djre0@ZQm4_BX2HFXF8?*; zIG9ezTVSsxUJSsbU|UvgEvv;=P^MglkXcz?84*gnStM-}=eO*)U%Ps)L%Vgy>@Kp5K4 z|9PK+MHBC5km>}s@^J>P^ePkqZcLT~eX!C6a$s9TOu7J-z+vhHLW|7wU30?zUGyq|fdr?;3>>c&cuZ)AUS-kNKC?1twFK`JhQF4$Z3lTr~HEslmf~~%e zD+6}WkBUWA>yZ7DEPWpOUIWy4K1~}BL&Mygiq_do$5-mVa0rm2onyQIW$NfwgU+u;$4l)&jRfiy!8n#|Gh6sxD$F#~UJe_{frl zHR+@7w3;+AXkdD|UAE_@bS(t4e$26el zqhH6pn!dI)%vKIs^}l-CIfrQ{pjnDXKoI!aE0Y`*%9#MS)hK&*u&~afuyaXbODp_4 z>u$%#!UH9+|0H%>Z9eF0d`R*Dcjr*eDuZu?`43*c*52Qs7p7uyko9udkx1V5@ZnN2 z^czte#mzDSGrtk)>%=ymv!uMNRRW?-9+w+reB3sae7@gOV%ASjBr!SyouY4Hf>_3F%$@(w~3@)@n;`c=8{U9gbPBiIXF=75V^a<%rDfM5g7BqK}xeTUzZ z#HW;Dc_X+D_fyiJp?sB0(lz-yJfik~zRUSZdM#yU1V}FX1c-88t$pMaKgDiJ(WXQ? z%G<`j1}+YveWt(HFaa~9VJ3NCH9!{-E_+;(6QPQhn}xsSstEiH7RPdVVaPcD)nN2JDWct%}j7M#980XLU{imd&YPH9PBJw!UY^gnEc z)vr?{{OB6I`yv>;0Y<9;ixhvK#oZ5J6K?SA#n+vdv@PZp%kb5xovuC3NZ+#un#8j+aZ$y zig#d&;3GJ2fzefID@P1mBU`1mX~VjCPVA!(GO+y16}hKZfQ`h2WeUEyZE5DB7|r;< zpTuX7x<@Qp{5YJoKsyB90A}?T|M+nwt#~IY zr-OEV5(`|C?hsEs;^Gb>fKw99<%|`Z{yRj0MyDUNr3H#D@#@yE9kc#Tp}nrKa4* zC%q(h=Haua>QVuSxjv+Sm$p-&wIMA^{gXZqJ82E9A}mUyu)d7*qN(L2R@lV^DfTyU zENO6#nrE%Ug19sQM!I~)RIPrT9@(aEE()p+_z$_(cMza5^?xShjt*92O~3#U(dmQk zld%WTQ{dtt@A3#?6mA{~@}N4-Imw|@JSDZk_)dyGSU05cg}4zifR0-Qr!xjPUl;j` zlfJ*xI_dDp-T2@VzWI{O%Ph%H_VzQi&fFvX6`J#jiIBq;naI$!JbUlC&J^nYNF)*gA@YiWakIpR2qn<+Bh`568R@--htbk|VhR!1FJVEi(tu$< zrDi$!&<84+z{*Z-OCtF9MMt6rvAqQBL_5d=lhT`USC2!chhDE5!VV*e#~{z-TygJE5Ci9CrgjoHU)>LnHN5N%D`3X`BMy_?e6K%P)glL!c+-k_$QB< zt)uuTg!VsED)ayDF*AXe)kdZg+Y-9+Wc%WIbu|I>koeOy!B-5!{f9x~Yl@{dj`U^Oi=??llq1ue@>=%D~C}|g3 zl@U^?7)ZMJ+~hO{D+&Hw;?`?QP}vYy&ns+$ZY=TH#aYc6O0+1+yqkg zKRj;}fMu0p+(m;VBEWy~JD~5X_vRk?^G`_XwN_LZO0YEM(r-g|D5|Fmh~SLMEPp)XDM^tAoq8T7h)5}%~%7{GPx2#g>p zN}jV{TrP=&FIYL_fSuw$`KM2hF9!6T5lH7#e|G%)$-i~ppK?%je)RjBzp?p0pR<+o zuQSV21rcMc#J0%dO8oGL7gR1onVGSSB-Dj-WF>xs<@`6FAKwgYsk7aF_fr>s>~+wf z?EJ)^uX_5UKX~jnHvh`0(sWvH-M>10A=F&l6$wyM3-&6MSi%A2CUuwfzur7@s$t*! z__3c={Lh-*va#`>PJI^e8iuM#rc>Q#NP&v+>3`b%>9>%TIc}&By8qazpK)J_{K@N|wy)*)8B){#+2)yl zwt41%-8}P;Hb3>tPks?^1VZE#{=bMyTBt+g^3s|Ack|3|o;pMRz2Dh9^DC#${1ZlU z>dfEz(O25fOP@u}U+vCBCkzw+_}RbssZ$yOP($yX{i~m{U~n*wz`+>+!L$GVrwojo zd2r_MOQlY7*uOo|kVuvBL@E)SrBMV-wEpPt`wX{?E-bf4xZsUk`qEfUFYB znVQzmoI-D4&p1NX}qyHa&W-M8V|CAI#UK9M`Q(h0w{JYIF|HtN;|G0VP z$D3#VeDlm-Y@Yec%`^Y|=9#~e6?kd9;68si9t_E1_yO)OWcW`o{56^AzxDrTNuu6FNf_is&fniXcWXA8 z)!&1Wo8T_|@y_0)y3=OKlmXmM2(zD3jzL?~@gLCTUo$R!e3vCxRWmyG%mb6io z_dy-CW!e>a+NMoc1X-3gP1u$f&V7;poI7{!XX!F^mb>ld6SYJhPOEeMox^GM{B44P zE+HN&f2L`579Y6kd2wyI)Wh+}AJgh7q#Kdk_-l@SfA1Ebf9V!`_HI2Tir~_%neYcY zvrF>NC9p82)vs-?eUH+kogG|q-p}{@Fut?|Z8WW3a|-#5-0pTcb@by&bZdm z%QnjVIj#2BmRQ#%kd_aakB9&8qaAw3Y|f7Dm==gw9htvEKVzPz@K08btFUX=6G>W#JEv+A<)J8YzB^~1HrmS?)3@6EVg?_aWi$bc}= zPmvDSZL#HA^cHG}43_QM^&%Vb7tX6hYx|}yogOH-PeNiaYYA=ot%uoh#Gl^gKpa3jW?$U7bLZ}%7^}W`K)#xL(`w_W zUfWeeszeH%ir0wzA$-WjQD85JJ2*a~O>aK@&fW|Zn!}BwbJN4yXi$!>%j{1dr0$KQ z$A9S{+&FqheW5R#jiaZhaseOS+5b+oadh(*esTm>&j0w2nv^>)NvojBqOPo~s>_-@ z3EDcXqM*n!uW*zWWmCmz90z^Ff4d@1gSb!9tSr)`3O0_o_vOx;P8aTbsb(D|^5#V@ z){UdjslLDW!Ch|c!s|knR7qGzT^oj35EfZbH+>NnWnE-pm4&HSI85t2i<5%GP!&}g zhFnHX)%IBscV!YVN$)&RuS65^fJI-IMSK5&YNcqmC&7OkN5AkuAIOGL`jexHnjdb) z@zH}I8JRGed~d$w*t}8Hy*6G;<7f5)-xXN zzH@{+IhuM54>qNE`2nv?2Dqc_!iDL@ZQ1{_N?Qwu{DNAuZOYgZ-d^ppxXi00>5DF` zvo6ouppSx}PWrk^qpaLGy0}=qJ}b^)PJ%eX3*!%;sAY9h=Uu{-H*uF2XId+=r=PWP%d`$TQz-G}O$v(3NvP#=zm;Nid1 zN907#!5f>V%qLPe{~PzvJzR78NIJBpD9bVq@;a}(IO&_PuamHaIcU>3L4f8cK3oI( zoZNn>IUi0@|8Sp~Gxp2t`95`fy9JN7F^+A$k5I{|oL>0Gq13s(T7mBA8bw?9L<4j3?nLXz` zQU~6BppLVqull3$%q>3ECrVRYUDmsBo_Ctj8}Ccbla&ko<)MIf&)J#|NgWgho7&#}$udfxZui;W*Qa^4SeOrC=-Un;MND z9ac%4hR6VYo>WEIS9!?-`-S6%xETJ^)o8`ysO-bOt-CJo(;`or8tG*ix1AXj%J{#* zWNOYrFTn5+@dQcXIW+<$o!>-6^x90Kwkxwb=(>p9WHc5>U7d(*Qa54HvLjzvY7@h? zvX|c!|1)nB`fr@Q+$L=k^iW)X`q*=D% zcT{plk6M~XTHtV}LA{^@M5i5T)>6-d`&^UZ_dc+yf#t~*e_zvtJDJYoWokIQG_AYT zaPi%WF^VZ>!ylu5^f-tP9&xD4t}DtmPP;5*%ft#xW93<+_^)O9F8l6 z?ckH@#dpqX6-kz7Wfq_yDcHAFS43%&!8gZcSB5cLXMIy951n@_*rx2eXBgX%na;gs z;}Qi0WVQ_QwCv^7B9xYh#AZ0@kt$1w*uI(H62xdW*LB?g^#3m3qEA9DO?^EZ4`Tc09T{e6lq?vG8*X*&mOlY7BC& z7g9j3*oV~4f(+Rzy&)~W8<`(F5M#dA?$+)O*qSc9x;l)=eyhSP#Qzg37o?J~IrqNa znyz}^>XEIzzpSn5vcRBTRWPV-rM77|MZ9}Pwx<4@ku=&bZz{Io`C%|yQ~hLl?++J> zyZ48OBiXYxiwq%7!&Wt*3G(>#aY=k`*de3r!02sM9PC%&sh#6m^g&dIab3c^gn14} zhI+F|g0v~4J}FUGEYou#$qFCKDv@*_oX5p5aJSpyw4->lkzj8rZOrgunf_h9`-30c zcWNFdWNW(kZn;%AX|;0|Zeht9vstegp(D1tH$JgT+u;iAeBzSi$Q6*zahbNJOE2{u&7#OkQFyuc*XFi5 z{5G8HK(@O3X8B9|R{3FhU;1yB*VcJ2p-~=9S$sDR&(47G%?i@b--XWO<^4eJ3sTA| zM`o8bf_S0@b`oNX8Bf~uTIG8-Ky)#oRt7xk3J<;-lTm~WPM&X zP^L5ut0;-mEQ#tquMjRrj@izOzEZ55ws1CZ?d%0w#0tsmKS$Je^la_z$1oQ2m&bj6x`sxa z-`UgMcTQQ4O0KKeeO1v072Y}Msv)US-`6PcdfWrX39${{7<%kC=ssUw&3zqTc*ABv zWv<=TT=9B&t^|5l)Y4k3?9P?{X8B~BYsyB5L;9AU|Hr87wwIs=beK3$#^}> zZ|(80+zKeEeknF>Uac7Q8u*1>2 zXKZV_{PwA)A`y41bpFoKE&8(Qu%x#r=wjSy%MxWWZa7WaB{ga^oN9)}w-cc+F$KA& zXXG7Ll>F;Q<9W5*|B6D(2U2v8FnMRjTNjv)KcvrYz$T8rPk&5d^&EsVPv^Z=2hFpI8xxJY>ZH87n z!FfRvq(zL4vHJhS<8WhmiK0)FI7suL%dmoW9qRq6ue&HIS5qe4Dt87*Xe2MUfDJxn zT3cvuX>HaNWt+O25Bu=&rL{0E^;H@t0U~^fNtbDYnP29g z#?9dKPww-Pl-h+xI8}n8duiHd%jDI_l`Ax-ThqmN%bSY4ch<1yZYt;T@>PKTheOJ~ zs6?C{`!5ot`(}AQuFV0i!!uV7_js?$cjNQ%IN13R=Z$Bb#gpI52g;0N;XsW~m&XA; z7UoR;$5-w+{5R+Jb&2H~eD~v#lG>gd2d!~t?F;3TvHVzhW-JeF^v_uRPAgWI>AdHw zG0wN`giwuDBB;Z#j82^Ey^szx2;9^r$C(Zu3hy5;I4^#9oRjHd*(I+L&)zQq<*uh9 zhtoO9QP|?hjFP!;5;SRj8Z{Lv6nw9%2*Vxv2B&Zy6lsB>vdCk^_%Ke>JZ!@z$eTLG zdjpAcy{{Ec=t?d|*KhuCsGa6S*D|6@-)Hh$a>oyy#*u3H zn|sUNxWhB6RB#?FbVMIAy#X~JfmEaXsO2!Y&&}ft){TSAI6KY9B>sYOsD@=fyB}Bv z$$hqk;;h}N^ibsNxG&vz@2D!*E`|>B(ADS&g7p%FTh`e}+!bwIGd<2WmW zwu_<`U%%A%rA^@fvZ83)vTiXZ<7ppfRh`x?YNI3;HOG3NYKeKX@wZcxADJC}`~cmL zP(FSPeb%;aENKe-h6iVnOYksp#*}wxWve19(=?#7Nsaq&Sfm|is>bCPPHKI$g4?25 z>*t5YbekJTr&#S%D0-YWyH<2+>Jp|ERIydVyfj&!v~gLseh2AT7o}a@GU2#7#6iUA zEwc*NB+9c6H<9NCQ=u}*9p^-ky&4qwwybBq46* zO@tj1|FO8qi-1L5@1?s?uk_{eqCa8{t->1~) j)}asXsFv0&KQ=SfVB6tLjD8a4b#~a;thqYgiSZb$1MrdsA&7D zOS-5CqfQ+5KYEy<>W<%|Ggo-^we$6{(?}mH6zXU5aM4 zZi6VU$}oUhh>I<*i*XCjpXHcIzP!F|q;xUkzu=d6^R77V(G7nXU%V&97|iO<#!)tH z;HXdlCOK9cOwVvxX@X~AKs-T)yHYNi;5e$=P~xs4gp@RkTKJqSO}GFvx-#{qyVlda zPwFx!jtf8VF{legzh)KTM! zG1BioIK8`y(pI+PDMCAbZ}WsZ&BmmU-CKtq@fHbB_baaEr$&&@ql=cJsO}HFb;w24 z1a*x}iW3A(O;+?cend&$reO(ZlQZE?;lAf7JaCQ5uE6)aDo`PZMMX4TA9Rh;Pq}Rw z7eqB#`bzVT+0<-LZAQ{i9XcO6XVPvfCR>As*jNgx06bvwi<3bJoakEr&O{U~6QLIB z4+3ePx3$3gd~`E?UkAz^jV25jOecj?jD69Szf0vJy zVW^nRu*Pp3{kjkq-9x{yJrXak-L38|#12DJd17b&ElC8-zStktpje*8o8CEDtX=)! zdwAdvoEqSOonMjnE9Thfo$k)LR|G-H`5ejNyvBDxBMi|dTIx_xTfFTU;nRT>gI=W% zf{+jtJRmZ_W^nN+BaF^o;j9RVn~Acj#rdZz2#LyZ|BLaT#=!-Xh}HLrrFCn%fRSnR zuKL}+NtA?=(d=vIh_rPmoN`c<36AGgTUKd}TSi|LT+C4d&3eHh(o;*HFX#MeL%_sSaPU?#)k+ zUG~0{>CroEsh`g3L~#?ec<1AU3(7#$7VHQjT|%OY(9`AqjtLRs!=`DoIL`54fQLc> zz+H|7f(<9`yVsqiR1-LP|HAthCOh*$g5jXJD0zjlVcv^W$%xWX#(3Rb; zVtJl*s=LG|#z|~Gy#dk;*SjJNy29xN+unWwScu1%!9gV`?sGUAKDy&#wz&L+XV@aopfLm!T9c(`OhY591*yVD43WsjLo zGQ}?*x@$9`$A5BiA0^t86jytP6M_AjRI*A6J$^zCZsI&=2NOv0&a8cTg1-vLB=~mi zG|oiP%%F1azHd+a?>%(OsBXK1kGgguJUG*?w#+y!G~}kk3W7&;$xQ~id0tb+C>f%&Mlu$2of@hct)+trg`7{Q z()q;&IQ|l3gYj4Dl}x!?$9I`WKQpg|+`FL*uVew;9%~WW_VloQk&n*ancw1{XYEcB zX_((;h~e5HMqcM4uLF^H<44|rBd_C;e?@p*jlC9PuZ7raA@*vCy;>4)N)xZn#H&+o z@NuFNua?wbCa-k~b{oGFjF9nH?!C*snJB!T6<*20>sjITtn`+*^h%cW>>TtNaQ~yT zvdplG#JoI9-WvgE-&JRoX9sR4Q!2DK?D_>yy@tf(ppVJ+d%=ohk}?g(s5Z$stL1P{MTRyB?Pi5r z3kus|?UIob=0XLY zos7)3CHyYpi;EC&GX#MrY?QaNrq4EH}%7JjN!k4*{e&>-Zme@XZwZFdi z5&PY_okY3tH_`-(d@8pW^*?&#E>oXg6>$sLIC}I7Uv14YYlnbGpHz{jukG2b^9RBc zDUtaT?gCwr(yb{T{bi+bU#B-iy*EW)M({vTm0f~-ij!9js%L~IrNHgJj(fxktds)G zCh9UgD6<^(bCdT`j3!o&nx~q$7F`o#+{j_Qt1>GIt1<&(X`(wg5hdvK{k_S>7w21w zWBTn!Uh6kIoZ0L|-dov&ebG5yB9{fq6{jPr7hZ2(az0nA6Y08rwU0qNCTkim9(`Zg zq<7}Za#>WeVG3#zX<2CL(aD1`uDNWd60RCWy=dYMXYA+~5x7+Q;-fkLyYIb!fsVX? z;R6b;2Su}500fno6g?NLg%mpC0Woe}{bQ={sPv*i|hJ)zq&NQ&yJ zish=V+hi zgzY{lLV$vz6a!iw1zFcg=vRd=0lWoh$Ddr0u6wRD>Efv)%Wplj?fS!>IU8x$xZ4ZC zSPvd$j}FX$1HY}^^w-0R*{^I5<`SSLN#0cY8Vr)-;jrBhoyHz?a1X>4HY;Mi60Q#> z$VTX>c-J8ISrW^o!r3?HmN%nAq@RE&iVRm$;s1lTH#)2sl{y+klT zpWdVC&Y8>3Hs5QQ`IW5<`rvo62$SN_OrbFlLLWEJ(_nWVK?A=y7pR z<`z>axN*T<+78HH|L~D{HjcBQa=voxV~K5AY7!yO%_aj9N0xwvzs@-C=+BSLNb6%d2WQdtehuw0haa_3dmYY-Qf z3k#KWx_tN6?tKYTSuV(GxwAzw(t0-UmdmkFZcoW=G&|_7NKWwOvaFQbQzGPMdtmgh z?f}c>7Ph?P>cXtqE6%VER0=9#IA0~CgKU^feG%7i_pqw0=vQDDZXDjO66pJgjcfh^uwriL@KpyO>XO@~7|gBou&_`AZ>k$SrL*a(BLYtOdD5vEmm0d}iwPK0b*sDIdf)(m&C&4H5z&|&lmtOUWZDprf{)CP0@>zBm zZ||!#=*#8V@a|SKlHMDLIXLRWWiNlhwiky5dwc1Gxnz|V6fhO>w_+gd{>$z+#v)+z z9Vx@Wa!VWocP#x3T6}~22se~@d#Svr-Z`3*J_*@V2Pg^)fiPapT>Co#p0Oe|HcE^Z6S)Wa(Hg$fCQ`GuPo< z;$oxVJeEITz1{6@_M!~hAf7CJB1SEj?%l5DSHAx9mQh_UzHn(Fv!m;I{m$%r%i|QY zjBBa4CuuydU%iVzF8dMX)N)HKwYwMZ&O0)p3f9)E^Q(v#HM73_5zGFXvlmy(7R#Tp z0er$C78F-2sK>dSr4IKK5hje6pN2*&278-uG~-lsKvaxf|gz7deR}q%U`e`PI7Rz9K6TApTe%| z$RuE?rd37ImcYv96%eZ}nvfb$q!uWizV-?O$`jW?UxM!@E+TD~m%xlgMOqX1+lx1e z4m1>{txhwbMW@p}j^F>_QIsgQM%Dy=l>5-drMKDD6>^QAi2Z1Nb{0E3Dn3vfc3})` zScFERmS{`E$;;XgkZn5dAaNNA*qix0965?7rOR5erh^FW5Co&ZtccXi0|EuOQW zXo6TC5tu}z1=vk($8-m+7&S#Ofm+L#+Bf(_H2sU)TI(m$oATrxztyHlYP5aZIQmx) zAc1PpV#x2YUfMJT#dKlu{MjOQ)`W#>?{s&XT^O*_bJ#fTRJvaDHT8|-K`IwH9hra{ z4yi$#IT_L5EPhjgClYE6snM~MC)Phs(0Qr-Dx23iF?pN!fDQG8Fy@H(KpQrIlM*JC zHBp^M{)x$JL4(CbmxwMf~?`VGysDSG? zXU$*k)i)FrU86S%Q>#dGuV3_P`=aZ|z$2r;)B@!CW3#MZagwpUDbj{}w|5TjiX4O@n!!6iLm^-NRuxg*kL(9ED9- z)j+*f_x{X3Bm&C-wvBX-NQpz3cSe4h6;n5Alv2}Fl{Qg z)X85t#RmfB`n!EelzYn0@9(~U!Q}9q9pGtcHXTo;3N*<)yYyvt@o?$MbG_Q)m~n+f zayulKm!tVPek=4v!I)wL^Yivl*qLj{P?prFeQ^l^040ET3PG0)2^Ii-Rp2X}!l-_G zLTuAK0-rU?qNu4+2Ui*B>T!$Kc;o0d9%W&qgIp74X*5iPjL=X<&&>0ikKB-G9wd>f zg*tFrT9w8dvyVPMY@an@Cnn)1nrUIAAfzHH&mY8Avhc}GVKpFDA7d^Mg(-F5mrQ~> zqN*Ogd1nEWgmV;-*$s^Kq$oSWvWbhu13!%dP!2c*ZeiHAyeC0c7?fnLAmoVTOeD|( zP7-+i4t`%F{Wuf1igBoup zAR35WM*jpRFq_uvGLS2{ap1yV;K$GS`b08XRP1Krr7)Z#;?fQ8zQr_USXq&cj|(KR z-1fz7q5YZ{eYKv;4;UZr6}k0B2XTGp;$ zkE5y_Dfd|D@%ZZh0oH99C2eSd7BpDG%D8tco3dc=@aVP8vX(Pxm zVe!dH*mOBy|5e>c(h-sE;L(Sr71O#S8(*pR(Cvr|^he^jZbg3lwos($V2e!0*6wx5=5&ZbcwaL%;iHq__1+9her ziRwr;2h-dp5n*j)ifjBez|9DITR=h>NGY6U5oT@KAeCk$^GL++cYT_}VHi{FL3Z+m zsar>ytSv>X+S&wWJR05$Kj`o7H5b=@=|(4+ShOw8Euvpy#t_X|JA!X$TK=-}PORqT zwUw&=)0N}yTvg`cwk(!}Syk4s{iK}i`5f|Ek#7<~w8I=-B;}p(FEz}Tkj=0$oa4H~0T?G?K z8Xy?lm>z$9u@h?!#S=me6${~157bP@IY5bw(;oPdVH6e(8tEcxiVm0|uP;CqHROb@ zs;VG9oBt;%8p3hcladWl3VC=*{J|NCWf5tQg&Hw@?L)L}it1?Kh4JY*5vcgW=_yH_ zL1wDSlSO|E64im$n1Z7p3c`BZ`7AZMTvWMIoCwOWVb$`sMNwWA;8aAySYBV8HDC&{ zX8b?PA(#&-q=3`h5UxQ?M+7iz%Q8u@*3xQdKY?ZQ6TNgj46t&FDfF$y#T2oH z{3%L?xqM$dqfxkCL$N2z;w(aJfp3RcJd&Qaip0vVM27pIg z0ighw-uB>jw%~1XbdfH-!Zn_>B|Lr}1JOl7Ad#W^6tde!0iYXL{q)V^On{~zX6{W# z+)2MZyCajX>5ja=GTYtNmRh)8D>0hsvsNR$%OTT}tWQ3&#KLTUqd*=ZE?@S{70NWI zkr01rExTvAp#>*St$#-Vvx<1v7Hz@=Bv{$i&)dg0aUew~#aCP$_F*pzvOKgX@{>|u3pwl}+T-@JXn{vO80L3=`i z3{^&=^V;9Us(0klmJgj>%kk`Y4g}bSsDD*8-bQXPTgs(;p`QVSWT#R0^kwha(7bm7 zB@1#?bP>Hzq3Im=d^^2$Zl-gC_1d#4xQA$toaE z3p|IAcInS$CS*hw|CTDaFj7g?wz{}WV94W)9v}hc5yc8PR&c>^>^vZ0d{_G_fdU4F zl=S3Ah2IC+poM!tEk~B0fPqvL*13Hg0<+i!JE#-;x`JB6Z;@E!pi*JpI(wC7LiDM? z@T3y0jhn}PtMe8pjkD2uiivDrj>OHGTPegt-?;i-a$nuVsG``==OOm)3+{KdvpFU9 zfKa(#;u#IUu6p3@0}vx%$6yG-*@R_@Vf=v9s_P<5u=@)Dj1u`bGnL13Rok(1bRw{_<=D|8%6?Pw4Z}DFiFh80BgftYl*P9XUIFtu+8zQntrp| zIsEFuOrT_hg>(x9{PZW)3dG0T-+W?k6APBO=S*H~Cv2>PLxHQ9i+)p?5x+~F7q^EO zUsKf+kJ@Q0y|E#7#cSQJ;G?>x=dZo{)wgea?d|I~ue|-*>)eTQRM<+=;PC0q*@xX8 z6L#QqYP4>e(qrEUI+XINhx1q7-+NJ?;e5 zjbSKns!5eqbMBKRF31!lu-y(B>2W{7r0=i2i;Io_spO6Lvq#ID#-H33*rn>C?nQ{vrldYv`B*T z;1n*&DBi%ggEUMqd(gKrS8W`$0fH^}B~rAe*8cc3F}SRt7&%}X!O^)|gpdqhSP0YA zY}!K6(X+t${&dYeJDrYd)G`F?f!ZdxL}UZz@W2pow#qsX$OgBt5I78OC~%0fDT5~J z$oPVS0C=jB?BN?nSJkE(+T(f^#zcXpAjMu+EXsI;3~O{jX$Gd;T_VOE3li^@etn1rQ95uxnAPfjI}DCxLk0o`+5V!#2stG6gUj=m`Qc zoq;gYA+>N6opYNtDaQIL!toY`7Q{V|YoZ2$@58%*>q{Vn$9M*F1}E(dZi}g(%L5>u)y=rVpdP8A?HxdQ{rU>^eTap<$N8Yyf*%AHCk zP^3-JR&mko@z8DSx&-RQ*NzpqP$y`I(*n*M$Wdr*Mn+~>_P)sqaR6~Ow#Y%2OnQif z_TiH+i8!IoCg8%T2xKk2tpcAC6){PIh$b!TJ}S|FBHVZQnqqXSIdINMYLHIheXy&? zL?mSeVs!!TUkUd>S<#@ob{?&WGa3gp60ZY7rxX)9d5adIgq-YvvGfDA&9q;Yruh23 zIwbO^3=#i`g`j7ea^8K4i$0;sj+IYq5`TL1QoA9&~J;_EHv-cGZ;t&sH9-Ez)T1p;=1DGJBuvagYqkmZ;Sl-?2e zH-fC?6b2S5!EdE$a0|n30bW#vat(Cs0;3y_gm%Bl4wIvHUr7~LZY%ccb96^u7**-H zMn8U5&7kyEURv#l@?RaQ@j8JC8a;v7!Et%2Q(6bdCnH@v(h!m@`go_u2&FA{xRMNA zpa2CGGDRynv*B#eZ;^6d&eM;}hc*K`bbCyGgRVrsSZdToLmd;zWsuF%@wQ>S@We%8Iq)b9}g;Tpmo~hNrF8uA&*F26u7{p4S4z~(mCo+ zU%beXnDSl__A%eG740wQwRwXMUpM4w#ehk^JHO2>h9rX4Nh`AF z(;;j2dj0)6KDQx+i0>`m>ITXJp}?Iu$SKX8eXBTktt|M;Nr0RiV<2j~J$bl30mup6 zA>jn_EFooR6V%RKEg@n6)Ojf;zliI>DMaYAyR#4da13-3d7KIaatJdvV>E+3EI`x{`5>5VP|r-!MLc! zbn{9fd_axA?q09*jeha+9PV?5|Dfr4lL|*LNZDYIH_JM+zo47ftV(oeHwJvmL(e- zL~|pQM|yE_+kLDvmN*@$OQpqYuub5PK&q(*ootd};KV;1KVh%ezz1f;+aa3dWOVG? zh82UlwmH4$C);qjMV&!Ks2FMjN$K#WT^gBduX>dAIl8Nkv^`{0Ys$DI9VdCIahfF!vznLaIb*s+h+p0^OJtwonrOJp?cRgA(k3)*f>!liHWXR< z={#`G&N&s}?`?B$Yrm}2{=?w5COQ(&nd+!YNsTFP&1r~71^H((Lgq52kQ=xN*}0-S zQ>|Y|d{x;aoX;!ttANwt@|!W?By+;Gxdp6TfYV|?$h_Gge1e#ZtQL=rN=Qve(z*hV z0hGI>;!NyHjs2afK=OgKJE%5nCgT${+*m8$S}&^Sje6;ABJ8)w1h{de*g`RPT0_oy zUdGByW0R-vaMx*u5<0)iZS2mjo_nWP;_}sMdi8K0ITN0te8h(bmmWNPMTd%JyMyjv z!eHVB3)U%Iri6CoC?v^xrjiK8F`gNCXpyHQ#Ct%2$vgt9;fzhO9C~m1EfawL}doi&-Cn^+7m|^bz=bUn#Kv}QP!euA$t?uJ- z+=J7C>(9guVW^uF^m>jRIwJ1@fffyHS4mcx409xLP`y}(L!V*on<|J&>cZs5`m`1^QCv)!Jo8a_Bw%^7j;&WC#LQt#<8eEQK6zP$Nb#;Vo^xg zBZ?;S;gEPC!|c|igjbh2S=3T)9tvyzPzyG9oSiv%I>A;ytYXt+_+TU1mfv!g$}WI` z*b?Y|(UepZs0tyAH(AK_+8w))u4Bs$N%(qD0jK;cgV*)iPTLA>FXl@e!r(84@(%#E zYbF-|Da|;jn@%ka!XW~n`g5+BWoMHM0g1WYS(YLW#HX=J3564WhsfOpqcu6p0^t)e znw9}KcZ5e%3YUmwu7>Q0s$%VM6ckR^!r_3%EdWSWyy8PG+qFpB&z?8TvhLtKO{XS+milw!Qa!$DB6A4%TYN9mx5-{cS$ zoC}NpyEgv?&?1iugD}$Z^&2;|+zz>0J29RlJy)3&4PzkMEzaHBN~vQj(&_>C87g=S zoFh&#;_>3oP*jQGstmASbGWg2z}J(sl2E*cR8E|&1^XHF;R$T=0wv>Bl#3r4X{ZB^ za>u;)T?2G8Zm9ToX1#!lJBx@&kp@J1vq`cTo|^wgZGgB4j}#W7j+IuGPG_(bxCmD2 z&BYhnEl$~Ki3V`$Zc((P@N1;6B#IDL1X3p%r~()pqBs4HV0>oZCIn`61=Jre zT7cj{e41>K^E-RugoD&{&ua!=3AY}Bwan5KmvnKDC!U>by?loPW?Z%;dAjW0YzWnq8#cZJbd3;V( zrWt46n?6p`A|!wdCl!z{3X(x}HCh{-|G6SLn4+g0TQHS-^F-=HutUYyNTDOMao}wT zW9nN830+vbln_x=C?c%k5sc{4!_eXe05S*{u{ifXtyltaf0cb~9Zd$`S*P>38Kh_* z@OZ-WGRA!XSmq1~j`S_$Q5GnDr*MPOI}aja0FUq2WK7O7)?6g2P*4yFvO4v_CclnT;Od=#xr!-%zYPPBF@N7au0|XUk@GSv|9nK#a9`6C3dfX6L z=Q(iLx6n**q#q~6jP;M&_EjTJJ!ustS<+T~$S%l1uCMXlBBlUuER+FkFSjszB_a_J zVsnN=5Zxl8F$TYzeF>uu(R_wUJT%F6yie&HxxFQE8YC2jAYrk%h$M2dQBXSuC?5%Pa#F`2`Zp}X+lt2V#kuKN600R6~i1BYBEB!A-sm< zxp1aRlnPj}Nh^)VBo2MRPp4eQT=>|zncW8gXf?eX2JfnBe-6{9qiO#7o1qke|vijgeToKxWBZ;qG%#(=B(eSUN03aD{MVfW4 z9_R}3GFaqU*00f{x#al*6A(W?Ztt!&J;V1#8GmHGPZldLvrF)k)k*)R>V*1f1ofNK zbH9f&mJaR)UIyfrCMMG-w1Ms-u?ap8=-_MJ0Rfgx4nPLhXdGC9FX49;cNrudzEgZPoPCG~dV^yk%y~oh>AK@0 zf*a+du4YeGkQWl4uDf}x1bT7X%%6rLxM_~EVh=9gzphfC9h0=RLBF6PN=o{pWLhEF*&P`m<4+TIsj4uew?U(BG@K&PZ+{F1^!mS z>xZDgTw*%sVzLLE6$-b<%kw zCo5MW)x*yzqRJcT8wLRTbDy8$l%pN32mcB&1d9X6`dwxGH1rTJsOrQBFxKZxI3Bwt zHddT&SYg=AhL{yJCxn84YJz>s8#enwlJvrOla88bZt>xjQp^{T-y#)gr(L}eC?xG{ z`^#otcvXWwM#LMoCThnGEdd`9wyeTC3r>?v*Ir@rMw6YjRSHUO6nwpiwC$@7HBihl zaId?dvZ8vKumYf-PGk-go)Hw=nFWbyY4Ko%_lxj0fH`OJ@hrf|Nh1P)?Gz@uxvVke zV`M_MmsH1S&qaKO?2s}V3i;BCyn|j91Spd!nW%G8cC+7==qT-@K}Ax{ec1&SH1mO4 z6vPxn=?qU|+T&0n#KE}IIj!N5$;O!h7Ucd9lh8`2v39m#c6Ai8@~ z5^)uwC&XNYTUCR@6mDJEg~A-Y9FFDC?7=Po)r2wBylm`M5<)WAo7`{W$Vbcu6OBGN z?MnDX2$NShssKM>{}VxgHZtnb!-x;Fgtu~Kv~0QOEE<{pJTd5Ezw69<9%0}Es8Z(G6jD`5rdoXGU5LN8Myzmc!FLpCOk z2xZpYK>&yb%pV)SIzDk$n3;v&Xwkl-$HJ;f?zTAO+C|XjMp)Fl64q2p`+b}R1U%(f z9AGx!NmAm2g=zf-MXT0cfrD?AhNyJpF>xC^I3(#6@|dfSAEQ#ttP&%m%q)ry=y;h2 zY}2}x_+lr@(Y9pINocN^Ltx9XT_VP1IE@El^mb+|=#bsp5KA>BQsG~7PXYR}j8Ff{N z&JS09iF4fq(BcCU(DA2RFd-F_0dQ1=&|NF{p z|330;y+6u#!^clcTA%r=y2$gxy1u*Lssrup4V>9vdk6@X;G~Qo0+7O5RF)_uI86)5 z$4PP`M+m7OlRR8m0DH?dB>HSpGKqWH$$P|jJt^ystL?abc)0({CCL}CV6r^FzW-IW_`TUg;7ysYirs(>lp4m& zwk7BLb5pq~1jq%qNAG6{_(u09SGoHWe%}4LP!*h)^H!1{IX?wA#rY{YsGXmZ zX~O;K_gQjzJ8#9{;QSQ9!TG839}nY=0yMv_J&hLdHXa6Nt>8Ca;HD~NK7d5 z|4yBO--I}2IB&&&(EaI;C0r=%&yt8_&bI;&>i+brlCknMAp*wFS|BCz5Z&w0m-M0%n+@A+gRyu_x z&4>HbAA$sUyKnuP#UI&y>(?xq@13`q-$@C{ci;LoOAc-Kt>2KSNu0Ohbm#u`s}jSN z`*xu!f7&HR$|)?_-QAylpCt*n`_^wrJiDE@0`=tn^uHBD%J>!!2LGowlTqMxGV&=W z7C8S~Z@iID8&S7;g+ssQ&>I3Ccz$6TI;ZY0{B?-|9+Shs?+v$^`w8wG{!f3#B%Ay= z3AoRAKNoJ3(i>MOZiG7Rs#x8G<#cM2SaIiP>A&?y2?U~7Slo4;Z-r-dehScx`*Y!~ z-$&7^IfX?P>;ClLii&-FOV(=dr*y-)Xlcj!#b_O|NX&b97UDuv5L+4(K$qhaNa!6p zniOCMuQ2$2HM)faXD)DVlb|4OJrpmI1YI3&;*wGLB+G?jfrp5Y=kRC|(5vZ9bX{-b z68CL~9Ri;D9r4Y(`2GdKKi_&~^6uV;d$W)Clm=HY(ZzA|6MI2iwIYkw;JQ8WM_s11 z=t&DK9heXCGeV!(;Ib-UoWyB(g)1C5(A`!c4nHV<&^dOP^%L;(kTeNZZ@Tl1EjfhCS0@^j!Y&M3oyo5>O zP7fY*i9Q72BlJMnJ?RM{Z#aOl7j)>A=?E8)EIPGG z5HnspIB?*0h2gx-!8Hb%2|Y8rW&y1mNM!Md!k&(S6_W-g0d$fXwpmovIInr5h>36^ z5J3FNaFC!Cf(>vv=y)IiChT@+$Z5xhtShjXK@G<{jE3+u0~WiYZ@_|B9lFdiY^%(# z)#Ey~Ap2ux!K)5?3;N<5r7-_4hEza{ zM7%z}KR@usL0S}mX$e~ayAoeNN!5Ux9eV&vU!*~Q2M!hlF_6(%czxUV5vI2P>n)Th3SOWDCbBAyat)i04_ z*Daw_{++vr8a_ecV(hN{#H`IV8!mKnh8b)R+q6h#j88jij93f`WKvsdw-?_Ti=(q2 z3*2tnjO^c-0*TcGM*u>DIV=JNGHDh}%mNjRk7Wz`E*4tcbcu+>)e{V1sI-FRS!z-B z2E)o?PgDTW>Du=_$N!SjMCSiI%+-VfhCzTpc1FTze0Ax}n9iq0|>3-|yFYnCM z5s?z>m)P3CZ;)tSjsE8BwVgS#?a3}1UU3~!W+v2j%vm|SBY|=VSun<&#l-302i;`g zeR4{mDS0 z)Z;#TasEZ6wU>Qq;R}VBU^i3K$>Rk`Mptun1HFvoqoPt*-T2P#-GfTvSY1u$O^uc* zEA7>&-FW?8Nm>t8mS7nmOGtoe95?a?iyscvWm$;-1zeKr359i%S$)g7 zd2sZPZ5vo)8M5_REiCm`mj&h$h`{ZtRXNCRaJ%o^^Lh%03}q4ys{k~OICmV3GYB&{ zV^xkd)h`Udas|E?an`W%J(nj@@eu2rAk8Xonc^paGSmJhPg-Xa|5)pUcg(JG zmxZU7hO!gQ?##*ML}t?+0RXJsO{Orh!TQ56DCZQ1Lv4i-FBs7R-_iJl&e_0VO`Iqm z&O}+rX>3xmzu?tMsA-PV%>s)Sf=tG{pe4D0pk#8`%O0>}7(C(Y^g&{)$a1N~+^nCX zd}8d;egELS58jJDU`Hte>PR{J<2UBMq>%H_>9jQ00Zf?UZH&uqi_C&UJ>VS$vMP=S z-dX_%nJ3~=$KvF~C=r%a1cd%VhcNaTm_>bQHo zKvv(Nx(;_((`P~wtY+$9pFJ~o)wGfVOoT|(B5oMUEIs5s7*I9u?uss__sET`y z0prK*UvN2uq|qeGH3NSN*ER)33bd%-*p0&j)7VA7FgS=k z4sL`$3rkUqe9uNRlQG$OgyiiyOH&LBx`QYY%1s$_{*)5%NL4uW^7+LnOL_2@?51 z(HyJsK!U>j6xQ&r{V z`#w`v%^NOOmx~rv6_3QlOi124hX*&6D(07*J5}O`tBF)Amde}M&1)>z9X;2NNfeBW;HdoI}8240&I}DATIVrA3s85+&&IU7GDFV z!ofRqI(ScEa+cYKFPFc~>dtz#*sS3xcKd*X<5kW*(|;uTu6_RB+`pEkF}wL`IlW!0 zyY@Kh39eOGLK~lZx`#Ykn4Dnou-X^l;tO*dFLcJ-3-+nqUZ(F$wL8bXE<^PB5_2U< zdQy^HfR|N)#fT%V@U`9n#4DS~vZRy1?G&Ml6g?q#sice~8*9(aFdTP#0F`cDb|!&M z;+H9TUb^o4gvK~0j8rW6lc_L$9KxF0tObg)O0q#nY#bAHPW|>e1MfyWFsLnPMZq`% z2SQLxQdEd&LqMkX3KNf-^b&C-zVrc_VPcQaFQFNbgnD8sl;9yvI&KNf`eo(qY0lzE zRtEZYUac=N^}~8Dsiua42*_|WJ?*A2{-Q7P%bTY3vz@GB5S zyme;i@=3)Q`qI3-?zkCWU94by=`{0|6H3v_xUubU~vy0)b~azgctLz^Sk?T@j3*>N8oyO+kYtNY??Ed?|ak|`D1NaVFZFA;b^ zWJDGq#k9VT2E28Qq&3LBWaxt6Kq>(mC&37jq&1=Q_H;9o`*0IC#0Sz#9WW zk7UVYtIDF5pz$8u35=LXWIO`>hshifA}-%YHTR+E<5yPqaVSAQ$IHa|(&_6{;+bix z6UCx*QBZ9)iONyQ!*y1>l$m-gW)l7+1 z=~Da3O>fvPUXPpJJagK9=0HQ?T~#6O?twB~=$etKx8ey~uO%2vlj1<vS_t6&jv(8rxfO(O1*03(E%k5hPb}dG#sknEjEDQ>p8jfO}3xo}5n2ERgbars-(!EQfyuO6$ ziv+`c;(qzrXp(I;{B0 z=J4KRdtovkW+WWg2OTv0!-E!0HjaMtQPy*qAD!asaYl*o`jYxb>l+rwEG(&-#`RJ0 zCvPLQC`3c)idOM-a>f;DS+|4!vFXJ_e|+p}p1vhUhg&{%Em11+%*V+Y$g0Pg^BEu9}r$H2m&V zT>U`YAi6>@hGTeEXslIjQMY+daHWEG(xh65=HiFW1tPXvEHeVzmVr5d^9jk7F@9oJ z!9_3i=L1}(3SP1RvM`i{4Io}s02PA#(;{LLAZTQ4YfqUeRZYUKfHS& za+Q{s)b*jg?uVHEW+;P_PO>TJH1cQbJEBE3rY$-&mU9L!k+n5C6|~S`alj|zBS}~| z_(mkniWi_>TM(`Qx>Cvo(ovN7zu<_4tr*;!9CYrDqksIU;+nk&XYXmZzJxPjs`EF8N#cr#K9RXYw`_vI~6**egCpeO@yE1qNM z@%L&;in($0>-u7O1SZMcZoi~vbT+e2Wrn*B@`cEVUehudrr_S!9#0f@Bjmr4LEF{O(rgYf+$1yFSu!9Ff0I!sBv=w zEUnNmGK(lTixK`A|5D*K9kN|2lWK$m`|xqAQ}z@h$iPTX{1I<(S~ z)nM8LY@qw&KZ3(~szIjR#bt@(^emCB48gE6_#W=eH7WBZjco&-aS#B0%w%KGC-y?F z4AiZFUu3@jA3hF1QcDaBF1VCI@a6AO(W5JOZgAFt(0a^uUU(|-k;(|nhaSg)`@dVz0 z5h5|+fUpO^NE-q2L8dLDOz_2Gzko*R6>hmzu?j`_t^uYjK9;z9q_`>K1CpT)uHuBhUj;KoO<(4%xDzP+A4`Z&wki zK<6j159CV?aP%4t*7yQ6fL3G2QEucSTH5i#4WUd2UKPCYi;RJYe0)+$2 zC_dp{&7|SP8=R2{5)p|&Qpui$+jt1jF&X3F+?=tKagI|UF2W>v!>bZsQSJv~l5oDQ zV9&h5xQ5~KN1zqvyb339Np=Io9^g@=G73UyrzTV^>bU#78e%YYu>x~a#ac)V6gK6u zfm+~U3(}K+2yq+BK-!m#j7cvjj~pf_4$)J9=+L%Sehn>&3TBU!sjm;W57uyu#9_H6 z;lAx|5RtmyVW>udwYHcuZvUKM__Zw9Z7Ts zyNhilZuO)H5?2}tFcMX~d(V2G!;eXZnVdiqoT(rx0%Qd25q>~Ilh|_aIGSEP9}0wD z`Ex6j8X2l~Mm>Fq($E;QWDLa52OoyGsayLdOcJ=a_nhK_&*VuO#w?Feeb#aH=f?of8mn&_pGW z*Qps8JR;XJ1`g74NP-rkW=gsgaq=>*LUy3>9`*7vTW3@A&~YeziWwIm>?w;T=9ETj zLWNcgm}K1dk1JK6(~*RM!|KK4Amv772LSd3c3evI8&2^89Pm&6#zb39z7FO}w$=Q} z*we3R?FN0+i3-gC>|-k_i7{f}DUK~ESgJ!w9R{QQT>YBYwrBLI3a8y5UWhq~ThvoB za|xoXo-2?zn<9Lvgl5=~;FX?Y;P@6R5*bZa3}T(3JE1_ zd)Ox+`NaHM;4TapA%_Rd$OY#Q&ZLA*aE;)F1Yjc9Cbt)W>hObTbT|Qr$8i*IH~-s(wP;Yl6~w%odgonr~qa!$HM7)UbTz5 z6r0?;=;bhQ5VHedA4csKQxI5k5^-X+4yJv(K2t>t^qyXPbyywX@vieSh_UYC_F@Sk z{8|O!znQ8$k5@#WEO*Zs)+bmE&IrNeib2a0uYYbHa#IjB2+kcDy{bqu4Eu$dfr`{Q zF<4zKY9g>vB}gb0j}EwD*c7dI@w>7G0I^Cd3{g4DVEM=C0E|7F9(En{8D0$h%|sHF zOFT=@=JR_?4@=_UQA>a%29!KN;Q?!byB#}^RL9mdv)F+lBf37;zpaJ!HLR}TSG_Ym zS1N+rA};%3p*X&eFkL(Wpod?npJb1g#ECyU~q+I3pgnz{4m~AV|NTxG<&WX_4 zIO>l(iz|nG%puhC>s$hMh_^L)dzhJ(X1=?626Z#e4WgS-9s@U5f8vvP+byHX@uwC6 z-Vl0Q>;dLTk6DQzWQLiKbF}b663;GV^tG*sMHkmwaTZ5zkncDVT7+7w^-{4UI2T}! z)fs8lM@8$RZ%NdUDc!YiR6n?H0*IdGn$(rh>bKQ$9g{A2sa-8os=H=ua?#d<*erY2=ld3BP%}k{DhtmAU|Jse#9MN#buvOhq$Mo~VL>Q{1rn880&rG) zAuLp;;<)4)EW!y}L&8Xxw=o7~2?TqbrS@hr#9e@_fdGC>5H;5V5%Mu%n50@O?=Mhi~de zglh2m!hxDlDZXh*gT(5_qP^Ak;ID#C z6bPC!ASnUve=%Ca5;s?!fJ!R?rP~^cdTZ*kdB63@a-M;al=w-b-XGg?G&t_Vr}ecd z1~lxBhdy6RjyqCNH3Wi|s6oj7gmwtXUqTI0%@VfiZ4*3udUE9gKtLKR5Chow1i(TV zB=rJ`maP_jY+YZ&;@P61_q^&FPL6n;0|A6O4ZUkmMpdG!#5fL$Hp*^y>QP-wc5xCF zi`p!aTqzMg`lMAM8o5D;7V${0rJZ_V0W4$g_Gz~wCP`S;+iMAwnPuo#=4oEg*IkENr8>U{bR&SgY`Pi^$Ae6v3mr0Gj0*3)8m;il%xb77O z$AWZMK;YNl5_JGZa1lYHa{!9SBq$g`l6u#l6rI%IxO{y!7##c#pfQ`n*AEUzhB?C! z<_3F#mr3lsBy@OXvW!})=Vckb`e5yh+g2}b+jeR4mN-qn!&Q9<4O$OPb-2IFC~q35 zfLB|*7UaX%?{&@H!){D?u98yftABc7^#D5k&4@d&gus1XkBu7&tE|5q0pK3EvPg_K zk<_TAu)2UHPXsj?p&Nhgzyt$QAwdO5cJ7Ad!ZDgt)o|CM#T9HkaXHm%CnyIp)9!lO zXO{DH&I%#JxZsg$v;!7|*v*(^7vwx3RWa~LV5NAS1}uTlQgB8(Fep@lNs0aicLrn% zw1iwiCxgD&75ip&u%|Z4zktwL_f=RDGv&m~PMaQWF?kxv7S@ulnY@<)ibk9m1V)7W zp{NO*B6vW42R+HeLW#Q~!2x+yJ1CRacQQ}~$KlxL8Z?N4uZ8bH}3a2G@uurpwh z@WTX?L_B0AGl9Qn&l~f-{r2saERVoLXGT+TtA*aaW?;jb;Tw#fhey&0%feK(eEq7 z2?cmE+b8?SN8Rp7f|OR`p2C1ONa5eV;Po8W0SRhD+frnx1yJabg97JUlEDCbB#5!j z9)`08e*)+?lwLqRu>Xm6>@w zhZFp|!HnKHyg8`xUNbP&vjZf`oG?8wkFtpF9(~^z=LX%#{`(5L9KaJG=x`@ASXC+a270caH&Ag2$&#QvOF0M=y2YmM|OGqtVNJWQ)gX zvlMutd2b>hbl_w{{s^R%bcitGZOsx@H7Vo?TJ;Kp03MGvYpH5W(P>LNCL6h6aU$8Au59Hki5_wq*{>SF}!8 z6in(%dz+s<5Y*$lz2Y{K_urXp2!{eBy-dWu6K~GGk7$) zAIW=$(-DFz)KwJz9a5F#SyCj*OR{{lNBTATLVF|}Q-lMoa#J`h;RWLE#Kp~VO15z2O>XDC zx7ph&&pv-jL@vqIS&PW-z-Pz1_d8diUzj+JM*y$5 z5>fXQM-2dVIDmc?s0BIdvS|mOjZvCiDVvLOj)ArSXTj8h8wdss&xT*EV;cP1N@RTN z{zGEiBg?>YU07QBM^GVbZAji!z~TQiU~u;++1h@D*PMDP#hSz(;k3nKf(U`8ZM4{>ydB&`(2c7j;WI{3HW_MqLUogd>Y z3C6mr`TEI+H*(v7`eHGu$jQMIk~gZKva2PY#@O}l+-fN){q^! z>zeEB`KA8bO*&CI7zInxNNT8~NXnKi$hGChc^xRq~qA+TKh{P_#G`YeY31B2qeaK%1 zkq<;ssPuR&A!p*hWnC0V#E&0aEe+xSe(ET(8@D=#C~X943tKvPFXJL*XiYxRi2c*) zBlg{V#0`j&Z0~|?A=nRW4z_oau#@Wn+bke46!UEKc1V55A&UndYz&bt&_M%g#;%K^ zjP--nXDVduEuBrl6T!jo$DA`I6?HFM zLg8!C$eM689qltG<(Z=e0)v#TS(^}7ASYuzLUcQ%eGn{*r-!7EWP8MZo!kMf zj);ZT8csG0=<*KsE#%PKAz&m9u8z)@rx66y{_w(LFKaKM7{XAF2UvsQ|08q^b2oA) zslefkRZi;pnZtmqI9ucrv#Ja5!TRCJgZ19}ivH(HS}_+dXRlzoQJjv!rP^CQw=K}` zKG##->Ch@eyMc(G*`VsBs6Td&zWIBNt2Y}&9ix_4hmL`?-0>a)M2=IwXz}i?{%tzaZ1W6edJ$uy_ZdlO*B@1(jhKdYjrVC{sx1Z_-E3Kn!rTvu6RDk5w zIwO*dv>3`kvq@FBPmFuB8g?smk@0YGvAN2CRmtxe0W z#N|WBq+a~fKT@*fiNmX4JaK@3B0(g>`sxbZ5uOIAkLK10NK9YDh0hT}UJJ`KUTv=& zoV4IT0&6!yE_Pjx%_-LqnhUXKINfoA)QCV)my4P7Wh7=iGAv_!@K^z`2;jOG?Xl=_ zk`0~S*tDm~R`<;08x}%(`0_d=|D#`SGza*Kp_~TN$idFW0i6QI8iqYk>sV~COK7Rb z$VpXvWXtL&Wdj;tO47McC0n-9j1XlC(b9Ia*@6dAYe+V!NCW==o+{oSh5*H?uR(%8 zOfAH!d>m!^J@dV8T@H||@M9ba1bq+6lDPk>tkJ<&``p+6`E=3$zfc3pE@bo6@6TYA z-z~sAf&CQ76gww?lQH^ovE0qK2y;np8thGI$V&7KTlJiPFnl)BxBDnn)%jH}5zYz& z&{jk0pFO`3jiOsQ#8MJM3EKd$71Abf!h(~X;lqO(Zv^f+IUm}pOH1Vc_6~uWcrb0T zZau-wc!+^#Z+)`C!=oJ9=D9hRP3zHd2Cd00;f!~1*44!Rj* zeJ2|h29iX{2ztFJ4uc2AdJTpilg$3pk}z9xC_BaH6y7^{y#AbImycjA*dux{Bm@16#Q;h^}n))bj6eX|JV|@ zfH03Q@RI_90vNr3zZb9+09|6-A^XG^nyt2ePf3~P(1u}11!aS?8t51Xer(1ARHEm; z7Az=v%ilU)ljl?R&2l>4-TK2r9S&Q%uSgfX*^2R^EH8NsgD26>1!k_>E0(xJD)~P% zfZaMcz5#&6H6{D(BRRe1m|nLI*ARy&ud-&FcJa~Y4`(bnNgK3O3pZe=_$lj}>I)D5 za0{0v>KWNOB%r1wtgKJ_M)?Kk`O`amMRq4cFRB(^M54S&;_&qmeuy7s57$Qt)R=D3 z*LZ%szQaJ$tf+kQFWY6QFppm1gF!M8wYxp#n#Ac&sQ zhJ&8CTKqdbjzJ;wvvq>E1Is#r7GU*P3bMfBN_m)^QB|O&5)h+WCUBS=@SbfQE+5Mx z9ftQ^+yTd1Z{KIgTw|1)g-B~0^eZw&5s3sskZcU3m>@tF2S!#HI`5|icDef9qy0{ zhuAEFIkEaN{Di6zB$;;u0{mT?0By<66!Khvmkb?FA%Kq~WShJj+-e|$@gMb9kfIZ+ z25<|3h?;T8VGzki8T15NAjw7mRhFP6@OY2F;1HHC zEGNoXci`|c2r_N1TnQu+w5l1%c1gNLFTBI?7jfhrcg^YFa2=muWW;+&^f-M0_`v$b za{&YjE+Jf1If|Fb$KQ_34yb6k9KiQK2LapzJ40~hNGX%#WAHxk$D;QRf%yUBe~jJ_ zyLn*=o1xHbq;S58mUk7$aWD|vJApDMnEO5s1M0x_c94Kl3($tEsbW(`LxRQ<^H4ry z>c1cAA=yN<_)6wKnmv&2%hQ*`*L2jqFb86itq^ifDQX%t0q}+;W)b>5CI$+C6iZ(Y zy>EvlNXQPu5}3GMx;za^5X4jfdO{W|&1JQ*IYdBCK;;PFK+auc>X;OUKckQI`NIN{ zufh_vRbHw+!%R@dsS(EQGI4)iSjh$mNsv4|N?bH%@8iTCOrhz3?2|(rI97hWgCz!m zjH)*q;y(s;sU!)6Vw0Z?@K(q>%F5=xd%S(?cr8UfG(fYS2Fi^I3yHz7By1f;-VH;< z0-#z(Xag!Hpp{K(W{_vLbyBKZO; zCDR4fM~=GmYANI4i56HFjPe7oB-j#rGe6C?$ECZh@XrIyCtT%v^S;Z358_Dp>GD}_4}e< zzdl2z@NV_D3BzJ|zE>6bmq_c{hbkW4`G^=Kj0ApEab_Jq+>&zGv*{idqI z7k!4Kr~F94^6gN4X>fce)EFx(f7Pw$;sFPo3Ocmn=~!` zt8^m7oKuNkjanPDSZZ&rk6Otgh|WVm!!i_9gm--MHCtYO(LJ%%Njc2MrBV`qjWzi4 z@o=WR43xFD#D0Y4cmsKSNs6Y#_V%|n;WfXR2yNR}52Odw-U%}rUht!|VZJGUy;(k6 z361tC@HY0frF{u@(`et1KKty+f5rF6#qod}Y+E=%QP74kUbkMLN&|%ymBVEaRCHIJPL64-!9jLRb~ZL6He+qjL&%!z ziUOVBGQz1dCqfI51+YE<_GI)U4w^)n+1JR$1}BF!1_()zOC^+pfFr<)vBH0vjO^tU z)7)DJABlqTB?QSpob0~60E{rjRRtDni7SC4K}PeiwtXgBPOsUmL!L+ z&IwAyDM)-EbfED1km#3-g+U_Dj$Kb-qcm%+&{9U8o28$nyLyeB?hZJ-JGN<~#&efDXL`U&RjQY{v!; z+G-bkjAFQC#4ZP_6yCf%@*~}IZe-uy;97Wh>+R!9U%kEgJr7IEKv_?)U5WWTYdP>V zQo%!DK3j~)D?TPWo%T00YGTnHB=zJ6Nv#AL;*ujK9B_4C`CPC zK;W4%n3B?Ph^~%=uLu=|D(GrY&5;pL{PE;2y#o{7|Ipf|3g{%7o9wKBDxkS}$UICHxs?yX@Z` z1qP>eUOPRwSqH9%A6)(5s?uC9Ke+b6H9B`e>EYY}6KszE7YbdX1jmZNA#M;52&0Ua zh3t?OhTeL@2?XdG$xrMk;0|FE*cq^YNZ*947NlZ=TxLf_*;;mhZoKEd{`aRkBykJN zb{|$?aNBGa;ooUe&6QJnEt7E%H&@%&l5y|#>`br)e7S3V|F@@mEWbeujn!IUl;$Z! z^c_K&!~l{PjU4N&b7T(KRmk9ieZHSd;3SXcxM33j+=aP&45L^t@^t^o>*KCk`?&07 z+>@Bh%A59!?XC2hP6$2N(}vr^Dln5dZHtBZzv(MxbLu?j6k?m29RqB;QRlv}EzH{J zR6YEO+c2MfcJ;@H?_J!!eCfwm4&VFivxCn*`yI_Aabi%XN>$1ysQ*Eq61xrKYqW`B ze|_%jEb8}XW!~rg^+Mx#TqYRD?zl;ll@B7Hc$vI}`(eIh>^D^l{`gR%5esU=D(Dh>fc$T*90gIVL8I7VL z3h|&?&l?tUe$TE#Co3Lnr0k=!Z#Kifa;vp@nq#7ZT4Qto{nkeG-0vAcv+EdotI@2PhLrbw;E&v>Zyt zip=3XTjeRBCAe6h>?`T!u{^JV5t5~79)#L3w@L+-c$QsT?=?CZrjqn0{4Z7j47#>o zZ{|X_*94p+Twyoo308DOw;eJ{GB&8TP^NJe zw#P`N0Q_kjh|TC9m_ZnD26@JEtcOb zcRK+_NBGO#u<1myRCM=2h=}{-AVeX_Qk(xSqx=c_a`O$mG4!?s@?nj&n(Pf!#O5Ow z;0COTqB`99U$$%O58vJZbcpI=_=lqR4%S;HF21|<6peDWrMx}5^p0l_BJO7W7#a@Q z>1(1HgA&5B|4ZF+Ml~U4ma+<#`fx>z@h~umoO0W&s(|6R%nk8rhE5yNJtY}FDGZ+} zsJITxfT9=!B#;) z7HBD`!2O`#Jiky7*~?MD&vp<&)8ire$*~-vBtv8b;UvBS^i8tT6C{%r#*oRup%esg z8bRl@gjj}vW?Trow%p;$^0)j~UooX`+8IZJ27}M~NJ8Y$P4PqZl7fO5N-0dY#%<0N zW~N%x`}*P1HvR%Zms!(p%HH1m=6e&W|{EF*G_tiVbqgGUk_LMm1CTfcC4LxJWm9kPs% zSZFU`*5QAi=P2dBsgJd%pTg+8YL(m;!M|AZ^@1A&8EgrB=I|#aJxcBfWe{@%9vWCj zRyCSu!dgN8Nwb^^DFH*Y5G#PX;AA0)h2i!7kheG6=|5U;+48X`{Ony9p)|kwN;YYI zZm#ger`!Y8^{BX#KfmTa@@K(yjrprq=FRezk3*7>7v;p@I(iigTDsa_+QguBKT_nO zKn;Q{Urf>HnBdyLkg#OnH-Te68&>R(*joV(DI8#lm7d!O(2lOl3F0R+bmW>E40!+| z*Mw(=v$|}e~C;`Y}WXUE;YXPL|Av%P)gXB)s@SLVgx6(V9bM~f?+8j)gV_V?!1 z6ofO#lFe1$$}hwG3#qcZtxBb0n~7ubI!QJO6o8|dy5Kl67?<#`fP>e4#(>2G z*R>Hj9xog&w+S-f6ztgyha8+dfW$=Ul#94nbcZk_7tp6k)TKK>L<(Yxu@;aafHfx@ zJs-KxN<&rJAe)p;kM7OXLXI!o^dTRoA>_*;NFv#LCy@AX&tEw?UQM>I7yA3|$pN{D z(uMRYLsR^GZz&K$_&Z1ob{}R#XcC)6!MN`v5wFpJA|xI*2MZ}8;`&N>h0Or0fOjNl zb}ix@PVm)NZ*xAx^5sguU966=Fzh`FL+%fwufF;*<#kw6f3tjw0d_+f2U%5?&1Q~DI>I^u~0fIwi_b0@zz1MheK7G#g@n2@HXpqAi1rY0v0|Ik5xyJe z?z3m_w9SW(C_m_k;4@D2|Jlo{0zrRqvPRX3koC%8NdBaw?JbzlWLkN&_vMxZr6sf? z?L`w%#eea?4mF4Ga?D!y_BL1d4Xh*fI0-JRG zoA*~8{b7oh_)!>3miEYZV;OEjW{3Dafw$^?6dd5)_(HJlhR)yQn5OXe))0sJAKW!Z z1{ktM;TnZK7fN>6P@yuA-Yfbrd}rB+L0H;{u$D~%yUYxb15PY_`xAUPKrn=-k4NV% zfHuc_z$}lr+*4=m%3%qjA$_tce-3BRU;DxHRuKu<)o=w%isRG4$tG{Y(XlKjjM)oM z)<<;sHN_*LF9cQ0brukxNd89LEnqJoV8uwr4GqSU5NUD+WSs@EM79K=KHQ#DX`%?` z&^v&QgIxzwU=vFk-7(aL-)Pl25xV*sJD;p>hvzr-y-P6JF-EWh+&BasvM8xWIHdg8DW%TV zRTReXEd<4Y`9y<%e1C9b$o}h~?Cg!VVT2)g0k%3qMP%m2|1gB346HnM1sJH=`8Zl} zj)}Ds7v^FDR}`kxCCR_}J&!mbQ>b!QK{5&bDZG0GQ^>sr<|{-@AQyT8;qBlR_P@Mm zzeHJ>T%FhV(9qCms$XswVy#Q5Q$Fo=6AYjhqc@1uH(0$D_8AO>ojPCk!scD!ny^Ok zHO0IoqW@E%Zb)`R1B2Qbxc&)r_&!+s#7JhWEWM zdr0VMHy3Rj+K-DTHFD+B%4w)CcOnpDPrko`q+a?D%spZ@Lj@NnH98;7bcLZv;@Bos zij@usg_Lig4+z&mFd|HUz{2ghoxj}Mh}JXYfnb+*H@oVtperW3uxpEDsVp?OUNnsaNBw)@2635a?$J))08~q?e*Rmj&!G!IA8P z_AEO;(bn% zfKX~gZHZ%?I=hOCm+kF{*)>*M8iyQ5qR~BJsor0STO@vy(uDLYb$Ot+`As-8$TrnE z$cs=CUcBHI;YhS&=9B}f@y6ZokC0u zV*z_W)^}_+0pMKhjB_uV)`(%d_>6+ns$7BdIBS9J%KqnkrP*Q+VMk?h> zawphm%IOaFd;%5f3}Q}_ModT~krttNrFa z(8tXS9*bbZIaCaoe}L7%NGck1atbQvqfABd0})`SQ_rNBxFtDm?6)_ba6H|Q=!~o* z;1L0@!5ofJNjWVspAt|CG7KVb__#67NGjqxH%Ljlw|Qs{{Xb8IK>3eBt`G*kb9Ozx zB{^3uEsl^0@-yX~Nze*`s$%!)X4u>R*Xg*Y@32{JqIwvOp$~=_8#XUYZxBC|ag<0& z#Cs(9c{bV*8{!Qijv4rIA5S>Z2srHk=qoWC%PlKRZWdS_u$%VC7d&3_Dr;;uCqX@n z0L>@)k2NJae8FPJRqgH1dK#HD%tlrf7w>5x68d%L?4(ma7A?PE91&Gj_lhH!3-2Jq ziC?zsF09uUKK@Q3LcVyJe?vAADp7PDC&lCKtH*1oyy9+2MZ=435@1>cqeC1BhJTbP z;sU^;qGu56jq+Gax+36N5A*_g(2$=8tomS-gw1|HxIm4MQ;CIU$abP^9di<3#e~Iu zgrd%Tqj)BZa5WUseBxR+f!@8Rn5PMm&x%aupdo`isb>)R2Qq-xX9fg2iVR4AH&c(P zResU;l31ktndyB75N0A*4HN)Kw}LGaAi!oL<;}^# zLAYJYh%+|!U;aVow&)_0IM_QrTB8%8N9_lCB?(4^qYF%ZpGZl@!`ut@S!tnUH!lvq z#m8{Z>ljfT0_>(90lgzWsW_^{2<6)C+UAuY6F9#y#W-pHkG2*MwU&?n1-_RbPFMn$ zA1UgS$fp}$B9d)T=_U36{CQNHUZtBQiju50ppNJGC2_>BI2?DtL~&1MGe%k?z&==o zI6c8*llXACu%V5ptrH1Oy4C878GlY{mlMWgkqCLU9O z8USX6YNK`Uxo$$my3}VCfpISYJ8s@f4tJYDjy}Lic&;DH6DU^*wJ2mhUi6FY_Va_ef^(o1y#t(`N`t*;`qB;=^H}IuPJl`L7G&P!}~-h=6sa_E;%p zDb^-LIzQ($Ee+A~Z-%)q3%z6izFQE}|Frz|bzz;$fBn66xLfsl=EFqH>|uOQwW6J) zx|a|DpaLqP#+?f=9h>RQOlRc_n?l~7x2j!TcKhW;8vP66Fa9^y^3%+J=V-W-7+@q9 z!SW2YUc#!a9A*C5~&an;{^+ zdhv2qoJ4I};`z~N5X^8+@lc4}@G%Y~3L19(6w65b3X2)P)qY5ofW}@{Q4-po)x*33 zv*C2F{`l3ZXW4|2DNNK0J`eX^H>L01Ysw!jx2c8RtCCs}#rD9`|~sZDG!xVoKKv-u`ILx6W9rjsnJP8QPlmb`t>9Sm;-FlPCl z>n$FY6|@Fq?3=&}w zBrecn3f|evPZabM!i$u;lk9%!1+r^iC3YUv$)WA7n zja*`DfRk*LM+U);~H%0?Y9c~Wls_{(Fe z@mjK#WUV2_x}G;GpagF=yKr@X53?EL_Q7dyqbI5qHOQ)gff6%H9feNTI5JCNdj(Sl zUm8{mVrfWOMnEo{`m0=?Sdpw4I~D$a?9Kz_-$ei+e=Z9O1~P#@{F;}|K)R|-MqXI2 z*1X18M#JF4_G%Wv#f#6`^3dk2kM`72x1@<3hq(ka>QWp~Q!>>k(IokN<~y@7**dbq zL@PmAh_MZwonFomgJv>+k?DwiFyT`5TGoW;;>5LYNF-DhcT z<(0&m7q|s};MUOWi+jQk&WLBke0+;by&H4QLU&uk1(9sG?kW+kKHj#9UO!=_2KXW}zhu@@Pk33shcCG)Btb1)9)R@mPJq^cNudWO4V)4JB)|?fqbm&Xj7SAY zm4>9(n1Vrsfdt+l)L~{5DL=n9S-f{n=JFlJk9L`j)4)(H8JhmWom}F>39{tYGTu&4 z%_9M^$CoI%qR-lb%tJY2wdgJI8%fM<$ql5>>%>PpaLt^ zTxaV1StsIs?yP8@XpNXZb5>llkYPj!M-~LmdK^ROUo?nOBy$KY&aroj#~^YLno?wT zWdbKiV~)zTgzOh6E*%C(+O^V?{b{Z1X?uP2;L4X*4PKuxkZ{&MSbYDiecWJ|^qe>+Tx#73zCEjHien7sgEX zT3M=Po1x)|QuQaH4B!)0X2s$Hi`y}%wTW)y^e;-2>8L{rzr`|BW*$~BM-bxFDeuVb zS-unN%}$EY1y@1#@VT#buvPCzEK2Z5aof0{Pp@Hrn#I-w-Zq&0CvNXK2cJ51Pk(>lD-#CP=L@}PT6Tfjys5Ng z9C8_ieUX3Tm?g;yTvxd;Ykocrj&h>TxFNiVP`XfqTI4;Tv(2V>gst-a?927R`cXqM zBL57o#@!)sb&$~<3H`xvu|ybJ4FD9ek6rh`_%6kP3{qXW-tkk8bnrl*J`y&Bo56pX ztNf$l;AA6*5c@H})x5ol(3cas@#klrHq~jAbU@6ql zaX!$F;K2Wdd(9mGDvC`KhBd_()QW$|axwp!>0AbaR4Na3^2Wh2xv=lvMlrFy-wPLN z`G`0}TrNsc@Y*~2Oel{a9}3G?p_T7SLj`!85B&f~G5RYK0PuA((!(l`d1a@7pLR+_ zT~-+DZUO9?NW@(t6X41MhXpX3bx14^YM{^$)u86E&m_#;n@JV_op3gPLb8$jM=*#Z zJlxx#ZHO#98+e0TJRZV#*K7LnM%nE!Om0;XCxm9YAZBFF8ssV`XAo-c4q+t3UGC&p z@DPi(lFE`^6RR7hB9Lt0*A}v@0m+}^9uH%Ru|}*j$4}PR|LGrx_2D)Cms*)P1KlY2 zoox(L1x-Q+n2`aIh))tCNG>5MfK11jjfo9Zj2^N0v~5_PCu=I z#0l4ZM!J>qi_qO#(e9q#KBIU!2o~sBRfL~o@ertirjaOoR4M zwAtMplk}0ZgM~UB!Q}_l16dxh0x2{ABC|>TV8lB?-UI*>Lm{GwEf_MgWNRneLSL*g zmHowZAUoTh25P2=xT59p$YayFmJlqBYJeMTLPBZ+b;e8-*}X|c3d10b6Sh( z8lpl&um+xf7o8XmQq&Aw39|0qY@8y;e&N@qs zKWurh$gIX>ZH1$fX(D|E*T4Yd_97P}l^ufh4hzMwKvXB)0s-mR&2SSEq%R{#gpS(L zrk0gpxOm*zZ*FR^DlYm=0aLBNKNr(R1h)A|ly_ zzTk`h{FncMCGb*sEB_>nn3#7sMPn@ogBy83@D=z%k&nCf(I3#hOQ?=!qdpc~ zZ-v9Ug8qtq57${8xUlujCFyYR<9l#AO? zu`EgIEFbB?kAIjRz09MJHp*)48cOyNGSm>BrF7#26N2uYj5sh5rr_5q>I)K26L$!7 zetmR5D1t>-3X{izNEZ0hxNO~4t;jPNQEz(;jvmG7K9Bi3Zw>U*gfnp0<%qmk#O{wKBmAxeIV$wXpO|-pYi8>gAKf-n&lj?T1bAi^3Hswd{_@fO z7OpE{?Eb}PZ}qo(pS`tJ9Ke2nNWu>Rk;hNOF&->u`|E>(ADM`PPl35i z=(m}^SakbmibG7#^)(@7%N&r@9p3@T*1-n*)uU}Q%ilVnm)h%Hf>-qdig8pVyL0;Lh@NH7E#Y}8!{EB3A*%W!dbRvP;Fn*9%i|fE9-0EQ zE0kA^z%#sKAB<5c=XgVeHpa=siE4A2{^?dPzDVH9OBg*#_lt25ad8UQI2>;ZRi5Y0 zD)2ExElfcNpsnewA+`$#C+6@z`J&~Z^$L!C6AW2kggR^YmIEqKOGt2gKP?ef;N52! zsN~moHiK@qv^NZv&`ijQ-L9QfGu^q(M!#$#Rt8?&9{`+lZ$*JFF#Y zj*)v1|4=T*sNoZ3NrRY|6uiU-W`&F15X1rz(Bsi?x!_zxxg!1<3Lc`miKI+4CCT6< z-*0u)INFiQiFavRrr(fVw+eN+<0kn=$cOXD0lFB zBfKM<{ptViKlc)cSaai3!FciETa?_OQ}p zoeb1S=vpYfQ0@|>f@X{BhIH;(Ghh}codH#7>m!n`0)`sFbPjFWju6zYgM1rg5WZFf zKH%9HGN3vq)k|+aCPYd(?j&F*VD0i~2ImOpE346a8hcyeNg_jI$xqza_v2HWy1-26 zMGoL`5ccxUTkf4+{LKToDHuMpiHjiA^!y{`?{+;J43S1iU^YbxRKzy84MpGJzsCDF zpXb2@{0L1wdA-Lg7|?MP!^)}b#7NKseBPXnm7KydJ&|J}_TTrgw`Gsq0Q|^xrk@_W z5l}#g$>rN`(J^~J>zTK2;V8j(vW%bhb@${%(KGjLKWP2(dH2Ut4X%V27JvH5M^}Gw z=k6!(-(!+qWqTnE6bFxy5g$Clb?wI`%{q{XdEA!7Q{Xf*jQj>?qvB z7&pOKA!`g-(1-{SnYE|Z{OJ``Kd+7 zydKjbeGE_`?@b@DE&=)jMi7@ilnFC{HcQgbtk5#2s9|mjP*K^vpwH0Ri(S%lkvy5R za2LW`gz_114_CN1fb?lFB9064K6tqbW}z5?9EIgV!ADu)Vub-`(kEFZaA1xMh}*~^ zAg-=C^EM77GdLB5sql`_%FBzIxZWrChn3U)6Qi|OLWVliD>dkL13MnWWi3ee zG{Ms9EcqO|qv2ygi342FG{B@gGwjC5)KBsN_t$8MmE{7k9or4t%^E^^lW8PSg>jbl5EHQQVqpjN3z&eUO+sigWOzw1c?88qwu@xB5CS^0l?3To$e2TH zUU!4ERvd*N8#WZa-VpP^$U7NNbtIhhOH5PXGkT9SYG@xX+;d3vxw zu=@FI?>MAqzO;QEy*&)nzFQam(2y+6;Mi>ifE9FzDy<~pzws1E)tk1Z(`gf4(Yu;U z-fgMJgL14FEWl1$=UBZ3cG982U=Z!ms@%@}ykh|E)QwXAY3(y>aWvma0;X~{)@%AYyDkuIx}~?XEC#qf`;gk>$06UC zU{nN);1tAGB)P{Go{ur1!5E}aWHO|R|A*3Z^1dy4Y_nm$DdOnxVavnqXNzH|*&w;$ z{26rR?ah_9MX2`@=5@9rhJsiTQkNJqZ9iX5Jw%XrQC;MJmHE3kl6)4s4WZk-CTWoH z6>?>wGSL-?l7?!B1erMBu!~{lo6r;2ZRBZ@&o8hjqs`z(6|X$GNTHq4cwj&LzMC~W z@Lq&4QJS2q2Fg^BKSKa|BiFtWwmIK; z^kIs7F>_K1wIPSo(KZ2 z=)-R-O{KJ`;o5W)0fz(EH4wLfoXgzSxS;V~Vws289KQ|Nvrb(kDNG;CHuo$)W6L5Y zZUq+_G%}1FU~w`@kR=WxaQ2h9-}0FTSWH4s2x3JO4g(wpRhSC~n9u;KL)V=fK;FI| z4v;byi8;M+h`8vwN014aJ-D~XzeJK#h!Gb!wCFKVKEQyO)r<^BKKtm-ONVwC^-9gk z;S5bR4B_b^9Lh%`_x|DDqemyl+DSh=nl1Oflxg<4um8h&w7OHPyLkEjQ33Ak{+GDO zYsU(=1N5EWQM>ujm$(2RA|$@2@hKL^cm64n#p-JMkKbht^=EYSyjCqJgs39`Sy~L-V&8SAOkRFNUx>?tj}QXC;G}pX z&Q$y~xBZu~jNw-hv;11PX)xl@+W5D-FM#4;DO8#*AXy}!fbNXwUcs+W@(1Hwub=M{ z?*-t8OJ)e%8Ji%NJIUFR)&Q^6GIa?U1R)l=X@L0 z*(RS>Be1!X-;*%OF@T~K_aNC*p8bqBeB*DQ%%t2uDNs?wA#||)^Q(71&f^AucJTSZ z`pLnTPAl$2f(MHIkg+Csa9)-Pji0kCR`G9e@B>UCNE{iM{{X8ecf(5dLgj;T!xqyj;hp87QcLBk%q3X)!r9WZ!goe9_LhQNQ$w}`>-t&3*b zyS(+0^T57Anf2barx7uCVGon{U)k{+e9RjAw(hP!vIu! zD0^hHL1)KYu!2q>fSYL&WmB&`jd>yD9qDgb&KhHbT%SOEk9IjYajXgmNmxJA0;>d$6k_*#7-7`<*5=*k zK+9&C#5K5Ep$GtUCn{-3zut*-66h0s8G7s1)0;pzMx;q90c+Y5e_ zICkZ{0z}9H|4~|{>wFOlF)5+pHwa;6a6@aE2HUei`RJ_{QW^53f46_)Jsw@W-1-m+ zRY+P3d+sQ4?@8@Y9}TshaLL2lJm#L-owKvSLM~Q-52uPaIJLgpK;+Z7bS-xl(-Urz z`bo5bQdTrUZe8I12SCA90!<*^e_Z~=dn<|kgtR$iHEOHG^4Q7Xnw@_(7R_%q27sg} zpjJU*5bH#A0!Jb?IUIV!{&)wjYfcH*Kx70Gn1j$Rpi9I~gi(JN8bw0Kc1UkAKnM6Z zErEK28Z+;zB?;@1AmKX#2NMVn0w2tuu21&3?zp^vaaT2aXjAh2K+P_)yzQ7R ztpxA}K#RBsgB=2&$OG6FWCp2jjJyak^@GCwgsbEbD>`C!HaJ7ZhE=1~*sDH{TUpN7 z<5M!j(4U(BppRu|vO65_l97)8Mus5uEWANv03aA`jFj|mzSZ?C6i@79xT0S?)-MSZ z#1lh1E3QJ^URg)x_cMta0^X;SqUU)0Du;X_$A%_-}~eAaPFt)QHpx^ofWMC`0St9%gR?|3HA{l*jS6P^=E- z8CE@OktrkMH7m?SV|s^O5HS`%IMXgrD{LNI7h?=!^-pn-)^ulD;|;b~qVodr$a^jV zv{t{BOn+pj0j#({{r%oMp5&H!j#w`eO`QSvaw(}l0Q|WR$}73%{@g^XZ(hNLC;7r+ z;vgKx)~~dS7iOi#-@&P$*;~Zwh#ANRNZh7K3jdnaGBe z<{NY)oSx?ONDIzKI8}!9_)2nt1;>baf}-8jEhjQH6hhR4njZr58G%tDZ{(6}dH4!> zmbF|db0K>H-X(C=jP#Mv)Up(M3dSX?qzST$K~dB~YUGQX{XOMBcpi{MRvj!Ki~(kD z!40M)m_iK$6_4c-Ko+%Ug(bwIYjJgnCWND$gaptHkB|r!;JXnmbXA0JUwbNFar(UL zEa}3SjUMDR#NUwhm!MCOoLrOyEl?G8bb|ttsZ@5-LqiIF&&(qm=)};mSex!s3OfQD zM<@u!OZalI?1O*7kWau0fHKYrp_rIkrMJAkr^K{Jsm0%~vQ@-PCif}3!MuI^Gt77( z5J(BKym#^l;K)-@rXif_;5fZrZlecmqlH+pa%vZH>*~d=P~p}pMH0xM{=z$WtTD>i z{s`XdtXF_dNaE91ps;wtNbkcDO86qt0q~zF59U0)+Ns&5QM^XCKfigjx11pxt?YB% z29(yf{{B4rGZsl`VD|SPUO~BJ+Q=pjU~SuS7<46@CQi|L+zp%%HWLnr&klkIV&$xJ z2YdUKk3w$bw>RdpHMewlW`2v8=c{0*Vo$s?=Wqxv#rTU`L%K3Q=|Xd@RAxxYE0&}C*QZ3J(C zwpmSbMofS4dm-9A5w@j$ToT{P zbc+(m+U+6LYS2RzmR zu55XxO2DO>R4w9*dn@rykWc9N;q3TQ@YUFWaIN%Fh6@Jbtb)44XfD$((f%(r|6vYxH)Sw z^Q5QZk$bc*g$~`W<)h-@0q`)1d-Seqf3y{(2Ny&vePP2UyYN_lDU!|YBu-%|KmcV(gp8v|8>5n8em+(QGxW)a)6HcUxbq})T}5wYQz{owf` zZefhI4^kWeolf9JGTV?~T*mnF)Uh8F(MQ~0lFaQ#A^QH83*pu_?~~oATVE+Y@OS~# zZtH|ZF8$r$_&KQma7gfAFk@_8RwvSrpxHWKLfPHX*6;IX&5n+?Xo#z*>_+xTPA${7BSlqADIcX6VFGU9e3%7N8I6!Q)M z6yAj-mNV%#Q%WS6F?p19K_8=^6-!7(Z1d=Ny!&hg1CG!2ZHb_O#?&MGA>islU~kz* zP%ntc0Iityja)S7PFRx!d*&z=$O$9v2TcH%kC8Fa_~3fqe; zO5+`+QYNyR6U8PVt73DBa~pf8j>2lHo?m~?gz?|`2}k}(Q7mvDjHjF^W3Xr7b4b<- zbph%4P)yytkp>M7j6nz0S1=8b2Ei^&LJ0ulc+hB%jHc;?yZAQfRZ}&D=LxLAv9p0V zIErBKVUaU0@OKc=0r~>kaC!w_t*P+pr8{=yDB`rt{M6OVnJUt)RV2J9Hsc5!O~eK7 zALj-dPH*fVV-j&fRy!E&jAV+&lY>ETggqsf{#YO&8&NP)(*HYf8myAnxml3;Uv^z_mXSNIw(9BIdf<&@6ot((==akm62=t%!> zy0y)69T5x$YuhDZh0;ewadVS1Mw&%P4Pz^fW7T&3*&lY@7sPIfq)bNn0SUgz$w&}9 zFn{>DF*Vd|HOpNTFvymdsD&U;!GrY>xzWXjkf@L+$b$L(#N>AlVUAcX@K$3(CsqXC z_@p2}otO^9S(=ee3|a0W(;h)ZgF}nlGZ+I9>G63_Ml*u)8RuVzRilX!bwC8miFa$o z@I4H_&(P2#oTesjqrq}9kVKb^!pKmlzW{7kP_4rZgE1;!!JLky&FPaW2T=zaT39Pr zgazV8g5nYont04QC!JOXdBM)DAORS=Sgqw+5`Pl`8EtcTo_gF2GqObIk!_7k?Kp}d zZ-+7ppP+c`=nidnh4Eu?z4ayvV&eK%B$g5}L10Lj9tTcV7!D8aK0pwt9iwqED5#jI z9&`!#c?T1g!>KDg*wv8(;2uF0EtVm3opjfT#<2{_Xfp4R#E47nz?SzZjQL7PzCO63 za+_@+JgJ7qowg%nG+Fn%T5(;Bfv>!Sw1>5kCb*I6!E}qPj-e2x2PZK`lpVtHa7mD} z7EP|X7g*lk6JGy1X`iw81*VJFsC)1DhC*)jq4i;Ow3LEFp1aU}pV%7CE5hVJox&&y z-`18|-ThtM4tp6;QHDPk6&_YpDg!@LY$ zFSZOf3IJsw*C9_Z7z3z~2rnb32A*Y32@yW$>s4VW3q{>BR>T01%@3q78T<$(81{&s zl&$jfg8T6KcQ*O{M>-}KGrAU1-U_)Aldl}m$iKKtb_XgP&Z0xkB2qNt7TDfo_&@nIc}Yj|dO62w-kO z@{Ci~G;KLOpKs?!akb)N(B)b9&UVW$Hd;0!6b>Ny?0$9w%)kK&$R3{Rg zF=K+A5`ihhRuiPeZcStY2RBF*yvOV!v;^`Ba_-?O=d;9gH;sGJnaRAO=*W*1xeADO>er>gW(AjnqzG5+q?&a8bCp~L+ zV_pCd-#ZSvN0`l5L%^DS`*!EIODWL`UhgcpEDlpox(kU^JNDxgf{;VjAYLPmf>`#H zJHFY`l#Q)Q%Vtd{tqn?={e7N+a~zHKGTbZ{?i~M_++Oz2?j@K60V~%%-4@3dTiRVL zD9C9UoiA{^-K%8nB3~~~Nc+26znh-`ia9!jFFqE16{A5q61vG4(`JmqH~e8 zy{~0_1)qX=defe~*;xbOY7bNQx=UH&L~G3(Df6fOv)k30iH7lAPDAVkkK-V9Z!^|A zF1~UEUk#ZUt&Vdo{$@e|cKZoB!wf7h+spiAPxb2k$o`HOa$BW`e0} z>(J=Y;oe|#Ax~hV!50cV)GS~MB%EP0v!}|imW&T5LGRVyz8@1cnmr9gMqZn&2FRrDuz`ZH zNxqW$!w_rtI^7qx?1WitsUwz|I!R*pJtS04E5*{C?p`bfmD;Zst0cd9Fy>pv`i2mt{UC>!I;UyK6w7F zg)d}veAqIGq13%#d@Be0uewi`B-?oM||S`*>d4K-K=bF z1Cicp93JSyK>!&jY^p-Gg+LsQupHXCr9L>*R7L{3njE%o-OlH8s4QGfPeF^{-EBoGn@H9m#p2-jBLmh)y=2hHnuGl{N*=lMp(k-rEtChrV;t; z@6-o^CD3xZ<^;H}K=~iJa2wK;;b~(^&c-o(A4zS&DIFkh*Ph-5Glz})i2>k#QEy9D z`u_Uo57+y}J>0qQ(em2AJ^$z}urxiIaRr!wEN9Xu$?6P>zDq%b}{!maEfNj{vsas&+?uH}_}qpu|Y)&W<*x;OJztIa+Tv zSLOoOt^&9g-?q4s)IulJlHicoED{j(NoI>ztPf%4u2MdO4=HByhy3mNXN(SgB&|8` z6~s&DoT{#Rf+@SRvgUA*(d6?7R|Iwb+>OFt)HiKsjcMLg!IFqt8_DOs?$+zm8*bNa z*Wdo~{NGm<>Emaox63~6U;PG`h(SlHJ;<^=#fXx+fAO+wL&BeAmHfl`SJ$yWiEC%; zC;Ld)|J}J4+L={a7DIV{QM=RGW72;7QS`j}^Uiv6EoAL7$=U>wSmvmB1O`7)Qr=p{ zcy+rvTqWUgqo#Con|$Vq$C8O`CO(OX*?g;mspth)8Z1Uc?tlZvV>nn4w!wBEVaG8! zHm~B2tTyRhjgNv^(D1k+-XZ&p;whBqRncE?P_Bxdc~1m7xNqQ25*={X2Z!x7FOHDp6^;HynXgvZvp?y#|dEq&ECwn=*^>&}KEo2+Y3{V14nQ@$4Q zuof0m_K2?sFs#8~{m-Q_$3(1HPZ>^|{d(_G zkOQWf#O5gGEQ2~2XsdiL#N(Qhqc_5utBwe>#JC3?$3ztc5G!aqDt=RrXDp=3PCqV8 z$Zh|=UyZTC@IOL!n~}o37oWt*{z<(h59BDwPK3snV+}%l`>2QT^Q8pw&sKPKzUGDe zQg5^*ekL^3zEy3|SdH!FYF)*j<9@F8Rs6l$)78OMJ_^Y8WchRBmF?}u@<{u;T4`m4 z*$6bIA>Zd_2gtu_*mr-HmsO|zUTwGPQMujV0Ey-K#Szwkm9S{aTKEDH1rzda@*TlB7^XZjm<_ zufP%-4$&#VpG@#`+yqq>9VdgUaTmBU7dE+M0N0T!NHHTMHwDr%1DC6$-?C~{HMX50 zt~!#ffIT7tXauwVf(++9U_d0Kp+d2Ka4rkqSygxTX``)^m)F0Lh_ah^v;)fyki;QL zz6fRMgWV=r8Tt-z*&u3>L$q+JdcvsdP;zYt>vDXUg_KP6CB;?m&=(x-j zt`%RkB$n{!Ti(=EMXN+ZyfCS@xc*}Pd(sE94f2?gA%5LLa;vY|F(|pC`YoP; zZU6{ohB;zLwAP4au>xWV^mdo1cfjvG;D~mORy93g2$YXkc24GdDjkwKu6+I3 z0Or%2ACEc_{EMX=q@zE35CtKfOxf?{shIbrJQDMt%k$6;-|o%;&^K&PQ&{mw19E_n zCJe|IxwRmoP!N)2%Ic$ba^}BP^cPjR^2~JKLevHu2hpl+qgoyuVWZDs113U~wh;W#ab6|yX!vQFfv+7_tsH^*Y6SmJKOaPG><{iVt#dqv+ zCMCxg?7$C&OCRp7M;vWHL(3}S50=y{`fuZJt_z@`VH$Lhe6+Rj+4rjo1upz z2PdL6s{GEM5)O{ETYV?~kbNiq=Dq{0a501_bE#O2B?kb}{3Iq@DPkLyhizN?&SnwF z^RjB=Z+5emF7Qga{Xsq?;uCW&?MKBUb7@8tctW)V%15cV-XTO!}&Lk2G^}R$w>EG^sx6fxd2d1QUw=?-s6LT}!_km5gny^0)N^v1(bb^WtU+ z(OF4YM2K%@(hc{Y^yKpA=+QH=KK<%=X*5{&jl8M&U%oggZe2HR)?TcQtZgA$VNWx8 zg3SkSUw=XRK<-TliP$WJZX*qGo^tz{(wC~WDR8@OPHY)|SAsu@dMbd^1M%h;5FzY6 zqQ4D78eb2S^=8=)%T=Hi6`wP6X_~Zp;;+>l)qb=I(mIYMZFV#~=?6bGuAt3}<|-B} zCq+vs{T63Lf=K+Sbvj(Ds=2tvOVIbb)T5gD7$^{ZC#H?$Ww_!i394Q}!nE8cULe^H z^4B3oSBOuF0m>g56Mw`3I8487%Dn8YjgeKhKQlUK)6wehl|$M7s_rOay;_FHnunL^ z^JqGKe|?DTYnv_q%AI{^QIk!q}g5qn1W%+Qd(SgpXjEkg`9cmY%Y-Px05orY*0UwvCM zb6OVg0WI|rEZihxxwRtgrnp?tquMIwCAzSV)GY}cm3QMPcx+-L2~cbKHZBr#2;f?# zU`U`YwWGdiZf&fXMN*myo`0-+JC$p>ZK&@OZYXbL`#RJ5iNqih^y;nB%QXBx@YwcI zx_R=u-#tB}5^#z8Pk#rJMO&(EvAYAcZD>A#@tkFLEcbu1Oyxs!b${QTd91m%YHn>( z8BKXxiS*n^+1eI`D-oozw%(L{3dvlaw-qt%WPf?>grwW;8|T*Mx-!(YZ=743n<0N& z`#|2>1l3giGszC#lk+!F7%lNcynpts@2;Vmvy48j!-uInwsYfD~dsRS@;X}c;G zK_qEA0zO_pX@5m{$M#d>Zh;Z4O-kZe2+!JX|9cCv*e<{ew{5dPS8I^Jjc~-avo_cf+8zYcPuuFPYzSRX&6v=3bKLeu zgtkk;E~Yl&!5yiU`KE0hBw)=b*uY9dUcQu#%f%jcBDU5c|6G~iGg=1C{Fhf}UGcwx z@IkmsHbX6k?5W)~-{;5hclnE%!oqJ>>|Q`b zzm*lV-`w6JOV(gPqFhop1`-z7JEmCqi=w}SJznO0TMV(@K+veaX@aav)&&2nZ8u-s z^4EQ`ik;$3Ed}>xvq0A6G=X}{@05no$8`%@c*yB+D)f4g76U-UT{VTrf)uvn0VqTp z@2s}cJfy=Qdy>R{6Hwh(W>9I6!K*g}k_3y5X!Js4KBT*(DevPt&_c-TN>(JT>FkM} zx=j<3`yM1o&_Y5h0h9>WEc8(PK@vasCg$Vi4xwwBtgO~#Y-)L6mL_eP+8gD$*Yc94 z&5Q=wOV)UF>fFHO+71f=3D;M@kg?LH$SRGtB#COx-=h(! z(fn{-nhmS5V9ICl<>nVn`Et#Mng-HCKxcy)tTsJ(HU>N6>3l&j9)x1@4mG}VTr*U; z+KAp8!j($zl|QB!vua>(gmsZzskq;nz|Pu|Nz2tXgKB&XMFKp1LlWyQAP*$l+yXKZ z@)5!W(y|@#jp3=A(tch42>0dbcC<#7ypb8vq@QK& zMy^0MEfq>>JlS)EL{og7`K)oM4J_GLMBc=aun>6 zZyR(blZuBG$`=wQn&gyy*xAK&pJ&f9%UWaH>SndZ>zPfhv2mS2tua`+HO+MpS}53~ zMzCcLC-`fpfCpebf$@9{Qm>~x@sgpkPBiRpjj!cKx5i^9dBnRctKU5i=C(#hovp1g zM46$jG5e*JtugzRiLLQDXJ6BeowYR>*BWm)^`O!D+^p8vw_P?hH)Ufku^v8mqz;h7 zFiJCj@KHerIe@EX#i`YpGTU(J8fMU?^kp51CJ1MGYusJQ?&g{@8j^~u7qa0_ILii* zVUJ0_HG$!WBwE7=Ud}#*5EpH5jX4OqVKCmgPe3L{lGZ7CJ|LlADN793$qbsl!K6PK zidwU=kLrdzR~rnIP?C`vL7sPUYC^dNP6=sX1YM+ffg6Wa&E(gZu`YX``|6n7-b~qY z2hK2B%}t0GlZ?WBkzDPHs;zO6M$2HMZ*{Yv`^o|?Td-o|{(NTw&;*8lsC(eTfm~tp>zKTcY)_Ax2cLnwAB1uVFWoV4HotEK(T_8|(63!(!OjQI#oA2F1qX z$`Yu@jZRdLvwK=G8aBknm1zdV#u*o^hmFE!I&2gUw!y~Hk&K3o1G%&qHV%Vi zfivV!HkM{9Y%G-)L*avxN4HokNsL3h15D45%Pxj6@54w5Pw4In(q#_KkL$~`)1=s# zIElqodm9s%9wjSbVEjJF**fI z#ju$#cW26Z-CSAT+SoF?W@>D_mf0B_2Ww4#zf&LoZVO}H84|P2`%Ew7zg#|ZC2u5I z8f13J^kVL-*K4X)WoPpgg05x=+Qsg-AcrK-N(8?d7u@b#Daw@&C>QI6)Lr#}yOL2J zzUaY{f}F+Bfe(fwjt@f>WD}}I)82^2UQki9Z#G1Yppltzv#|>59nB6n2;Im=4{J3v zqEkrIp*4b!psAD_*-U^0A5OQQi zfEW}0zLo>G8od@V96dYPNgLxCpXEkUMO-1#Lw^VHAxavwon$JV7o7jQY?d}X1rBYW}a+O$t2q7Zq#{NFUQOn+Gt8{32g`l(G1$S1cD8; z@oO-EHX2u1KU*J}>9cXNWOmQS-DF13oAtqQip6ObPb`fx(lA_VQSL9*vm-@OwLbEZ z6n20kyA^@SDZc(laOix{bSDsnJlE~6|k2nm8Oog zi6Mgo7lTrCRI1)|TWsNo`ja+&XqvuleT* z0CLE&%}SLU?b7z+**>|J6oh3{nmq*H0clr4B#358xX>1IW>a5MfhKu#KB;|@4fMpl zuiUpFD!I2-klK=I3xjMA)Yl{b!yEkTD$tP9X;uJ%VRq}QvqLr4Ox2PUOjaI+^bM&T?@b! z(e>>YKs2}7#7G@-pAV_#?1@L+$3pO#Iv796j2;GNx`@N~g(@7r|Fu>n@}wpX%zAL^ z>5wXa$|@*-)e*1OncRMw^N36~q$fujp2{+gs)2DH!I_M=%OS~lP@eTUS6Asea!UgX z2@)BcZct~#w>=<{2iZbaeF&+E&lqroXlz|2$-LF@G7+1(5Xg+Nkr92dL;iVA zsQF~H*yW(BHK#->e~^E{1mIIWOsG*S*xM(A1qL3{I86FbcS9sT9}kJ^Q*sww!LHTG zzvOzpOEOmMIJ<;|APp-hYIa#*}5mN4Uw5Ays z2jN7>Pdm1T-k>6LW53ep{SQL}@||Pohmy z43PSE2XipA+d~?o3{na!tgY$Ni==D9^||sP)fRh~2dUQ2y8q~xdG%N#PWK+ws-t}7 zJCfk&T3hoR=>T?5kwhAPquL>ndyORby7%qms101XhiU`Y>Mxo@g^wtuMBbxGZ#5#< zBFm28KcYYpT39Bv4Q{8tTQ;~ z36#Wuq)f(2vqmNur6rL3?3&*25Y@hv`-f@|ot73gR#&ro7<@yu&N(v05w2T5JE^K zJCUtqkl-3>OiaTMB>B`0Z?qsgFHr5`Xz>B92yZ3J$$Zr##}-;5c{OK)on6v#l8m@e zy29G9{9o&u;l`UXdJw!czpCDP~3Lp2T6Ec-eiO4i@+>J-g_fwmpXYl;YIG)K0f=>(?Xn~}QB-00RLatRp z(Ufbdc8f*7Pi?>3>b0}2#=^b+^|7XMDI`MGzeHo!!BfljElLb3&BW4${(_Q`^|d0b)_JZq&?^Q(Fk9 z`f>1ZD$Obhq!vrXPLn{Btb09zM0b>+9NFo^eBs&Fx!MGV*QQ6(W!28w^rQ#a{z_1} z>jpZtN_a*1PTq<}3Fp13bsq_++joPPoqSM$HpYOIV81-M3i<)Gtb zIC0nP%so>Rv|5}q{>>wiKUVhl4i^fZ51ggTIl#z;60weVNXc7Z3|eA1B(<WjnO<)~^t$C-v;GC{4 zt4?3Y!+hd9%AMv3!4fwiYwRuw(nvowA}`z& zL~RhAccQjSa^FO)9o{psl@Ejb616F;yb`rEYgT6rMS*;)&XcLo7=%LI7gfOUZE08n*^ zvWLVn>J`(1>|7Set^vbz9^!-C%RO>jDjgxqhwaxx9iD=qEXYU(c@8Z3&wc%RY~*$r zsq$Z8jM6-ASEG~tWaE_&k9jwtGP_nIDIS*FM4<%lZAx={qf(sF{PIllYz(P7f;|9lrh5q&_ zUnfXUDd0c6_sPenF`BPENPate>1J1pvr?|X<1tJ_V5VlfBN&KCT1V#4g3Oft9WD^S zxF$TCeX`Y^pap-AsW`)xfS^ACOfj3_tL1cu-Gm`g-gqRb3CY7sx(uqiR5=X3pK5P& zArPzrVc@RJ(txzd*FC|PKz?6fm?TZ#DSb|AUaR|{YBU5s;FQojb#4 z(I>6+WH=;yC(r|-sCE3LZwiH`Vg3r%N|A!RMznlmlN0u;3z~;phhy(IwQKiX!l<0 zx6Inre9?xb_Dbi3I4|$%Sbv8jj8?a>IeU{7_yL1djMUGvFHE`D!`QX z5kg35nS7P1=F)Z}H;v?m@P)<`eLFSFC#=yj4R81#bve7j!HDubS1|nGYm8cExUb3@ z{f~YfVQ+{g`;^W`V-_0Ge5B=^n!?irVM!$SmBUWaNX@6U*X=c*xke33pKd;NGlQjK zIe?7}Ja!*VXLn~wX2&u4IFU&Qi#gY}UsW`wYGSzvvtQeqmgT2uG%b57Q>z=8@U=1x zh+XhfOtZe#p4TQNR8eJ<@sm<}Bnc^fyPQhnXbazSzp3x3XiD>9yiB2F^^t4%cY4?L&ID7&wl7jYaj=KWWcbt%b{<5>aPz@)jUZ|xdj_f{H|i9 z=DRBW;CEFyU5MS~uJS*+$SOXHJ% zkSv*oGE92pWRl1c|Ltcq{DdjV&1m(LYaN>0jKtH6l@bZVK#boUzcwB;eB}kX-c3)+ zK5WTf)aWpQp<4URuRaFx#zt9a-Rg6{`Ae9eH6@XwN*yYH@k7IpA`|U;UG_m0aG;Hf_x-{0ioTPNr=DXtRtl?xF;>Ks-A9*dkzIK4q+m1W)orCdIMPF z32-PtUoP-;+p?=_YG~G)nd-4uqcx1#lORX9!x~H({^1>b;5dx21P&I^;d4@xVFlCA zfYHb+_Zqd7yQ*?D%TnpGIh1~wJ#Q+WXdv2Ssm3aOvKPxEh>>kS>7QS%J(R_pzW3>np9HK<4WyX^i<2 zDaVW3!+m?&n+^+*4ohrSJYQ1<&`IWPW{YgK=dy?CZvgJ_g2kMtz?u_Z55bw5iDVf0Jo z$jtywra5WqiZS{OCVRM-#UDd9Ct$n_P&Rh(S07`D%voLilq)d#?#`5zd>>@`Mp9Sq zWFJcy`?C=+-4QO0ogqNJ$!Y?`z5tv( zDI~&k7=-k5=V*Dmr2Xajx?h)=kIwnJ7k-b|!fm}BT#qy54_NjAG(qTrK8BMFXv~O=as}2d9Wk}9 zq;}NcWJ7YmOowD!8}{)xK~X?f^%V~^k<5%Vz~fyO2{_cRD=Qy3*{7pi)nMuU|CKstfov*6utaTuA7^< zCQkOLx>AB-4e7za&syzSEw#hv1+hR6ihue?+>sVSqVe{>W(gm%2chwVxPa<4^ivF( ztme%>O!hGU8w%YMg~*toZ%?j0y>&o5UI@N44NOnnv*bl_Kc#xifR;U|0xR9mR=cDE z|6^NQ5OO-(!n1l?LUF4nZ%eFa!xEIdls?PP&9>;rtPU85ZyX#SJ-zmnj>50ab`3Ke z2BvywX6uWW*LzjLH_L+hHCgx%newWPgrIaOp=`BN6zRsQU{s8YRhTG_VfBWd%6gu{lt2QWC5&% zI7A%1pANbQsPUS=lXx-QhAZ-4ZhiH8^jF{J{E_WRLqqXi8l)fiH`0&UH-_Ecs6WcS zF>L!r^<(ypQTI3MkFsx6lkNIZ{rI0-6wu=)+h4f zfB6ifTD=hlxzVdXfA&wdSMaZ&r4dAZ$8Nf*zN4FDy|3i;O31$;U;*`8^Gp2VJn!PyPQ`7`@GHY{I7O@n= zFmx5Y&&>Ax&}c1$x_hQ)YOklK-PJog%&*<2s-Eh4rk{GA+UI#{rh9I0IfOZcID`;F zh(jFWID`@6IE1kdV~i2zFo!veF~+ZqF^69mzcR)zj4AwyjEv04$jJOYPfhQsVWz6S z84(#785tRw85!A}xeLbQsfi$c`Z>)d2%S3Jk_V>qQ=zj_<>7edXuFC6&UV#=GoLN1 z2{^N@TB8n<=G(PNVSc$)m9#_3@87*5c#D;aL#GC8p-7qB_H6K(*flC-MCzW+hZ}9u zQh@kYtz#szo?BF;lgE=u*g~4ck>Gai$dn zF}Y1`5$zxS%2u_xXP>`IG`6VQC9>V{$S15@4v&m@PZ|!_{>Hu>`R3~y55jr)4S}K+ zfB+$$D7CnY{kC9RC^qdsXj0+wHyY@{V87Ku4y7&BV1%2fq4akewJMW(r&YIt`RxXo zY!RsQJiO3^0L>7mkJ6uyaZy{?o%<}lLPYjk_UCmXrFft4AOn7>Z#asK?njh*sBW84YzkFGi2xWuk!3G&2yO-qmo z{B*Eeju+?H1f7iD{n=!R|Lt6TvK0yrCI!Ac8~HW)Oxu4uR~zhoRGgH)3vF`R)yA$= zLaPk|z+oUhu_^_J&ck|5urvfu*0)@2F1zWVg=u=^A%zkTB}|hpN+>CvS!O>^EykI( z#Vur>7MjRh{98`@3TNJU!d!U)LCwmZFaxl8BAHj+!bSHTBzH7D@Mtt4OFlSL3J%jJ z|Pg|d#w$C30F>-;d^L4{o z{E~Y6Elb%sUlNcI-5%cuZ`Y9UekgcpSO^nk&Q9tt)0IA8o7a@Olg3+U&e{5W_Ud|a zj{Der2M_U8oqFVXxi192;+a#r#8}_S>UcT52v1ZF`^5`R?NFosw9Qbfw%UY=s3fDP zW3Mboj|is}?Gj;-a#2r1Ggp&lakHpzK=t?`6xRsn+8E@sfu5rf+7MDTU*8Q+CR0~8 z)Q+WJVblgqn27mKsUZ!L5u)7m(((uZsPY8yJ-gDDPt!@C+3;#%wtFR{Na75uonBE; zWF39Wkbok)9dlzrJ0j#nu00VlM4PX*c|owlmjxXrDj8ijAS$43y_VFj$+W`U$hXee z(;$A=Fa%U6ZG|Pul%&3E1QRY9N}qgo1WC~vs-A&pi1~zCX=Z;_FyQ>*{JC98i$J?0 zZOYnCM_SMe;i{SykhQ9x==KdkC4XRbd5+L!Jad5XSZW_F?ixZIB;0N&P|=l(L$0jr z4Or0HbrK85A+U*as=dLvf&54WP{|IVEe<@&mGPF{?w_KbffK#f9 zyX3_VImX>vZy;{D&2J{uo@{7hh|h3zCL0As(_5QwC7qNVmw;`8YGnr|I|NI>wk|0+EWNsh)`GS>|30FTA5Yga7>!QnE2y?wuFe*hvy+(p zx}%l_T-y+(gxMWKRKWNel=EwMj7$mCB7~^zDV_-GN=jwzru_<^RJfK#HoRe6LV3H- zQiNNV69v^)Qrr_#a2+Kr0o$HdE1`JDw`!rZtpd;avaIi$02kKpmJ2vy*h@stBz6?k z<{-IKL9;^${o{7m)il~}x#T&gG0@Ni0crcl@1;cN9sSNgZ9;Hd9`cf>Lns5a?G$V~ zB^ZzCU)9=xgh(afYDm|9SrVj}exI4-=^aPWK(pX zI@8dI2+j7^f>tSsgh= z2%6M<4t1h=n$#MMX)y9Md}4>yL&O~$;R6p4&MED`BV53Fe*M!w}irC8ohh z(0>0rDgQhD?LfDsSiTj|>6Q|(ZF%C{$2-sH>CR%ug0{WN2+6M!?24RdDxn-eNSWT& z{sOh_O;m3ibQTm9Y}?5TPa<@jyj1RYJYAAE4hVfZKtO$Web0Dpw!#Ap9kxPw+h>6v z7$7=6i-5F=$hmokhz9Wml-_}OrBI6F<#>IJ7w0;whJ@L6hA1B7GMojRBNNXvx&n1ZBy>OZqb}1YGCqoe9qVbxLrSVaRijcB-F%dnmz}NNyvwEh*t(KLY~p7{wB(%`pu%P$J)}!(xPL zE4&pMW!Y#_tbyC+kzp|bj@MJXA1l}Wb^H(qS<*36sWRRN6Lyh)U1lt ziU!Hr?~trMT|ZZYX+goo(5juRfr+vp+Eu7e)R+kKVe@j50s1N8}U@ZA6* z25QgjMHF6VW-s8{{xb*Wb^K=r__#R~)cHw%Lg|xshr94gA>Uj$EMo}XJB#DXbC|zT z3T8Xn8h4{R&+Q5~2z{@RZ7|{{q3?r4o^8P)q07hz}J=q?8=jt0E@lft`Rj1N4 zQ*VL(s5p61GxfD;T#pNG7DokKmkUjUCUBWZQ@H*YO*veFoT2W45v7Ub%7@2qfybS6x@B#Q zH4^zCFopT%AG{P~?yI7tyD6F_T>V5^t;B;ZIg@&ty?b0Hf}&S{I2x_56b5bQih6uN z>IR3ay0{L9cf!R8n&h^xl5ywPsrG;(*@)roYYnLD>r^VckzZY_UcshmW~&~h-eKeq zDCuCbRw_FU&VVM%la|y$Kru+R z9Tgcc-$CsgIZtjq!shU(@X>#Cae})RJ69X%e4oG@qDU)bs>F4eIG{MqWwQ5WAu^pN zEhSvLQ1GfD?8Rex44DODK?wPT%6XesN?8zI$KZYqmYMS6w^(T6^ZKKfEd<0 znuBlb%c}vmPmnHgg0!PNuO`2vtv-4VkJuY2Qn%h=Mbg!>yR*QhLGgPM-%YdR;cujX z9%8Qe_lJ#ckHF)FnB9M}foa{0((o+l(qRSIV3zD)U$g4R%L$CZb*pCV&oDHC;e)U5 zrT|5*Ov(rv^Mdjcpo^duJG6jEFN44ce38cCrnP-ivj^Lc%*yX`3TMk*@)vRi1w6+F zu`OtTSdzrFX>dU@!qb%}+CV}xX|sHjDiq3w?L0*Mb*LiQ=ubZXR53D*;v*9g7r z)_7&I@_h&=GQCRVKi#T7y6-yeEq@1V&94uhNfKZ7>dyiZex@ zt{w^N#rX^!^oklBSo6{qI`efle!jR|uke*71sVFQH4cA|@sT=1J}%=Ljex27@||w; zPu94zWvK+)KvXnmSn!O^r|I|Kp5v2d05<$Gb_jHlWO#Tn!9z*!fVHFoE#he%1a;6U`$#SH zBFZgJ>mXA)U48iVoK%^VEwP}g2WFsi4I)y zZomb6i+nDZ&WPG$I-Xf%oKxX#5a%#NuySu{K_nNJH>1g)NK!1=(;aX;8?RQ=)936s zpRf#z4roG%B#U}ShjBBh7}`FFR^t*Pzp_}UV+%-I>>K+OXGvbdYHx(LP0o=u?!D>y zAcSXzb=bhLsLkZjCxl@fu3QrEKq8WuOUKVUoTAzp0LkSwpp_O1;UYq~(5v znZo^6CD>+;risEX*f;TsSxCK{!01o1SK)NTW9Tj1p+`(Dk}0M2T~n@M!|okyFNW(@ zq#M!|sljBE5|3rov_mGs9A8|_o)e{m(+7Cmk#6t(Kw~=Px=jzNHl;etqSENcbE4teaoe4>U z3f*hKkkF-13I&H}M4R$7TO`qX07+@=2x(OKS(9J`p=oT8+W;*-fMrJqrrDVH8lzEKAdA7QeJ<)1DgFr_nk0woRR``14HwRU=HuC`J&Yq@G&+Db9PTa`s};3o zb$hv<;y{UPU>bOF)PY%@Gu-wBU$t~8HESoo;K}@hX)wJij0UxzfMZ`JI!JmE{&=y# zLk{!jyJrh_h#$9Pz$y{Bh@od6HLLfaN!=RaJzpRc6n6Cv9xls~;?#qF>y{HAgVuo? zRZ(4uPiC3kmMe)ftV)s7y(*Y!oTr-YDMN3H^XohFr!? zc6mQM*zx1>bp76PaY?VSNlnMtpG{ASRAT5-ZyKnm4s8P!0n+@8Hi8Xo6Ca-8K_&4B0yR9${U{@0f7O5N*>(#ACrQ#kmjkXO*N2&a@E0vO)h_Z>?lTK_XcLh)D zC7Bzh^RKWIbh689mGG_)R`R5yxs_=h^TGH6{`?7CpR|x8r%abu%VAv@k;|c40?H+GEh2BDgVzjFP*Bh1?u&$&&KP!P>Uzzau>_=g3*Mm{mcSFR@WvxumMvJ0o4|EPAWZjAWBZ? zzWuxOmSq?Pcj=|miW3*66utsMa)Uqy996<^ftA8nP{;(shptA%9!P1p6~x)%Vsd&p zn?29D)QsWo12?%tHWYqix6NGwDOabeLImF+6!THsL9JG&9mr-EAT8SJY&@I6GWNQl z0MjOc>ST-hg^Y@@5`*4T(aqh_XcX4HNqOj9K`P>-8W~6Y|oLGWp)3eK2sL2B^S-TTQfAWomw?~t&CLu)zab4o1qEh0y zwoyz7Wh7n$nDIqha&eOfN(0l+H>l10qW6L{m~O(8NxJ@vo-dkE7HJN!2^44}SrzRw z(GCT9$RJQ~&<3N$w`hcgS}b#e?rV|u0MiNxy>er}Z1`kO4~<|hp(dmbYC=(+!kZin zpDTgCE94%OBJ2}D+at%PP;ytBl6Ab^wcB()ixjK4Tn&=2t!7& zqL50C6x&^!BI#bs zII#}XYfkw?N6lD&ku0;!UrnlBbz%dSdd_NZ%t%doQjv*e<$Of!?u~SwYBL|z09qQN zqqGuI^sBm6xo6Q*aZEn#S~Lsfwx4sW`R(U2ul}`3GVRuHfqH}_TXdI@0KK9*QYzu3 zG)a#6vu6S%g|usWbfHz3lpWeNz(uJ=&5Ib)hs3BTL@p+kw#e{bCJ!#pbJj0xy)EJ4 zxz@V{tR-QSI~S6$gR9bHKaLXRB=%{7YW{(3=)?NTKq#rBb(ky*uJZGzRZBJQj zkyV1~!ub|?sq(Vrxo#*Rr>>^{tW>#3TI~%in}gaNSQg0RrAR&P@=`!}6Sqn@?Mg$H zd&*m8n0A%71Stm-i?qrgZ3a^V%HyX@8}0H_f_Ow8qf1wmTxK!H3e6=_f_R;*AVMB# zx05Z9*F#unOYUg5hg7+zBb*m3?sU64Qb62P#;zzJtCLi{C@BXwcUDRn?V6UN)Q-=b zCE6X_WpRz1(nq_(Qi-E=OJ(ebl+Z;>ixRJUQi#1-2MD4n_jIkiQ19wm3F5g^t=!I! zb)N}CEnshC@~kXteGCS7WL8i=6(wrM-OyRl9 z_6!Az&w16e!TY@1N7|e8+5&$u*bsy!UtF$7;F0s2C9V4O^YYR#4Fs#Li1R|ar7@;Z zSJiW|hYWY9hn$O(FGUdonkmDfXT@xaXuJCxHcm~Tu?W%Pl5$%Km~_#uYiMA0g^cXw z+TaRSo@qGGxV@tMZtxn%^EK_PHkKGIU~h>@WH1s)$11&vWu7G2WU>QG38UTlzygtb zYenYfa4vRWqyt7QMD;Da@Z<)qCtP^vCX)H0mQTa~HV=dA+sCWV}|m@+TBlR^pN5m}`K$xR|92#sxt zdgt@CY0x<{AVv07=qzUp&!1RKY)P_c?H$u*&4iuEa|aZ-~c< zC}n1Lhqwjue6|R~*_eslN-GNpJ*4@pY{CIZY-OzIs_e?{q+UUJ%g*EQ=$^am4s>tv-8%QD3em=h{7a$Mxq6EY~f^@I}7Nr0;r%3P;F3O&TbcvHef)P=TX zDNC~JC>Ny`H6N9^-a{_-dX7pP66K<$vIY+jT^FLCb`fH;dwjWs$G4t6-(6i^T!aIy z-P6T#cYQWp?Jh20GCTuW=RbB0WDQ16tZh2aleg;x$sc)xr3vj>0@`KHqH`@l3F27- zA@DFJLUt{I1@g>Xm1@{c#U6rYh@1|6{lt-5MNTC={>&3y4}o-DI%dTuSRr6Nq*W}` z*)0{+rwBWg9kO}I23DwZUF>NWwjoV&WmmguFxUL*M9IGS)ew4k#ZAMzV_Y~i0eTm3 zn&S7uV3sJQr=M{4M)2oV)QQBwkVReXRqF?fw=Z4w>F1x``W&`6;PF+(&=18|ZQxGF zt96JjiWr4~vxS;@EH<$3!JWd{TC|*Wso`E1F(T=MXiHI=Lt4@V>6F)8-Fbe1G?4dk z6G@2_Qeos!>N2JAJgPAC9jYj8P|bL+sHRfZ8i)`)CdqyJISk4SV{H@!YYvGrf_Aw= z$Au7XfiDoGzi6=H}tjfNyj4^g`sp?nlDDex)LG%Tj6`BPE6SXn9%1bEnI3mpF@ z(Mkd2gM0?}rW1+^B<(DD%sf=>mZG>)z9Hfj%Diu0H{0N88_&&tLNW1op2J0(M848w zQjSduNed{-lMWEHe5HcDn47^Y30u|Z!N4%F2Z$B32j!G&<5?6V+9RY%2viE=*#^^F zMg>&ZgbTtkTSiT&TEekeq35`5#VlG-Qb0+oAl?gz*AL~R5((vdNt7aC=sbhzV+?fD z^1rd4>G%PBZn@a965S2p)A-ri`2^UW6}nv3zyN8SM*Tx52n>yh$a_fhiYkyA`Fjl2 zBeP^iVl2@!2&3dky%J;aJW7YZ6cyJ}K?A2a*8nA^J5 zQtEZ({mJ~v8n3^&T`7ghiYsA>%WLMr%#uVi)_RcUE~kG}S&c^5!NLx!gO{KNmX{oi^m-v0QLF1NqHkhL!;P1$#Yd)t>BY}F6@6#+3kKb&>DjsZ z#kCm_3VQm32Hr)^z{@2CtS8rp8XnWG;d5cb3xqF=#zYJp1tA>v{c!PaiHj%G`JPs;EZO$&14{*t~)*8Dq)7i=LIj9jq`R&bO0<%CUB_Wt9pwiBU@j*&id@ zuxjfmUGq=l3X7LdS796Kb3WO+?^f=R&@NCr-N>4G3YFZHN&s>)UD8$2$>07BQfefF z5|%ed;cgxPZLpTElT{Dh zu|aNTnGTV7;__&8yf}ZA69UHETOoB(;nZn%QbpS7&;T&PS%(Xcq6wwl9-!-fDBK=X zmQ)uyofMZ`56Wwt<_leDg0(87k%1IFN1BDR& z5BP=2w2TP$wZz~TzXG3WQOGu1e7Zf_eu}HKP^R35qD5Fs^tC0AKc%vk^<%9Lh=<`tZ5jk zF)oZI2i2p4@Wz|628KK!vh~&d=9+MVEXBe?4xR_ahf=PW)8%A!7QWN557aQNQG-?D zF}1fF{@B~Sp&WG`jdhdrPQl?h5fOFr9~@Iv*gwW9fZ|k*RW?jkHqVs1jnFd@?6^TO zGm!_NyP__qBR`@EanXoLecXjC?SNq^oRQJD$_}&v2l`g-yWzGQrE;NMD`s3(q#cyh zpJ7fP!iZ^3PPI@t*x~L%shz1OVwJwsP*s&LHHgBqBtvh8d?rBK32JYbhx^h zjgR9bMl)%zhInU+wW3_g(KmiqYj32TAG4HeftgiL1~X@b(V}ooY;DT!5gurA_%RlB z9L!tI&$$BZ!Wd9(ELqH&s4bZzwtt1KlizU&_^-y7Yg*9zw0 z&18)NmS}=9EDa-(S6o)qtAgA zZtOSVN|(L_D{p6*4TK(OJyl~oV0Q?aOvlR*y}zbM3yzo5i#44;(afcojRUBI;B^q~ z2>9fa=F+M@TVu_E+lOt6H&rKGP)^42niNpEs%a+MLvP6g=G667JImtSwJZfHrO-F1 za-kVAx>R{R1JzQmHWPhWmkqI9XO1}Q;&KV9tAI+`m(9%*bO3s(Brh_Mg_R)<1FDr& zzi+F0XH(>Q8r&OYb#te|5@26(PK{iR;P8Fr1}AVqjqo6B$B^h&K zVrXhJIH^oetOeS^{A7xp)@JVXL9|&fAm~C!>a^afZ*h(n1zug#QwF0HUT3C+in5*; zxo|b1ClSo9Y*|$E%1C%c*{x5N(o88sl!<-~uj*hdG7YwXnmQJN9TA{Cw~W&+P;$Sm;TS`%}sw zPX;dyuOVWk8`G%xLnKtD2{STa+?dUf?BH0Y%s9KM?bI`vgUNWLCWLPZTA!D2KOzu@ zqaq88700xattrMx2zTQ$ODYt3(KZSv4T@y7aezyFAkD@RvHp@&NWBxA<9OT#OG}4m z5&(o-vV|zhBHgxB5@cc;VGEm$2n~geZ8IzoZ%H$?940fo)k3L2b?L?U$rRr3qgUzFWQ9DO-ME2swGc{eiKr$ z+XTk+o4{qQI(bHI)>%)uiD54C>&#^`KoVLw7-}g|EOgsQ!EUW?;<8frqH-+aaG(?I z8N2@xN;g%yC~_q7=mQE0@bGz z!~s4*#0CyNNt@GPt?)FL8jG~N)W^`7+-;3@2db3vvZII>cDoBAg)_iP??Ba~F%f~* zIHOS)Q}g7IFN%7x#6cb@TiHBQGe}b#lHgqS0HnFYxdvcL6&N zDPb@c;oJjL(LKDPuvp>(LSan|_RFey>jg0clCS9Yq_0{MIFCL;0?Fs;1`K&Jz$_%u z0@6dA_aIpr)X7IN#2YX_RIGa-qVROwl6t2Hm_`Q1p@uW=OpYee)NU6N2fM*qsl#d8O6tNFn22fKW~ zG2G2On(X2&(g_B%p3g8CgdoX-eHFlF^JXk&B!)QfVv*)A>N{>FBw$ahiLnsFl^x}4a@@vS% zR8T6yE|df1AUtbF_Fng!WH_+oNtKi|YOqI>(`qNPVuQ|S07jF?05QH9Ph+sp-J^Ji zUXNCEXU$&{bTL}{pi5LQMld|n^@H8x@tkg@kB{kPxm~g+C%Xu;8K19qkDl*dEO5aB z(-bUXcvZEFEWqQLqQDq|Fo+CFJt#YANMA|;O#4bJ5sA7d~1Kupk)r zxDqo+vwJ)_Tg*aeX-TjHSWLq>lOHeh!$~*;AiKq{{e-@!5G9f$bPNL{2E({rE*c)-~l6NMv^;kJVt#%Yj zJV@>r!W87=0mneH)W}tJ!V=yUOsal88W#gxOrA}S;WZXqM0t=2?bhDG)z**Cgi;NB zil25rk{Yqr(ADqMPi9tX6Z&GXmFp!|e~E|k*$>R9$gGx?2rRJI_;f;f9e+A32TPq$ zdU}VGr-C2UaYb zVur7{E5_$-Lg^J0Ut8v;?qQ8e@zpc~D7DQ!DF9^RbLZ&tqw(=mdcdw&t(0|WkRB0i zA5rf#7-1@ap_+PR;JOcz0Zi#=>LyKB!PDifQsXf;;o2g;m`t8_Ma%&0X2I&MF3&NA zbeff5(vZZ6q(Pc|7uuOfqAg0&^bQm~ecy+%!r{ig$UCg&F_+Ew`>)G)8vFFHD2X7| z;1GJG5LiP3B?QP`&eQOTm6E5FXbl1D1{AQY-34Dxc@v#Grj4F^w$#ViEYbVIKPu`M zh$aV<@Scx$JE`aR{#%XANSZ3#Cljq z{z*3v(3$SAu3)rtfWpT>#%f_TJyC9mnflvcnkPW1v3I(LBQv!;HDI*RG{{{9QiK!1 zLh)S)JsWF)NAxIFWTlvmTR?gQX&40YQwrE(tT^R*NuZ1W{S@lBS}EjI3KF9iFvej8>`SxWt^Jrv!UiSj>BOUYQ7=X%c@Pd z!gztTtvQ%UU-dwou5QmR&c?8vcn;zicbcDHoKd(%F%Vloh5xY%s(2rU*d#-k>Jq)} zS&}vTrM9qi;b>!!V;vubr7#?DP8)4pxF+0d5SMIW{b>GlzW92+OBwR8Go?o$Hqp2y zv>`r#R+ty3oG52~W^^3T(Y`J8Hng96A;a<&tNrVpX*;hMlSZo*XQvXGY ztR)-VG~9Js4SC7iJn0?t+gwP`wIhhnCNmt{uSV}c%+vYt`u^fch~xa@#L>6srqT6E zF#2dg^l!F6z7a@XMJuVi$e;$QJzIt$Sz??EEyuHM!c8&#j$l1RYMJjm)oKBR5E*QcJpB+e{}LMw zE&J&a^7QBggCk@Ca^|bOQ7Y9u2(RO#6%DO`?RJ6&@aiUG+pas6HtIeQ>{i_cKqcrE z6~7A$40qp|>ak|g5FQUWE-0#~jFSc+1+zS${P7v$v=bHDpYW)ZP_;f2v#~2;iyVEf zff|kKcPf}p0KG;fpl+iQlsD7zJ>Z}r#A+oORZf*y@lIF#E(Higsn7tfsMKJj4we|2 zov2ltmu$RCklI*;nwd<|hs*oQR74u*wPYkCp(bbO%ZQ@0Ex$$|3 zzkv%7fg%cBV186`)ursI@X;l5PZ1Wq#MDq>1LG~aFjB%ZUF21Q$#4~JSG765;pMKw zJlszdF59AmuqVP{4fJ#hQG9p4UOo@b)n~OB`UsvZ#;euj{Adt)s6SPvrx%F26#upW<}E#`~!=OMblorNvXV?|vo zJ4-Usg3%#a2HW#dEy{eGJJhV9J!O!#W#Ww$xCb~=yy|zCcoAX65jIo9R#HeFYT_cK ztuB-$C2ykSh+)?X*I=IC$$kTr$n|+sspkg7ps%=c`mTuM)6c`nV#6^gkzNxdC{Dnl zBu8`;O6^4b*7s<8f}`ElXZrYC-;>Y9wxywzW(lR8u81qwULUSVpAyM@v^gn!iKIoC-3N-W2CCdUEkxLa z^5zO={n6oJW3Eu;ZS*%@gL!wiD;PbL)1a2ail3ZJPRBUfdUXYLfHymOc0R)jk=()r z5{_@@S#U((T1aIV5mb=ox&C_gf7;r(K=+mr4>zrsJSX&+r9NDkbL~{ zW25k8Zz-sD`)<#sI7o$ty6byxUxK0bl?LJpZw%(g#lfB9LJB}QIMAa@?0%hh-LbTIa>U3MPcE~ZTib})Ym>=t4|)! z#;ddG@nU)L>XXIyrswCEYYL+@_5d(&x6db0~S#;q#Hlc2)F}0Yc*A|nWl42}MHI;`K zziUuUwk$>Mfr7lT?~;q}FPbID5U323CQ*KLksQ5bbOvCFgF&+V6ys)O8Mb8@ks*=I zebX=|2<>QS%PC0~3rE8PXcORzNF4$Upxv#qf{-kY=qE8Z%0;wgvGaJQ2heT+zk%6l zKnCzRhy%6L3lXBtL+k!8n3+75pNms@nTNLa#pNVYH4(t*1vETS1tW{aZ{_JZcecu|WuNCb)! zALUjP1tmVp>rE7t_$XM%l20T8z}_?7C0g?7WRn_@XyqzMvZAAOnB-~62H#4Wo*$pu z|CH}tx3^U6W6X$2-OOa!10}mA4UgB2 z-Bl(tbQuI@NOB zn9N5)Ca5bn6p$67AvS?bkcaaI3 z6X8DShD2j8_%bN#2dG~9-nf9~-+7MvHn`>Ty;CgsUPd1UOF_#lF15R^6^^zp+@SbA zx^#SDU0jHI2&s3{g^V+V94PG$OI=$2#H|q(Ke{f}Xxl3UoZ(m4-VPjbEw)#{>ajtU zR$SF!dLKoI#dp_*{bKv00i!411QOn07b?Z%>x0zY9#{H8!|8SdQIm*IsCP&hh@UF) zBJ~ZNU>hiwUV#*%M_Se!;%r+D2HMuu0B753u)5f~8sKbO4VE2SR|A~SioVG&0rOfX zJ>ty$LMHc%vS&8HAiqjRmwvs}tzzfuldURXc#k}v_Ht|`qF0k2MJ-OlSo70DAci)s z01A>;DOk^uiKgc`4{*v>J?D~T=T;3;UzSzdmklYX776h3)2T9i(uxNxfP>=#v3?c3 zD5m!+TXd=Ol_)AadFL{#3#qY|_68_M-UAr5R0k2h3!cQ8#fw;QT?gdMno1_ttW#zK zt!pA~RH1r9Q#y9D3LQkU4Y}v2DSM+EP>t2)5%x2}3W4r|#>C2d!O=J=Temqh{Z+mSl81>cpTlL6_rY7-8Tg0RaPSEKGz&15dAtcoobcNhu-wBJG~& ziK0wTP%Og+sOS}l3z`N1v6jR#3@QRbFc;cN!9_*tZxK|%>j114PTU1d=~A$FNFo)o z`$_&}r6h};dU}DT)|l3`U}1o+@vDUJ`*Ax}=aCdvtY5VW4%to-V38`u%UUHB88dhR zaUk!_1P@a5u=IF@{ArUpM5WH32;E{l`XHqrNHq8^F81c)bq+K2kt?8-X#))Er7RLb zpxCt>L@OL8cG>|PYqc3}b^>H;8c{_qb&nGpZ6TawJ3tCY8ftWqKCK!Iw20Ccn1~`B zUhA`VsXZAgs{F(9NHw1P)A&yv(Is}rt2LgeONF$`uc;ZJ?|>N?ucPN{*lnx{NJipN zou42-4P2@l`rCN9Q2x2-qj|ZX9*aW|= z@adar=KL;y`2HK|%O}lQ{pj-abh5kvFQbQ->pS5uTC?B)?eYj~nRCQvon1azOc$@x zk5_Y4|NHp!y$P~7(`Ax_`IiXkgRnxIZ|sLQ;~}g0Y;la(|C{mikH^z>*jC;fy|bW% zP%k0vBjxZIJvly_BJA@uDEMoE{ZU9XPJ8I^3Fscf+uz%{`VPw~en3wP`grza%<((7 zD(trtI!kK*)A&W`<-flx^ddWmXs^gcp@N$?s%i8QmlVjW)nLYn#xn{&`x(z7Uk*seG+Vq7*s2qjj#GRawSf!}Sx?FyLQgjW{3_8d_Gw*tWLUjfRe-A0QN?Ce z3n*=&*^%_Y_$eawNN1@oU$Zhyxo4>4C?JPpY=0mhAMX1UVMzsF4lpT+t4i2dq)qq8 zBUwP7#}cloOb=C(iIjS`t@bW>(`r6M@FzA~i7t!OoHZzURiI5%hcP{1>I9-`>XLF} zZfKi24b|l4Fy=e{?Pf;^gg)CUdOr+@Dy@Q&O$2DFERR3R&)rtp62{f60765}Tn($4 zWuWF*MECG}9X&z{h-Bw-1Q^nb>H?#ZO#*555FkQ6%yth6MAMyMfNZ2e8#J z@RVOYEq3b*c{9Zl(kD5`Emb_Q5$#RSL-~;fZ4MN~h$D5-lb{prfuf;uK3!{An>)3V zn)eBL4IDU+UO$~a+qwD^x?1Slx9gDm!*o;eI?RRfk!Gzw`gW|9#NO(R02{@r{ak2A zc^jwDo$&D1asyvI!GF8EnXOT5vcHTT2LRnU@aGG}T1UXt1NY!NNtDO||EE>D`!x0uXB z4hc16F=c$4$=o6LudXkxwVpqWiT`khrP^N;?Q2SKka%@)au!dtl3R;CvR@~PVL;ty1ZYwdRyMmgf&BTF{M_87jcCOcA8mBFDlrhj9cpaz zX5p(1P~4kc;XQC{uZ=>UYl!BLe}!e!i5{%2l29>kPta7ku~4LoWtaWt?g+P>3-;oj zU2yroM=rg#qdyB8TUb}A&a@-l75?{J?SJ4}f4ZRzl`8S^hoedYBj>nvQ!>P#Z{B(P z;@`;f1c9{sCzA`jCW8OTGuY_3C_#raBtL2Plt;Y@TvfYs^}n_I?Uz^SE_a(8U%ZWj zt($VJc|JL(??3r!yqwWfY`@O1e40U!=>Qavlb_+rbOPnG{}E0%2(B8^GK?;8N^pRU zHOQP#;qtl1EG{8q@eho85oWkR+d${?^*9#u`D&(4#T>aC0qh|Oj_#-P7BZEEHA@7r zhu+KJ+@&kX5sJkZ0+T)rYmhgJrOQLGgb;f1hiNIPW-e1&?pMY_N*_wUK3uHsgxGlA ztTX$SePA8C$U(&5X*oGZ2uZkza&UT&QoM7X_L@HrvRt95>I1=wVc9eI(iK2Tk=n#7 zccD~u5u@6L@<7Uke1wSildFZiEiO0s%F=KfwA$cvVal!J2=XM~k-j&bkdI^b1DbHI zT-258mRt%DS3M$xx}w=q4-c~3tt%yw?_XBCb!|XbZc?*c9B#?2hI`E&rQuP!Tds<7 zUKuLO8+?)5`_u61F%A5B?8L&iJ;XcDIr)v7zz`!em%Ex9uLHLyJ~WcJt-9Su|N^(T;c;kVlBuK^mJiQGs} z=x8bj7lf5!#*gLYW_T`+bE6J#Fa#2Ws}Ct781YwYVk&l#ZGDREb4jfqbuMk<_ zR?B5B8Yi3b(YVZIHJlsMnO&=$IEAL-a^pP8IU*m-Po}tsS)DL7pj?%Sq#omzD0QhP z@xTcIxWk99Pql`Rl)80uA?`l4>Q(@*EvDQ?2Xh3-LR1jO1pE2sG>zH;l$WHZ3+9<=Khc z*VnpGfep){NWkA6Se}GRZtiMIdlly&2gVHN7Ad#mBc~m0=-S4FIWT*o`_hLLkV*W8 za@Y14%ufU}8K(%)@Kismb)t_zu5CHVMtIK;{isRZgT82y9`-<&&5DL`%Tt>qZKT!D z&V6<8(gLfe^C+J1;|{`=Xr45q(1O(NR0$ESz2k zwsf0I(QO>z;i^?6R`?@rwep~;O+C`u`ylP^a;t%xauqJJ=i8QR4O=@f0frOSxDHHJ z?lw0%yUuJF@gqR($i?#P@j8xN1=Ab}$@OiIgap#mvBLdr>sSHSG`pg!#IoP}0#VP_ zsojN!Ijz|>xzs)_>^TrbaoYU)#R zo!k19K$=97hutQUK$-)Ty=iBK5u3y1O?39E+vr^0Y(nz9+f7Iy^`=5((R$z}yhcrX z7P6^&5s)11w(2RM<}ekXyFE+=qRESLyxY7epyu4+INt5K!vU_>PO$@mJMOHVbaC?- zEOie&_W7{K&NM6Em&upDZv@RAFK;jxo_huJ`x|)T0m-_`b{)Yd9S%npG4uCD?UB1x zWsHBdIk$Xp7*3+(4Dm+6bF3;P+uXxCDvnOf>{mRYjYpz>dD z-%yXoZiD}1g9dv<8!X4u$6mv?pvLE;YE{W}b%TQ7_h^xb-s4rO(|G{^TOAEui^b12 z9Em}h>!m1Pt8!|O@FFto5j6Oy0RPG68c^&6?ClnRLNwkwIV!EJU4ax?M0VsRhXSLa z|HbBPF6njyZY*Kb<&t8ZaL%Z^Qy(?{RYx_OhldV*k-MB??p*yPQ}(p<+Yz?+v~ZzM zZ(pDv{>}A86>Nqk*OA@7dl9npDy)V1-@O1~ZdOw@oqqZ`sp)Ej7gs-$>+5GhbDQ1R z%A7P5=#XaYz^bXX(-Hqwry~#_u_d3VsP2IOvfTkMsD?*DrW@E{D0sZoS&ywfxnb!R z4a7(!@k?|AYO*mB6-*T);Xr)3Vbf&dmZ^p>eY(b;C%8DL@KxBl$pyWgtIemL!mtZB zovA0=YnYDS)MEfoT)`B!x}E~{1T2cWN7+_L@;E2pX{D=3s)OGOER-^q;+?C1_V-*4 z3;DzuE{MO!`psSLAq^ung#j;pT25Al*9VRKpE`p*R3MVbGLf2NiC?Lp74_|0{g3T| z|4XRt`o4&kDy7ZX$QO||i_&lh#jlm;lA-?#7D`vgBD(bzIz27E1GxX&PA50bdA};* zUTWF7imt!c=oeOp4b6eGV%bDi=#uKx=YTBJQH?Th{Rz{v}(s((o144L0coNWt|r{)$=i^pd~*opEN9 zZ}3hq_E&6r1{P~QcX8GMDU~59*>yteve}lkWHvK;e;2jdj1k!2j&TPlv=MbwxLTht zD3OEBLV+?)eqQH@P@CpJv{?=$7r6}K%qq9BTuErnCL4W6&AlaLmJB;!K{726b_jCS zV2WSpj=2(QrXNq&$Xx5mfx~>9mWH8$$JlnRe$OAb-j+kr;5fL_HV`i&SWX_Y$e_TJ z!}lPNEwI?l$uf$~i4x+Ds7mws7MlIGF}IOIIDSMi_fth86vtZrv@bZXHC+L+KU)gW zBhnD$SD`_LAh*D_>qHSpp?RF?Ckq9m45G4qA?5)3jX|-i21WGmzneLYU)YW)!W7sB z(tKwje@~;ZHbra$6o80HM!AeRZIEslC7@FXRO|ckg_m6K7HK~|uM6ZiQMkZ`eAN3v zmK8cr0V{T}KZ<)nl6TR{MkZC6pF30LA803Ga1K%gMY4JBkA7}w+_$4-gLPtiW7HG` z^3VKHXWQ-VjufL$n1_nS&2iS9joJ5Vs3r3+nceLqvl(eSBSuj@ri5<)$d?lKHb~>u z?oUTQ{#@(F3)&Tly%)ssf=JdQBs@h=Rvve3z zJb<26*+?(mzyet|o8@OoGse^-EFSVO25Bh52h{Ck$Mvx3m%R?=y(*C`Yk>)cQQLGC zE`%z5vux}mn}2PVv)MzLn6^;2DY5RSsy*LC03UXeeqv&N0P_F%10mE}*aI`8$R2}+ z@i!VY#41di%C!7zJ%&Q1Vj}W1Bvr){zZO9&D%iRD&zXLp{7WEjy@EQj4IW#^ zpD&E4wGh>jJ!BJ4B&<6TbZTEDRIiYwM7#rONoQL5!@sAjEYlxsX8U95vybE#`e&C9NX&^ohI2Cj{R$u`pm z{ZfT8X2_ul(7aEy4WbSMEAi+r+gKwmzwVI0|7gvn)E1&psO5k&25G?m2z)iGXGy?LE)E{=5}efde{Io!1f zf2=5`4FbNE;*8#K)$0u%jhTt?T`wxE5n}`^1y`jw&WssL^_7iWn1fr309g;f*X9(n zS_JTE{ICVZ0pK<3YSXPbrV1DxL8fbAt!o%QiDT7qnHss!H446U#8~XLF|S^8w1zbX zr{3G-t1=#;6u4T%{b{ZfM5}8h9JSfC0-%E{%NitDwFs{CL45s4F{lmwNaa3yiau?i zr}A6w$l%b^#*pGdACZGj8;D%!GyI5mVVc%GmFpPqEYMh-u7VXY-fb`)JX%3f2x>!# zVs!-J4=i?);dJ|hLW=$RlZV}`UqSeGyK+dIcH4oZn_uAc;9{apXDrre03NqH( zhf$Aaqt$Ua`(lW3e8FJjWkZQiPwH-q`}uq%P;nMZ`J`g7t{B-_NE8ZxUo9V_WTHA? zS1IqR$RTFML?kOh-MMN+a_f3y1!jk<_!FFc)Z{GhZ^>`C71kPt0-{d`;=aHJGFxsQ zEE+>P>t4LMyYcecJ@Jl#fsW|E9o_%N-^_D*%1Xi8QP*fXhBj`6d@Hed^@+yG9?8zt zzg4?Er7CYMr_Cz*i;V@h)d@k2qVy#7f;RVKWRjyvFQ@{4D_g5Z82fb3L2qU2-on`c zpFvbyqJ*dC!Eq~_zNm)dp=+56h#WZ7wWU)8K8hc#ROV|j>hCx07tc!3d~*y`ReeEi z=W1gkUszFLrETQ1bqt3Hd{p2tW8nUbcltJvNuZ?_U}bzj*{|0y(mAEOq9H10AVwnA z9UbY5xyVzRR2)nEIt9(RNdH6A)M(kEse=D)D!cZKS_o{z8C4kGXhzMz@nmKLg>dH* z84=C%ff$YGb?Jt~NibDj*jw!vopvUcnL zQXL$`eu?w=A#4pt2z|`*;mx zy?auEgf)1v-Q$$=OrwTqVIKmgXauik6%=NshVQ7gjw1qqH zi_lV|6F!}SqdXh@+)7ANwz5DCp_^qN7cO`{Gm6BfU~5{eS(d)>VUIv zN9mEPVP%^|nK`(?^ifn~ULBM+BNkn3P(@?2gDs$`vD(4lFpaYA3Mg*1Sp!kF6bWf{ z7uHdZuIU0+>?gfv;h8QU^3QxHqhJM!XC1LlkUtL>v2# zLyh+q{<`b*jz+vdTdC2;((o#iktqXw=PGW`SUr5fwZyQ*AwAw|BO``URRVfJn+*S% zT6`(Jc|p`|v|MaOp$xQt!A_uQBep0wOtS1XeD-&QOSP0GD5&cl;nYScmw-Z3N!qYD z+Q>r6ECU}573y=CRG~~J(eiSDU|FjH*~~Z>&6eq)VVs4T$b)a34bY$X+Y?2#7}236 zWyh8oPGr@tVWbnba7O+eE3DC#NL&Vf_MxQKGzoaFfuIE^GaHS#+iLqL{4FRirl#vn zfLf9(sNLWMC`^m@X%zu;k6iH@rpY+%j9Ad17BsEP2qbM-HnEi3T9W3C!^4vGO3 zywb_?bbLJ7{RjWhEKZ@T&Jh~S9t^(15qWqUejVTq&Om_eS+1f5h4}){`t)8Z1ri1^#ljAxw#Jz`t#Eu4(7QY=hdK3!WBUR|P5 zdG7dI?!oKIX0uA-HLn3-ZM8&;YbYz77qo_o4w#Y33nI?vs$F5w`i$3MWdpGe<0-L^ z9j7f2dCN6;Y+PmAw`irT4(hvS%!$!frX=Q-*HHWcXs1L{0z-e4t-KMZdezykR=IP(A4O(0nGw zPGZE0cIf#m12*zv7B$x!kDIN#io1VOb7Gm!#}}ic%j2h$^`|^9*vex>Q6FySiqBw}mm%0&hP5&NolZ_q>2-{1 z%aVwloh%#N@yxK_0TN4+S!+;}eIYf2fNZ1QcqZBaP(k{<4xvZ$Mo_tfbDY}aSrC07 zAHU_meHSI&e&Eu{&lI_Q`@tz3WpbqH3N1zy@Z){z`^$_$T9sMm19v4Gv9E!B9N~W_ zU}XfWe{a6|+M9BZK9j*S=T2;cB*Tfkr>9cyj>GHNz_2B^XY0qD_=CNtT*G^l#r?(c zm|oR(@b2RwpZSUs@6_Y)^P-8EymmtqkuNN_^1I=a{*ta|uoR`|KboFQaCxKX`S`8X z^Rd|N`B>)nd@OW&K9*EHAHSD9A3rvGK9oapsplht9o}!of3JOCju>+9JU+WTKbnuH zGxQNi+0J`svN~Q)rPFP4sk;k$yM4{5_SX2r+4%Wn$z{BSkZXPCaw!U7TNkc{g~FI3 z=qC4L(!ob4oIe4tw!)95ldtdMB}B?k!5(w2Fx*>XC5&Wkz4ylF)7kTT%PAg;oKd`w z6~&_o+2`Y^$5s^Yjc2pT@;Ns*c5h<&A@E4W?IPw8Ug(@IC#%EDBQ0httsh;?7Gpe3 z4hp=!$?dv7{c2$B1f4KrC+dkBJMjw-u#r4H`uZ*N!YF=9=uNTXc(4XMm_SWg;H{U#`_dW%{_7KY^M&o}N#D zZgnW7^lBK3)iGke^j)sfmc(M$FvK$7FvLQ~FvOC|FvRbrVTd2CP?GFJIhtK*3sS+M zKlqq2_Zh#sdT+5jAJf>e!aBS>J)J&7fmPqbGu*>HUYtxY)Q=};iy7=syk7C~NK^i>P-Hfll-|CEQm zLKGo4aCWY~3@F)Kj1>;z-7|egPObiTIwAM=8>^he8abpJHt3VwAi^5t>cq5WBc!Fn zG&_l{RjT!rutbRion^6| z$+bW;t)nrW&nHWKwObIzGLXe|rti){)1xT1|T_^W10`=p_&L z1KrH8B3S~m^;08JSp~219|XeMc9isN!k$ySh|0oKbyS4kAHzitdd_N>VW<3XJ*dClm4JzMNAlb#AA^l&HQo zy1$(28h5BVqD)1!EZN%)+r*GlbYnVv%jzcL$TYDHhE=M>%W93MYwlt12%NmkBZ?#~ zUu%axVO}gq*M2SG;O}}QBxcySTAW-?Gb+*KKH; zEo5_+?L#3sNbMtTOB&R1T*+VzHTlPkA~o?EWRgqzqjAwaX3}`=4QG)Ma2s{&yDPB| zbJe#(GXi>5W*rECqT%){>z)1j)p!P2_J))YvqwRV1jN2+-S^*o?QQbin*-zmgLO7} z7N&&SC4y}vqNZ=c@bSMdJ@~JuC+jo7Tf;p=26f~)LrFEmTrQXQC#P#n8q@OwZklbv zF<>4|pPUsy9-%a|JYdhyuHlboixu`e4#_Bh7rQk8@zASRhwI73gG-XJRpsCzzROV5 z7)xMrF_|YG2*Apd`i{O=(>JTI=wa$AI<03#%d<}|6rVKdzb;~HtTd=qMILLv6MEmP zskI)+6()$aQ6V$D6^68ygz}gz>JQr-#6d=Y;&40drd!2AuXQy%8KlI^%@o@#xFmRX zbR2Qq)U_aRg1N4_v2a7rSSfzk3wB~)L}+PZ1EaraNloG(96FFwA|bJbUJIIxlmsfD zx2bIil>p1p=dEju!5lnto5lX}vhLVG?e$xzP%kfO9!au}ATpR6Rnji*EQooN5ha~O z+Jw53)uZt-FF&odC3^`whMKLNi6vxklbs5d7qGSqo3IDm zs)w#Pa;TyVC6MN&GYcTKnMX479@=e69vk|RpD+8H>nuOKT>aGXy;tKLKm*v+vg{G<^K8ru7AB7&cUQ+VGSVnoL> z`EJuE^Tm>;QeN}trg6c$tK%_}z~7#qyvyRXnmU`#Cp^{K{+Q#O6m;zjEII@$5{7m3 z^rQZSui}@N-|X%U(T}QNd6zmw%B09(g*lYMG%DGDiEj|6k##8UiL>h&~yvOZ^u36u+ z<@>KmP=JqpoT!q@%E6(v#XJg}ddV_!TO&x(8}OC5mM~mo8fK1Bc46DaV4@pYFr~jn zb+SmjI+GKI3V31RRIY*IJp`qno3T+d^>JuVmnmH_FN}NKY3L1HAQmiN3xJF~7f6G+ zE>H=uaix2^M~g*X$a*qhkWQrnFyB-yO5X!5=Kl68Pxh2;vLp87kH}=7Rf1hF@++&c z7zl~VlEo(VPe+uQo~AgWH)>Z zHOQy`W$P_s$DUPJUs4*TmF$VDqxwG|-YG7Po{kl!`;HaS^bApG8X+f;v>UuN$wr#h z)cm>%aSs#7!?5#P2P?#@uiW`QyNMPWAT~K@8t_h7$>fy6dMB#1@=l5}>$bvHEyu@s9Su2evcV%0YEr~F22xi_3zc12 zD~q@FXkTX2xHYa_uh=%zUgk4*oTULO?TXEm@1Z+rw$M(J6cV2fQxQhtw-o58CZzxuYPrZF#b*@qDUPa1 zJ-}em@&gNb#ilTGaSFRDN*`cfoX@B#R_{E|g|^m|qm34k6=o`}7VFaYBqxN%`3_7P z2tk@@Czk$#dT0lR)PjNHFXBifBWy|scI*f`UYgaMqE^=XJc}vFR5ja!qUwADmk^o> zpNkeN4}*~2ov)YAvm;BNzz;7CEI%TTh?6*DduTXo0oyGd)&nPyk!!D5tF}eB>Fn_a z9)cguUmv)(f_y^T@9cYWouNFnju{S=%L1-4&$JlI5Zwkk;LF_80V`=o2P}x4|G7z8 z->SB=)ndTdY$ZdUz(V`$Lf`4pwfPFq4JoR$%FN40U9W{0cxixCU?Xj3{WZ+A^p_ol zlC2i3Ju@Aj+#1t;4_+r`%_#LK9S0LysOx#@HBMXNOURNa|EnmFdPWCMzdp$5rOBhD>RlK$e z#5bGo*mElQwHDEO7)pCfhjHm3x1@ zQW|WxDh^if{_Ju*gKpb1`h(RWMkwy7EH0PfzKKOeELa@FcEn&p300!mc6rj&B*5Nk zi3l4ZTtzJj6j|T<4ABLrm$TXPAI+yfyPO=n1JYI~=i}w-43}&^7*oKBKdf6K2EskX zX$wrOW#G9D#H;9R=n(Z<>pQAsn@6SEjL6};#(&!1@KQikGo)2r$GSgFunW)r60k0_uQxV?V(> zUr%tjW7Z?4G)2!9sP9ad7?Xb0q0C2n_ZjjrH_$>^Iz%dJLlKUlaIF*bgkPtENJoDK z36kQ${1o>x^C4dYpiN*NR(>4<3{Wl`MV|L@C8}CBmWAmguHfwc;>q-QJYyZmCvj~U zzy62g^;xriE~Mpft%Qe@a1{~$h%ft8o=!&#)(*qV+gOA)uw(H zmcb*Rk_+p1rda=`He>+y*p*q4bpUrA#xpxm3W8^%5>8?sVXb+EpB<5?11b26SLEzTpY<~hgfLW97%7N*GT6YyY9yl!wMNTYQB_bfJ@;W)9JzLF z6Cr(``&2O*HGHr7E!48No8?k2x>IY5MYs8ytAUY2C3aB(GlZ|~t7O<@oKR-nA(0r0 z*m1~ctRZ{5N@9>J6L8ApfGxIDVF^+uO|_D(Lao;OQPu{f^?Gf6hR@dBizdKngfl1s zWu+j)4MjHK`1m(@kcwSm?KLxFx@!;1!vJQcaIt8I(vsyVvDk+cTrS$Lk-~&W`=Du8 zFQSA32LTF!2qy<26lgOV2_+3OX0$HWGkq)-6*Dt^RoX!1IjwLK6e^eMP2gC_(_OI% zT$E_TECqU^D`r^_z^RjGF|ST8(Gz1NnI^9y9N!jdZ$`@EyhSu^zsr=TA1RJ#&Uk>I z?$B@noi380#UoCcLlVq!Idsc}mE8PV32EwP>v6}e=5)r{yB z`&;6+I%N=HM)k&|qN#vn+rl=o0I}Bd-V&F+aJe1pd&f-1EEXuSc9q5`KHKGLn$@u{ zHI4ZoUdqdd_)+ILNS~}7eGMsrSk74o=(XL0c{bj*oI(k7IXPZpFmLR0YJO36y4&lf4|AYTmh(+*!O zU8Dvhh- zg>JyAdYil{xSst;V3EhJk+8sB`O%H^A^9;(kH7VD9NyT1PX{dR<+=(bOUq1K%Hwk&Gz} zz{B-;iLU9|#1>Moic!8t_?|HBqh>5q?Qm>s$vKnY4)k}YAdJ3;2DX&)J+=SHMytvmh- zs1`qukgN(mD(qo*{FPuWVq~d9a64}A^;)RlXy$2=qe^2UEgZr12o{h%CBIiB?;22Y z3*6&%JRi@Ve=}hxq04Il*_%(*8ow(|1=mw&9POnzzX5eFLCLtay6E<7rq-pH5kBg5 zQw81Q_h2QI$?gpdKMmR=DsVVD0JB}9C1_8n6lBQV)}0M3a8Cnhtq}5I4vZ%S*V9qN z++NO3?pz{5VPHHJkUdLuuzF`XKE)K>3pj9qqy428IixBz`-hc-LJ+;ad^kalJNOz{{B=1}a6LtSG?^*Lt|FJ9J^yKS zc_eFDQmK0g#9b`0g6aBCEu@~=;Avj!8ZsL$bgQc_;BFx}2Z78ydm|RMXOe30o(Ij5 zt^*#l0MU?Warxe4jSwPQhIExZgY}5PvDt)J2J0C!*nT>fzRS0r2WChMOnTUA@joOwp3Y7~Y5H`Lbzc-F%GG=k8=-fyuvZ z$@gS}J;rk^8#sX)dy!xCbl=73i2ws@1^Y}Rr0Kmz7_xCKPV@R~VCO*tl4H>#csN<} zZhBf|bjQ38K1iHW#bS368Dwc$(iA|Vp5eQ^BmMayb`rP&w_ywWyjS48S)wG|oh3@p z9?@07ZI@^X+S7>)IiM37ut)GPaXCOx1Cr=ldT_B^98Xr+hel6z^}vDeN%bCr&}h@2 z52m_OEkS$6CeCiWOALm)#>N8oT*(N_!-1OB91aC!&nMt%lNM04g+JsIRM5Re_i@;V z?Jl|*q~`-ZSbRO;115-;3cY{%1Qx%`2ZQwZcr?Mmjfr|HH;4m7&y9gc7+}b=Z+4sp zYBlKa7|GO+5k=H>{|l%VDLNj$4Eyk1k0^unI-Jj%yMktro@Jh{9!$Pg%e4W^T!WL_ z+-fe*?6*%&q(Kjt*zutLwI|jYhV#o;pUbp*_V6*0YS*W5J!T0m~>r zy}2{)t)%mr?%ZjCd(umxIRnyDa6QKX+qP*_Wx#PLL3=85u)00RIx2KAO&`rstpR_~ zQJHstRt0UB?l1xLlqB}Ukj=_qJ(*$thBk$BAQ0>><4VvTQ61qtK(qwyZRXtJ@YU{S zPK4<#M?y$zcR3OudL(dwHL#)y5WPOkA+6ncCxZsG$bjjM!aXnC?*UsTm}z-a9%Oqy4g*?ZpfBGE0}^KSN>Mn}*2IRhjrR|DfA zfyv2qJbH|-Mz8%Mw3p+PO@sD!oB44vi6Rs4^$47>$Z5ErU<-Iu21}Q`uR;KT}2w2^SX z$Sv5gJLax5(-u)!s$ZRpA4juD~L{r;Fcj}%5AWx;Mmkzlb=RVNxx+0{&YoIBX!modvPOpOw1BN zOa6u-wiwnQCk@tE+rf?=Cp9|^CNo`w4*_Bg-B339Y7)DKtv*UOl$g;53khl~XEw=( zoK(o7@63{P2ynoe&0t&TN=Q+Z6P8F;T6P3{(Re75OT(3tk8rWg_)-_MAg+hXlGUoC zV5@X5l^o?Z4En9I#IFUu}wRC=_LpgD&V zt7(@*Nxby)%~?{O$NM;hK0x9NC_s-dV8DV1unZrUFAMsITPdej7EI|R1vP{B`?`ZW z(AQl|9vB;r>e$D;j`NjLI*f;YLx$Y_TlVQ>b}?D5MsmQ4KK%n0ev6U)<`U`5(Av3* zIolijZbNCSR*4@%vsVbH8`RV|)y3$$&In3-JQ0-r!woxnjR(C)@m24>r7o6xB4DpDiCl07A#1EyBb`t9WVH#W^xi=?i$^n%+31H2VtY5 zWG?+}!O@;uY&gM*EtKq?icWsa%>siG-^=D#Vr{WZxQdqI3F8a+-_@MplgQe~p))L8 zF~CV^jG+dFc&9zLr2s(c5cBlh8^8G)oVRMzMsda`WgyMAC$nN3NDa7YCJVrD%h;i< zkPGgBzi;r@i*Cqo%WBYao(Df_ zVm_Gy%Q09uE|ES9k}JO39oxs$mv}MgXtMn9R9@l(2X7dz103;3>{a;$Zb@b##j?mW zG>Rz7jyWWCV?TV|3(FK5QE!!}52kdaP?=o#Kk#1DcxBPs3aO}%gb&@)m`?dEg`NpB zE;S_`UfRO)xGR+Ijk5Tv<1Pn+q#?)TOkU$t!%XeExIBK=)NMCcL7{zMeblA6s;Sa> zrpI6n>FUH`%%16QD*wogJ0>OdMAmto0|ObSHbah!Wehh8t?iiy8vvR-@n*rIZERIB zh6grIB713h7ybrGUet0^$WRKL{3_NXu<8TwW>n@X5;KB{4mlgIsy=qJxqY@OE~^|A z1~aulbCR5@N`hLk#@RYT(S_T=rO2|OCrPc|TP`js{ivOkq8OtT8BE*;Tekt)tRtn} z7oy&cjs$TAX?3Im@W)lR{b;%#S4u&oRpKhNS}pGGkp85B#V09M=gP?9ac66j(#@KP zmyD1}U_BYV|M-LZXd)Z5s>-wV`RvsKw%VkMdf-70tiA*j`vSA+kvK5Pu?JT?A}X%9 zL&+{AU}=GsiVHfli4_=&>CkT!%Aqz0cnM>8OGr^S1YTARC3|gX>-656E<-x-`|kKv zn=FBKNUn6vlF}O2OntY0Gj7;X(j}N(rvw4gU!lah;P>$^G(PigL)LaX^8&;=c*J%v zH00oUg-ip5)`jE_*xN0X6avu30v65DV;GN%H7Zc_?yLC3 zMuVB<$dIeJR^X_I);#{U5ez=IwOZ<{w~ZoXrL$_=s0H$GuD#{vykcB3yOhC$7XDdp zbE(|1cj?BaC6Z}#I1Na>&v7k+@$ICn_R%!RG*(tH8o|fTo8q>k5~FB)6?!m8sc!8r zg578|*5Re55FbO^uz99!`cKuX11-~75Rm>;h)9f1qh%VUN#RS^rlxVDrAd_hh__7x$$%R9uV&?qIOazbM}4UEbTM(rQ=U!Cp1$9DZ}C z6ue>~X-IVN)|>KPY71eDZVt2W;c~?rieKa)&$~VDa$P`+x7gs)z@7xc8*#PAVI9z2 z-f?RUv%s_LiMm`wO5zNt+GUc6Hx}XNylfaer-!3n3LjU`5n%b~#~1)CJTI8+ zS0pKCgXP@jY56xs=GzgF7vz!vu7|Ee>&izRh2WM&jgr%Hl!atd?br<-DI(ze5;Oty|ksGm5EfUY3%2MGsVt7ZmHhrq#LG!QH_e?1OQCQjvP) zXX*YWR=M-a{_dfOe^s#DM_?P8r5}g77%@F-tHpa9iIAqdiq*VzV zN-pW%;N)Z!vn8YEI2bS|}(`3Nznnr_d=X>kn z8f?Prx3cfm_r2Sw1HN|;(Vtb)WM8T&+XKl<4^e)k3?l8b^}uC%XedlcJ3Xkqk$DkE z>1GH-Q~dF!Q8Y{q{z@b<4qYxS3j1Rlu}TW~c1LRIrFoYDln%LPx(o1{$>sXua*YtC zGLt!&h%U7+o6c2}2F0DL=z{rtx9vfb-ZnuyH>IJtrj7Rilm^6@cfXk(GZon?>Fr#_ z_`Nf)9i(V~dT%*B89xW#(JcB_7S4auxpTVkUnruxh?!RxS)5-Cn z!@Bf#aNo_514ao%=KZ|J6k&n?daEIq*rO2J;m3ygM8xkE6NzvBl(z8ccBd_x5sb+6 zrx4g;kqCD<@2Sh?C|mqi6D)#6Av74S!MD+Vh)AZJ!|58@Aw1gcI6Y)ot_oh9<_3$T z9|iR9Ur#|oBI>)RPcoN!2dMVd>5IWBc7Qg-*s8nZO)dROV86R9!a#S|;L);dXbd90 zU0q1G^I=v?HG9ZAR~KP|Z|FcDbvuJrntoxuuL};&fG)TgTP-bRWRcxn(ISbXKw8p; zwlbtF=NqC_a8*bxo;u_WJ*5u9#)=;Yi79Wvj`g`BfKzhJucM&kueKVxNn3M-K*@#j zp`zJpNk@@_0DLOx%)KGG&1h`Z$EEok?Biq#2l`mSZ8tWG$ z%O>CLOu*l1`OJ?0P@VDaKd=9*dinnTEw^qi1yB|T1vD!+X?P2}9KSNzsX_#86fiYzK2cbm+a%lR|YREK@<=j+g{(g^}WkV5I3 zP%mp-E@HG?Mar&->UnoRmof2DdF+*EwhM!hMUQkS*86xlvm!XO-K8@*qS%^}_>>Py zs%FbmIw-T6ERXh}h&wP#1L zNNZwk38PlTV*W>^yaAA%WA4>)9LHgfdu5DY9L0SiBO^01G9tgVAWGk zMn*~G<{hZ z>}JQWvb%mN7>$3|ol%pL-MVdZLXkZ>OM3m;?lJi*-Wbcau=}O2QopNHKzC&2!7>=nes2}rX} z1MlN#U=^u7n0;!DA`i|3I|bIRJZD?qPm{Amdyv-AkPq8E;!9bpF$d-wPMF7CSDb~P z5));4<2g2MqA7`3(_$sKe(wn5viMv6)q_8usCdNutE4}tvC40j1$C4+$V0G-oYUse z^1z+Ba?oowo}NBC;U)Wy@n@1!v`xND!xo^<@L;)EAD-k?F(NIvy@-;)C^_3a4+C&-p{uh4cvv;)?{E-YNH_hMQN7-zjCGPNquamsS&UrR*p}w#DY`Xp) zDfs*ccyMNxF@Q9m8$ri!nT|ZyOi`Pr259z-8D?raZRh50a@VfbjPdNM-h#4VM`$K8 zE4l4YXYB|(;@!LYlR1WeXRKCxEo173iol}aqNf>D1=~kiP{4K#K5@u>g!ejpnuC>h z5Nje}n?KH1v2U>{u`ZqSwN*^r9wDCOm@k_A-K{l+dT&A(y}QMLvNJfQRpaYpwIGf? z@6+=q`~(1Fe#g~%74T~Fu(pjEoQ`>^-eNPd4cxJ>-E8TrQ4;;aH0)+uJ}MQp(ODU7 z*5^t6sEu}Os&{4`Tmq=(rqL=Z3?r|uz30pQiG<+Fh1n`U3c#-^nNNq4nwuqpSJGJKoc%GQ68Q#A(zhG!_95D)g~x%AbxlOM?UtkX2o`RqR|lNT z1Zu3A1^`(u`X3Q%{cbdWbF*B(jgP0EFOM>sd&dvfD_Wu>^!UkW6|mtKRq>OM%9zcP zP(SF7-$j&CFU>>;Yu+)f=BuHg!avOw>XY377$0ny*kWts0OYdP1u=gMt-a!Hfit)sOz zo6E;y2I&5)7IC!`-L9eV*s<`9v*jV}XUDFzu_{0Yw11_N<=97HrVL@_9H$g4z}hd0 z(0U(V-%FbDLzh;G%LjNdN8bBHA13H!>ylMr0`?_C5P#$wBl;#vGqZ*)wTW^d8WZKV z+ik&oY8>R~BA7aTYQGIGVzG1)%ps&Mt=s_S%MkbiA+7?VzYWTP23C~cG z^9pdF8W2)|2DH#FIHrXm=!@A>JGP;PS!fQc*snsmf)4tFoXr5~st~p(M3@1}r}MCj z_6XA13AZ9+EEy_fd^w7Z7_WdrwJtDu#8|B@WXvZ@>>Bck0YaL@n)A*xGBp-*5+!dC zb5IIoD6*1~7;B)0a78vJFOG~&1L7k2=K1N5E|>S-#^EHCsR~2t;G*%5u_K!m^#~WC zJz|U&!9t!#R8RQG2&aZTnd}v0wSruBdgKE z1ZYqw0Eg_O5r^(c3Nqpqk-(;`uIB3rjZsO>;X0Kf1tTgHP$-hfY*JvO1DS>k{SrT3 zG4e~I9-*R};OI!vT~K#bZ9E$%{m^{$u%Xw&k(f;jD^gt4@@+Hkk zSAEzqTFL7|d@|L5&<$o8C??z*DdpI`o)<YuUqoKiV{S8|^L>k=ztY zOxPu~0u*$u9EzRk7A~{`g6hE6c!^Q@(Cfy7Tqy`)4G-Z*D9Dnxxct>+}TBQk(=xM-0C;J0kWMJfE z8$i+ym%6Cp0bUx1s~z_V#foozyezemSdDsxGa{w*2a0DD_X({mb)i(ck(F&>T>cXX zRbd1ka-4j#pnyVcvb-8;Qx6;3TL#6(h40UPvQ#04*xrU+ejEv5(8DBzBl9NY&|D0m zb6O>44U0-12vbS)dAk*vnT_E?mDij zNA7xR4m;y+W7Ih{hwDRJxOaYxvqr3%6=sO$JTY^OhG9aN=e^aF(?fi4IbovJ^V!*e zg?>NnMkBwU+rNcTT%)C~D5Uc5D17CDuT9z(XNJjBe63^k(|k$BkxIo`joib;U{kGx ztPA{@B4v>cpn_K^J|&Ztpg27)AdPDKHcp#l^T}6bd|C(Hw%6byCq96U`r(JiAO;k6 z`?R5-fc^N|wB*uJoUj-0t_;N0qB!|+f+hy_GphadFo>_=sCj_>ypyIrPu zJ(|)MM!tP`P9nAm$NpNaHv3}y!6==8Z-&D2&I*d-+(2d;K%2DA^Y)2BN-Bup98{M- zsUkPF;lbd*5!U_lMwNF1U9oR|g65Lp_rY~fNLSP&sA4lBRMk1AE1y(my1Z@D`Qv5* zg@mA#w8|gft>Z$yjcK#rr3hY=qTS)&ggbd$0v87lT zh#7ib1#s+nDX^g0yHAJw+Bl-1iJ#;KOO9zb@bYfoU)LV`Kk)1GImV?`shvuZHQ)XL z5qbe;pv`Nmij(DC#+&7}@cr2?Y(S+UW0e~BtdNPd`$^hL+_iHV*w2)mGk>BEAw7bB zzRT3iy!4-PB$}F)?i0K^k`i$KtY#rNnY~9hwakVGRCy~k_M0ozd_UpVjZ(P^VQX;k zyRlrjpNeK1;PJ}^4{BbBg)!#-wx-Lt!Dr?Kp&clEuPYr41$$Tjo#*GR%Fkr{`TI%z6esNCU_YsF zqy0of?PUG*E}2{&{aw$Y^^1Fst>38M{BUQr2(0d4qJDwgIfr5t_+MPCCe`%i#KHz& z=kQF3kkwT-n-Mf=`^*WN*dE`SZ*RaaT_nTs3*YN}Eo2ZHe|Nqa8C5^a?zd|$u2T&y ze>Bru)$5?!;n>xERj^29^NBgb=7C9CamhAY<4k{I?uC)7x6%_?-3Kd$Mn?%bJA z543mnH`lWHJI-hC>VKRs^PM!5Yo)F8y-#r(p^~2m%WznNWQ+#-Tv#?|n4NYa))+Bq zdY1rWhC5N*bG#Fc`t4xz!>VS@7nzKr}UqH9%zoY zazGkH@Ot=B1kZ!sLEsgWRbet{Df=G-1}kv!*J5rqz`u7bxiDqQKqB8n4M;RynzBts z?|7BF4!f+ftv?0|hpTMih37sOd+2OM=Ba+}Zhcx2M-CGNtQ_@~Z=4K?c1M*+=sfyc z`z~Y;CBW%2mH@ZIF2@)-MUZ(-ACMf}9lUe{63BpZX7qWe!2Wy}#VGJY#is7=Fbw5pOFCr-^4=0fI%uGh))|9@NDe+-TujlzFvBSw z;KO^9XbMb7jaRRwn^XoG((~SOW0RyiJPgBeZl%MX38JqgJa!{tWdmr0EhRX?FzKLw zCy_b9N(KER5a0dthfWdK^#95hpxwW22n*l1e>0$iT-b=X@;jgXnm@rX9n*9Mr=N1i z{9odJC&M?h2OC>%`OvCYw>r8UMqhC||L{9*c*K3&7 zYv!D$dBZ8;z`*+QsKcy4n~cRV;BBK+Nw=YFH_h*)tN58OH7xDeEn0!Uqd3$yN+JBT zDz?cEN_G!}e%;W*OJ6#JG2GGo-qgY^&?4e?4uSBYAMmq@a6N-fwjxYqnwH)9GK4Sn z?zn0#Z{$SU!8v?m!AIwC2Y3fp5WO3VL2)u<6P}$uPG$kD8u%g9*|8s-BJ6U`?=b&- zfW^_|Z9w1Pd;sW79=0x)beAd(#-@FqFky5y4S^uZ^^HHM1Wad*r6dBQYKv)wQ$Y%I z-0>SYPRvu3eE5;@x!Hy>_RDMvKK#fIEZ++AS~$9>@xLApkZsL}uR9}f?)3R;arR{2 z1-QLNeY#V8miEcvu z!{p6@|B9h@f&U|VU;FCIcO)!sXg)bwPZ69of(TI1J+&MkuG9{J_2avnw;wH@t(OusJG$liRO`O>^Dbs^YCR&pb%EMsB| z*3X-7-u_^X$M?%4Y3HnbIRQ3>y(VDipw07`g*L zVBvKokj`%0+JCrAUyIG~VyShXysh)O|!6AGeq^A1C{M8Bs5_dsh>g3}#{@VmLAtNuf_32U-Fp z@w)`qxn*T#KOT{4O=Rukv53{HtmPQ^#66~W)X62FY<7ImszN4%G;mFxB&kvW6|Cui z2(fjIf>DA-ekfY}N7Zb}tHf#o>A0>RRSRs-MSl667#{;!lP)5Z-1i9rW48AMdR*%W^niY1 zc*i;+0xINIUKtAoZkg?{b^*%_wA~KJu>Rs%(yE}dKcjgA3S@`|%)W>ZfF_=;^u2^O zD^NPX?b6gs7w=ADs{5h(9y?MSOV{H+7z>NGZ-$~R#o7&dNVIMY;g_lm%i1e^Z0Ob8ijc>H!o(7bc zMNQBIPaGQlF0;=7Hdr|jQweATEHWRy<*PS%@;epIxV3+qGo8PMBt&(?DpG){07_Rx**+7slghEaAb%Bq9Ku0M<1>nq-e zrkvauZO2KL!;ZNP7ZA#h&+HMrRGy-??mk47b7it+(-m`!XPvf|jG|6sojPBy?;lNs ztO71JuQ8k1V?rJQ_v*11ruAktHhiQDFY zg*3R1Mme~P7uQ6i#(?&8fbcpIfWbPKfh9)k5z&-ghDMw)Nj9+dS8K8G<=8ab=FR87 ziT?yTJ`LLyiIkY_8?T1IR6%FknrP@7ZH(QJa*sYR&T8fpGpVEcT2q8jXiL$Aq?p2I zMWwH`b~y~a_gC9Q@&N4M1ldN1_$ni2W|uvE2qP^!zX6HnthGo>0#NEJO_{F-&vS3C zG>33@g-{cEz1*B6{h(cnthn7i*UP6X6klZtW(TiMr8d6#oNDu-zdeCAqJ;KeQMM_| z5JJq=fR^8Q_VHL;(Ha=LEt$V-ok?cnQPIHh->fdzhs#tZ3*A{iKKv+5EmhzW>j#o~ z;Fe+NSd2Bj+Q9fXm?3DudeU!uSHGNo(!bc1qXUIS#7s;r1=C9jQ#ohUA$YS^Z0QdU z7C+C$x%91At#{uZFDe}0u$a-+QNRw(LY0QrP-U9z>$<0kI%p>eqHe@=aw`8euSCWQ z_e2+Jy?Ofr0uCYHF4yO`_CHyiogOW=C^EONPaz5hah*2ut=e?|HpQ?3!dIde=eW8x zS)4A6HB*I!3L4Tjl}V?dtqXdiFEjB&=2+R3+TLI!DIt=P#VVz@4A{#~Qoo(MbwbM+ zWF6J$B`q-vtv8gsZsIL;1i@NV#g*3u62tST4cUtkg523-5qPaym&f4}AG``-F1G$C zB$A17CX${Mzh3r9Q4py+g0>r(Tw^!dEqRS!iBGk33mtPGh5RpzXSG*BpgL{b|I`YalKr5 zbmmM9N33=kJm2%ym2PEj7gUcu{ZNAAP2wl1kCnzjd}<=OTWUxt2inc{#p1STaHt9n%-e|venKyLzp^4SyA8Ge3$ zaRH;qYFYc`mV5Yq1zM-B7d3(9K#!c>Ub%9uxVkY1U3XyRKjZLD*~DKQV<*Ur+gpyZ zIr8zrpO@@@>?yf~3W&ce=M$UD(a%^86V?K^1N)w({@3nqMQV9YpRlH=$Q_f^bbS2f z#o?EakM1DJl(|*Kt+>(@*}jL$`w-SPt4|tk?RQ6N#BJMSzz|la+z6nDvq`EM0k*l5 z0(omchbPRJId0x|AoN!Zq`CHQzLwTEM|?8DmV4&|J~^;1pBy-!PY$5|rhw*x0Zl<6 zL;<2D^}#h03X6QuMp!0b^(RvXG$YD6lUzQs%C%cGIvgR5F9wTbFGoZNvR5En*(8Zi1AW_51}JQZu#<$9N0gJ$ZF;YOlYNnJ97o*P5*557 zs(IZe>E*n?f>DNcMsDBA3ZSO3dk^aaX+aSPHJ%X^7h;C~mT2uf{Z-&o`l~=E^;f~R z;U$?C@$cenahPJRT@WdN(r#u7~-th_pPLihsQ;;DB$OcjdWUN4UEXsw^`;o^LCetP_zK7Z2R-c|P*8u;5 z0r!Y}s?N^n@;%e#h|kCQ8|AXV_%Pk&f`%<3=sHyyPzd;jIm z3R33DQld6vbMpq1k<-1rx$)}4zbo1iV=5KjomuXN$M-tRl*Am=l<;KTFca-{wo;hs zho5JHS`}FZ`OaL`<$Q16XL|PK0tg(c?3j{U&*zQhxY&Hd-49z=3+@ebq#L|}nN31= zaB4y+duAR9EvO`}ICNORAJ657bd+sNWWeS`$^who*J(j~JQz?_Wg>sDWzv4hFq2-t zcA&MaRs=G*rkKwPA;tb#A-MGI6siubw7ftOgP~*k($}Y3cg}N=^TL2|x7WXYQNu@@ zflRBrPsePUGIjoR=vTI)LuBO%;$V)mQL$i73L70q*p2OV5X#TTp^hH3{9s2d!#Hd= z`*8|)<$%$Rry!W3IxqSrE8Io+%(ev;6Nu?(@f|5v|9PGu`#Vg!+pny!WTUX#on|tx zgFOknyGjQt>%KD$5X45S#ODN;e?2Ws1?wndwJwn*il zm*ETZC;FBzWHU!j7MqiO^vw)I+OfpAX;sRv6tU$HanP*a!7rz|gW;u{e|7}?t zkXFIWTs}tJ2Wg*m6$1br-B;s0Tyj3~qvsd&h2o+|EtVE4pylDg z0okIMmI6Tcm2&Z;Xkn}O-r_k5@xHy>9Ij6i|SL=^+438qH=K5(G zyx4JBdAJ~UL3##Og=>ljvB~YWd)*(OsR1SM5c!> z_lKA=T*McOClC0-%>gaj^&(X@dHZw?>50vSg_}Tkf4SK%k;xrRP0$HkAdd1$dol!L7k&T6Tg+HyQwk)eo18qr2-BEKgI8 zPEprFI4H=jy&@w1%O zK%(F+Q3Dk0Iqy8%F3&f32p(_j3M3G^cNcsYO0V}~p=+Ut0nV!7{r4lxWplPjuhUJ% zE5-B@+bjxCdg3s#Xl*GH#YQu#>M6-Xdc zo0HY$*-^SDj%B?83bg;;Cfzf~J7WXj2*JJ0-OKIe8ncPCzlCs7;9U{i4y<{^k$am0 za>o}&oWgLP4YVsY2J2C-=;P59NFZ(xmuCtnlH3+5@DnzdkL3_Va&UKXh@%O_F7gv1 z_&{lS$CDAD8%?IDQd$?#Sv_P8TrAd0eE5)eGm~|xF!qpvw|9BLFAPa$J!2{Dv|~9G zrJ!nZg(H!y5CID8_$fOhmg))-m<^av3aPzyxdtZ(4z+~~92x{MH8vX5V~qg|WbAZv zfZUEZHgxudW3xEl67pEaBKY7SLdYOlw7MRRxjEn)TP>EQN2}P}S~zmZ9AP+G;@#>~ zII-_9)*oM9uq#CQs~%-8a4<;-{RUPqnq+PcPNDS_5T8OdjLvvg8g;PT9;7$j#nEjt zo+lw4eifAOFSiTI^f8IH9?l9H(YZKY9^ib*#J&O92e_P4y0NG_)aGrPx2kmfLnJj&(0_nk0ZSi zw_2z`)$@kHaX1hcIocL3aEdY*3oTLaPc&^;3>557we;5xJ3T(~tD^WpM19y2utyDz+y)Ew=;(jIg_$VJMc?z-KX@xkGGu{}JA z9nuECK_Ju;!d9- zYcde=utT8H6owSs@mZ;b3N%{K2#JwKTe!f0;YABUlBp4lkpXi+f8g`8gS>Zq_iXV5 z8y^b81}q)*2_yl5s&6gME|(j4##E6gmV_QMGH~F-2kU%z3=NzH3J{^>&Ed!5u1AO( zpuj8T%PIcoIqYQQl^U>MVffPEk@Lmvcwt6;NIx8XB0=^C`F^naagX5mKpk-A1V^G1 zNDC2ANpcSys2KqcD*!AunXe!m`;7sE-3AR9nGi45_*m7sD%q+9LSuXyb`P+ z!8UCTl*lqcO9=4D@0-uV%pY6RV>Ezr))i-C4lh=3O` z+2kJ5|9~cPf?KEn6(xs}KTWSKVpJ_ua3p>6dGc0CBt4Gi=D=UX#b4|%rpBNnV$N~L z)EKM-&H5f*mB&`HLJUyQtDZ3mh6wh;_f}8nqdd(1XfJGl0b4^5?zq{K3vipAEm&nDLi*3CV;PRLaW)*;Nr7MUIUyO6-Qu1G1%)o&8b zJ$?p5oI4FL0mLsDcBg_$|ALbHX$;Oxj3^<{Cf9om=x3pNOT#&Aph9P%8srQEc@LQ( z5RYfCNB(j*2G&mt%)l8)i1U`AfXtW1Ce;Z945U%ABZW$jf(kQN4(!_$${GY6{5Zmq z0}ozmDfSfk(EigjPa;;ERIQP$B#7b%dk#^zZYV&w;h}6aVBeiBAp8PEzg05Ak-l5R zFGPAKH<;@bN&uPZa^!*+PX9s+U;DgN8eqjWGdapu3ZT?o8eAJUy zc|a~dPca?k=|Rs%H7K~>b@QJS#k7|iIh+zapi`>gu=vG<2^`m8nqz{C_P>ibR~GV+ z9DI%x^Av0h-AJ1o$PCXt;&o(Dv5ft?cYypJZJL3V z2tL!e1}4#oh)&{WKX{>zpA*d)wD=zRLJ3S5_}A$XkX%j0{&fTPul#47-g2xdp1M5R zzenF};S^Jd|A!yR@A-L$$OmZsZ;aew)=M|SI)j4F4l~)ojK6pFU!zU>XEOR+1N+jA zd?ckOq@jVWP_cp4FxkvTwS#GIh>`cO@g|N1{SVhM?K=*$clFoTu;4on^6z+%X(j3;;HH>@t#co& z_Q4lt7B*T)!)Tb#fmw3~*|D84e5H5w)w^T&A>^q7mI9s;0~^r%eSw`sGrbde>-b3}jw9nCai)V@heQN+;PaPM z{Bv>CVGssOYN1C<+QSC*@@1o`-d1t;#cdVWP^6ASEH3-&ej7U8HRYBv1FHD}T*4}&ei zXtA-mlU4UIAX6y_S`;yx=s%yk#q1}OG3IUxRglFRaaRG&7s19$EPG7WK9`SkJ$b&S z$QL@EH0*{br~{;B^n-Nl5^cspXJl!BQ?inH1#^!^HxmOTEs6OYaZsRqNuNPT zPE2~B6x7ZiwDB;UnWRn>6Oew2kV_OBBS@r95whqRs7VouK>QG{J9OTxF}4ojTErPj z2z1w@!0ez_4N0J3q*g+cQ0fvpdUL;GnQ4xFQl@G8#9-k zMV7?@ZH!ay{AUnDku0Puot-`|$w*l4m?E2x6jEdXgY#+`y>9+ie{JT{Xl1q7!apRg z$!6W0SFJ=0`}udj4&`M<_1$kflq?YIw6l@|z)`H3E7*SouPYE<`HPhaPZko@lqYQ^ zb-<-`7d$)6M+A~cCdH<7osmRlZzh3?y>{ts0oiq%#o>~91WHDZRDqM7)g?ng{q}65 zS6$-9r367b)5QuKX54^FK+2`72hP_jGkDZ0ZAu3*I@RdQTC@`M=d%C4{nJQXta(if z!o91!kvLPFL1d3E2*fng5yt~JVVYoApa!fEiCODFOuK3`r^)`7J4=U*eqQ;TmOHO) zeC!@g$*@KLDWcHCmMlwjhkyb(Rn3^uEktO`8DQiC3)s*Hu0XSWfG%C_I|CojNkL8rc*P9%Zb>hh1n^oU(SD=H?JP>=k4>yF?FfpmnCR6|1EIH%QulXY3xmKa>2ooc!m?L+Gf=bY499kFC>;wXQcDU|PIsRItIOp@DWWbb1?1 z-b_iQ15G1C7k3;Qx>2{;(a355%AWf$-0m!JbD!L*YY*zDXcZN$_CmVKU1%X}I?&N} znGxu)9r#LkhQQH{;%gzJaMi^TeMfQ77F-88ys%!Xcmm0y5)B;P^y~w5&7Ni33pFmH zO@GiQ$O&<1?lY`hpfZJQLA^N)Y}|^|6eaa8oNG>?a~9%rKpx~sIP)FlRpvvH$ADYc z$c4;ln$C=`gKhpPxLfz4xcOGco8bIKU~J_RL(cSe$F+a>(Wjii&sd>R;@jSY=}=cPfh5@>`*p!%)82C5lUr;M#=a!r?5Yy3coW zT0<%^8)X_ec;nARow)IkNo1Sdize$u7U_eWYBTOQ`<&TCO5~^;2Y!3-LEzT|o~@xu zHdJOOG*l-(TBgw73c5*roP^yazEWh_Bz1zm?}d&v3##eSytwgb?BI7;+mgUnlLJO; zYr%!tt`haYyQoa=ZI4SLfg_a}bsehAxZ@5cR@9Vk0c)1kXyKh6!-aR@cQ_Y|(?Yg7 zC6LCKOHBqTM<3kv&c`uIA^o!*tbP%bdSl^dfI@ZHIQWKA;Q=K+3c37n>7R#S2Obw2 zAZer{9v90b5gwOD1+{}X8jqEv63oon=yNj+e>u3?7bDh0?S?74SF;=$)&aPy+NV_8 z>L`#s>^lr(PxQ>^(^(Uc{XCw+cCc4W^p<2)SB@t8?jT*7`}2&Q(_?7tTzI|`vU~oTYC8Qrd){m^gAu(doVt_Yr85YcU4oFlJq%dV0oqKQ!NzeC_ek zojZ%yzxvwii`T#W+G}6Eb9m=hkB`54c<1rqSHJw)m+^nU`sG)?+9xeHB8P8P+G?iz zZQaRVHsuSQ?*p11w@r`zT!iu^Tcc7MzGyq7(vvqk@bq&BoXSo1!0BgOM6^^^bBc(n zHn$sBlv@M-7fV!n}w7?vO$v8Cf44yv9mrNCHplH_pd1RDyVX^1pJd-=o|TVVmwfr zz4~=;Fa;vnrR{(Xz{|$ET)jkDWGvuzlY+J4Gc@YI(^}b?+&;-cG}}@MS=-p`YU;SgXTS z-vlyju%*vWImqyJ#O);^ZIrR`My z-67_94Qie)wkVnC5mP=p>2&?Hey0_!mTNqZzQqU#%O}z|3WHH^%X$6=4LEPV@%&)5 zIi(NT?f-DII{&pV{GBiKO7V@;EmbK*XUn7w*Vpz2#Fu~|B+ex9HSH%KoYR+a(P+gS zpY@U|)M&MqfevPhPD@SBSRnPeY4wfu#;W^!i_P}w>IfZd3k`)Y$U80h!`Eo(_%CJQ z9nz78P^!kG*{*_aCg;NeVPCC&w;3Ro=na=@LW^b18NMfR3GqOaWeqjqXDj6F^X7L< zXtzTC6e3(bb^v_Wu)KP1m1cZMb-N-s2jT6;D+9os_#K>m*`xVL&_BHTUZSf#HlrK% zOt*(jq&bHT;b-K9)STS%%!>JG$pTgKbcz?mkfGYo4ZkxgVF#^^9X3Cz^4=4vw_W_4 ziXS{h!!r!$B38rbl2H8_R%biq;?S@yFe8@M8PiR9F8zC<`;Gv3pv@^o4w^pT59aV* z`9_dtFWt<%3u23J7@)97h+xQYiNK~8KZO|};GxR~36JPAyPHYls#Az419e zP=MU=Ey$eQ2`lZ*yBNrjzeZYiU@6N_E3TXyZr%;S zEZVh+7JtoOWC%Tb@9E2uY(g4VmN(4_k6cy_4FodEQDt}k5trKax1jftk^0CvFjD^>uF% zX7;qcZ{P^=W(&Dz->%*3>QfUr_%y84%`6FkR!(8G1ihw!`~42@wDZSjF_@_#5{;?1jFr%@M~RKvY-htKA)QN_&d^A9iQ zwi&TqI)3=U0u)o}_3>{AjHMA)%DumL)Tq8wf^th2bTB`hW)pU5v1;{+h3|Hg4JwZ& zzMfDw%wXTCK+L%xzs`e-|A+T0D_`L?&*%4+;lJ?6&7=nztDoP%Gc09&@(@_c3gB8w z-8{<#v^xp@(r+bv6A*U^Ou(qai~vH_hq8z8m8X>*Q9%CJeOO{~?R2b^ywF0%=vdhT z508}=^w}JJUxn3y^QpAu&UG@*^NYwvQLck$hMOFxtmjBrJDY*JX1>UC1d)aOK%kk+ z?pWp-!-fQ2+-6tm_u7BEqcPlZguSbOvzyJ^8GnA*F zaT9`AoF$GF=PWaSSCKQD#IpXFRcY=BC2%(k0P^{<i+QD%AZ0GM_n48&FeVB zt87jf;?{a`iyqL8TX%IlNl=dAnA{{ zga%e}hnzL*AZIO7z9*nl@+IuX>mbHoBnucUQV$m7h81pbs3rFkA4^P`2o4{-EQ3a! zBg`DN#%1%g(OgYY8Y_iF2<}ixkOb$#@Uh|yFCH1tR zQW5=hWXKe2YOsFT21x_`&QhqsP+R0|*mV~FiXY|T6N&5Z*am>U;z!qaRANb!Wv1u#4tHi)S}WwYsmm@drJ6>RAwf+_z>b}5Ll zSFn?Pgxx)B1iSnzqlopGUZCX6etQjFT9bfUUsTbCi+~K*`Jw?-uJ$&Eh;kx(n34}U zM{bK8M(qy%xs5NVai{AOhM3FiDUZJ|gm)s~UdXRELt|MLGd_~l3NvvOP@``z&h{TI zpCWm2yL@+Xesq>nF}urB)g#=&9aQ~g>9r9}xdH_-`GjR}7c)$z%PVp+qgUq&%<8kV zwNSQQh@G?+w$HS+=zGi;)Z3TqvwhqiLQw5}WMK)S9p}sKmolUr<9h9~a8u{AGC(zV z{T6G_XVaa;BKHJ_+J#rt0`85|NDiA**6l&BK%R>gi&inXL>e~cFw>0rAV3JZY7kVw8UeDU3vjqUv4(*)n@Z0kG{RDzhv^f#r_4L z?q5zsrgvDLr%xB_kM+X*$B78Ezimq2adal|&4`2d7gJ z@kSC|sRH-@qZa3%qWJ!e65pTVFqXmjoiX0*gJ1TgBMvR{?f|V(x|4b2fV21QqvgeB z|84v~b=t`j%u*j}pty%JFrf>9yKzjh!m#6uj>6&PDvIA&ZZjvz;Rmz6WkiyvEoQyw z6G21BnDGV%Qb5h}1UIQqK~NgmgJ>w>N6J`IQXSC3`4SDt!zChNr=Khzoh+X&dGQ@6 zZe45_6_*teOne58d#}8HUU9HT)6kP}&{O2o!wTn2Ex~On2>TQjRhc@b%?^%gTP=?C zn|?m?*Y@`pA1^bHLVmqVYVy8 zO6%^0MxV-3X9Gn-=ZL*dcTK&%E zaB)F%-8b5cHZnn4FtUXQ zgf;L~g)0>YI9#2fnGc(mRUPlkX;0tK22gS`@Rx`&i91jShKPR*n~Y5nR9W>|Y&OfM zTN|Cy+F&o1{da%XOXA0Of9Ges z5~IF-N20qGwY3o0A5GC<{UnY*x)?g7I55{zty zdEeHk3WPI_uefsbtM0F_i?3Lx%mkI4P>ssJsnCIr>rQtN->Kb2L;St_alz*tEX34( z{j3Pm|D-o2eT)5hhaz*RD$V<+IgWM8*6Cgl?6Up?H@rm`b!o48V~v3E;&4kFmG%GE z%gvHXalL5-9KT*(7~jL51-B_xl46a7IXeFMVNAv)+5wm>@*KJ3lUP;^+vw;73VGTI z-2U*RCUKZZ{66nlAAS`2ByATtx$MxvZsoUeRn;N|9c)dgX*MB0Or)3Fui5<`n{`bW zPwnMcN8V4EO;BBPjW&DK-(%gYw^;3nv+;BXN1{pHh;^httE4Ni+2duyQ|Z1Al1C29 z<#Mhg_@WRjAhU^mBsEcaypzS|WFK0z!Pa7M@f{=liKZ?hG zXb_KJIrnRyCPV5UBh8_*<&VZ-*(}hdaX9hrNGUfJ9-qjJ$kc)H=4}t?Rw??+wQqk= zI54}*chn%>5N3q0Pk`g#tZA5m@p}qmG)oi--JC4We&gVS`^=V7PIp!hlDJbU9~mso zeuJMlQt-PIXu!8Dn6v;#h^6oIUNc%+Npi*#vkr5YfH;Ac{WtAald#z`T7PUz7Csk~ zUal$MOeZ#lgW7&gV$%-2tmna5bxy2Cieu+sk98Q-`k?azcYzRX=x57eC-D|6fW(Zl zztA^-;*L}tc2AaMbs-Dv*zn+y^%QWCoJ7hraIQsQrD1|HJ3-LM?!gp|wxeY8Pf*); z>$W(N-^0b>$?^z=W48#6<(iUK3ND(~&iE>S(ZluyQ|SE;PSCtUii<){E>80H>Tpxj z&#nJ>cuX-E8+KGwlIu8?Jl2o&(hZ>^#c`06oMHCwoqw`iZ{+!YOHIuK{&m+n7z2T%SPwA%58)fgh)0~I3@@Q~*?J`M5Dv1X( znRWefY_Q?U62ZHp|i>e2$@a-eJn#bzQ0XU0&A2h|1VFDZu4xf3<;mez1Nk z#ZYCw6MN!p8Oasz?98vfMmh7$u;BXm-ZZxB`1tYhm%s9>uRK0pzJC1rS6+JsF(KaS zlrqV>AHc82u1Oy)5TEJhZTj)n{(5Mb(B$YA~r?JN!8-c;z)2o5g&kqd%B zz*=LEy1k}Q3k6txq7sofjiGDZS6vhO(vLnqQJlcG$>R(K$&>tW82#RPz!?XwFN_?W;|KG`JD1IaK(9i`V1bP$A$>_J%u=N zBLXBTX_*p1>W`aU41);y6lX;+8oA2lJ&EEJb%`h0h zf#}9>TKn;vW-Vs2{O{?+Fe7FGj25#rNrR&iGY`PCb0(7~uyY+$XXiQynsiyyL`?^x zCnR&O$+v;tXn;;{bYrv0CIWOTeXPmKB-)X(fn*0wx*{w!(xQ>KQeq*^UIg4c51AEznX+chN??HNd*~927nY|m{r@T1yb-z1~lSR znx%a+`L;rILR@y~I_{*C2RiOTYH??ZE2G91Sri0}+usyX|6PZM#HZ??= zHm#lw{bbPtJDV_byIzKhncI3ht2%n)LP$9+Iv7{AcjKzIeq7TiCR*l;W>Q9T#O+#1 zK%{G$Yw1V4Z&$Q5X+jl7!QWC6EV#paEO{pQgidMvbwUZg{X;@j`2Hf8en*p(miRjK{BA?f zi=hz>-(^3+jebgWB^X!%AW>rOpObnx9>zj)1T-oD$_T= zrx+&Kn^#i&jw|qUUC7SQb)ovRtPA%2Df-MSF63A03AiYDz1KfA%vfWKl)Z$>`2pfB>m!~N%tdVMY^|3DL&CiOxT{$WGmi{nc(-q}X- zbDamzpFG7QzfESJxYvKwkT{=->H0drnWimd&YblK-#=|={2UObElUWTJ!kC2^noZg zEKB(3*WYVeJlET6S{&EhYg#0~uf=~CzP$ew)u38j|F~JS7ev-LPxAx-tL0GDI!`Zx zsd1iWPmlO?wEFa%g@``mtj*}P(fq{P?n$#{2}v^8Zjn3V&{WKy3Q;2LXsNg!j%T~` zLX+^BUXXbLlHQ@o6dF;TJp+6Y9wiW}iN^NUit3ACYD9J3lpK0mQN1>rKfRWX*&=V~ z5RXoAqB`0bU*vjBaS6c)Ut1s{@|n)Rd<}l&4DN*7Z}VYNPO92|yISrGOqP<>o)~A9HA(@XM4BO2jnZGA=ZA zl>xxrP<^jiE9Sp=oBYpW;Ps?stm`hkr4^v3M*Olhkf^*;I3clb&@QCNU4{DnIqNBY zM?*qn{5Eno-19nLM3Xx zzrQbrLM*>jy4ayZF5o!!Ze*NcLGCk8GpBpXt5=U^>?NIC^Q23HvtfZ1EfgE$YkK*9^L&_2L)> zdN0qZ!VJ&4^62<-d%0dpE1yGZ>+;#f>3Vr2&35FY)6D|q^^T}E8ts|98P@JxXM=Cf zHaN<0oi%nBD-Q&VTI-f9DH* zGv4a0F4u?4gNr3$=hJo_a(lWxTi!*)4{aQxs%>jZ5MLg(51Q>N!j8Ry`hMQeC`#x3 zjPh{a&#(GFD{M|WM;6h;B_DXLYcU|84ak8Ej=uP0w7?P)bcwN`zTIhfqIjY0j!aXU8@tmt z{(cP9q>MHv@SzchhlOs$y(?Wb@@FyL$+WO~hsk$Sw^mF# zI1%bbLL8|4fP0p}qI+3OI)}(!iM7&Re`TF$Q2I8p?jaRg8|umq#-BlM;ita(l->Rn zzPGc$hmbTbIT>h#Aem2JEgRLx)inlayY4LY@(lGTmE8~Cb^T;|(Pe1)SJV$gvo2er zna>tn!lj1H2>2iEroCaj5>)2+fF*M}a2_J1RF=dzGnp4c$tTaD=+{6dro}saJF5yH zTX;jEZoZga`6v>aOODy0L*wR#LUTCP(6<{7-l8U0mZPEUvRIlq=*f{%Lkc&2HqE9u zWQkScRc(ijJ2V9;tL2IUu2J2MVi#MlphW8=T07ETWt|iFP=9;iS<0H}mxa+@JTzv$RWvYP8{pJmu11mS?I% zNU+9K>IE4N?2gC3P->*H>a%v-==}a0$<)}%h;6CT$quriwFmphv!qlkRzpm$F*=r3 zw-MWLDjQRy2Y$wb5{_^~i zWH_{}2_Uwtx%p2&7a8aR?*H`XxB7m>J>LNQ92VWDXQ~FHcKe1g_a6*wSlcn%3<=X4 zR)}R$CRjX>y(><77<%cjvMIcnj;s_Vr6+0iLy`GL(AwH?w}_GLUFCzNnZUJB@tJ*M zV)ko+)mmT%mF9Ja@+bco$DQPug?x>jukoJ5Ig@;mV;C ze6QXo3um}vTR^$ZHk|9h<^~wmr^r9J++JMb3#cehDk@XX9{NhDZh4|cVbA7DX{UZO z0)G0Wng|6Ky?|c_=LY;7s9C#KameVz6Yg5VsbJTt%{zI0cI>g&R|gq-eHE;IaQpc3 z{OF86viJxWJh%1_@(ca)Dw_H=Fko|=McuSk3~kK}19ZB1GmYET%n0H5xTh3Q+|i~7 zR%$}T8gLa?v?Auhbs`o(O^BH3l`YlVW@B`qUfpw@L&$m==wJH2y8+G-D(w1smG}Rm0Cb!c&&rprS@06Noo#eSj zL5G&*`3A2>%@cnQpvZxq(is7!HW>t|xWm=wCG%L}cM$<|D2qBwT-sG4vomPJhb@38jza+ZiQK))!ztyoVdLN4 zg$;tp?Hj#0-F)!rdCKaW7XWi4tNfIYlKu^7E57s>fd@CB5%BNK3XVz`fd9pfr|dnM zKwgr%>TPJR^eQCs4Q65a6!^R}3mGO(P{nHTJ)=)43{iJ8CdPg5iX$H`&Et;qA~3>Y zPO#kP97rIR-^(8JXMRjh;KJD481dd!4wJhReCfuu(ayTqE%GEEprkuxd%9&QAwe!s za(FRB8<<%af+EocH}C48!@pqGWH9L7m3zVL0R}1Fg$;SC^lhrIye5G~m1tFi&OtnG zs%I3Bo9>r$imE-#x+MH#(#dpIxSTZ-+mP~Xmc!dd0A}``cQf?i zM-s%|e+L0*3XIBRKRsD&-#UT+v^)|+0fG5HeGMIa>~e>=_DwLr8FugL|KL##Cw|I< z&I)p?`xXh$`T1 zcd0%X)V#A!Xea9<*;qa_*h%Jgd0JrDUs~t+4n^t3vcis$5{W4IzJoU5x4b}T}-GAh3+qA34*M9iw$SpZ?9471ZRC`;(0f>Yriw9l6z#Pd<{giGNzTY zOB-fYN&mdzg9qo02>2)Fw3L}98)|lZ>!=aJ<{V0Hc-neb2Wrs?Le)Bie4_#xX9sBYbu z002w=$uGGpB*?>UE}lRh^%_0*uKqDo)2u+!;`GZkP`(f`vz9^hUH&aQXzMm}z{o0s zbdrBX*s}o1g`VMuK+C^fuY3_zLZkQ2Pq(Lwv(pWII?skc?k_(jQqkfEwRjZx(ap@1 z^QD7Y6*#N7z%@aw0n}HF$;s4F(N9q58zlE#indBZ1msr)$ z%CU$#AQxe+G`(|Lgug_;QdQ6VrDXh#Wo;)B*ByVQIE^#q@o_yQk~TR@NCP z*rBf|comi3qzygb*;nbHW|?NGjg@ps4KcH`H4Xf9S|)479<@K~=dVDxRVcJqh4R)F zuYsLDRnNRWcq(ky1ml!X-+&A&sZ^qrGH1!al^5E4;I@lWbFxJ595WZMq@#|N!&ZI;wdSX# z5Ahw!cY^-ph`;Z&xd8w<9{xB@iP;*;W{hF)>a&C(@&8)=tvNV-<@Ix34$G2L?Ckue zu)f2$>q#)Q`+r6*u$8~sNS2TiWdPKTqV}c~RRhc;v+m3;8+@aq3V?I$Zi1yd1l9=e z-c>HnGG_G7SglB%%FZiO=XZZqk4`u5oToYrn5i{VryG)I>1nr^(@l}(2;^fj+At1k zx9f7{5(Dbi%I;MmhPiH=Mep6deK`g$a=}9Q%w77%J(P2xmzDY*rC#E?hVb2sIDKyH zuuFxyx;AI{ye3%#aKpE%l`o?HtUs1(sa5!5n3mhT9l@{ra0hiC`0Bk<`tP{qwPpmZ#69%0wl}wsoMp4gR}~dAv!kqWy_PLM zWz=jtGB|b^1({uI@w5^XNdP<$tAwC1Yd|~&*_bkfpP|CaA=e!$Mv!~yjED}l%z({k znn4WouF(_BK}dXrFP?4kh@RM>0El(KFVsiUSY6oUV>x|=6v9?1Lws;anM>I6nn|y4 z;~JyG8J>^L4R5ZE%z9H7_)OGdodld5V5`!)8QkHW5pb55Mw%tqO+j`}+Ntte+T`S1 z#8$QVUbGxR3t$POv$M*BK&A|UIFV^2uh}a01)uLg{kajjJP#W%F9+EgscNk96ntxy zr=jh>mkEA*x!JyPcDkUY%#Zi2#R)D4g|(zYbq?(7@tlK>S%XV}h2sH<(=&V6-5=7p zUL7tsG>M>a+0K`eIReNt`6=HD{x3>jf67BybzLLtEq(PY@h>0Oz((J}Q71;(s@dCO zHreLJ!RZ@W&#Sl*E!j~BMA7y5qZ`TQiYYXI^HH`}OrHxvyFCd9lDC=O&fPu0V))x= z+4jYD>3cu)(%UHQ@gA6*MmmeCaf!>NSLz%Ea9(@)H4I}<{p(bdEZLM4Sh2^Q+RV#6cW1$@%-T?@EMHkcaXa#JZ?w8COWuh zWS@-Zy>owwv!w}NqqjYU@>EG&X_maz+cowt0RgT(dLO9q=pzt&<|s7L=Zser^X_+6 zQuK!hWQF|R4_A*@+s&izJOYGo3Mi@piqLL1A6^=D03cAn-B!m_ef!65dRh_vb5Gc2 zxlPuNB9nyBdTaQM$vKXBXt9SJ^t`+vGGwJJM^XvOgYA;$;~g7NAka$r<;4-mCGp(1m9Q|u1hp8T;fVt}D%@Ur&bf5_?O#$n7L?(hHaXTcdhT6aDWm#xBEc^I zrQ{GYYkB8V%^|}b%zlc`By?T#bveR{qC4=X-GZ04A9byiPd49e%8s; zizRUv(A9D9!`JJgD!6PMsTG4sgSgt~D|*A&HJ+qJth~JqgNz9te!Sd%$WrEx#iV<{ z&Co2mJhX$jfqm>za&ojDk&(AQLaiYiynJA(G=zX%pa5t`gIoW#XiX6SES`Svc=L8? zxwU_IwmOIEna{xY0H0X4BpcrevDzyO4h+weXF~(7lqTLK%by}-3HK20R}48@+V1R+ z$EWzw?vGMa*wg654D|6YE`qt~Sa3HV9$k3^YOd`5DVa}T{qhCl-cKxGo|2{&%pDQT zea1cn>{YyKT|p22h>9l-FAd^vut`@x^Z06_+Hw>);C+dwl&wQ)kt>tNcBs}L8e#D4 zK_{sgj;HHEYc7d6RMj}JsT z1*{$0*N9$LH?)Ikjc6oug9`9UBf7TEZAda(kBq>bMb9*d=ygAT%W^^>3hA;z5#c6Q zr1vjS-Wg_D$-~73RcL>>+~9sDySl)}rwu~l0Z4mQ3%-|rGgZYP>tv4&-2T?;;`v>? zR3iv`o?!?oZO`qz5Osvxhk&?2K}>XJzp4I&7yt07==iYz`|a_ zF3*aNW%i)4SuW4idaPfW159^*kbUqV{bPfJY+ zZ`8|D{1~#2pTB721!+e3m07iUetx+B{^fT0OddJbnPoF!Ec1}?t>n!#gr#1e|4Q-(^^EW5x)WkBYI z^`^m_dmTV;6OZTw!-dOxw0l>%BC0dz7eIP8S1ow;tC+`@)ZDD@V* z*p~L^>CpE+tXn~s-msAUQ@rqgyTX!k(Il4MZ#x}uf6h(gGS9nl4m>M|2cEmYSm zZxSkUjLs))a@19#8R3-Tj&@tm)PfkRXu0LVVof=00C?Tlgu~U@88US5X0PcdrkRyR z)FY7!m$R@*Y~8JDJHD^j(e-mTrSGL43HQ7Xd?KhqdJ` zo3l{b#DOYHq*|;$&e_TAp~A%?KkDE4+V(kaM$Hx33+xp7itGi@eBDS7yRL7hFrn{u zG6c8zz3(H*0pBW0S^WXT>YUjQmR}eOTKP39Os2C6E+1j$c93hJMr>pJy}y6DIpBi; zAFQf0BhBe9v@z$B=G4#H+!As}btLspCCLQPBr{KNA7TT5hlGfn?cWUNZzP;D;!H14A9()RmG|KMQfj!FC8$VH6 z*(_Wlqr;;okx=Yiv0exBn1f)XeUSqQcC&P}w#gxn(^?XF!VCw>ZmkrSKKo>eRHui_ zr>NzH@q88OCKz)1yNc6YFNY)+Cq+0c(O?GlmhA}7nRHpncX2$Xdp#6)qx=ashV6rJq8$#*Qv=vBhx7p2FRrW#NP_J=|P9N zhzEAkK!+5BE>l~n1OP2H{C1xQrQPQ~nxQx0h9u4YX3ecBp_?cOHfsl}XC?!Y%T0GW zaL>ZofZP_$L3Vz6hzujK3gOO=8on)@FXrD~t??-D2@Gc_<{IQ5{VmYm6BQ<{$=73_ z(9X<`6;|~46cvfJtO$wf+~PxJNV=43dtnW zYiJfnIv+fL@)V5PWEy2-`IBo?iU<(=1Rv`QXxqDw-hYqfYYBt%BHGqs`X|?1X4s|o zpDxxPx7hyRx@_~&{oXZ+Bf^eWpPnr@=D+z9LVyC%1TZQ}0}kbFxzLx3dPfg|z#LX~8oUrQqCh)=>0RSWAl zAUZ4miuggNSm=8a1XTW&E|NRe(IkNKZ|x8~FmR|WBF@_hjvy(#_YCD(>(>o(WZxrs zTD(KVrGkqyu@^$yCFG|8y2&@?#&SY_M@j|4xhxV5DfbZ-O>l;G-XB3UnlBHxq90lY z2UB@7?o4MlJZ%4G=vU6nVeRP!MN(}z(ZV5%6Lx}2u8x2D3w`CrAzfU9iM;$h4RNQv zs~`AFJLGlkGG^jAF;9>b0Y?OTPpY-{JmOOr0Z#zW~JLD)gVj+H~K>{^OtTs`%fd{-dAkV)!)8ch!oi z>C{%8M07TQADyC5 z5#GG%px6|!zIO~@AK~k&&AsCQj?b1=SW5bn?NicPvC^hZ(sev6a?QG2Lj-wEC=;n% zsZtQNd+;WX!@X)l7>aXPFeOfO~S5^qk-B|E{F>v7RGm9NM0{v}_G?i3RFw#8shf|hg} zhU9NZJ1A?q%>*E)9PaC{N;~M@6fDH=eNUq#+`6B?GwmR;S$~hQ+gVrP-Z{RP=reyIA9%k`k=mAXcONWibfg@g#J(yqa(*#MDQh zG&tYS$XP+9k(014;S4-r-d&Y&Gj+mCqPR08L6m1i#hNL zz`T=0P&BuopOiNY<`MR?Z(fwlft27|vJ@HIZNYx1=45&gSBH6#Cbdg9zOkz-VZS!_tz9cKv@GaAK%0+q8SB*v{E!2A2@(rl2vOk3$z<9Y2l4{O9jle>=n1+Zf2S(h z{7$?-s#V1Bw)6oGp!hXg*s|L$&dye!K3uKnP|r8q6-znq@G)Mt8$j~gA=+%(CV4XE zG<0`?!p{8MlON`&F}iL1!;hxAuHBE4!**t-T8S zDjUs=LJD0fsj^nGL2MjhD9lWqyK~eoU8fB109RAB#TwpO{X`>*;hotl$OtIXIYv{! zj`IUWdTF(t&whG3j1?%o_pW&DX3oO&<)cXzBz{YpUfy;d0~L4q^}kaei)F|1Hq$Px zpp6a?R+hkO$7!$vT!ZhBNLcJBk*W^*Mbg*4D;Zw1~1lS=~hokT>P* zFxpmI0O#@1%g#5NiiEV?AtvQu2ZrHWXz8)`T5jO?4^QwhskgRB(ya%(3Bdf(+PePi zyNF$DM^MJ2NMDtP78b<*Sjlv^z`%vy6q*h~-lxg-+2Wtmp9Qnd?E+#+uO}a}M3pV) zXmx+JedFlpQF>1H7C+{voKe79C+qNX4L=KRcsf1W`bS7ftBrgfti!Xx1y0+*E)E*3 zGRlIYDYzCbqM|tIFCK7wOD)JW_c=gWtcn`IS*oB^Yay>&JRwq{m7iKz(9Kup)vIm+ z=12mIVwubC2-pd(Ynh4hNtVPKkj^$VB3%HRI2El-OJD_?k^7|6J z1I}?UOK{6}I-5)6n}Z+@F2y_|u&zwIrJ8|woo5ozRGiARe9x#zJ51N3i*-)ITPJw= z%)7lJmVz_ZP%)2G{83mB*gJ}HyDnY)QTp{JXLEURf%^wCeJs0{nbqx*I&W+QnKsiZ zWF`6O+Gtl!*F|iPC6bhR$c`^RyGT$q^QwKETV1Zcahtn*`LG=(Ru!xg>X zP{jrxFk8x|$#wmTfhnhnGF}FNH7RY*c;p^dA4233Nb-q}+Z&Vg>ntWU;~I;q%lKSo)L~W@PX3pCIeVc=KS(0Js?AB4e+yVsjN$mRPLAq zsD*mCKvX3u6?;clKA6?6+02hPMdzV+(;C-3!Q&_@PVm-IcBcR;$eAdz>venSM$&+1 z+x@fsgZ_O|YH2bAK?n+co;e$4D;R zAjVUSI=c((&iVz37o>pm4-g$#t(~C>m)4!9@TFDQkif^4*;(Z{w&q|a= zAnfDUQK=*lUc*9&Q7=cnM$6U%G=ATuaU?HnjH+VxQo*LCu(JoSUX4rQUG{+3AFIWoj&bPCfr@u;)2bHj+^uuIxl!z9L^GJ7Pj(QFvqVOB@39?sCRNydv?@{4YeXP>=M+-EJD%JwW%e@+J?bI@;yyB zlb3FEGf7{4ZwD}+k?XpEvhFt*jddZAzvC|_)?n(2>7V5)#Pm)EJ+usvQM4cuW-{_uamYbd(Z;Y2 zg=)>@M(t5Dl~xTBdJ8R=gdQn9tS^}!D^y=2nT8<>P*!AumiDQc;w_ukrf{O$Do@OG zBa2;Au(5Cc9&bT)Pe_zHYa+%#yNj+ID0k6q?*c&4h>DFO1vvnedbG$ba8rzZ3bczA z%^(RPz{L2+cc9O%$;xv(=WSKAi^={;3jt`<&xEi_(LZSNhL+9rLOQl)xj zYpSrAkiRr_7q7rI()T`o^e)y>eo|(Tf^P|~VMbDi5tO30*-B){oKhkCSRR2twP=3i zTigg?L#wbxM&VR|x{|`YP!#L5*TmG91E{!ft|+XI__!RtaOUfYqNL)8W2oCszCB z?bT`3+Z$SMseupr>KLS<+3%~!%Zv#K<9z0NnhjLd%@5WnU9&uTw0O2UUp;+JYRb12 z^#nj@lYUxQNvTRAO{^S1`VuR`Z83uivx!)UMq)8^-~P;HgN(?e%3roO#^>y`qSJ$^ zao|AodH~q*K!#tni@#_9wRs>m=B$tY{(K=>BCrO_E%he$A< zgP4s+8rlcwBDD1qFOd(<+~7b+dOw$blTRhI{cUe7RCT{?XB_1%@4UhohtnP8KAv3AZ^nKsGiUl#XhC4h!a}+)m$cc z9b?qrJU>gb8z2#o_E@Bb5daeqb|6>=l;CI^lx7Qqz&ok}YIl)}mMk`FQ)B#?Yhvi# zrcRrpA#Ny6W4NqM4o(dy$I(f!|KwkamQB7)wZ7&ThCQGS;-wpDh~_tZVfJS8LoTol z>bp-3JNQK%GHUsgu*!dDg#D+6Ul85Rw3c<e{7Q$)E1BvO}NXuG8JVTX`8Z>$2m+c z;p5ZoX8%M7ze3#+a$)@X$T4# zP= z9dKRG9_wSz#$;>S_xE;fAMIO7 zk=yd(mbTl)dJqEO?Y7tkAfW`W~;c!z+^coUB<=+R=dz0Syhg zK>3?zs5yLheR{N@_^>m2hLg{`0H_O)&}S~_IQ@;&?LDr|*{#BdFMm`fLhC8Z)dxuw zAT5M9-iIHp(pu72lAkV!Ys?U&TZbjjn;v~S>}?R(fOyOR%<<-YwZ(^x_uoMcbsD*2 z#)lu_i-c6rem~_60EBlF5Z5&LG&CUS`28--Us(sh0Ta-#|narO=>u>Wn% zYWm@S;2*$3`m3MME3HKV*4|vaQq6_unS6NXwG5y=6aA~}nP`CCGtsS%XQG>}XQJC$ z&qTK<&qV+H72}?NS^b~9!%}--?F!C)uhmYrD0c=0@`{^HaecUQxw_h$Tmd0_@Q^U0 zxYLNg(^5j3J{sV=W`HSpj+$3raEP4md&T1(g64f8>HCP@$1K!pU#Qn2E)TIdnP$I_ ztq9WjFdu$|2O-C&Pxj#veR7IBZD9OCqGF`@rVr|dwd*1a8SXh9f)hbN5;MQsPs{@E zKCsy>SwiL$U^l*9`)_&0iEiFRcA0(Ny7KX4C&vA-m`~E6`Sb1Edh|An2?;VsUs)Ax z=5ZF%OWrowQ?ZYL?l{s74bO#H-y*WlVLX_8l+jDjBFUMrmCbE)Hq%+T+qQnQyJI&y z+62@rWUB1QA|*zeNipO{+O7ERsfrJ+qqLWlN6i^&q&-P@W}ZlEKA~!ENYhJ#O(azs zzQ_%k1M+LX-wJ`Q)q1sD07IVII!3NIz1lFc5hvT^i<5OoF5FM>)^ z9?30u5j^<`_=H|5QLl1lg$#;gFDEj{byTYLQ#MH}`VSp=Q`f{c&d%m*H%>}5ixz)E z{{>?r=!;bS=QrIUxd`$B-?QClBl=&vk;)dM5OQlUcusjADrO?rQ_iSBK{m}5fQniJ z8JhaKEFN)3b=dmth_{!U!}aOKcE$F_PMxY`_9f|D?5o2YHU{=JJiba_wSz52pJal7 zFmD)TCP%A7{Ay(;cSTG8#SV`Ei4bpY;80yc{qk#C*t}Plfu)gb{aWnev^}Hv-D0bZ zDuq~*>2hs5>~PnELb3XIFtY1i=W`j3NsTRA*Ym;*yF=G}mYuSH-H^vZWIE4y3+M5N zqa&$&!Q3tBk7~TG4bp^l+d8d zU94maPLeuT%-fzNR3+jQ?QU(iADRJU0dM;q{r~KJ3t(JTo%g*bGs!dsGEg3&R2d+P z;nfBNOa){L1us}MLd5`8Q=lc4K4wb`!Chry63lEGiEGuORpQFJb>)++i&$M&f>e#H zkGT4|759_qzB-$_bl2Urx^DaZe*bgMy?5^1NhWEm@_jq)8U6FVnjSbOODfzcRYYU zjQU~K@mf5vZIPZ;GrIAR-Wx@0_Mof>Rz2^;qh#NlSuH!oLwT1T^Qssu9zt}w-?BRH zB@0vY;boZ!CxI>hC^C3cG6Iah(K>>pp4ybnuADBDXp|-91i_C*dOZc7 zRg36w6wx_=X??tDnYdac?W3iq;pS?=Sz|mEUsnsO{8`bl%p3+6no5*0Ay_-Qd_bN< zvXMpKwTRWB8`cL#`-ZLSx2(g)@LgM1ua7m}8~9p?^;*QI1{>!JL?!z|NcKNh<>f@6 z>4Qx0H+W9zrgiUF!-p);*G_btO-U}b$(0l>Y1BQw=3qC)M>y7ttXs6t&MYg4G5 z3Kgqb^^2_wb}>uNzJ!O%A-lR+10N_DsFt{6d03Fx(v>+^<}1PT{6#vW8jZlva+JGK zAF1D}N{3)xZf8h5@O4?{zI9tVSFYKRTfchC8mb6c1Fn4NO7Myv{Vah2RIC%_lP*^0 zhETc3&YsM932CLe^^`D_m_v^Osr;p}akgd}NK=f{pH@ZsFqNt#bd&|dAVBAh)hOH> z{W&U?`&IV~MWQQA*T&puxe;kqS-Beno}yir2Fi{HUVgzHn5CDNL>JDLE}Uy~F;yc7 zdv!lFB{wC+q@kXkP}_Qv8nYi}hnZUrFV`*kN%o*sDB-FoJx!y25rEMv6}DkNC;q_q zZ5P_@mXc#tq15CZUg!}$vI4^RnDg@N19je=K1#_xC5b7Wk zbXgo(T+wH)TH<#pFM10%iCTkEx$TuEslpEKC2>2rL1O$~T#z5L7Z+s4?ZpMTWqWZ! zmSzRJe{frnVHC6wFi0)mi?ey4L-Z9smt4YEFY0rNAt?yfw<6D@um`DMqq$rzpvM)l z7pP)kQuJQCdDGS$5YkM5MO-72l5Q_}#n$!@yRXECA0TMTX$U2Gai=H!bvrDh5DnBf zszER?sq#SBvV-(oXf_9r&0%*q?|ksAtSDQ8@N|0T*4y!L_6f6_^xmG{;y3=;HBF$s!#hveaONFgy zkl*L@3PoauPb`of5Hoy1T8z0F{99Q%;5l?Bg`7FKYqKhwH+Hz6MOV`;r zpC>XEo|;boo z>L0(by#O}VFhnXu?+Vz#Si7bLmo#%RgeV_~SgcnBSVzbl!9cq+0m@UC)|NFSSfu&% zG}PWkbbun5=t3db5Ua9_Ze~fDTB4$A#hti2H*H=L%C}&a*oeM3=NvNcc=E+HRHxKQ zn*q$X#*La0$kO)TV&1E345)VeD) z?&PU>9L$TLgpuZ~{i!r_culxu`5Ior%0R@-pj9kwr&58KO<&`ph@M`%X03dv81Aez zbQLiGzON7P9L6Lh4x{5BWa%s37{b(UChX-3y~;Pw0!8NDIRAJ!p}3SKm@Op6)Pd5O>Ze5Rw~;OBNFzh zW)-jqTozlfjO1myJm8ufmI-2>(V|^X%{_5N?1g^eqWA)3T?uhhTn!Ac>5As6xH9(g zeVDuA%e^axkk(O+a9JDxAft&Ewr0Vg#Z|HIK@JAGjO*g7b;Y4dWmO%X+5q|nZ8{`x zm(~I#Lk)p%;xUZ#;Htz<>l86{(_yCNB&6GDK}{v!J8aX-T6#@343=&fGjY%-j-J@n z2t0o|d8RjMF#Xg`gwEw_OCS`LYJfad4ZF-2V17GJ?t_Cgl0ot&yqOp$jX z@}g_R_u!1{maDenX@9(mt*2%I)O)sUUAq?PW+By|A87820f)7&JMQ+ut(}%yoW%Ne zz|80LB7X^q%v?8^&26p@vOl!`3mo55Hqo*c=9|~7yQ^~x9yizOuDu z{hAG#b7e=4wqt8h;F#w`N|fE zLsYCVjnpa+g0o1__EVfgdP~=qh&g_OA@ys&+|;&77M@?mIrJ|zQYOR`zRKEi2Xw3G zRchajCBJf;*00~hcO&?^n9s#7O}R&E92FM3EaNx7dh_Ot-#?t_w1}3Zi<$UjLX*eu zFgUWb&qyfkHWGY*e$SEUw;oO`?>|Z&Eh8X@=Y6zFIxks%H%hX2PdLh?OV?aPOpSsNRKkL-(F0fk7f)!AtKVXrxCEJUkCWdWc$tO?8rIR(vz@l_Ia%Sy#u<& zvdb(H&}6MW2OIblRn&@}ew}f%_u6K)jD}CoR?&P{`8h40)vKs(=A-^Ou9?)`Xc6WH zc5nl!idN0qV#%@FDyrqnOxv{RhG$Bm59GkKoOTA`nuC#+=b+!HAHglMvmt{ion307 zAD(%qed~dLy>4dJdHTQ~t=YFOKxW+o^InDCBg4c%37$4Eo9>v0(>sUy=KvYL^x+86 zv9D}6QgkdFq4BH-%0iJ&VIlu6JQR8s9BaYcThRk3<@^}7hvqFmcP)ojD)D~|5FWk> zpIE6>71lGZwtXMfl+9MGTYe>IN;q){L|&9&j*y!}OuiZ_rDX+t!l3-~KvN=A6(BKx zTX0qmPo7*HUiUb^;(n?*E61~SMmenmfSFYeAJAiOz@!8+b1X^$iH^0%&_Y-41D2p zsUuNNsHO`sM>@+nVU~dSxTx|0g-G}w1BdKTG|6sr*!w-10*! z_vF@I_{t^suFK(dFE{gVW%O~VG5oYj=g^)iTMg-p>+l@z$}RXT6&&8RZ)2!@S{hVc zg6}$98S=-#K2g&-^ph%aoC->1gzsFFyT?Dp95niTm5r{uuytd2OW#76af5sVN5GfV z``B(U@BX|8Z(v<~oxRG)dtxPpEAomxg>Ij)UKyz}#)xBW&8lQ=%d}-k=b$+&Aic5# zXLJypTK0;Q^UYEAYI_)#$7Oe}&OzWRcQRaz?|E4d{6QM?45q6hPyCg;qG1K^@15MRIyXf?Zud}*3aM8G^zCD~`HakMKVPZtT}C~H>1n`SHUrg;}wMIM-1 z>0T{b6_+gTS#ynkPtRvdIypyRt!$Lq*NVWS!hg^CQ8iK`z0^3XbGV*-)&0;kRhPYK z%jUAO^4=jk2!KoTe-9Z8+F{*BTnfGO8thKsQR>*>3d^7^D))lo%j=nygMIvvGB34;bTyW=*K1vfNM#Y{P zYhzCpRaHmq^o(kVX`T_~HmtdG-D>oI23;|nHlsQq*gf)Uz8TQjdi(wcd^Ll!d5zJc zGeXa=V-62g(-Mv3j8H>`C3x0aCu*(N3lvp0<2#D>gjrSGvxNsD`RE$7XKz+aaJ87OYLVBLldTd676T(Eid zo$L5|!6QR=!|Kg<-_9%jOR%&huc2`cee#IV-LP&8j$f@`-w9U8>7^8SLqOC%6=rr+ z&=aE7n1*dS;^Ee?u+>H7z3Yg2t3kc}zSZmDrQWv&%ufe+;~aH&G7Ov6W5sgurpEa<2{tH*Dl2OS$6Wba9bo^~I*bojJ2-oP=x z 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 B-;j>67b#o6i*FJ;6m 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" -[[menu.main]] - name = "Blog" - url = "/posts" -[[menu.main]] - name = "ext" - url = "http://gohugo.io" - identifier = "ext" -[[menu.main]] - name = "ext2" - url = "http://foo.local/Zoo/foo" - identifier = "ext2" -[[menu.grandparent]] - name = "grandparent" - url = "/grandparent" - identifier = "grandparentId" -[[menu.grandparent]] - name = "parent" - url = "/parent" - identifier = "parentId" - parent = "grandparentId" -[[menu.grandparent]] - name = "Go Home3" - url = "/" - identifier = "grandchildId" - parent = "parentId" -[[menu.tax]] - name = "Tax1" - url = "/two/key/" - identifier="1" -[[menu.tax]] - name = "Tax2" - url = "/two/key/" - identifier="2" -[[menu.tax]] - name = "Tax RSS" - url = "/two/key.xml" - identifier="xml" -[[menu.hash]] - name = "Tax With #" - url = "/resource#anchor" - identifier="hash" -[[menu.unicode]] - name = "Unicode Russian" - identifier = "unicode-russian" - url = "/новости-проекта" # Russian => "news-project" -[[menu.with_title]] - name="entry with title" - title="a menuentry title" - url="/title" - identifier="titled"` -) - -var menuPage1 = []byte(`+++ -title = "One" -weight = 1 -[menu] - [menu.p_one] -+++ -Front Matter with Menu Pages`) - -var menuPage2 = []byte(`+++ -title = "Two" -weight = 2 -[menu] - [menu.p_one] - [menu.p_two] - identifier = "Two" - -+++ -Front Matter with Menu Pages`) - -var menuPage3 = []byte(`+++ -title = "Three" -weight = 3 -[menu] - [menu.p_two] - Name = "Three" - Parent = "Two" -+++ -Front Matter with Menu Pages`) - -var menuPage4 = []byte(`+++ -title = "Four" -weight = 4 -[menu] - [menu.p_two] - Name = "Four" - Parent = "Three" -+++ -Front Matter with Menu Pages`) - -var menuPageSources = []source.ByteSource{ - {Name: filepath.FromSlash("sect/doc1.md"), Content: menuPage1}, - {Name: filepath.FromSlash("sect/doc2.md"), Content: menuPage2}, - {Name: filepath.FromSlash("sect/doc3.md"), Content: menuPage3}, -} - -var menuPageSectionsSources = []source.ByteSource{ - {Name: filepath.FromSlash("first/doc1.md"), Content: menuPage1}, - {Name: filepath.FromSlash("first/doc2.md"), Content: menuPage2}, - {Name: filepath.FromSlash("second-section/doc3.md"), Content: menuPage3}, - {Name: filepath.FromSlash("Fish and Chips/doc4.md"), Content: menuPage4}, -} - -func tstCreateMenuPageWithNameTOML(title, menu, name string) []byte { - return []byte(fmt.Sprintf(`+++ -title = "%s" -weight = 1 -[menu] - [menu.%s] - name = "%s" -+++ -Front Matter with Menu with Name`, title, menu, name)) -} - -func tstCreateMenuPageWithIdentifierTOML(title, menu, identifier string) []byte { - return []byte(fmt.Sprintf(`+++ -title = "%s" -weight = 1 -[menu] - [menu.%s] - identifier = "%s" - name = "somename" -+++ -Front Matter with Menu with Identifier`, title, menu, identifier)) -} - -func tstCreateMenuPageWithNameYAML(title, menu, name string) []byte { - return []byte(fmt.Sprintf(`--- -title: "%s" -weight: 1 -menu: - %s: - name: "%s" ---- -Front Matter with Menu with Name`, title, menu, name)) -} - -func tstCreateMenuPageWithIdentifierYAML(title, menu, identifier string) []byte { - return []byte(fmt.Sprintf(`--- -title: "%s" -weight: 1 -menu: - %s: - identifier: "%s" - name: "somename" ---- -Front Matter with Menu with Identifier`, title, menu, identifier)) -} - -// Issue 817 - identifier should trump everything -func TestPageMenuWithIdentifier(t *testing.T) { - t.Parallel() - toml := []source.ByteSource{ - {Name: "sect/doc1.md", Content: tstCreateMenuPageWithIdentifierTOML("t1", "m1", "i1")}, - {Name: "sect/doc2.md", Content: tstCreateMenuPageWithIdentifierTOML("t1", "m1", "i2")}, - {Name: "sect/doc3.md", Content: tstCreateMenuPageWithIdentifierTOML("t1", "m1", "i2")}, // duplicate - } - - yaml := []source.ByteSource{ - {Name: "sect/doc1.md", Content: tstCreateMenuPageWithIdentifierYAML("t1", "m1", "i1")}, - {Name: "sect/doc2.md", Content: tstCreateMenuPageWithIdentifierYAML("t1", "m1", "i2")}, - {Name: "sect/doc3.md", Content: tstCreateMenuPageWithIdentifierYAML("t1", "m1", "i2")}, // duplicate - } - - doTestPageMenuWithIdentifier(t, toml) - doTestPageMenuWithIdentifier(t, yaml) - -} - -func doTestPageMenuWithIdentifier(t *testing.T, menuPageSources []source.ByteSource) { - - s := setupMenuTests(t, menuPageSources) - - assert.Equal(t, 3, len(s.RegularPages), "Not enough pages") - - me1 := findTestMenuEntryByID(s, "m1", "i1") - me2 := findTestMenuEntryByID(s, "m1", "i2") - - require.NotNil(t, me1) - require.NotNil(t, me2) - - assert.True(t, strings.Contains(me1.URL, "doc1"), me1.URL) - assert.True(t, strings.Contains(me2.URL, "doc2") || strings.Contains(me2.URL, "doc3"), me2.URL) - -} - -// Issue 817 contd - name should be second identifier in -func TestPageMenuWithDuplicateName(t *testing.T) { - t.Parallel() - toml := []source.ByteSource{ - {Name: "sect/doc1.md", Content: tstCreateMenuPageWithNameTOML("t1", "m1", "n1")}, - {Name: "sect/doc2.md", Content: tstCreateMenuPageWithNameTOML("t1", "m1", "n2")}, - {Name: "sect/doc3.md", Content: tstCreateMenuPageWithNameTOML("t1", "m1", "n2")}, // duplicate - } - - yaml := []source.ByteSource{ - {Name: "sect/doc1.md", Content: tstCreateMenuPageWithNameYAML("t1", "m1", "n1")}, - {Name: "sect/doc2.md", Content: tstCreateMenuPageWithNameYAML("t1", "m1", "n2")}, - {Name: "sect/doc3.md", Content: tstCreateMenuPageWithNameYAML("t1", "m1", "n2")}, // duplicate - } - - doTestPageMenuWithDuplicateName(t, toml) - doTestPageMenuWithDuplicateName(t, yaml) - -} - -func doTestPageMenuWithDuplicateName(t *testing.T, menuPageSources []source.ByteSource) { - - s := setupMenuTests(t, menuPageSources) - - assert.Equal(t, 3, len(s.RegularPages), "Not enough pages") - - me1 := findTestMenuEntryByName(s, "m1", "n1") - me2 := findTestMenuEntryByName(s, "m1", "n2") - - require.NotNil(t, me1) - require.NotNil(t, me2) - - assert.True(t, strings.Contains(me1.URL, "doc1"), me1.URL) - assert.True(t, strings.Contains(me2.URL, "doc2") || strings.Contains(me2.URL, "doc3"), me2.URL) - -} - -func TestPageMenu(t *testing.T) { - t.Parallel() - s := setupMenuTests(t, menuPageSources) - - if len(s.RegularPages) != 3 { - t.Fatalf("Posts not created, expected 3 got %d", len(s.RegularPages)) - } - - first := s.RegularPages[0] - second := s.RegularPages[1] - third := s.RegularPages[2] - - pOne := findTestMenuEntryByName(s, "p_one", "One") - pTwo := findTestMenuEntryByID(s, "p_two", "Two") - - for i, this := range []struct { - menu string - page *Page - menuItem *MenuEntry - isMenuCurrent bool - hasMenuCurrent bool - }{ - {"p_one", first, pOne, true, false}, - {"p_one", first, pTwo, false, false}, - {"p_one", second, pTwo, false, false}, - {"p_two", second, pTwo, true, false}, - {"p_two", third, pTwo, false, true}, - {"p_one", third, pTwo, false, false}, - } { - - if i != 4 { - continue - } - - isMenuCurrent := this.page.IsMenuCurrent(this.menu, this.menuItem) - hasMenuCurrent := this.page.HasMenuCurrent(this.menu, this.menuItem) - - if isMenuCurrent != this.isMenuCurrent { - t.Errorf("[%d] Wrong result from IsMenuCurrent: %v", i, isMenuCurrent) - } - - if hasMenuCurrent != this.hasMenuCurrent { - t.Errorf("[%d] Wrong result for menuItem %v for HasMenuCurrent: %v", i, this.menuItem, hasMenuCurrent) - } - - } - -} - -func TestMenuURL(t *testing.T) { - t.Parallel() - s := setupMenuTests(t, menuPageSources) - - for i, this := range []struct { - me *MenuEntry - expectedURL string - }{ - // issue #888 - {findTestMenuEntryByID(s, "hash", "hash"), "/Zoo/resource#anchor"}, - // issue #1774 - {findTestMenuEntryByID(s, "main", "ext"), "http://gohugo.io"}, - {findTestMenuEntryByID(s, "main", "ext2"), "http://foo.local/Zoo/foo"}, - } { - - if this.me == nil { - t.Errorf("[%d] MenuEntry not found", i) - continue - } - - if this.me.URL != this.expectedURL { - t.Errorf("[%d] Got URL %s expected %s", i, this.me.URL, this.expectedURL) - } - - } - -} - -// Issue #1934 -func TestYAMLMenuWithMultipleEntries(t *testing.T) { - t.Parallel() - ps1 := []byte(`--- -title: "Yaml 1" -weight: 5 -menu: ["p_one", "p_two"] ---- -Yaml Front Matter with Menu Pages`) - - ps2 := []byte(`--- -title: "Yaml 2" -weight: 5 -menu: - p_three: - p_four: ---- -Yaml Front Matter with Menu Pages`) - - s := setupMenuTests(t, []source.ByteSource{ - {Name: filepath.FromSlash("sect/yaml1.md"), Content: ps1}, - {Name: filepath.FromSlash("sect/yaml2.md"), Content: ps2}}) - - p1 := s.RegularPages[0] - assert.Len(t, p1.Menus(), 2, "List YAML") - p2 := s.RegularPages[1] - assert.Len(t, p2.Menus(), 2, "Map YAML") - -} - -// issue #719 -func TestMenuWithUnicodeURLs(t *testing.T) { - t.Parallel() - for _, canonifyURLs := range []bool{true, false} { - doTestMenuWithUnicodeURLs(t, canonifyURLs) - } -} - -func doTestMenuWithUnicodeURLs(t *testing.T, canonifyURLs bool) { - - s := setupMenuTests(t, menuPageSources, "canonifyURLs", canonifyURLs) - - unicodeRussian := findTestMenuEntryByID(s, "unicode", "unicode-russian") - - expected := "/%D0%BD%D0%BE%D0%B2%D0%BE%D1%81%D1%82%D0%B8-%D0%BF%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B0" - - if !canonifyURLs { - expected = "/Zoo" + expected - } - - assert.Equal(t, expected, unicodeRussian.URL) -} - -func TestMenuWithTitle(t *testing.T) { - s := setupMenuTests(t, menuPageSources) - titled := findTestMenuEntryByID(s, "with_title", "titled") - expected := "a menuentry title" - assert.Equal(t, expected, titled.Title()) -} - -// Issue #1114 -func TestSectionPagesMenu2(t *testing.T) { - t.Parallel() - doTestSectionPagesMenu(true, t) - doTestSectionPagesMenu(false, t) -} - -func doTestSectionPagesMenu(canonifyURLs bool, t *testing.T) { - - s := setupMenuTests(t, menuPageSectionsSources, - "sectionPagesMenu", "spm", - "canonifyURLs", canonifyURLs, - ) - - sects := s.getPage(KindHome).Sections() - - require.Equal(t, 3, len(sects)) - - firstSectionPages := s.getPage(KindSection, "first").Pages - require.Equal(t, 2, len(firstSectionPages)) - secondSectionPages := s.getPage(KindSection, "second-section").Pages - require.Equal(t, 1, len(secondSectionPages)) - fishySectionPages := s.getPage(KindSection, "Fish and Chips").Pages - require.Equal(t, 1, len(fishySectionPages)) - - nodeFirst := s.getPage(KindSection, "first") - require.NotNil(t, nodeFirst) - nodeSecond := s.getPage(KindSection, "second-section") - require.NotNil(t, nodeSecond) - nodeFishy := s.getPage(KindSection, "Fish and Chips") - require.Equal(t, "Fish and Chips", nodeFishy.sections[0]) - - firstSectionMenuEntry := findTestMenuEntryByID(s, "spm", "first") - secondSectionMenuEntry := findTestMenuEntryByID(s, "spm", "second-section") - fishySectionMenuEntry := findTestMenuEntryByID(s, "spm", "Fish and Chips") - - require.NotNil(t, firstSectionMenuEntry) - require.NotNil(t, secondSectionMenuEntry) - require.NotNil(t, nodeFirst) - require.NotNil(t, nodeSecond) - require.NotNil(t, fishySectionMenuEntry) - require.NotNil(t, nodeFishy) - - require.True(t, nodeFirst.IsMenuCurrent("spm", firstSectionMenuEntry)) - require.False(t, nodeFirst.IsMenuCurrent("spm", secondSectionMenuEntry)) - require.False(t, nodeFirst.IsMenuCurrent("spm", fishySectionMenuEntry)) - require.True(t, nodeFishy.IsMenuCurrent("spm", fishySectionMenuEntry)) - require.Equal(t, "Fish and Chips", fishySectionMenuEntry.Name) - - for _, p := range firstSectionPages { - require.True(t, p.HasMenuCurrent("spm", firstSectionMenuEntry)) - require.False(t, p.HasMenuCurrent("spm", secondSectionMenuEntry)) - } - - for _, p := range secondSectionPages { - require.False(t, p.HasMenuCurrent("spm", firstSectionMenuEntry)) - require.True(t, p.HasMenuCurrent("spm", secondSectionMenuEntry)) - } - - for _, p := range fishySectionPages { - require.False(t, p.HasMenuCurrent("spm", firstSectionMenuEntry)) - require.False(t, p.HasMenuCurrent("spm", secondSectionMenuEntry)) - require.True(t, p.HasMenuCurrent("spm", fishySectionMenuEntry)) - } -} - -func TestMenuLimit(t *testing.T) { - t.Parallel() - s := setupMenuTests(t, menuPageSources) - m := *s.Menus["main"] - - // main menu has 4 entries - firstTwo := m.Limit(2) - assert.Equal(t, 2, len(firstTwo)) - for i := 0; i < 2; i++ { - assert.Equal(t, m[i], firstTwo[i]) - } - assert.Equal(t, m, m.Limit(4)) - assert.Equal(t, m, m.Limit(5)) -} - -func TestMenuSortByN(t *testing.T) { - t.Parallel() - for i, this := range []struct { - sortFunc func(p Menu) Menu - assertFunc func(p Menu) bool - }{ - {(Menu).Sort, func(p Menu) bool { return p[0].Weight == 1 && p[1].Name == "nx" && p[2].Identifier == "ib" }}, - {(Menu).ByWeight, func(p Menu) bool { return p[0].Weight == 1 && p[1].Name == "nx" && p[2].Identifier == "ib" }}, - {(Menu).ByName, func(p Menu) bool { return p[0].Name == "na" }}, - {(Menu).Reverse, func(p Menu) bool { return p[0].Identifier == "ib" && p[len(p)-1].Identifier == "ia" }}, - } { - menu := Menu{&MenuEntry{Weight: 3, Name: "nb", Identifier: "ia"}, - &MenuEntry{Weight: 1, Name: "na", Identifier: "ic"}, - &MenuEntry{Weight: 1, Name: "nx", Identifier: "ic"}, - &MenuEntry{Weight: 2, Name: "nb", Identifier: "ix"}, - &MenuEntry{Weight: 2, Name: "nb", Identifier: "ib"}} - - sorted := this.sortFunc(menu) - - if !this.assertFunc(sorted) { - t.Errorf("[%d] sort error", i) - } - } - -} - -func TestHomeNodeMenu(t *testing.T) { - t.Parallel() - s := setupMenuTests(t, menuPageSources, - "canonifyURLs", true, - "uglyURLs", false, - ) - - home := s.getPage(KindHome) - homeMenuEntry := &MenuEntry{Name: home.Title, URL: home.URL()} - - for i, this := range []struct { - menu string - menuItem *MenuEntry - isMenuCurrent bool - hasMenuCurrent bool - }{ - {"main", homeMenuEntry, true, false}, - {"doesnotexist", homeMenuEntry, false, false}, - {"main", &MenuEntry{Name: "Somewhere else", URL: "/somewhereelse"}, false, false}, - {"grandparent", findTestMenuEntryByID(s, "grandparent", "grandparentId"), false, true}, - {"grandparent", findTestMenuEntryByID(s, "grandparent", "parentId"), false, true}, - {"grandparent", findTestMenuEntryByID(s, "grandparent", "grandchildId"), true, false}, - } { - - isMenuCurrent := home.IsMenuCurrent(this.menu, this.menuItem) - hasMenuCurrent := home.HasMenuCurrent(this.menu, this.menuItem) - - if isMenuCurrent != this.isMenuCurrent { - fmt.Println("isMenuCurrent", isMenuCurrent) - fmt.Printf("this: %#v\n", this) - t.Errorf("[%d] Wrong result from IsMenuCurrent: %v for %q", i, isMenuCurrent, this.menuItem) - } - - if hasMenuCurrent != this.hasMenuCurrent { - fmt.Println("hasMenuCurrent", hasMenuCurrent) - fmt.Printf("this: %#v\n", this) - t.Errorf("[%d] Wrong result for menu %q menuItem %v for HasMenuCurrent: %v", i, this.menu, this.menuItem, hasMenuCurrent) - } - } -} - -func TestHopefullyUniqueID(t *testing.T) { - t.Parallel() - assert.Equal(t, "i", (&MenuEntry{Identifier: "i", URL: "u", Name: "n"}).hopefullyUniqueID()) - assert.Equal(t, "u", (&MenuEntry{Identifier: "", URL: "u", Name: "n"}).hopefullyUniqueID()) - assert.Equal(t, "n", (&MenuEntry{Identifier: "", URL: "", Name: "n"}).hopefullyUniqueID()) -} - -func TestAddMenuEntryChild(t *testing.T) { - t.Parallel() - root := &MenuEntry{Weight: 1} - root.addChild(&MenuEntry{Weight: 2}) - root.addChild(&MenuEntry{Weight: 1}) - assert.Equal(t, 2, len(root.Children)) - assert.Equal(t, 1, root.Children[0].Weight) -} - -var testMenuIdentityMatcher = func(me *MenuEntry, id string) bool { return me.Identifier == id } -var testMenuNameMatcher = func(me *MenuEntry, id string) bool { return me.Name == id } - -func findTestMenuEntryByID(s *Site, mn string, id string) *MenuEntry { - return findTestMenuEntry(s, mn, id, testMenuIdentityMatcher) -} -func findTestMenuEntryByName(s *Site, mn string, id string) *MenuEntry { - return findTestMenuEntry(s, mn, id, testMenuNameMatcher) -} - -func findTestMenuEntry(s *Site, mn string, id string, matcher func(me *MenuEntry, id string) bool) *MenuEntry { - var found *MenuEntry - if menu, ok := s.Menus[mn]; ok { - for _, me := range *menu { - - if matcher(me, id) { - if found != nil { - panic(fmt.Sprintf("Duplicate menu entry in menu %s with id/name %s", mn, id)) - } - found = me - } - - descendant := findDescendantTestMenuEntry(me, id, matcher) - if descendant != nil { - if found != nil { - panic(fmt.Sprintf("Duplicate menu entry in menu %s with id/name %s", mn, id)) - } - found = descendant - } - } - } - return found -} - -func findDescendantTestMenuEntry(parent *MenuEntry, id string, matcher func(me *MenuEntry, id string) bool) *MenuEntry { - var found *MenuEntry - if parent.HasChildren() { - for _, child := range parent.Children { - - if matcher(child, id) { - if found != nil { - panic(fmt.Sprintf("Duplicate menu entry in menuitem %s with id/name %s", parent.KeyName(), id)) - } - found = child - } - - descendant := findDescendantTestMenuEntry(child, id, matcher) - if descendant != nil { - if found != nil { - panic(fmt.Sprintf("Duplicate menu entry in menuitem %s with id/name %s", parent.KeyName(), id)) - } - found = descendant - } - } - } - return found -} - -func setupMenuTests(t *testing.T, pageSources []source.ByteSource, configKeyValues ...interface{}) *Site { - - var ( - cfg, fs = newTestCfg() - ) - - menus, err := tomlToMap(confMenu1) - require.NoError(t, err) - - cfg.Set("menu", menus["menu"]) - cfg.Set("baseURL", "http://foo.local/Zoo/") - - for i := 0; i < len(configKeyValues); i += 2 { - cfg.Set(configKeyValues[i].(string), configKeyValues[i+1]) - } - - for _, src := range pageSources { - writeSource(t, fs, filepath.Join("content", src.Name), string(src.Content)) - - } - - return buildSingleSite(t, deps.DepsCfg{Fs: fs, Cfg: cfg}, BuildCfg{SkipRender: true}) - -} - -func tomlToMap(s string) (map[string]interface{}, error) { - var data = make(map[string]interface{}) - _, err := toml.Decode(s, &data) - return data, err -} diff --git a/hugolib/page.go b/hugolib/page.go index dba1ee227..76151060c 100644 --- a/hugolib/page.go +++ b/hugolib/page.go @@ -25,6 +25,8 @@ import ( "github.com/bep/gitmap" "github.com/gohugoio/hugo/helpers" + "github.com/gohugoio/hugo/resource" + "github.com/gohugoio/hugo/output" "github.com/gohugoio/hugo/parser" "github.com/mitchellh/mapstructure" @@ -80,6 +82,8 @@ const ( kindSitemap = "sitemap" kindRobotsTXT = "robotsTXT" kind404 = "404" + + pageResourceType = "page" ) type Page struct { @@ -101,6 +105,12 @@ type Page struct { // This collection will be nil for regular pages. Pages Pages + // Since Hugo 0.32, a Page can have resources such as images and CSS associated + // with itself. The resource will typically be placed relative to the Page, + // but templates should use the links (Permalink and RelPermalink) + // provided by the Resource object. + Resources resource.Resources + // translations will contain references to this page in other language // if available. translations Pages @@ -155,9 +165,6 @@ type Page struct { // workContent is a copy of rawContent that may be mutated during site build. workContent []byte - // state telling if this is a "new page" or if we have rendered it previously. - rendered bool - // whether the content is in a CJK language. isCJKLanguage bool @@ -218,8 +225,9 @@ type Page struct { Sitemap Sitemap URLPath - permalink string - relPermalink string + permalink string + relPermalink string + relPermalinkBase string // relPermalink without extension layoutDescriptor output.LayoutDescriptor @@ -263,6 +271,10 @@ func (p *Page) PubDate() time.Time { return p.Date } +func (*Page) ResourceType() string { + return pageResourceType +} + func (p *Page) RSSLink() template.URL { f, found := p.outputFormats.GetByName(output.RSSFormat.Name) if !found { @@ -726,22 +738,29 @@ func (p *Page) getRenderingConfig() *helpers.BlackFriday { } func (s *Site) newPage(filename string) *Page { - sp := source.NewSourceSpec(s.Cfg, s.Fs) - p := &Page{ + fi := newFileInfo( + s.SourceSpec, + s.absContentDir(), + filename, + nil, + bundleNot, + ) + return s.newPageFromFile(fi) +} + +func (s *Site) newPageFromFile(fi *fileInfo) *Page { + return &Page{ pageInit: &pageInit{}, - Kind: kindFromFilename(filename), + Kind: kindFromFilename(fi.Path()), contentType: "", - Source: Source{File: *sp.NewFile(filename)}, + Source: Source{File: fi}, Keywords: []string{}, Sitemap: Sitemap{Priority: -1}, Params: make(map[string]interface{}), translations: make(Pages, 0), - sections: sectionsFromFilename(filename), + sections: sectionsFromDir(fi.Dir()), Site: &s.Info, s: s, } - - s.Log.DEBUG.Println("Reading from", p.File.Path()) - return p } func (p *Page) IsRenderable() bool { @@ -910,8 +929,8 @@ func (p *Page) LinkTitle() string { } func (p *Page) shouldBuild() bool { - return shouldBuild(p.s.Cfg.GetBool("buildFuture"), p.s.Cfg.GetBool("buildExpired"), - p.s.Cfg.GetBool("buildDrafts"), p.Draft, p.PublishDate, p.ExpiryDate) + return shouldBuild(p.s.BuildFuture, p.s.BuildExpired, + p.s.BuildDrafts, p.Draft, p.PublishDate, p.ExpiryDate) } func shouldBuild(buildFuture bool, buildExpired bool, buildDrafts bool, Draft bool, @@ -967,20 +986,91 @@ func (p *Page) RelPermalink() string { return p.relPermalink } -func (p *Page) initURLs() error { - if len(p.outputFormats) == 0 { - p.outputFormats = p.s.outputFormats[p.Kind] +func (p *Page) subResourceLinkFactory(base string) string { + return path.Join(p.relPermalinkBase, base) +} + +func (p *Page) prepareForRender(cfg *BuildCfg) error { + s := p.s + + if !p.shouldRenderTo(s.rc.Format) { + // No need to prepare + return nil + } + + var shortcodeUpdate bool + if p.shortcodeState != nil { + shortcodeUpdate = p.shortcodeState.updateDelta() + } + + if !shortcodeUpdate && !cfg.whatChanged.other { + // No need to process it again. + return nil + } + + // If we got this far it means that this is either a new Page pointer + // or a template or similar has changed so wee need to do a rerendering + // of the shortcodes etc. + + // If in watch mode or if we have multiple output formats, + // we need to keep the original so we can + // potentially repeat this process on rebuild. + needsACopy := p.s.running() || len(p.outputFormats) > 1 + var workContentCopy []byte + if needsACopy { + workContentCopy = make([]byte, len(p.workContent)) + copy(workContentCopy, p.workContent) + } else { + // Just reuse the same slice. + workContentCopy = p.workContent + } + + if p.Markup == "markdown" { + tmpContent, tmpTableOfContents := helpers.ExtractTOC(workContentCopy) + p.TableOfContents = helpers.BytesToHTML(tmpTableOfContents) + workContentCopy = tmpContent } - rel := p.createRelativePermalink() var err error - p.permalink, err = p.s.permalinkForOutputFormat(rel, p.outputFormats[0]) - if err != nil { - return err + if workContentCopy, err = handleShortcodes(p, workContentCopy); err != nil { + s.Log.ERROR.Printf("Failed to handle shortcodes for page %s: %s", p.BaseFileName(), err) } - rel = p.s.PathSpec.PrependBasePath(rel) - p.relPermalink = rel - p.layoutDescriptor = p.createLayoutDescriptor() + + if p.Markup != "html" { + + // Now we know enough to create a summary of the page and count some words + summaryContent, err := p.setUserDefinedSummaryIfProvided(workContentCopy) + + if err != nil { + s.Log.ERROR.Printf("Failed to set user defined summary for page %q: %s", p.Path(), err) + } else if summaryContent != nil { + workContentCopy = summaryContent.content + } + + p.Content = helpers.BytesToHTML(workContentCopy) + + if summaryContent == nil { + if err := p.setAutoSummary(); err != nil { + s.Log.ERROR.Printf("Failed to set user auto summary for page %q: %s", p.pathOrTitle(), err) + } + } + + } else { + p.Content = helpers.BytesToHTML(workContentCopy) + } + + //analyze for raw stats + p.analyzePage() + + // Handle bundled pages. + for _, r := range p.Resources.ByType(pageResourceType) { + p.s.PathSpec.ProcessingStats.Incr(&p.s.PathSpec.ProcessingStats.Pages) + bp := r.(*Page) + if err := bp.prepareForRender(cfg); err != nil { + s.Log.ERROR.Printf("Failed to prepare bundled page %q for render: %s", bp.BaseFileName(), err) + } + } + return nil } @@ -1849,14 +1939,18 @@ func (p *Page) addLangPathPrefixIfFlagSet(outfile string, should bool) string { return outfile } -func sectionsFromFilename(filename string) []string { - var sections []string - dir, _ := filepath.Split(filename) - dir = strings.TrimSuffix(dir, helpers.FilePathSeparator) - if dir == "" { +func sectionsFromDir(dirname string) []string { + sections := strings.Split(dirname, helpers.FilePathSeparator) + if len(sections) == 1 { + if sections[0] == "" { + return nil + } return sections } - sections = strings.Split(dir, helpers.FilePathSeparator) + if len(sections) > 1 && sections[0] == "" { + return sections[1:] + } + return sections } diff --git a/hugolib/page_bundler.go b/hugolib/page_bundler.go new file mode 100644 index 000000000..2f6b4d094 --- /dev/null +++ b/hugolib/page_bundler.go @@ -0,0 +1,188 @@ +// Copyright 2017-present The Hugo Authors. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package hugolib + +import ( + "fmt" + "math" + "runtime" + "strings" + + // Use this until errgroup gets ported to context + // See https://github.com/golang/go/issues/19781 + "golang.org/x/net/context" + "golang.org/x/sync/errgroup" +) + +type siteContentProcessor struct { + baseDir string + + site *Site + + handleContent contentHandler + + // The input file bundles. + fileBundlesChan chan *bundleDir + + // The input file singles. + fileSinglesChan chan *fileInfo + + // These assets should be just copied to destination. + fileAssetsChan chan []string + + numWorkers int + + // The output Pages + pagesChan chan *Page + + // Used for partial rebuilds (aka. live reload) + // Will signal replacement of pages in the site collection. + partialBuild bool +} + +func newSiteContentProcessor(baseDir string, partialBuild bool, s *Site) *siteContentProcessor { + numWorkers := 12 + if n := runtime.NumCPU() * 3; n > numWorkers { + numWorkers = n + } + + numWorkers = int(math.Ceil(float64(numWorkers) / float64(len(s.owner.Sites)))) + + return &siteContentProcessor{ + partialBuild: partialBuild, + baseDir: baseDir, + site: s, + handleContent: newHandlerChain(s), + fileBundlesChan: make(chan *bundleDir, numWorkers), + fileSinglesChan: make(chan *fileInfo, numWorkers), + fileAssetsChan: make(chan []string, numWorkers), + numWorkers: numWorkers, + pagesChan: make(chan *Page, numWorkers), + } +} + +func (s *siteContentProcessor) closeInput() { + close(s.fileSinglesChan) + close(s.fileBundlesChan) + close(s.fileAssetsChan) +} + +func (s *siteContentProcessor) process(ctx context.Context) error { + g1, ctx := errgroup.WithContext(ctx) + g2, _ := errgroup.WithContext(ctx) + + // There can be only one of these per site. + g1.Go(func() error { + for p := range s.pagesChan { + if p.s != s.site { + panic(fmt.Sprintf("invalid page site: %v vs %v", p.s, s)) + } + + if s.partialBuild { + s.site.replacePage(p) + } else { + s.site.addPage(p) + } + } + return nil + }) + + for i := 0; i < s.numWorkers; i++ { + g2.Go(func() error { + for { + select { + case f, ok := <-s.fileSinglesChan: + if !ok { + return nil + } + err := s.readAndConvertContentFile(f) + if err != nil { + return err + } + case <-ctx.Done(): + return ctx.Err() + } + } + }) + + g2.Go(func() error { + for { + select { + case filenames, ok := <-s.fileAssetsChan: + if !ok { + return nil + } + for _, filename := range filenames { + name := strings.TrimPrefix(filename, s.baseDir) + f, err := s.site.Fs.Source.Open(filename) + if err != nil { + return err + } + + err = s.site.publish(&s.site.PathSpec.ProcessingStats.Files, name, f) + f.Close() + if err != nil { + return err + } + } + + case <-ctx.Done(): + return ctx.Err() + } + } + }) + + g2.Go(func() error { + for { + select { + case bundle, ok := <-s.fileBundlesChan: + if !ok { + return nil + } + err := s.readAndConvertContentBundle(bundle) + if err != nil { + return err + } + case <-ctx.Done(): + return ctx.Err() + } + } + }) + } + + if err := g2.Wait(); err != nil { + return err + } + + close(s.pagesChan) + + if err := g1.Wait(); err != nil { + return err + } + + s.site.rawAllPages.Sort() + + return nil + +} + +func (s *siteContentProcessor) readAndConvertContentFile(file *fileInfo) error { + ctx := &handlerContext{source: file, baseDir: s.baseDir, pages: s.pagesChan} + return s.handleContent(ctx).err +} + +func (s *siteContentProcessor) readAndConvertContentBundle(bundle *bundleDir) error { + ctx := &handlerContext{bundle: bundle, baseDir: s.baseDir, pages: s.pagesChan} + return s.handleContent(ctx).err +} diff --git a/hugolib/page_bundler_capture.go b/hugolib/page_bundler_capture.go new file mode 100644 index 000000000..5574329de --- /dev/null +++ b/hugolib/page_bundler_capture.go @@ -0,0 +1,683 @@ +// Copyright 2017-present The Hugo Authors. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package hugolib + +import ( + "errors" + "fmt" + "os" + "path/filepath" + "runtime" + "strings" + "sync" + + "github.com/gohugoio/hugo/helpers" + + "golang.org/x/sync/errgroup" + + "github.com/gohugoio/hugo/source" + "github.com/spf13/afero" + jww "github.com/spf13/jwalterweatherman" +) + +var errSkipCyclicDir = errors.New("skip potential cyclic dir") + +type capturer struct { + // To prevent symbolic link cycles: Visit same folder only once. + seen map[string]bool + seenMu sync.Mutex + + handler captureResultHandler + + sourceSpec *source.SourceSpec + fs afero.Fs + logger *jww.Notepad + + baseDir string + + // Filenames limits the content to process to a list of filenames/directories. + // This is used for partial building in server mode. + filenames []string + + // Used to determine how to handle content changes in server mode. + contentChanges *contentChangeMap + + // Semaphore used to throttle the concurrent sub directory handling. + sem chan bool +} + +func newCapturer( + logger *jww.Notepad, + sourceSpec *source.SourceSpec, + handler captureResultHandler, + contentChanges *contentChangeMap, + baseDir string, filenames ...string) *capturer { + + numWorkers := 4 + if n := runtime.NumCPU(); n > numWorkers { + numWorkers = n + } + + c := &capturer{ + sem: make(chan bool, numWorkers), + handler: handler, + sourceSpec: sourceSpec, + logger: logger, + contentChanges: contentChanges, + fs: sourceSpec.Fs.Source, baseDir: baseDir, seen: make(map[string]bool), + filenames: filenames} + + return c +} + +// Captured files and bundles ready to be processed will be passed on to +// these channels. +type captureResultHandler interface { + handleSingles(fis ...*fileInfo) + handleCopyFiles(filenames ...string) + captureBundlesHandler +} + +type captureBundlesHandler interface { + handleBundles(b *bundleDirs) +} + +type captureResultHandlerChain struct { + handlers []captureBundlesHandler +} + +func (c *captureResultHandlerChain) handleSingles(fis ...*fileInfo) { + for _, h := range c.handlers { + if hh, ok := h.(captureResultHandler); ok { + hh.handleSingles(fis...) + } + } +} +func (c *captureResultHandlerChain) handleBundles(b *bundleDirs) { + for _, h := range c.handlers { + h.handleBundles(b) + } +} + +func (c *captureResultHandlerChain) handleCopyFiles(filenames ...string) { + for _, h := range c.handlers { + if hh, ok := h.(captureResultHandler); ok { + hh.handleCopyFiles(filenames...) + } + } +} + +func (c *capturer) capturePartial(filenames ...string) error { + handled := make(map[string]bool) + + for _, filename := range filenames { + dir, resolvedFilename, tp := c.contentChanges.resolveAndRemove(filename) + if handled[resolvedFilename] { + continue + } + + handled[resolvedFilename] = true + + switch tp { + case bundleLeaf: + if err := c.handleDir(resolvedFilename); err != nil { + return err + } + case bundleBranch: + if err := c.handleBranchDir(resolvedFilename); err != nil { + return err + } + default: + fi, _, err := c.getRealFileInfo(resolvedFilename) + if os.IsNotExist(err) { + // File has been deleted. + continue + } + + // Just in case the owning dir is a new symlink -- this will + // create the proper mapping for it. + c.getRealFileInfo(dir) + + f := c.newFileInfo(resolvedFilename, fi, tp) + c.copyOrHandleSingle(f) + } + } + + return nil +} + +func (c *capturer) capture() error { + if len(c.filenames) > 0 { + return c.capturePartial(c.filenames...) + } + + err := c.handleDir(c.baseDir) + if err != nil { + return err + } + + return nil +} + +func (c *capturer) handleNestedDir(dirname string) error { + select { + case c.sem <- true: + var g errgroup.Group + + g.Go(func() error { + defer func() { + <-c.sem + }() + return c.handleDir(dirname) + }) + return g.Wait() + default: + // For deeply nested file trees, waiting for a semaphore wil deadlock. + return c.handleDir(dirname) + } +} + +// This handles a bundle branch and its resources only. This is used +// in server mode on changes. If this dir does not (anymore) represent a bundle +// branch, the handling is upgraded to the full handleDir method. +func (c *capturer) handleBranchDir(dirname string) error { + files, err := c.readDir(dirname) + if err != nil { + return err + } + + var ( + dirType bundleDirType + ) + + for _, fi := range files { + if !fi.IsDir() { + tp, _ := classifyBundledFile(fi.Name()) + if dirType == bundleNot { + dirType = tp + } + + if dirType == bundleLeaf { + return c.handleDir(dirname) + } + } + } + + if dirType != bundleBranch { + return c.handleDir(dirname) + } + + dirs := newBundleDirs(bundleBranch, c) + + for _, fi := range files { + + if fi.IsDir() { + continue + } + + tp, isContent := classifyBundledFile(fi.Name()) + + f := c.newFileInfo(fi.filename, fi.FileInfo, tp) + if f.isOwner() { + dirs.addBundleHeader(f) + } else if !isContent { + // This is a partial update -- we only care about the files that + // is in this bundle. + dirs.addBundleFiles(f) + } + } + + c.handler.handleBundles(dirs) + + return nil + +} + +func (c *capturer) handleDir(dirname string) error { + files, err := c.readDir(dirname) + if err != nil { + return err + } + + type dirState int + + const ( + dirStateDefault dirState = iota + + dirStateAssetsOnly + dirStateSinglesOnly + ) + + var ( + fileBundleTypes = make([]bundleDirType, len(files)) + + // Start with the assumption that this dir contains only non-content assets (images etc.) + // If that is still true after we had a first look at the list of files, we + // can just copy the files to destination. We will still have to look at the + // sub-folders for potential bundles. + state = dirStateAssetsOnly + + // Start with the assumption that this dir is not a bundle. + // A directory is a bundle if it contains a index content file, + // e.g. index.md (a leaf bundle) or a _index.md (a branch bundle). + bundleType = bundleNot + ) + + /* First check for any content files. + - If there are none, then this is a assets folder only (images etc.) + and we can just plainly copy them to + destination. + - If this is a section with no image etc. or similar, we can just handle it + as it was a single content file. + */ + var hasNonContent, isBranch bool + + for i, fi := range files { + if !fi.IsDir() { + tp, isContent := classifyBundledFile(fi.Name()) + fileBundleTypes[i] = tp + if !isBranch { + isBranch = tp == bundleBranch + } + + if isContent { + // This is not a assets-only folder. + state = dirStateDefault + } else { + hasNonContent = true + } + } + } + + if isBranch && !hasNonContent { + // This is a section or similar with no need for any bundle handling. + state = dirStateSinglesOnly + } + + if state > dirStateDefault { + return c.handleNonBundle(dirname, files, state == dirStateSinglesOnly) + } + + var fileInfos = make([]*fileInfo, len(files)) + + for i, fi := range files { + currentType := bundleNot + + if !fi.IsDir() { + currentType = fileBundleTypes[i] + if bundleType == bundleNot && currentType != bundleNot { + bundleType = currentType + } + } + + if bundleType == bundleNot && currentType != bundleNot { + bundleType = currentType + } + + fileInfos[i] = c.newFileInfo(fi.filename, fi.FileInfo, currentType) + } + + var todo []*fileInfo + + if bundleType != bundleLeaf { + for _, fi := range fileInfos { + if fi.FileInfo().IsDir() { + // Handle potential nested bundles. + filename := fi.Filename() + if err := c.handleNestedDir(filename); err != nil { + return err + } + } else if bundleType == bundleNot || (!fi.isOwner() && fi.isContentFile()) { + // Not in a bundle. + c.copyOrHandleSingle(fi) + } else { + // This is a section folder or similar with non-content files in it. + todo = append(todo, fi) + } + } + } else { + todo = fileInfos + } + + if len(todo) == 0 { + return nil + } + + dirs, err := c.createBundleDirs(todo, bundleType) + if err != nil { + return err + } + + // Send the bundle to the next step in the processor chain. + c.handler.handleBundles(dirs) + + return nil +} + +func (c *capturer) handleNonBundle( + dirname string, + fileInfos []fileInfoName, + singlesOnly bool) error { + + for _, fi := range fileInfos { + if fi.IsDir() { + if err := c.handleNestedDir(fi.filename); err != nil { + return err + } + } else { + if singlesOnly { + file := c.newFileInfo(fi.filename, fi, bundleNot) + c.handler.handleSingles(file) + } else { + c.handler.handleCopyFiles(fi.filename) + } + } + } + + return nil +} + +func (c *capturer) copyOrHandleSingle(fi *fileInfo) { + if fi.isContentFile() { + c.handler.handleSingles(fi) + } else { + // These do not currently need any further processing. + c.handler.handleCopyFiles(fi.Filename()) + } +} + +func (c *capturer) createBundleDirs(fileInfos []*fileInfo, bundleType bundleDirType) (*bundleDirs, error) { + dirs := newBundleDirs(bundleType, c) + + for _, fi := range fileInfos { + if fi.FileInfo().IsDir() { + var collector func(fis ...*fileInfo) + + if bundleType == bundleBranch { + // All files in the current directory are part of this bundle. + // Trying to include sub folders in these bundles are filled with ambiguity. + collector = func(fis ...*fileInfo) { + for _, fi := range fis { + c.copyOrHandleSingle(fi) + } + } + } else { + // All nested files and directories are part of this bundle. + collector = func(fis ...*fileInfo) { + fileInfos = append(fileInfos, fis...) + } + } + err := c.collectFiles(fi.Filename(), collector) + if err != nil { + return nil, err + } + + } else if fi.isOwner() { + // There can be more than one language, so: + // 1. Content files must be attached to its language's bundle. + // 2. Other files must be attached to all languages. + // 3. Every content file needs a bundle header. + dirs.addBundleHeader(fi) + } + } + + for _, fi := range fileInfos { + if fi.FileInfo().IsDir() || fi.isOwner() { + continue + } + + if fi.isContentFile() { + if bundleType != bundleBranch { + dirs.addBundleContentFile(fi) + } + } else { + dirs.addBundleFiles(fi) + } + } + + return dirs, nil +} + +func (c *capturer) collectFiles(dirname string, handleFiles func(fis ...*fileInfo)) error { + filesInDir, err := c.readDir(dirname) + if err != nil { + return err + } + + for _, fi := range filesInDir { + if fi.IsDir() { + err := c.collectFiles(fi.filename, handleFiles) + if err != nil { + return err + } + } else { + handleFiles(c.newFileInfo(fi.filename, fi.FileInfo, bundleNot)) + } + } + + return nil +} + +func (c *capturer) readDir(dirname string) ([]fileInfoName, error) { + if c.sourceSpec.IgnoreFile(dirname) { + return nil, nil + } + + dir, err := c.fs.Open(dirname) + if err != nil { + return nil, err + } + defer dir.Close() + names, err := dir.Readdirnames(-1) + if err != nil { + return nil, err + } + + fis := make([]fileInfoName, 0, len(names)) + + for _, name := range names { + filename := filepath.Join(dirname, name) + if !c.sourceSpec.IgnoreFile(filename) { + fi, _, err := c.getRealFileInfo(filename) + + if err != nil { + // It may have been deleted in the meantime. + if err == errSkipCyclicDir || os.IsNotExist(err) { + continue + } + return nil, err + } + + fis = append(fis, fileInfoName{filename: filename, FileInfo: fi}) + } + } + + return fis, nil +} + +func (c *capturer) newFileInfo(filename string, fi os.FileInfo, tp bundleDirType) *fileInfo { + return newFileInfo(c.sourceSpec, c.baseDir, filename, fi, tp) +} + +type singlesHandler func(fis ...*fileInfo) +type bundlesHandler func(b *bundleDirs) + +type fileInfoName struct { + os.FileInfo + filename string +} + +type bundleDirs struct { + tp bundleDirType + // Maps languages to bundles. + bundles map[string]*bundleDir + + // Keeps track of language overrides for non-content files, e.g. logo.en.png. + langOverrides map[string]bool + + c *capturer +} + +func newBundleDirs(tp bundleDirType, c *capturer) *bundleDirs { + return &bundleDirs{tp: tp, bundles: make(map[string]*bundleDir), langOverrides: make(map[string]bool), c: c} +} + +type bundleDir struct { + tp bundleDirType + fi *fileInfo + + resources map[string]*fileInfo +} + +func (b bundleDir) clone() *bundleDir { + b.resources = make(map[string]*fileInfo) + fic := *b.fi + b.fi = &fic + return &b +} + +func newBundleDir(fi *fileInfo, bundleType bundleDirType) *bundleDir { + return &bundleDir{fi: fi, tp: bundleType, resources: make(map[string]*fileInfo)} +} + +func (b *bundleDirs) addBundleContentFile(fi *fileInfo) { + dir, found := b.bundles[fi.Lang()] + if !found { + // Every bundled content file needs a bundle header. + // If one does not exist in its language, we pick the default + // language version, or a random one if that doesn't exist, either. + tl := b.c.sourceSpec.DefaultContentLanguage + ldir, found := b.bundles[tl] + if !found { + // Just pick one. + for _, v := range b.bundles { + ldir = v + break + } + } + + if ldir == nil { + panic(fmt.Sprintf("bundle not found for file %q", fi.Filename())) + } + + dir = ldir.clone() + dir.fi.overriddenLang = fi.Lang() + b.bundles[fi.Lang()] = dir + } + + dir.resources[fi.Filename()] = fi +} + +func (b *bundleDirs) addBundleFiles(fi *fileInfo) { + dir := filepath.ToSlash(fi.Dir()) + p := dir + fi.TranslationBaseName() + "." + fi.Ext() + for lang, bdir := range b.bundles { + key := lang + p + // Given mypage.de.md (German translation) and mypage.md we pick the most + // the specific for that language. + if fi.Lang() == lang || !b.langOverrides[key] { + bdir.resources[key] = fi + } + b.langOverrides[key] = true + } +} + +func (b *bundleDirs) addBundleHeader(fi *fileInfo) { + b.bundles[fi.Lang()] = newBundleDir(fi, b.tp) +} + +func (c *capturer) isSeen(dirname string) bool { + c.seenMu.Lock() + defer c.seenMu.Unlock() + seen := c.seen[dirname] + c.seen[dirname] = true + if seen { + c.logger.WARN.Printf("Content dir %q already processed; skipped to avoid infinite recursion.", dirname) + return true + + } + return false +} + +func (c *capturer) getRealFileInfo(path string) (os.FileInfo, string, error) { + fileInfo, err := c.lstatIfOs(path) + realPath := path + + if err != nil { + return nil, "", err + } + + if fileInfo.Mode()&os.ModeSymlink == os.ModeSymlink { + link, err := filepath.EvalSymlinks(path) + if err != nil { + return nil, "", fmt.Errorf("Cannot read symbolic link %q, error was: %s", path, err) + } + + fileInfo, err = c.lstatIfOs(link) + if err != nil { + return nil, "", fmt.Errorf("Cannot stat %q, error was: %s", link, err) + } + + realPath = link + + if realPath != path && fileInfo.IsDir() && c.isSeen(realPath) { + // Avoid cyclic symlinks. + // Note that this may prevent some uses that isn't cyclic and also + // potential useful, but this implementation is both robust and simple: + // We stop at the first directory that we have seen before, e.g. + // /content/blog will only be processed once. + return nil, realPath, errSkipCyclicDir + } + + if c.contentChanges != nil { + // Keep track of symbolic links in watch mode. + var from, to string + if fileInfo.IsDir() { + from = realPath + to = path + + if !strings.HasSuffix(to, helpers.FilePathSeparator) { + to = to + helpers.FilePathSeparator + } + if !strings.HasSuffix(from, helpers.FilePathSeparator) { + from = from + helpers.FilePathSeparator + } + + baseDir := c.baseDir + if !strings.HasSuffix(baseDir, helpers.FilePathSeparator) { + baseDir = baseDir + helpers.FilePathSeparator + } + + if strings.HasPrefix(from, baseDir) { + // With symbolic links inside /content we need to keep + // a reference to both. This may be confusing with --navigateToChanged + // but the user has chosen this him or herself. + c.contentChanges.addSymbolicLinkMapping(from, from) + } + + } else { + from = realPath + to = path + } + + c.contentChanges.addSymbolicLinkMapping(from, to) + } + } + + return fileInfo, realPath, nil +} + +func (c *capturer) lstatIfOs(path string) (os.FileInfo, error) { + return helpers.LstatIfOs(c.fs, path) +} diff --git a/hugolib/page_bundler_capture_test.go b/hugolib/page_bundler_capture_test.go new file mode 100644 index 000000000..6ff182221 --- /dev/null +++ b/hugolib/page_bundler_capture_test.go @@ -0,0 +1,255 @@ +// Copyright 2017-present The Hugo Authors. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package hugolib + +import ( + "fmt" + "path" + "path/filepath" + "sort" + + jww "github.com/spf13/jwalterweatherman" + + "strings" + "sync" + "testing" + + "github.com/gohugoio/hugo/helpers" + "github.com/gohugoio/hugo/source" + "github.com/stretchr/testify/require" +) + +type storeFilenames struct { + sync.Mutex + filenames []string + copyNames []string + dirKeys []string +} + +func (s *storeFilenames) handleSingles(fis ...*fileInfo) { + s.Lock() + defer s.Unlock() + for _, fi := range fis { + s.filenames = append(s.filenames, filepath.ToSlash(fi.Filename())) + } +} + +func (s *storeFilenames) handleBundles(d *bundleDirs) { + s.Lock() + defer s.Unlock() + var keys []string + for _, b := range d.bundles { + res := make([]string, len(b.resources)) + i := 0 + for _, r := range b.resources { + res[i] = path.Join(r.Lang(), filepath.ToSlash(r.Filename())) + i++ + } + sort.Strings(res) + keys = append(keys, path.Join("__bundle", b.fi.Lang(), filepath.ToSlash(b.fi.Filename()), "resources", strings.Join(res, "|"))) + } + s.dirKeys = append(s.dirKeys, keys...) +} + +func (s *storeFilenames) handleCopyFiles(names ...string) { + s.Lock() + defer s.Unlock() + for _, name := range names { + s.copyNames = append(s.copyNames, filepath.ToSlash(name)) + } + +} + +func (s *storeFilenames) sortedStr() string { + s.Lock() + defer s.Unlock() + sort.Strings(s.filenames) + sort.Strings(s.dirKeys) + sort.Strings(s.copyNames) + return "\nF:\n" + strings.Join(s.filenames, "\n") + "\nD:\n" + strings.Join(s.dirKeys, "\n") + + "\nC:\n" + strings.Join(s.copyNames, "\n") + "\n" +} + +func TestPageBundlerCaptureSymlinks(t *testing.T) { + assert := require.New(t) + cfg, fs, workDir := newTestBundleSymbolicSources(t) + contentDir := "base" + sourceSpec := source.NewSourceSpec(cfg, fs) + + fileStore := &storeFilenames{} + logger := newWarningLogger() + c := newCapturer(logger, sourceSpec, fileStore, nil, filepath.Join(workDir, contentDir)) + + assert.NoError(c.capture()) + + // Symlik back to content skipped to prevent infinite recursion. + assert.Equal(uint64(3), logger.LogCountForLevelsGreaterThanorEqualTo(jww.LevelWarn)) + + expected := ` +F: +/base/a/page_s.md +/base/a/regular.md +/base/symbolic1/s1.md +/base/symbolic1/s2.md +/base/symbolic3/circus/a/page_s.md +/base/symbolic3/circus/a/regular.md +D: +__bundle/en/base/symbolic2/a1/index.md/resources/en/base/symbolic2/a1/logo.png|en/base/symbolic2/a1/page.md +C: +/base/symbolic3/s1.png +/base/symbolic3/s2.png +` + got := strings.Replace(fileStore.sortedStr(), filepath.ToSlash(workDir), "", -1) + got = strings.Replace(got, "//", "/", -1) + + if expected != got { + diff := helpers.DiffStringSlices(strings.Fields(expected), strings.Fields(got)) + t.Log(got) + t.Fatalf("Failed:\n%s", diff) + } +} + +func TestPageBundlerCapture(t *testing.T) { + t.Parallel() + + assert := require.New(t) + cfg, fs := newTestBundleSources(t) + + sourceSpec := source.NewSourceSpec(cfg, fs) + + fileStore := &storeFilenames{} + + c := newCapturer(newErrorLogger(), sourceSpec, fileStore, nil, filepath.FromSlash("/work/base")) + + assert.NoError(c.capture()) + + expected := ` +F: +/work/base/_1.md +/work/base/a/1.md +/work/base/a/2.md +/work/base/assets/pages/mypage.md +D: +__bundle/en/work/base/_index.md/resources/en/work/base/_1.png +__bundle/en/work/base/a/b/index.md/resources/en/work/base/a/b/ab1.md +__bundle/en/work/base/b/index.md/resources/en/work/base/b/1.md|en/work/base/b/2.md|en/work/base/b/c/logo.png|en/work/base/b/custom-mime.bep +C: +/work/base/assets/pic1.png +/work/base/assets/pic2.png +/work/base/images/hugo-logo.png +` + + got := fileStore.sortedStr() + + if expected != got { + diff := helpers.DiffStringSlices(strings.Fields(expected), strings.Fields(got)) + t.Log(got) + t.Fatalf("Failed:\n%s", diff) + } +} + +func TestPageBundlerCaptureMultilingual(t *testing.T) { + t.Parallel() + + assert := require.New(t) + cfg, fs := newTestBundleSourcesMultilingual(t) + sourceSpec := source.NewSourceSpec(cfg, fs) + fileStore := &storeFilenames{} + c := newCapturer(newErrorLogger(), sourceSpec, fileStore, nil, filepath.FromSlash("/work/base")) + + assert.NoError(c.capture()) + + expected := ` +F: +/work/base/1s/mypage.md +/work/base/bb/_1.md +/work/base/bb/_1.nn.md +/work/base/bb/en.md +/work/base/bc/page.md +/work/base/bc/page.nn.md +/work/base/be/_index.md +/work/base/be/page.md +/work/base/be/page.nn.md +D: +__bundle/en/work/base/bb/_index.md/resources/en/work/base/bb/a.png|en/work/base/bb/b.png|nn/work/base/bb/c.nn.png +__bundle/en/work/base/bc/_index.md/resources/en/work/base/bc/logo-bc.png +__bundle/en/work/base/bd/index.md/resources/en/work/base/bd/page.md +__bundle/en/work/base/lb/index.md/resources/en/work/base/lb/1.md|en/work/base/lb/2.md|en/work/base/lb/c/d/deep.png|en/work/base/lb/c/logo.png|en/work/base/lb/c/one.png +__bundle/nn/work/base/bb/_index.nn.md/resources/en/work/base/bb/a.png|nn/work/base/bb/b.nn.png|nn/work/base/bb/c.nn.png +__bundle/nn/work/base/bd/index.md/resources/nn/work/base/bd/page.nn.md +__bundle/nn/work/base/lb/index.nn.md/resources/en/work/base/lb/c/d/deep.png|en/work/base/lb/c/one.png|nn/work/base/lb/2.nn.md|nn/work/base/lb/c/logo.nn.png +C: +/work/base/1s/mylogo.png +/work/base/bb/b/d.nn.png +` + + got := fileStore.sortedStr() + + if expected != got { + diff := helpers.DiffStringSlices(strings.Fields(expected), strings.Fields(got)) + t.Log(got) + t.Fatalf("Failed:\n%s", diff) + } + +} + +type noOpFileStore int + +func (noOpFileStore) handleSingles(fis ...*fileInfo) {} +func (noOpFileStore) handleBundles(b *bundleDirs) {} +func (noOpFileStore) handleCopyFiles(names ...string) {} + +func BenchmarkPageBundlerCapture(b *testing.B) { + capturers := make([]*capturer, b.N) + + for i := 0; i < b.N; i++ { + cfg, fs := newTestCfg() + sourceSpec := source.NewSourceSpec(cfg, fs) + + base := fmt.Sprintf("base%d", i) + for j := 1; j <= 5; j++ { + js := fmt.Sprintf("j%d", j) + writeSource(b, fs, filepath.Join(base, js, "index.md"), "content") + writeSource(b, fs, filepath.Join(base, js, "logo1.png"), "content") + writeSource(b, fs, filepath.Join(base, js, "sub", "logo2.png"), "content") + writeSource(b, fs, filepath.Join(base, js, "section", "_index.md"), "content") + writeSource(b, fs, filepath.Join(base, js, "section", "logo.png"), "content") + writeSource(b, fs, filepath.Join(base, js, "section", "sub", "logo.png"), "content") + + for k := 1; k <= 5; k++ { + ks := fmt.Sprintf("k%d", k) + writeSource(b, fs, filepath.Join(base, js, ks, "logo1.png"), "content") + writeSource(b, fs, filepath.Join(base, js, "section", ks, "logo.png"), "content") + } + } + + for i := 1; i <= 5; i++ { + writeSource(b, fs, filepath.Join(base, "assetsonly", fmt.Sprintf("image%d.png", i)), "image") + } + + for i := 1; i <= 5; i++ { + writeSource(b, fs, filepath.Join(base, "contentonly", fmt.Sprintf("c%d.md", i)), "content") + } + + capturers[i] = newCapturer(newErrorLogger(), sourceSpec, new(noOpFileStore), nil, base) + } + + b.ResetTimer() + for i := 0; i < b.N; i++ { + err := capturers[i].capture() + if err != nil { + b.Fatal(err) + } + } +} diff --git a/hugolib/page_bundler_handlers.go b/hugolib/page_bundler_handlers.go new file mode 100644 index 000000000..7054f0b79 --- /dev/null +++ b/hugolib/page_bundler_handlers.go @@ -0,0 +1,346 @@ +// Copyright 2017-present The Hugo Authors. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package hugolib + +import ( + "errors" + "fmt" + "sort" + + "strings" + + "github.com/gohugoio/hugo/helpers" + "github.com/gohugoio/hugo/resource" +) + +var ( + // This should be the only list of valid extensions for content files. + contentFileExtensions = []string{ + "html", "htm", + "mdown", "markdown", "md", + "asciidoc", "adoc", "ad", + "rest", "rst", + "mmark", + "org", + "pandoc", "pdc"} + + contentFileExtensionsSet map[string]bool +) + +func init() { + contentFileExtensionsSet = make(map[string]bool) + for _, ext := range contentFileExtensions { + contentFileExtensionsSet[ext] = true + } +} + +func newHandlerChain(s *Site) contentHandler { + c := &contentHandlers{s: s} + + contentFlow := c.parsePage(c.processFirstMatch( + // Handles all files with a content file extension. See above. + c.handlePageContent(), + + // Every HTML file without front matter will be passed on to this handler. + c.handleHTMLContent(), + )) + + c.rootHandler = c.processFirstMatch( + contentFlow, + + // Creates a file resource (image, CSS etc.) if there is a parent + // page set on the current context. + c.createResource(), + + // Everything that isn't handled above, will just be copied + // to destination. + c.copyFile(), + ) + + return c.rootHandler + +} + +type contentHandlers struct { + s *Site + rootHandler contentHandler +} + +func (c *contentHandlers) processFirstMatch(handlers ...contentHandler) func(ctx *handlerContext) handlerResult { + return func(ctx *handlerContext) handlerResult { + for _, h := range handlers { + res := h(ctx) + if res.handled || res.err != nil { + return res + } + } + return handlerResult{err: errors.New("no matching handler found")} + } +} + +type handlerContext struct { + // These are the pages stored in Site. + pages chan<- *Page + + doNotAddToSiteCollections bool + + currentPage *Page + parentPage *Page + + bundle *bundleDir + + // The source baseDir, e.g. "/myproject/content/" + baseDir string + + source *fileInfo + + // Relative path to the target. + target string +} + +func (c *handlerContext) ext() string { + if c.currentPage != nil { + if c.currentPage.Markup != "" { + return c.currentPage.Markup + } + return c.currentPage.Ext() + } + + if c.bundle != nil { + return c.bundle.fi.Ext() + } else { + return c.source.Ext() + } +} + +func (c *handlerContext) targetPath() string { + if c.target != "" { + return c.target + } + + return strings.TrimPrefix(c.source.Filename(), c.baseDir) +} + +func (c *handlerContext) file() *fileInfo { + if c.bundle != nil { + return c.bundle.fi + } + + return c.source +} + +// Create a copy with the current context as its parent. +func (c handlerContext) childCtx(fi *fileInfo) *handlerContext { + if c.currentPage == nil { + panic("Need a Page to create a child context") + } + + c.target = strings.TrimPrefix(fi.Path(), c.bundle.fi.Dir()) + c.source = fi + + c.doNotAddToSiteCollections = c.bundle != nil && c.bundle.tp != bundleBranch + + c.bundle = nil + + c.parentPage = c.currentPage + c.currentPage = nil + + return &c +} + +func (c *handlerContext) supports(exts ...string) bool { + ext := c.ext() + for _, s := range exts { + if s == ext { + return true + } + } + + return false +} + +func (c *handlerContext) isContentFile() bool { + return contentFileExtensionsSet[c.ext()] +} + +type ( + handlerResult struct { + err error + handled bool + resource resource.Resource + } + + contentHandlerChain func(h contentHandler) contentHandler + contentHandler func(ctx *handlerContext) handlerResult +) + +var ( + notHandled handlerResult + noOpContenHandler = func(ctx *handlerContext) handlerResult { + return handlerResult{handled: true} + } +) + +func (c *contentHandlers) parsePage(h contentHandler) contentHandler { + return func(ctx *handlerContext) handlerResult { + if !ctx.isContentFile() { + return notHandled + } + + result := handlerResult{handled: true} + fi := ctx.file() + + f, err := fi.Open() + if err != nil { + return handlerResult{err: fmt.Errorf("(%s) failed to open content file: %s", fi.Filename(), err)} + } + defer f.Close() + + p := c.s.newPageFromFile(fi) + + _, err = p.ReadFrom(f) + if err != nil { + return handlerResult{err: err} + } + + if !p.shouldBuild() { + if !ctx.doNotAddToSiteCollections { + ctx.pages <- p + } + return result + } + + ctx.currentPage = p + + if ctx.bundle != nil { + // Add the bundled files + for _, fi := range ctx.bundle.resources { + childCtx := ctx.childCtx(fi) + res := c.rootHandler(childCtx) + if res.err != nil { + return res + } + if res.resource != nil { + p.Resources = append(p.Resources, res.resource) + } + } + + sort.SliceStable(p.Resources, func(i, j int) bool { + if p.Resources[i].ResourceType() < p.Resources[j].ResourceType() { + return true + } + + p1, ok1 := p.Resources[i].(*Page) + p2, ok2 := p.Resources[j].(*Page) + + if ok1 != ok2 { + return ok2 + } + + if ok1 { + return defaultPageSort(p1, p2) + } + + return p.Resources[i].RelPermalink() < p.Resources[j].RelPermalink() + }) + } + + return h(ctx) + } +} + +func (c *contentHandlers) handlePageContent() contentHandler { + return func(ctx *handlerContext) handlerResult { + if ctx.supports("html", "htm") { + return notHandled + } + + p := ctx.currentPage + + // Work on a copy of the raw content from now on. + p.createWorkContentCopy() + + if err := p.processShortcodes(); err != nil { + p.s.Log.ERROR.Println(err) + } + + if c.s.Cfg.GetBool("enableEmoji") { + p.workContent = helpers.Emojify(p.workContent) + } + + p.workContent = p.replaceDivider(p.workContent) + p.workContent = p.renderContent(p.workContent) + + if !ctx.doNotAddToSiteCollections { + ctx.pages <- p + } + + return handlerResult{handled: true, resource: p} + } +} + +func (c *contentHandlers) handleHTMLContent() contentHandler { + return func(ctx *handlerContext) handlerResult { + if !ctx.supports("html", "htm") { + return notHandled + } + + p := ctx.currentPage + + p.createWorkContentCopy() + + if err := p.processShortcodes(); err != nil { + p.s.Log.ERROR.Println(err) + } + + if !ctx.doNotAddToSiteCollections { + ctx.pages <- p + } + + return handlerResult{handled: true, resource: p} + } +} + +func (c *contentHandlers) createResource() contentHandler { + return func(ctx *handlerContext) handlerResult { + if ctx.parentPage == nil { + return notHandled + } + + resource, err := c.s.resourceSpec.NewResourceFromFilename( + ctx.parentPage.subResourceLinkFactory, + c.s.absPublishDir(), + ctx.source.Filename(), ctx.target) + + return handlerResult{err: err, handled: true, resource: resource} + } +} + +func (c *contentHandlers) copyFile() contentHandler { + return func(ctx *handlerContext) handlerResult { + f, err := c.s.Fs.Source.Open(ctx.source.Filename()) + if err != nil { + return handlerResult{err: err} + } + + target := ctx.targetPath() + + defer f.Close() + if err := c.s.publish(&c.s.PathSpec.ProcessingStats.Files, target, f); err != nil { + return handlerResult{err: err} + } + + return handlerResult{handled: true} + } +} diff --git a/hugolib/page_bundler_test.go b/hugolib/page_bundler_test.go new file mode 100644 index 000000000..ff50fc67a --- /dev/null +++ b/hugolib/page_bundler_test.go @@ -0,0 +1,379 @@ +// Copyright 2017-present The Hugo Authors. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package hugolib + +import ( + "io/ioutil" + "os" + "runtime" + "strings" + "testing" + + "github.com/spf13/afero" + + "github.com/gohugoio/hugo/media" + + "path/filepath" + + "fmt" + + "github.com/gohugoio/hugo/deps" + "github.com/gohugoio/hugo/hugofs" + "github.com/gohugoio/hugo/resource" + "github.com/spf13/viper" + + "github.com/stretchr/testify/require" +) + +func TestPageBundlerSite(t *testing.T) { + t.Parallel() + + for _, ugly := range []bool{false, true} { + t.Run(fmt.Sprintf("ugly=%t", ugly), + func(t *testing.T) { + + assert := require.New(t) + cfg, fs := newTestBundleSources(t) + + cfg.Set("permalinks", map[string]string{ + "a": ":sections/:filename", + "b": ":year/:slug/", + }) + + cfg.Set("outputFormats", map[string]interface{}{ + "CUSTOMO": map[string]interface{}{ + "mediaType": media.HTMLType, + "baseName": "cindex", + "path": "cpath", + }, + }) + + cfg.Set("outputs", map[string]interface{}{ + "home": []string{"HTML", "CUSTOMO"}, + "page": []string{"HTML", "CUSTOMO"}, + "section": []string{"HTML", "CUSTOMO"}, + }) + + cfg.Set("uglyURLs", ugly) + + s := buildSingleSite(t, deps.DepsCfg{Fs: fs, Cfg: cfg}, BuildCfg{}) + + th := testHelper{s.Cfg, s.Fs, t} + + // Singles (2), Below home (1), Bundle (1) + assert.Len(s.RegularPages, 6) + + singlePage := s.getPage(KindPage, "a/1.md") + + assert.NotNil(singlePage) + assert.Contains(singlePage.Content, "TheContent") + + if ugly { + assert.Equal("/a/1.html", singlePage.RelPermalink()) + th.assertFileContent(filepath.FromSlash("/work/public/a/1.html"), "TheContent") + + } else { + assert.Equal("/a/1/", singlePage.RelPermalink()) + th.assertFileContent(filepath.FromSlash("/work/public/a/1/index.html"), "TheContent") + } + + th.assertFileContent(filepath.FromSlash("/work/public/images/hugo-logo.png"), "content") + + // This should be just copied to destination. + th.assertFileContent(filepath.FromSlash("/work/public/assets/pic1.png"), "content") + + leafBundle1 := s.getPage(KindPage, "b/index.md") + assert.NotNil(leafBundle1) + leafBundle2 := s.getPage(KindPage, "a/b/index.md") + assert.NotNil(leafBundle2) + + pageResources := leafBundle1.Resources.ByType(pageResourceType) + assert.Len(pageResources, 2) + firstPage := pageResources[0].(*Page) + secondPage := pageResources[1].(*Page) + assert.Equal(filepath.FromSlash("b/1.md"), firstPage.pathOrTitle(), secondPage.pathOrTitle()) + assert.Contains(firstPage.Content, "TheContent") + assert.Len(leafBundle1.Resources, 4) // 2 pages 1 image 1 custom mime type + + imageResources := leafBundle1.Resources.ByType("image") + assert.Len(imageResources, 1) + image := imageResources[0] + + altFormat := leafBundle1.OutputFormats().Get("CUSTOMO") + assert.NotNil(altFormat) + + assert.Equal(filepath.FromSlash("/work/base/b/c/logo.png"), image.(resource.Source).AbsSourceFilename()) + assert.Equal("https://example.com/2017/pageslug/c/logo.png", image.Permalink()) + th.assertFileContent(filepath.FromSlash("/work/public/2017/pageslug/c/logo.png"), "content") + th.assertFileContent(filepath.FromSlash("/work/public/cpath/2017/pageslug/c/logo.png"), "content") + + // Custom media type defined in site config. + assert.Len(leafBundle1.Resources.ByType("bepsays"), 1) + + if ugly { + assert.Equal("/2017/pageslug.html", leafBundle1.RelPermalink()) + th.assertFileContent(filepath.FromSlash("/work/public/2017/pageslug.html"), "TheContent") + th.assertFileContent(filepath.FromSlash("/work/public/cpath/2017/pageslug.html"), "TheContent") + + assert.Equal("/a/b.html", leafBundle2.RelPermalink()) + + } else { + assert.Equal("/2017/pageslug/", leafBundle1.RelPermalink()) + th.assertFileContent(filepath.FromSlash("/work/public/2017/pageslug/index.html"), "TheContent") + th.assertFileContent(filepath.FromSlash("/work/public/cpath/2017/pageslug/cindex.html"), "TheContent") + + assert.Equal("/a/b/", leafBundle2.RelPermalink()) + + } + + }) + } + +} + +func TestPageBundlerSiteWitSymbolicLinksInContent(t *testing.T) { + assert := require.New(t) + cfg, fs, workDir := newTestBundleSymbolicSources(t) + + s := buildSingleSite(t, deps.DepsCfg{Fs: fs, Cfg: cfg, Logger: newWarningLogger()}, BuildCfg{}) + + th := testHelper{s.Cfg, s.Fs, t} + + assert.Equal(7, len(s.RegularPages)) + a1Bundle := s.getPage(KindPage, "symbolic2/a1/index.md") + assert.NotNil(a1Bundle) + assert.Equal(2, len(a1Bundle.Resources)) + assert.Equal(1, len(a1Bundle.Resources.ByType(pageResourceType))) + + th.assertFileContent(filepath.FromSlash(workDir+"/public/a/page/index.html"), "TheContent") + th.assertFileContent(filepath.FromSlash(workDir+"/public/symbolic1/s1/index.html"), "TheContent") + th.assertFileContent(filepath.FromSlash(workDir+"/public/symbolic2/a1/index.html"), "TheContent") + +} + +func newTestBundleSources(t *testing.T) (*viper.Viper, *hugofs.Fs) { + cfg, fs := newTestCfg() + + workDir := "/work" + cfg.Set("workingDir", workDir) + cfg.Set("contentDir", "base") + cfg.Set("baseURL", "https://example.com") + cfg.Set("mediaTypes", map[string]interface{}{ + "text/bepsays": map[string]interface{}{ + "suffix": "bep", + }, + }) + + pageContent := `--- +title: "Bundle Galore" +slug: pageslug +date: 2017-10-09 +--- + +TheContent. +` + + pageContentNoSlug := `--- +title: "Bundle Galore #2" +date: 2017-10-09 +--- + +TheContent. +` + + layout := `{{ .Title }}|{{ .Content }}` + + writeSource(t, fs, filepath.Join(workDir, "layouts", "_default", "single.html"), layout) + writeSource(t, fs, filepath.Join(workDir, "layouts", "_default", "list.html"), layout) + + writeSource(t, fs, filepath.Join(workDir, "base", "_index.md"), pageContent) + writeSource(t, fs, filepath.Join(workDir, "base", "_1.md"), pageContent) + writeSource(t, fs, filepath.Join(workDir, "base", "_1.png"), pageContent) + + writeSource(t, fs, filepath.Join(workDir, "base", "images", "hugo-logo.png"), "content") + writeSource(t, fs, filepath.Join(workDir, "base", "a", "2.md"), pageContent) + writeSource(t, fs, filepath.Join(workDir, "base", "a", "1.md"), pageContent) + + writeSource(t, fs, filepath.Join(workDir, "base", "a", "b", "index.md"), pageContentNoSlug) + writeSource(t, fs, filepath.Join(workDir, "base", "a", "b", "ab1.md"), pageContentNoSlug) + + // Mostly plain static assets in a folder with a page in a sub folder thrown in. + writeSource(t, fs, filepath.Join(workDir, "base", "assets", "pic1.png"), "content") + writeSource(t, fs, filepath.Join(workDir, "base", "assets", "pic2.png"), "content") + writeSource(t, fs, filepath.Join(workDir, "base", "assets", "pages", "mypage.md"), pageContent) + + // Bundle + writeSource(t, fs, filepath.Join(workDir, "base", "b", "index.md"), pageContent) + writeSource(t, fs, filepath.Join(workDir, "base", "b", "1.md"), pageContent) + writeSource(t, fs, filepath.Join(workDir, "base", "b", "2.md"), pageContent) + writeSource(t, fs, filepath.Join(workDir, "base", "b", "custom-mime.bep"), "bepsays") + writeSource(t, fs, filepath.Join(workDir, "base", "b", "c", "logo.png"), "content") + + return cfg, fs +} + +func newTestBundleSourcesMultilingual(t *testing.T) (*viper.Viper, *hugofs.Fs) { + cfg, fs := newTestCfg() + + workDir := "/work" + cfg.Set("workingDir", workDir) + cfg.Set("contentDir", "base") + cfg.Set("baseURL", "https://example.com") + cfg.Set("defaultContentLanguage", "en") + + langConfig := map[string]interface{}{ + "en": map[string]interface{}{ + "weight": 1, + "languageName": "English", + }, + "nn": map[string]interface{}{ + "weight": 2, + "languageName": "Nynorsk", + }, + } + + cfg.Set("languages", langConfig) + + pageContent := `--- +slug: pageslug +date: 2017-10-09 +--- + +TheContent. +` + + layout := `{{ .Title }}|{{ .Content }}|Lang: {{ .Site.Language.Lang }}` + + writeSource(t, fs, filepath.Join(workDir, "layouts", "_default", "single.html"), layout) + writeSource(t, fs, filepath.Join(workDir, "layouts", "_default", "list.html"), layout) + + writeSource(t, fs, filepath.Join(workDir, "base", "1s", "mypage.md"), pageContent) + writeSource(t, fs, filepath.Join(workDir, "base", "1s", "mylogo.png"), "content") + + writeSource(t, fs, filepath.Join(workDir, "base", "bb", "_index.md"), pageContent) + writeSource(t, fs, filepath.Join(workDir, "base", "bb", "_index.nn.md"), pageContent) + writeSource(t, fs, filepath.Join(workDir, "base", "bb", "en.md"), pageContent) + writeSource(t, fs, filepath.Join(workDir, "base", "bb", "_1.md"), pageContent) + writeSource(t, fs, filepath.Join(workDir, "base", "bb", "_1.nn.md"), pageContent) + writeSource(t, fs, filepath.Join(workDir, "base", "bb", "a.png"), "content") + writeSource(t, fs, filepath.Join(workDir, "base", "bb", "b.png"), "content") + writeSource(t, fs, filepath.Join(workDir, "base", "bb", "b.nn.png"), "content") + writeSource(t, fs, filepath.Join(workDir, "base", "bb", "c.nn.png"), "content") + writeSource(t, fs, filepath.Join(workDir, "base", "bb", "b", "d.nn.png"), "content") + + writeSource(t, fs, filepath.Join(workDir, "base", "bc", "_index.md"), pageContent) + writeSource(t, fs, filepath.Join(workDir, "base", "bc", "page.md"), pageContent) + writeSource(t, fs, filepath.Join(workDir, "base", "bc", "logo-bc.png"), pageContent) + writeSource(t, fs, filepath.Join(workDir, "base", "bc", "page.nn.md"), pageContent) + + writeSource(t, fs, filepath.Join(workDir, "base", "bd", "index.md"), pageContent) + writeSource(t, fs, filepath.Join(workDir, "base", "bd", "page.md"), pageContent) + writeSource(t, fs, filepath.Join(workDir, "base", "bd", "page.nn.md"), pageContent) + + writeSource(t, fs, filepath.Join(workDir, "base", "be", "_index.md"), pageContent) + writeSource(t, fs, filepath.Join(workDir, "base", "be", "page.md"), pageContent) + writeSource(t, fs, filepath.Join(workDir, "base", "be", "page.nn.md"), pageContent) + + // Bundle leaf, multilingual + writeSource(t, fs, filepath.Join(workDir, "base", "lb", "index.md"), pageContent) + writeSource(t, fs, filepath.Join(workDir, "base", "lb", "index.nn.md"), pageContent) + writeSource(t, fs, filepath.Join(workDir, "base", "lb", "1.md"), pageContent) + writeSource(t, fs, filepath.Join(workDir, "base", "lb", "2.md"), pageContent) + writeSource(t, fs, filepath.Join(workDir, "base", "lb", "2.nn.md"), pageContent) + writeSource(t, fs, filepath.Join(workDir, "base", "lb", "c", "logo.png"), "content") + writeSource(t, fs, filepath.Join(workDir, "base", "lb", "c", "logo.nn.png"), "content") + writeSource(t, fs, filepath.Join(workDir, "base", "lb", "c", "one.png"), "content") + writeSource(t, fs, filepath.Join(workDir, "base", "lb", "c", "d", "deep.png"), "content") + + return cfg, fs +} + +func newTestBundleSymbolicSources(t *testing.T) (*viper.Viper, *hugofs.Fs, string) { + assert := require.New(t) + // We need to use the OS fs for this. + cfg := viper.New() + fs := hugofs.NewFrom(hugofs.Os, cfg) + fs.Destination = &afero.MemMapFs{} + loadDefaultSettingsFor(cfg) + + workDir, err := ioutil.TempDir("", "hugosym") + + if runtime.GOOS == "darwin" && !strings.HasPrefix(workDir, "/private") { + // To get the entry folder in line with the rest. This its a little bit + // mysterious, but so be it. + workDir = "/private" + workDir + } + + contentDir := "base" + cfg.Set("workingDir", workDir) + cfg.Set("contentDir", contentDir) + cfg.Set("baseURL", "https://example.com") + + layout := `{{ .Title }}|{{ .Content }}` + pageContent := `--- +slug: %s +date: 2017-10-09 +--- + +TheContent. +` + + fs.Source.MkdirAll(filepath.Join(workDir, "layouts", "_default"), 0777) + fs.Source.MkdirAll(filepath.Join(workDir, contentDir), 0777) + fs.Source.MkdirAll(filepath.Join(workDir, contentDir, "a"), 0777) + for i := 1; i <= 3; i++ { + fs.Source.MkdirAll(filepath.Join(workDir, fmt.Sprintf("symcontent%d", i)), 0777) + + } + fs.Source.MkdirAll(filepath.Join(workDir, "symcontent2", "a1"), 0777) + + writeSource(t, fs, filepath.Join(workDir, "layouts", "_default", "single.html"), layout) + writeSource(t, fs, filepath.Join(workDir, "layouts", "_default", "list.html"), layout) + + writeSource(t, fs, filepath.Join(workDir, contentDir, "a", "regular.md"), fmt.Sprintf(pageContent, "a1")) + + // Regular files inside symlinked folder. + writeSource(t, fs, filepath.Join(workDir, "symcontent1", "s1.md"), fmt.Sprintf(pageContent, "s1")) + writeSource(t, fs, filepath.Join(workDir, "symcontent1", "s2.md"), fmt.Sprintf(pageContent, "s2")) + + // A bundle + writeSource(t, fs, filepath.Join(workDir, "symcontent2", "a1", "index.md"), fmt.Sprintf(pageContent, "")) + writeSource(t, fs, filepath.Join(workDir, "symcontent2", "a1", "page.md"), fmt.Sprintf(pageContent, "page")) + writeSource(t, fs, filepath.Join(workDir, "symcontent2", "a1", "logo.png"), "image") + + // Assets + writeSource(t, fs, filepath.Join(workDir, "symcontent3", "s1.png"), "image") + writeSource(t, fs, filepath.Join(workDir, "symcontent3", "s2.png"), "image") + + // Symlinked sections inside content. + os.Chdir(filepath.Join(workDir, contentDir)) + for i := 1; i <= 3; i++ { + assert.NoError(os.Symlink(filepath.FromSlash(fmt.Sprintf(("../symcontent%d"), i)), fmt.Sprintf("symbolic%d", i))) + } + + os.Chdir(filepath.Join(workDir, contentDir, "a")) + + // Create a symlink to one single content file + assert.NoError(os.Symlink(filepath.FromSlash("../../symcontent2/a1/page.md"), "page_s.md")) + + os.Chdir(filepath.FromSlash("../../symcontent3")) + + // Create a circular symlink. Will print some warnings. + assert.NoError(os.Symlink(filepath.Join("..", contentDir), filepath.FromSlash("circus"))) + + os.Chdir(workDir) + assert.NoError(err) + + return cfg, fs, workDir +} diff --git a/hugolib/page_collections.go b/hugolib/page_collections.go index 1eda67b19..6eae2e479 100644 --- a/hugolib/page_collections.go +++ b/hugolib/page_collections.go @@ -151,14 +151,18 @@ func (c *PageCollections) removePageByPathPrefix(path string) { func (c *PageCollections) removePageByPath(path string) { if i := c.rawAllPages.findPagePosByFilePath(path); i >= 0 { + c.clearResourceCacheForPage(c.rawAllPages[i]) c.rawAllPages = append(c.rawAllPages[:i], c.rawAllPages[i+1:]...) } + } func (c *PageCollections) removePage(page *Page) { if i := c.rawAllPages.findPagePos(page); i >= 0 { + c.clearResourceCacheForPage(c.rawAllPages[i]) c.rawAllPages = append(c.rawAllPages[:i], c.rawAllPages[i+1:]...) } + } func (c *PageCollections) findPagesByShortcode(shortcode string) Pages { @@ -179,3 +183,12 @@ func (c *PageCollections) replacePage(page *Page) { c.removePage(page) c.addPage(page) } + +func (c *PageCollections) clearResourceCacheForPage(page *Page) { + if len(page.Resources) > 0 { + first := page.Resources[0] + dir := path.Dir(first.RelPermalink()) + // This is done to keep the memory usage in check when doing live reloads. + page.s.resourceSpec.DeleteCacheByPrefix(dir) + } +} diff --git a/hugolib/page_collections_test.go b/hugolib/page_collections_test.go index aee99040c..292218ba4 100644 --- a/hugolib/page_collections_test.go +++ b/hugolib/page_collections_test.go @@ -133,7 +133,7 @@ func TestGetPage(t *testing.T) { errorMsg := fmt.Sprintf("Test %d", i) page := s.getPage(test.kind, test.path...) assert.NotNil(page, errorMsg) - assert.Equal(test.kind, page.Kind) + assert.Equal(test.kind, page.Kind, errorMsg) assert.Equal(test.expectedTitle, page.Title) } diff --git a/hugolib/page_output.go b/hugolib/page_output.go index 4739e6936..993dcb7a2 100644 --- a/hugolib/page_output.go +++ b/hugolib/page_output.go @@ -16,9 +16,12 @@ package hugolib import ( "fmt" "html/template" + "os" "strings" "sync" + "github.com/gohugoio/hugo/resource" + "github.com/gohugoio/hugo/media" "github.com/gohugoio/hugo/helpers" @@ -34,6 +37,10 @@ type PageOutput struct { paginator *Pager paginatorInit sync.Once + // Page output specific resources + resources resource.Resources + resourcesInit sync.Once + // Keep this to create URL/path variations, i.e. paginators. targetPathDescriptor targetPathDescriptor @@ -51,10 +58,7 @@ func (p *PageOutput) targetPath(addends ...string) (string, error) { func newPageOutput(p *Page, createCopy bool, f output.Format) (*PageOutput, error) { // TODO(bep) This is only needed for tests and we should get rid of it. if p.targetPathDescriptorPrototype == nil { - if err := p.initTargetPathDescriptor(); err != nil { - return nil, err - } - if err := p.initURLs(); err != nil { + if err := p.initPaths(); err != nil { return nil, err } } @@ -241,6 +245,68 @@ func (p *PageOutput) AlternativeOutputFormats() (OutputFormats, error) { return o, nil } +// deleteResource removes the resource from this PageOutput and the Page. They will +// always be of the same length, but may contain different elements. +func (p *PageOutput) deleteResource(i int) { + p.resources = append(p.resources[:i], p.resources[i+1:]...) + p.Page.Resources = append(p.Page.Resources[:i], p.Page.Resources[i+1:]...) + +} + +func (p *PageOutput) Resources() resource.Resources { + p.resourcesInit.Do(func() { + // If the current out shares the same path as the main page output, we reuse + // the resource set. For the "amp" use case, we need to clone them with new + // base folder. + ff := p.outputFormats[0] + if p.outputFormat.Path == ff.Path { + p.resources = p.Page.Resources + return + } + + // Clone it with new base. + resources := make(resource.Resources, len(p.Page.Resources)) + + for i, r := range p.Page.Resources { + if c, ok := r.(resource.Cloner); ok { + // Clone the same resource with a new target. + resources[i] = c.WithNewBase(p.outputFormat.Path) + } else { + resources[i] = r + } + } + + p.resources = resources + }) + + return p.resources +} + +func (p *PageOutput) renderResources() error { + + for i, r := range p.Resources() { + src, ok := r.(resource.Source) + if !ok { + // Pages gets rendered with the owning page. + continue + } + + if err := src.Publish(); err != nil { + if os.IsNotExist(err) { + // The resource has been deleted from the file system. + // This should be extremely rare, but can happen on live reload in server + // mode when the same resource is member of different page bundles. + p.deleteResource(i) + } else { + p.s.Log.ERROR.Printf("Failed to publish %q for page %q: %s", src.AbsSourceFilename(), p.pathOrTitle(), err) + } + } else { + p.s.PathSpec.ProcessingStats.Incr(&p.s.PathSpec.ProcessingStats.Files) + } + } + return nil +} + // AlternativeOutputFormats is only available on the top level rendering // entry point, and not inside range loops on the Page collections. // This method is just here to inform users of that restriction. diff --git a/hugolib/page_paths.go b/hugolib/page_paths.go index a72304651..3eb1add80 100644 --- a/hugolib/page_paths.go +++ b/hugolib/page_paths.go @@ -82,7 +82,6 @@ func (p *Page) createTargetPathDescriptor(t output.Format) (targetPathDescriptor } func (p *Page) initTargetPathDescriptor() error { - d := &targetPathDescriptor{ PathSpec: p.s.PathSpec, Kind: p.Kind, @@ -126,6 +125,35 @@ func (p *Page) initTargetPathDescriptor() error { } +func (p *Page) initURLs() error { + if len(p.outputFormats) == 0 { + p.outputFormats = p.s.outputFormats[p.Kind] + } + rel := p.createRelativePermalink() + + var err error + f := p.outputFormats[0] + p.permalink, err = p.s.permalinkForOutputFormat(rel, f) + if err != nil { + return err + } + rel = p.s.PathSpec.PrependBasePath(rel) + p.relPermalink = rel + p.relPermalinkBase = strings.TrimSuffix(rel, f.MediaType.FullSuffix()) + p.layoutDescriptor = p.createLayoutDescriptor() + return nil +} + +func (p *Page) initPaths() error { + if err := p.initTargetPathDescriptor(); err != nil { + return err + } + if err := p.initURLs(); err != nil { + return err + } + return nil +} + // createTargetPath creates the target filename for this Page for the given // output.Format. Some additional URL parts can also be provided, the typical // use case being pagination. @@ -156,12 +184,7 @@ func createTargetPath(d targetPathDescriptor) string { isUgly := d.UglyURLs && !d.Type.NoUgly - // If the page output format's base name is the same as the page base name, - // we treat it as an ugly path, i.e. - // my-blog-post-1/index.md => my-blog-post-1/index.html - // (given the default values for that content file, i.e. no slug set etc.). - // This introduces the behaviour from < Hugo 0.20, see issue #3396. - if d.BaseName != "" && d.BaseName == d.Type.BaseName { + if d.ExpandedPermalink == "" && d.BaseName != "" && d.BaseName == d.Type.BaseName { isUgly = true } @@ -247,6 +270,9 @@ func createTargetPath(d targetPathDescriptor) string { func (p *Page) createRelativePermalink() string { if len(p.outputFormats) == 0 { + if p.Kind == kindUnknown { + panic(fmt.Sprintf("Page %q has unknown kind", p.Title)) + } panic(fmt.Sprintf("Page %q missing output format(s)", p.Title)) } @@ -264,6 +290,7 @@ func (p *Page) createRelativePermalinkForOutputFormat(f output.Format) string { p.s.Log.ERROR.Printf("Failed to create permalink for page %q: %s", p.FullFilePath(), err) return "" } + // For /index.json etc. we must use the full path. if strings.HasSuffix(f.BaseFilename(), "html") { tp = strings.TrimSuffix(tp, f.BaseFilename()) diff --git a/hugolib/page_paths_test.go b/hugolib/page_paths_test.go index 4147ffb85..149505ee4 100644 --- a/hugolib/page_paths_test.go +++ b/hugolib/page_paths_test.go @@ -79,7 +79,6 @@ func TestPageTargetPath(t *testing.T) { Type: output.HTMLFormat}, "/a/b/mypage/index.html"}, { - // Issue #3396 "HTML page with index as base", targetPathDescriptor{ Kind: KindPage, Dir: "/a/b", diff --git a/hugolib/page_resource.go b/hugolib/page_resource.go new file mode 100644 index 000000000..808a692da --- /dev/null +++ b/hugolib/page_resource.go @@ -0,0 +1,23 @@ +// Copyright 2017-present The Hugo Authors. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package hugolib + +import ( + "github.com/gohugoio/hugo/resource" +) + +var ( + _ resource.Resource = (*Page)(nil) + _ resource.Resource = (*PageOutput)(nil) +) diff --git a/hugolib/page_test.go b/hugolib/page_test.go index 973e8509b..7b6dd646a 100644 --- a/hugolib/page_test.go +++ b/hugolib/page_test.go @@ -1458,8 +1458,7 @@ func TestTranslationKey(t *testing.T) { assert.Equal("page/k1", s.RegularPages[0].TranslationKey()) p2 := s.RegularPages[1] - // This is a single language setup - assert.Equal("page/sect/simple.en", p2.TranslationKey()) + assert.Equal("page/sect/simple", p2.TranslationKey()) } @@ -1582,6 +1581,7 @@ tags: *some blog content*`)) s := buildSingleSite(t, deps.DepsCfg{Fs: fs, Cfg: cfg}, BuildCfg{}) + require.Len(t, s.RegularPages, 4) pathFunc := func(s string) string { diff --git a/hugolib/pagination.go b/hugolib/pagination.go index 894f467a4..6d27f65ca 100644 --- a/hugolib/pagination.go +++ b/hugolib/pagination.go @@ -300,7 +300,6 @@ func (p *PageOutput) Paginator(options ...interface{}) (*Pager, error) { p.paginator = pagers[0] p.paginator.source = "paginator" p.paginator.options = options - p.Site.addToPaginationPageCount(uint64(p.paginator.TotalPages())) } }) @@ -353,7 +352,6 @@ func (p *PageOutput) Paginate(seq interface{}, options ...interface{}) (*Pager, p.paginator = pagers[0] p.paginator.source = seq p.paginator.options = options - p.Site.addToPaginationPageCount(uint64(p.paginator.TotalPages())) } }) @@ -417,6 +415,10 @@ func paginatePages(td targetPathDescriptor, seq interface{}, pagerSize int) (pag } func toPages(seq interface{}) (Pages, error) { + if seq == nil { + return Pages{}, nil + } + switch seq.(type) { case Pages: return seq.(Pages), nil diff --git a/hugolib/permalinks.go b/hugolib/permalinks.go index 14d0cba5e..8f64614b8 100644 --- a/hugolib/permalinks.go +++ b/hugolib/permalinks.go @@ -17,6 +17,7 @@ import ( "errors" "fmt" "path" + "path/filepath" "regexp" "strconv" "strings" @@ -156,9 +157,13 @@ func pageToPermalinkTitle(p *Page, _ string) (string, error) { // pageToPermalinkFilename returns the URL-safe form of the filename func pageToPermalinkFilename(p *Page, _ string) (string, error) { - //var extension = p.Source.Ext - //var name = p.Source.Path()[0 : len(p.Source.Path())-len(extension)] - return p.s.PathSpec.URLize(p.Source.TranslationBaseName()), nil + name := p.File.TranslationBaseName() + if name == "index" { + // Page bundles; the directory name will hopefully have a better name. + _, name = filepath.Split(p.File.Dir()) + } + + return p.s.PathSpec.URLize(name), nil } // if the page has a slug, return the slug, else return the title diff --git a/hugolib/prune_resources.go b/hugolib/prune_resources.go new file mode 100644 index 000000000..8eddafb53 --- /dev/null +++ b/hugolib/prune_resources.go @@ -0,0 +1,84 @@ +// Copyright 2017-present The Hugo Authors. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package hugolib + +import ( + "fmt" + "io" + "os" + "strings" + + "github.com/spf13/afero" +) + +// GC requires a build first. +func (h *HugoSites) GC() (int, error) { + s := h.Sites[0] + imageCacheDir := s.resourceSpec.AbsGenImagePath + if len(imageCacheDir) < 10 { + panic("invalid image cache") + } + + isInUse := func(filename string) bool { + key := strings.TrimPrefix(filename, imageCacheDir) + for _, site := range h.Sites { + if site.resourceSpec.IsInCache(key) { + return true + } + } + + return false + } + + counter := 0 + + err := afero.Walk(s.Fs.Source, imageCacheDir, func(path string, info os.FileInfo, err error) error { + if info == nil { + return nil + } + + if !strings.HasPrefix(path, imageCacheDir) { + return fmt.Errorf("Invalid state, walk outside of resource dir: %q", path) + } + + if info.IsDir() { + f, err := s.Fs.Source.Open(path) + if err != nil { + return nil + } + defer f.Close() + _, err = f.Readdirnames(1) + if err == io.EOF { + // Empty dir. + s.Fs.Source.Remove(path) + } + + return nil + } + + inUse := isInUse(path) + if !inUse { + err := s.Fs.Source.Remove(path) + if err != nil && !os.IsNotExist(err) { + s.Log.ERROR.Printf("Failed to remove %q: %s", path, err) + } else { + counter++ + } + } + return nil + }) + + return counter, err + +} diff --git a/hugolib/rss_test.go b/hugolib/rss_test.go index 268b13073..9b5130507 100644 --- a/hugolib/rss_test.go +++ b/hugolib/rss_test.go @@ -38,7 +38,7 @@ func TestRSSOutput(t *testing.T) { cfg.Set("rssLimit", rssLimit) for _, src := range weightedSources { - writeSource(t, fs, filepath.Join("content", "sect", src.Name), string(src.Content)) + writeSource(t, fs, filepath.Join("content", "sect", src[0]), src[1]) } buildSingleSite(t, deps.DepsCfg{Fs: fs, Cfg: cfg}, BuildCfg{}) diff --git a/hugolib/shortcode_test.go b/hugolib/shortcode_test.go index 7672befc7..0b5c29e94 100644 --- a/hugolib/shortcode_test.go +++ b/hugolib/shortcode_test.go @@ -32,7 +32,6 @@ import ( "github.com/gohugoio/hugo/deps" "github.com/gohugoio/hugo/helpers" - "github.com/gohugoio/hugo/source" "github.com/gohugoio/hugo/tpl" "github.com/stretchr/testify/require" ) @@ -530,10 +529,10 @@ tags: "

Tags: 2

\n"}, } - sources := make([]source.ByteSource, len(tests)) + sources := make([][2]string, len(tests)) for i, test := range tests { - sources[i] = source.ByteSource{Name: filepath.FromSlash(test.contentPath), Content: []byte(test.content)} + sources[i] = [2]string{filepath.FromSlash(test.contentPath), test.content} } addTemplates := func(templ tpl.TemplateHandler) error { diff --git a/hugolib/site.go b/hugolib/site.go index 936584580..a5e2144e1 100644 --- a/hugolib/site.go +++ b/hugolib/site.go @@ -25,16 +25,18 @@ import ( "sort" "strconv" "strings" - "sync" "time" + "github.com/gohugoio/hugo/resource" + + "golang.org/x/sync/errgroup" + "github.com/gohugoio/hugo/config" "github.com/gohugoio/hugo/media" "github.com/markbates/inflect" - - "sync/atomic" + "golang.org/x/net/context" "github.com/fsnotify/fsnotify" bp "github.com/gohugoio/hugo/bufferpool" @@ -81,7 +83,6 @@ type Site struct { *PageCollections - Files []*source.File Taxonomies TaxonomyList // Plural is what we get in the folder, so keep track of this mapping @@ -93,7 +94,6 @@ type Site struct { // is set. taxonomiesOrigKey map[string]string - Source source.Input Sections Taxonomy Info SiteInfo Menus Menus @@ -104,8 +104,9 @@ type Site struct { draftCount int futureCount int expiredCount int - Data map[string]interface{} - Language *helpers.Language + + Data map[string]interface{} + Language *helpers.Language disabledKinds map[string]bool @@ -131,14 +132,13 @@ type Site struct { renderFormats output.Formats // Logger etc. - *deps.Deps `json:"-"` + *deps.Deps `json:"-"` + resourceSpec *resource.Spec // The func used to title case titles. titleFunc func(s string) string relatedDocsHandler *relatedDocsHandler - - siteStats *siteStats } type siteRenderingContext struct { @@ -161,11 +161,6 @@ func (s *Site) initRenderFormats() { s.renderFormats = formats } -type siteStats struct { - pageCount int - pageCountRegular int -} - func (s *Site) isEnabled(kind string) bool { if kind == kindUnknown { panic("Unknown kind") @@ -183,6 +178,7 @@ func (s *Site) reset() *Site { outputFormats: s.outputFormats, outputFormatsConfig: s.outputFormatsConfig, mediaTypesConfig: s.mediaTypesConfig, + resourceSpec: s.resourceSpec, Language: s.Language, owner: s.owner, PageCollections: newPageCollections()} @@ -342,20 +338,10 @@ func NewSiteForCfg(cfg deps.DepsCfg) (*Site, error) { } type SiteInfo struct { - // atomic requires 64-bit alignment for struct field access - // According to the docs, " The first word in a global variable or in an - // allocated struct or slice can be relied upon to be 64-bit aligned." - // Moving paginationPageCount to the top of this struct didn't do the - // magic, maybe due to the way SiteInfo is embedded. - // Adding the 4 byte padding below does the trick. - _ [4]byte - paginationPageCount uint64 - Taxonomies TaxonomyList Authors AuthorList Social SiteSocial *PageCollections - Files *[]*source.File Menus *Menus Hugo *HugoInfo Title string @@ -385,6 +371,11 @@ type SiteInfo struct { sectionPagesMenu string } +func (s *SiteInfo) Files() []source.File { + helpers.Deprecated(".Site", "Files", "", true) + return nil +} + func (s *SiteInfo) String() string { return fmt.Sprintf("Site(%q)", s.Title) } @@ -530,16 +521,8 @@ func (s *SiteInfo) RelRef(ref string, page *Page, options ...string) (string, er return s.refLink(ref, page, true, outputFormat) } -func (s *SiteInfo) addToPaginationPageCount(cnt uint64) { - atomic.AddUint64(&s.paginationPageCount, cnt) -} - -type runmode struct { - Watching bool -} - func (s *Site) running() bool { - return s.owner.runMode.Watching + return s.owner.running } func init() { @@ -567,23 +550,8 @@ func (s *Site) RegisterMediaTypes() { } } -// reBuild partially rebuilds a site given the filesystem events. -// It returns whetever the content source was changed. -func (s *Site) reProcess(events []fsnotify.Event) (whatChanged, error) { - s.Log.DEBUG.Printf("Rebuild for events %q", events) - - s.timerStep("initialize rebuild") - - // First we need to determine what changed - - sourceChanged := []fsnotify.Event{} - sourceReallyChanged := []fsnotify.Event{} - tmplChanged := []fsnotify.Event{} - dataChanged := []fsnotify.Event{} - i18nChanged := []fsnotify.Event{} - shortcodesChanged := make(map[string]bool) - // prevent spamming the log on changes - logger := helpers.NewDistinctFeedbackLogger() +func (s *Site) filterFileEvents(events []fsnotify.Event) []fsnotify.Event { + var filtered []fsnotify.Event seen := make(map[fsnotify.Event]bool) for _, ev := range events { @@ -593,6 +561,94 @@ func (s *Site) reProcess(events []fsnotify.Event) (whatChanged, error) { } seen[ev] = true + if s.SourceSpec.IgnoreFile(ev.Name) { + continue + } + + // Throw away any directories + isRegular, err := s.SourceSpec.IsRegularSourceFile(ev.Name) + if err != nil && os.IsNotExist(err) && (ev.Op&fsnotify.Remove == fsnotify.Remove || ev.Op&fsnotify.Rename == fsnotify.Rename) { + // Force keep of event + isRegular = true + } + if !isRegular { + continue + } + + filtered = append(filtered, ev) + } + + return filtered +} + +func (s *Site) translateFileEvents(events []fsnotify.Event) []fsnotify.Event { + var filtered []fsnotify.Event + + eventMap := make(map[string][]fsnotify.Event) + + // We often get a Remove etc. followed by a Create, a Create followed by a Write. + // Remove the superflous events to mage the update logic simpler. + for _, ev := range events { + eventMap[ev.Name] = append(eventMap[ev.Name], ev) + } + + for _, ev := range events { + mapped := eventMap[ev.Name] + + // Keep one + found := false + var kept fsnotify.Event + for i, ev2 := range mapped { + if i == 0 { + kept = ev2 + } + + if ev2.Op&fsnotify.Write == fsnotify.Write { + kept = ev2 + found = true + } + + if !found && ev2.Op&fsnotify.Create == fsnotify.Create { + kept = ev2 + } + } + + filtered = append(filtered, kept) + } + + return filtered +} + +// reBuild partially rebuilds a site given the filesystem events. +// It returns whetever the content source was changed. +// TODO(bep) clean up/rewrite this method. +func (s *Site) processPartial(events []fsnotify.Event) (whatChanged, error) { + + events = s.filterFileEvents(events) + events = s.translateFileEvents(events) + + s.Log.DEBUG.Printf("Rebuild for events %q", events) + + h := s.owner + + s.timerStep("initialize rebuild") + + // First we need to determine what changed + + var ( + sourceChanged = []fsnotify.Event{} + sourceReallyChanged = []fsnotify.Event{} + contentFilesChanged []string + tmplChanged = []fsnotify.Event{} + dataChanged = []fsnotify.Event{} + i18nChanged = []fsnotify.Event{} + shortcodesChanged = make(map[string]bool) + + // prevent spamming the log on changes + logger = helpers.NewDistinctFeedbackLogger() + ) + + for _, ev := range events { if s.isContentDirEvent(ev) { logger.Println("Source changed", ev) sourceChanged = append(sourceChanged, ev) @@ -647,49 +703,11 @@ func (s *Site) reProcess(events []fsnotify.Event) (whatChanged, error) { } } - // If a content file changes, we need to reload only it and re-render the entire site. - - // First step is to read the changed files and (re)place them in site.AllPages - // This includes processing any meta-data for that content - - // The second step is to convert the content into HTML - // This includes processing any shortcodes that may be present. - - // We do this in parallel... even though it's likely only one file at a time. - // We need to process the reading prior to the conversion for each file, but - // we can convert one file while another one is still reading. - errs := make(chan error, 2) - readResults := make(chan HandledResult) - filechan := make(chan *source.File) - convertResults := make(chan HandledResult) - pageChan := make(chan *Page) - fileConvChan := make(chan *source.File) - coordinator := make(chan bool) - - wg := &sync.WaitGroup{} - wg.Add(2) - for i := 0; i < 2; i++ { - go sourceReader(s, filechan, readResults, wg) - } - - wg2 := &sync.WaitGroup{} - wg2.Add(4) - for i := 0; i < 2; i++ { - go fileConverter(s, fileConvChan, convertResults, wg2) - go pageConverter(pageChan, convertResults, wg2) - } - - sp := source.NewSourceSpec(s.Cfg, s.Fs) - fs := sp.NewFilesystem("") - for _, ev := range sourceChanged { - // The incrementalReadCollator below will also make changes to the site's pages, - // so we do this first to prevent races. + removed := false + if ev.Op&fsnotify.Remove == fsnotify.Remove { - //remove the file & a create will follow - path, _ := helpers.GetRelativePath(ev.Name, s.getContentDir(ev.Name)) - s.removePageByPathPrefix(path) - continue + removed = true } // Some editors (Vim) sometimes issue only a Rename operation when writing an existing file @@ -698,38 +716,16 @@ func (s *Site) reProcess(events []fsnotify.Event) (whatChanged, error) { if ev.Op&fsnotify.Rename == fsnotify.Rename { // If the file is still on disk, it's only been updated, if it's not, it's been moved if ex, err := afero.Exists(s.Fs.Source, ev.Name); !ex || err != nil { - path, _ := helpers.GetRelativePath(ev.Name, s.getContentDir(ev.Name)) - s.removePageByPath(path) - continue + removed = true } } + if removed && isContentFile(ev.Name) { + path, _ := helpers.GetRelativePath(ev.Name, s.getContentDir(ev.Name)) - // ignore files shouldn't be proceed - if fi, err := s.Fs.Source.Stat(ev.Name); err != nil { - continue - } else { - if ok, err := fs.ShouldRead(ev.Name, fi); err != nil || !ok { - continue - } + h.removePageByPath(path) } sourceReallyChanged = append(sourceReallyChanged, ev) - } - - go incrementalReadCollator(s, readResults, pageChan, fileConvChan, coordinator, errs) - go converterCollator(convertResults, errs) - - for _, ev := range sourceReallyChanged { - - file, err := s.reReadFile(ev.Name) - - if err != nil { - s.Log.ERROR.Println("Error reading file", ev.Name, ";", err) - } - - if file != nil { - filechan <- file - } } @@ -740,39 +736,25 @@ func (s *Site) reProcess(events []fsnotify.Event) (whatChanged, error) { // and then creates the shortcode on the file system. // To handle these scenarios, we must do a full reprocessing of the // pages that keeps a reference to the changed shortcode. - pagesWithShortcode := s.findPagesByShortcode(shortcode) + pagesWithShortcode := h.findPagesByShortcode(shortcode) for _, p := range pagesWithShortcode { - p.rendered = false - pageChan <- p + contentFilesChanged = append(contentFilesChanged, p.File.Filename()) } } - // we close the filechan as we have sent everything we want to send to it. - // this will tell the sourceReaders to stop iterating on that channel - close(filechan) + if len(sourceReallyChanged) > 0 || len(contentFilesChanged) > 0 { + var filenamesChanged []string + for _, e := range sourceReallyChanged { + filenamesChanged = append(filenamesChanged, e.Name) + } + if len(contentFilesChanged) > 0 { + filenamesChanged = append(filenamesChanged, contentFilesChanged...) + } - // waiting for the sourceReaders to all finish - wg.Wait() - // Now closing readResults as this will tell the incrementalReadCollator to - // stop iterating over that. - close(readResults) + filenamesChanged = helpers.UniqueStrings(filenamesChanged) - // once readResults is finished it will close coordinator and move along - <-coordinator - // allow that routine to finish, then close page & fileconvchan as we've sent - // everything to them we need to. - close(pageChan) - close(fileConvChan) - - wg2.Wait() - close(convertResults) - - s.timerStep("read & convert pages from source") - - for i := 0; i < 2; i++ { - err := <-errs - if err != nil { - s.Log.ERROR.Println(err) + if err := s.readAndProcessContent(filenamesChanged...); err != nil { + return whatChanged{}, err } } @@ -785,88 +767,111 @@ func (s *Site) reProcess(events []fsnotify.Event) (whatChanged, error) { } -func (s *Site) loadData(sources []source.Input) (err error) { - s.Log.DEBUG.Printf("Load Data from %d source(s)", len(sources)) +func (s *Site) loadData(sourceDirs []string) (err error) { + s.Log.DEBUG.Printf("Load Data from %d source(s)", len(sourceDirs)) s.Data = make(map[string]interface{}) - var current map[string]interface{} - for _, currentSource := range sources { - for _, r := range currentSource.Files() { - // Crawl in data tree to insert data - current = s.Data - for _, key := range strings.Split(r.Dir(), helpers.FilePathSeparator) { - if key != "" { - if _, ok := current[key]; !ok { - current[key] = make(map[string]interface{}) - } - current = current[key].(map[string]interface{}) - } + for _, sourceDir := range sourceDirs { + fs := s.SourceSpec.NewFilesystem(sourceDir) + for _, r := range fs.Files() { + if err := s.handleDataFile(r); err != nil { + return err } - - data, err := s.readData(r) - if err != nil { - s.Log.WARN.Printf("Failed to read data from %s: %s", filepath.Join(r.Path(), r.LogicalName()), err) - continue - } - - if data == nil { - continue - } - - // Copy content from current to data when needed - if _, ok := current[r.BaseFileName()]; ok { - data := data.(map[string]interface{}) - - for key, value := range current[r.BaseFileName()].(map[string]interface{}) { - if _, override := data[key]; override { - // filepath.Walk walks the files in lexical order, '/' comes before '.' - // this warning could happen if - // 1. A theme uses the same key; the main data folder wins - // 2. A sub folder uses the same key: the sub folder wins - s.Log.WARN.Printf("Data for key '%s' in path '%s' is overridden in subfolder", key, r.Path()) - } - data[key] = value - } - } - - // Insert data - current[r.BaseFileName()] = data } } return } -func (s *Site) readData(f *source.File) (interface{}, error) { +func (s *Site) handleDataFile(r source.ReadableFile) error { + var current map[string]interface{} + + f, err := r.Open() + if err != nil { + return fmt.Errorf("Failed to open data file %q: %s", r.LogicalName(), err) + } + defer f.Close() + + // Crawl in data tree to insert data + current = s.Data + for _, key := range strings.Split(r.Dir(), helpers.FilePathSeparator) { + if key != "" { + if _, ok := current[key]; !ok { + current[key] = make(map[string]interface{}) + } + current = current[key].(map[string]interface{}) + } + } + + data, err := s.readData(r) + if err != nil { + s.Log.WARN.Printf("Failed to read data from %s: %s", filepath.Join(r.Path(), r.LogicalName()), err) + return nil + } + + if data == nil { + return nil + } + + // Copy content from current to data when needed + if _, ok := current[r.BaseFileName()]; ok { + data := data.(map[string]interface{}) + + for key, value := range current[r.BaseFileName()].(map[string]interface{}) { + if _, override := data[key]; override { + // filepath.Walk walks the files in lexical order, '/' comes before '.' + // this warning could happen if + // 1. A theme uses the same key; the main data folder wins + // 2. A sub folder uses the same key: the sub folder wins + s.Log.WARN.Printf("Data for key '%s' in path '%s' is overridden in subfolder", key, r.Path()) + } + data[key] = value + } + } + + // Insert data + current[r.BaseFileName()] = data + + return nil +} + +func (s *Site) readData(f source.ReadableFile) (interface{}, error) { + file, err := f.Open() + if err != nil { + return nil, err + } + defer file.Close() + content := helpers.ReaderToBytes(file) + switch f.Extension() { case "yaml", "yml": - return parser.HandleYAMLMetaData(f.Bytes()) + return parser.HandleYAMLMetaData(content) case "json": - return parser.HandleJSONMetaData(f.Bytes()) + return parser.HandleJSONMetaData(content) case "toml": - return parser.HandleTOMLMetaData(f.Bytes()) + return parser.HandleTOMLMetaData(content) default: return nil, fmt.Errorf("Data not supported for extension '%s'", f.Extension()) } } func (s *Site) readDataFromSourceFS() error { - sp := source.NewSourceSpec(s.Cfg, s.Fs) - dataSources := make([]source.Input, 0, 2) - dataSources = append(dataSources, sp.NewFilesystem(s.absDataDir())) + var dataSourceDirs []string // have to be last - duplicate keys in earlier entries will win themeDataDir, err := s.PathSpec.GetThemeDataDirPath() if err == nil { - dataSources = append(dataSources, sp.NewFilesystem(themeDataDir)) + dataSourceDirs = []string{s.absDataDir(), themeDataDir} + } else { + dataSourceDirs = []string{s.absDataDir()} + } - err = s.loadData(dataSources) + err = s.loadData(dataSourceDirs) s.timerStep("load data") return err } func (s *Site) process(config BuildCfg) (err error) { - s.timerStep("Go initialization") if err = s.initialize(); err != nil { return } @@ -877,7 +882,13 @@ func (s *Site) process(config BuildCfg) (err error) { } s.timerStep("load i18n") - return s.createPages() + + if err := s.readAndProcessContent(); err != nil { + return err + } + s.timerStep("read and convert pages from source") + + return err } @@ -967,19 +978,10 @@ func (s *Site) initialize() (err error) { defer s.initializeSiteInfo() s.Menus = Menus{} - // May be supplied in tests. - if s.Source != nil && len(s.Source.Files()) > 0 { - s.Log.DEBUG.Println("initialize: Source is already set") - return - } - if err = s.checkDirectories(); err != nil { return err } - sp := source.NewSourceSpec(s.Cfg, s.Fs) - s.Source = sp.NewFilesystem(s.absContentDir()) - return } @@ -1053,7 +1055,6 @@ func (s *Site) initializeSiteInfo() { uglyURLs: s.Cfg.GetBool("uglyURLs"), preserveTaxonomyNames: lang.GetBool("preserveTaxonomyNames"), PageCollections: s.PageCollections, - Files: &s.Files, Menus: &s.Menus, Params: params, Permalinks: permalinks, @@ -1144,7 +1145,7 @@ func (s *Site) getThemeLayoutDir(path string) string { } func (s *Site) absContentDir() string { - return s.PathSpec.AbsPathify(s.Cfg.GetString("contentDir")) + return s.PathSpec.AbsPathify(s.PathSpec.ContentDir()) } func (s *Site) isContentDirEvent(e fsnotify.Event) bool { @@ -1190,241 +1191,86 @@ func (s *Site) checkDirectories() (err error) { return } -// reReadFile resets file to be read from disk again -func (s *Site) reReadFile(absFilePath string) (*source.File, error) { - s.Log.INFO.Println("rereading", absFilePath) - var file *source.File - - reader, err := source.NewLazyFileReader(s.Fs.Source, absFilePath) - if err != nil { - return nil, err - } - - sp := source.NewSourceSpec(s.Cfg, s.Fs) - file, err = sp.NewFileFromAbs(s.getContentDir(absFilePath), absFilePath, reader) - - if err != nil { - return nil, err - } - - return file, nil +type contentCaptureResultHandler struct { + contentProcessors map[string]*siteContentProcessor } -func (s *Site) readPagesFromSource() chan error { - if s.Source == nil { - panic(fmt.Sprintf("s.Source not set %s", s.absContentDir())) - } - - s.Log.DEBUG.Printf("Read %d pages from source", len(s.Source.Files())) - - errs := make(chan error) - if len(s.Source.Files()) < 1 { - close(errs) - return errs - } - - files := s.Source.Files() - results := make(chan HandledResult) - filechan := make(chan *source.File) - wg := &sync.WaitGroup{} - numWorkers := getGoMaxProcs() * 4 - wg.Add(numWorkers) - for i := 0; i < numWorkers; i++ { - go sourceReader(s, filechan, results, wg) - } - - // we can only have exactly one result collator, since it makes changes that - // must be synchronized. - go readCollator(s, results, errs) - - for _, file := range files { - filechan <- file - } - - close(filechan) - wg.Wait() - close(results) - - return errs -} - -func (s *Site) convertSource() chan error { - errs := make(chan error) - results := make(chan HandledResult) - pageChan := make(chan *Page) - fileConvChan := make(chan *source.File) - numWorkers := getGoMaxProcs() * 4 - wg := &sync.WaitGroup{} - - for i := 0; i < numWorkers; i++ { - wg.Add(2) - go fileConverter(s, fileConvChan, results, wg) - go pageConverter(pageChan, results, wg) - } - - go converterCollator(results, errs) - - for _, p := range s.rawAllPages { - if p.shouldBuild() { - pageChan <- p +func (c *contentCaptureResultHandler) handleSingles(fis ...*fileInfo) { + for _, fi := range fis { + // May be connected to a language (content files) + proc, found := c.contentProcessors[fi.Lang()] + if !found { + panic("proc not found") } + proc.fileSinglesChan <- fi + } - - for _, f := range s.Files { - fileConvChan <- f - } - - close(pageChan) - close(fileConvChan) - wg.Wait() - close(results) - - return errs } +func (c *contentCaptureResultHandler) handleBundles(d *bundleDirs) { + for _, b := range d.bundles { + lang := b.fi.Lang() -func (s *Site) createPages() error { - readErrs := <-s.readPagesFromSource() - s.timerStep("read pages from source") + proc, found := c.contentProcessors[lang] + if !found { + panic("proc not found") + } + proc.fileBundlesChan <- b - renderErrs := <-s.convertSource() - s.timerStep("convert source") - - if renderErrs == nil && readErrs == nil { - return nil - } - if renderErrs == nil { - return readErrs - } - if readErrs == nil { - return renderErrs - } - - return fmt.Errorf("%s\n%s", readErrs, renderErrs) -} - -func sourceReader(s *Site, files <-chan *source.File, results chan<- HandledResult, wg *sync.WaitGroup) { - defer wg.Done() - for file := range files { - readSourceFile(s, file, results) } } -func readSourceFile(s *Site, file *source.File, results chan<- HandledResult) { - h := NewMetaHandler(file.Extension()) - if h != nil { - h.Read(file, s, results) +func (c *contentCaptureResultHandler) handleCopyFiles(filenames ...string) { + for _, proc := range c.contentProcessors { + proc.fileAssetsChan <- filenames + } +} + +func (s *Site) readAndProcessContent(filenames ...string) error { + + ctx := context.Background() + g, ctx := errgroup.WithContext(ctx) + + sourceSpec := source.NewSourceSpec(s.owner.Cfg, s.Fs) + baseDir := s.absContentDir() + + contentProcessors := make(map[string]*siteContentProcessor) + sites := s.owner.langSite() + for k, v := range sites { + proc := newSiteContentProcessor(baseDir, len(filenames) > 0, v) + contentProcessors[k] = proc + + g.Go(func() error { + return proc.process(ctx) + }) + } + + var ( + handler captureResultHandler + bundleMap *contentChangeMap + ) + + mainHandler := &contentCaptureResultHandler{contentProcessors: contentProcessors} + + if s.running() { + // Need to track changes. + bundleMap = s.owner.ContentChanges + handler = &captureResultHandlerChain{handlers: []captureBundlesHandler{mainHandler, bundleMap}} + } else { - s.Log.ERROR.Println("Unsupported File Type", file.Path()) - } -} - -func pageConverter(pages <-chan *Page, results HandleResults, wg *sync.WaitGroup) { - defer wg.Done() - for page := range pages { - var h *MetaHandle - if page.Markup != "" { - h = NewMetaHandler(page.Markup) - } else { - h = NewMetaHandler(page.File.Extension()) - } - if h != nil { - // Note that we convert pages from the site's rawAllPages collection - // Which may contain pages from multiple sites, so we use the Page's site - // for the conversion. - h.Convert(page, page.s, results) - } - } -} - -func fileConverter(s *Site, files <-chan *source.File, results HandleResults, wg *sync.WaitGroup) { - defer wg.Done() - for file := range files { - h := NewMetaHandler(file.Extension()) - if h != nil { - h.Convert(file, s, results) - } - } -} - -func converterCollator(results <-chan HandledResult, errs chan<- error) { - errMsgs := []string{} - for r := range results { - if r.err != nil { - errMsgs = append(errMsgs, r.err.Error()) - continue - } - } - if len(errMsgs) == 0 { - errs <- nil - return - } - errs <- fmt.Errorf("Errors rendering pages: %s", strings.Join(errMsgs, "\n")) -} - -func (s *Site) replaceFile(sf *source.File) { - for i, f := range s.Files { - if f.Path() == sf.Path() { - s.Files[i] = sf - return - } + handler = mainHandler } - // If a match isn't found, then append it - s.Files = append(s.Files, sf) -} + c := newCapturer(s.Log, sourceSpec, handler, bundleMap, baseDir, filenames...) -func incrementalReadCollator(s *Site, results <-chan HandledResult, pageChan chan *Page, fileConvChan chan *source.File, coordinator chan bool, errs chan<- error) { - errMsgs := []string{} - for r := range results { - if r.err != nil { - errMsgs = append(errMsgs, r.Error()) - continue - } - - if r.page == nil { - s.replaceFile(r.file) - fileConvChan <- r.file - } else { - s.replacePage(r.page) - pageChan <- r.page - } + if err := c.capture(); err != nil { + return err } - s.rawAllPages.Sort() - close(coordinator) - - if len(errMsgs) == 0 { - errs <- nil - return - } - errs <- fmt.Errorf("Errors reading pages: %s", strings.Join(errMsgs, "\n")) -} - -func readCollator(s *Site, results <-chan HandledResult, errs chan<- error) { - if s.PageCollections == nil { - panic("No page collections") - } - errMsgs := []string{} - for r := range results { - if r.err != nil { - errMsgs = append(errMsgs, r.Error()) - continue - } - - // !page == file - if r.page == nil { - s.Files = append(s.Files, r.file) - } else { - s.addPage(r.page) - } + for _, proc := range contentProcessors { + proc.closeInput() } - s.rawAllPages.Sort() - if len(errMsgs) == 0 { - errs <- nil - return - } - errs <- fmt.Errorf("Errors reading pages: %s", strings.Join(errMsgs, "\n")) + return g.Wait() } func (s *Site) buildSiteMeta() (err error) { @@ -1647,7 +1493,6 @@ func (s *Site) resetBuildState() { // TODO(bep) get rid of this double s.Info.PageCollections = s.PageCollections - s.Info.paginationPageCount = 0 s.draftCount = 0 s.futureCount = 0 @@ -1661,6 +1506,10 @@ func (s *Site) resetBuildState() { } func (s *Site) kindFromSections(sections []string) string { + if len(sections) == 0 { + return KindSection + } + if _, isTaxonomy := s.Taxonomies[sections[0]]; isTaxonomy { if len(sections) == 1 { return KindTaxonomyTerm @@ -1738,28 +1587,6 @@ func (s *Site) appendThemeTemplates(in []string) []string { } -// Stats prints Hugo builds stats to the console. -// This is what you see after a successful hugo build. -func (s *Site) Stats() { - s.Log.FEEDBACK.Printf("\nBuilt site for language %s:\n", s.Language.Lang) - s.Log.FEEDBACK.Println(s.draftStats()) - s.Log.FEEDBACK.Println(s.futureStats()) - s.Log.FEEDBACK.Println(s.expiredStats()) - s.Log.FEEDBACK.Printf("%d regular pages created\n", s.siteStats.pageCountRegular) - s.Log.FEEDBACK.Printf("%d other pages created\n", (s.siteStats.pageCount - s.siteStats.pageCountRegular)) - s.Log.FEEDBACK.Printf("%d non-page files copied\n", len(s.Files)) - s.Log.FEEDBACK.Printf("%d paginator pages created\n", s.Info.paginationPageCount) - - if s.isEnabled(KindTaxonomy) { - taxonomies := s.Language.GetStringMapString("taxonomies") - - for _, pl := range taxonomies { - s.Log.FEEDBACK.Printf("%d %s created\n", len(s.Taxonomies[pl]), pl) - } - } - -} - // GetPage looks up a page of a given type in the path given. // {{ with .Site.GetPage "section" "blog" }}{{ .Title }}{{ end }} // @@ -1783,23 +1610,15 @@ func (s *Site) permalinkForOutputFormat(link string, f output.Format) (string, e } else { baseURL = s.PathSpec.BaseURL.String() } - return s.permalinkForBaseURL(link, baseURL), nil + return s.PathSpec.PermalinkForBaseURL(link, baseURL), nil } func (s *Site) permalink(link string) string { - return s.permalinkForBaseURL(link, s.PathSpec.BaseURL.String()) + return s.PathSpec.PermalinkForBaseURL(link, s.PathSpec.BaseURL.String()) } -func (s *Site) permalinkForBaseURL(link, baseURL string) string { - link = strings.TrimPrefix(link, "/") - if !strings.HasSuffix(baseURL, "/") { - baseURL += "/" - } - return baseURL + link -} - -func (s *Site) renderAndWriteXML(name string, dest string, d interface{}, layouts ...string) error { +func (s *Site) renderAndWriteXML(statCounter *uint64, name string, dest string, d interface{}, layouts ...string) error { s.Log.DEBUG.Printf("Render XML for %q to %q", name, dest) renderBuffer := bp.GetBuffer() defer bp.PutBuffer(renderBuffer) @@ -1829,11 +1648,11 @@ func (s *Site) renderAndWriteXML(name string, dest string, d interface{}, layout return nil } - return s.publish(dest, outBuffer) + return s.publish(statCounter, dest, outBuffer) } -func (s *Site) renderAndWritePage(name string, dest string, p *PageOutput, layouts ...string) error { +func (s *Site) renderAndWritePage(statCounter *uint64, name string, dest string, p *PageOutput, layouts ...string) error { renderBuffer := bp.GetBuffer() defer bp.PutBuffer(renderBuffer) @@ -1888,7 +1707,7 @@ func (s *Site) renderAndWritePage(name string, dest string, p *PageOutput, layou return nil } - return s.publish(dest, outBuffer) + return s.publish(statCounter, dest, outBuffer) } func (s *Site) renderForLayouts(name string, d interface{}, w io.Writer, layouts ...string) (err error) { @@ -1915,7 +1734,15 @@ func (s *Site) renderForLayouts(name string, d interface{}, w io.Writer, layouts if err = templ.Execute(w, d); err != nil { // Behavior here should be dependent on if running in server or watch mode. - helpers.DistinctErrorLog.Printf("Error while rendering %q: %s", name, err) + if p, ok := d.(*PageOutput); ok { + if p.File != nil { + helpers.DistinctErrorLog.Printf("Error while rendering %q in %q: %s", name, p.File.Dir(), err) + } else { + helpers.DistinctErrorLog.Printf("Error while rendering %q: %s", name, err) + } + } else { + helpers.DistinctErrorLog.Printf("Error while rendering %q: %s", name, err) + } if !s.running() && !testMode { // TODO(bep) check if this can be propagated os.Exit(-1) @@ -1936,8 +1763,11 @@ func (s *Site) findFirstTemplate(layouts ...string) tpl.Template { return nil } -func (s *Site) publish(path string, r io.Reader) (err error) { +func (s *Site) publish(statCounter *uint64, path string, r io.Reader) (err error) { + s.PathSpec.ProcessingStats.Incr(statCounter) + path = filepath.Join(s.absPublishDir(), path) + return helpers.WriteToDisk(path, r, s.Fs.Destination) } @@ -2012,6 +1842,7 @@ func (s *Site) newNodePage(typ string, sections ...string) *Page { language: s.Language, pageInit: &pageInit{}, Kind: typ, + Source: Source{File: &source.FileInfo{}}, Data: make(map[string]interface{}), Site: &s.Info, sections: sections, diff --git a/hugolib/siteJSONEncode_test.go b/hugolib/siteJSONEncode_test.go index 9c83899fd..5bb6e52e8 100644 --- a/hugolib/siteJSONEncode_test.go +++ b/hugolib/siteJSONEncode_test.go @@ -29,11 +29,13 @@ func TestEncodePage(t *testing.T) { t.Parallel() cfg, fs := newTestCfg() - // borrowed from menu_test.go - for _, src := range menuPageSources { - writeSource(t, fs, filepath.Join("content", src.Name), string(src.Content)) + writeSource(t, fs, filepath.Join("content", "page.md"), `--- +title: Simple +--- +Summary text - } + +`) s := buildSingleSite(t, deps.DepsCfg{Fs: fs, Cfg: cfg}, BuildCfg{}) diff --git a/hugolib/site_render.go b/hugolib/site_render.go index c14592c89..497433ff6 100644 --- a/hugolib/site_render.go +++ b/hugolib/site_render.go @@ -98,6 +98,26 @@ func pageRenderer(s *Site, pages <-chan *Page, results chan<- error, wg *sync.Wa continue } + // We only need to re-publish the resources if the output format is different + // from all of the previous (e.g. the "amp" use case). + shouldRender := i == 0 + if i > 0 { + for j := i; j >= 0; j-- { + if outFormat.Path != page.outputFormats[j].Path { + shouldRender = true + } else { + shouldRender = false + } + } + } + + if shouldRender { + if err := pageOutput.renderResources(); err != nil { + s.Log.ERROR.Printf("Failed to render resources for page %q: %s", page, err) + continue + } + } + var layouts []string if page.selfLayout != "" { @@ -125,7 +145,7 @@ func pageRenderer(s *Site, pages <-chan *Page, results chan<- error, wg *sync.Wa s.Log.DEBUG.Printf("Render %s to %q with layouts %q", pageOutput.Kind, targetPath, layouts) - if err := s.renderAndWritePage("page "+pageOutput.FullFilePath(), targetPath, pageOutput, layouts...); err != nil { + if err := s.renderAndWritePage(&s.PathSpec.ProcessingStats.Pages, "page "+pageOutput.FullFilePath(), targetPath, pageOutput, layouts...); err != nil { results <- err } @@ -191,6 +211,7 @@ func (s *Site) renderPaginator(p *PageOutput) error { } if err := s.renderAndWritePage( + &s.PathSpec.ProcessingStats.PaginatorPages, pagerNode.Title, targetPath, pagerNode, layouts...); err != nil { return err @@ -232,7 +253,7 @@ func (s *Site) renderRSS(p *PageOutput) error { return err } - return s.renderAndWriteXML(p.Title, + return s.renderAndWriteXML(&s.PathSpec.ProcessingStats.Pages, p.Title, targetPath, p, layouts...) } @@ -271,7 +292,7 @@ func (s *Site) render404() error { s.Log.ERROR.Printf("Failed to create target path for page %q: %s", p, err) } - return s.renderAndWritePage("404 page", targetPath, pageOutput, s.appendThemeTemplates(nfLayouts)...) + return s.renderAndWritePage(&s.PathSpec.ProcessingStats.Pages, "404 page", targetPath, pageOutput, s.appendThemeTemplates(nfLayouts)...) } func (s *Site) renderSitemap() error { @@ -325,7 +346,7 @@ func (s *Site) renderSitemap() error { smLayouts := []string{"sitemap.xml", "_default/sitemap.xml", "_internal/_default/sitemap.xml"} addLanguagePrefix := n.Site.IsMultiLingual() - return s.renderAndWriteXML("sitemap", + return s.renderAndWriteXML(&s.PathSpec.ProcessingStats.Sitemaps, "sitemap", n.addLangPathPrefixIfFlagSet(page.Sitemap.Filename, addLanguagePrefix), n, s.appendThemeTemplates(smLayouts)...) } @@ -357,7 +378,7 @@ func (s *Site) renderRobotsTXT() error { return nil } - return s.publish("robots.txt", outBuffer) + return s.publish(&s.PathSpec.ProcessingStats.Pages, "robots.txt", outBuffer) } // renderAliases renders shell pages that simply have a redirect in the header. diff --git a/hugolib/site_sections_test.go b/hugolib/site_sections_test.go index 37752467b..8b5b37fcc 100644 --- a/hugolib/site_sections_test.go +++ b/hugolib/site_sections_test.go @@ -114,6 +114,7 @@ PAG|{{ .Title }}|{{ $sect.InSection . }} cfg.Set("paginate", 2) s := buildSingleSite(t, deps.DepsCfg{Fs: fs, Cfg: cfg}, BuildCfg{}) + require.Len(t, s.RegularPages, 21) tests := []struct { @@ -264,6 +265,8 @@ PAG|{{ .Title }}|{{ $sect.InSection . }} }}, } + home := s.getPage(KindHome) + for _, test := range tests { sections := strings.Split(test.sections, ",") p := s.getPage(KindSection, sections...) @@ -276,8 +279,6 @@ PAG|{{ .Title }}|{{ $sect.InSection . }} test.verify(p) } - home := s.getPage(KindHome) - assert.NotNil(home) assert.Len(home.Sections(), 9) diff --git a/hugolib/site_stats_test.go b/hugolib/site_stats_test.go new file mode 100644 index 000000000..522b5636b --- /dev/null +++ b/hugolib/site_stats_test.go @@ -0,0 +1,101 @@ +// Copyright 2017 The Hugo Authors. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package hugolib + +import ( + "bytes" + "fmt" + "io/ioutil" + "testing" + + "github.com/gohugoio/hugo/helpers" + "github.com/spf13/afero" + + "github.com/stretchr/testify/require" +) + +func TestSiteStats(t *testing.T) { + t.Parallel() + + assert := require.New(t) + + siteConfig := ` +baseURL = "http://example.com/blog" + +paginate = 1 +defaultContentLanguage = "nn" + +[languages] +[languages.nn] +languageName = "Nynorsk" +weight = 1 +title = "Hugo på norsk" + +[languages.en] +languageName = "English" +weight = 2 +title = "Hugo in English" + +` + + pageTemplate := `--- +title: "T%d" +tags: +%s +categories: +%s +aliases: [Ali%d] +--- +# Doc +` + + th, h := newTestSitesFromConfig(t, afero.NewMemMapFs(), siteConfig, + "layouts/_default/single.html", "Single|{{ .Title }}|{{ .Content }}", + "layouts/_default/list.html", `List|{{ .Title }}|Pages: {{ .Paginator.TotalPages }}|{{ .Content }}`, + "layouts/_default/terms.html", "Terms List|{{ .Title }}|{{ .Content }}", + ) + require.Len(t, h.Sites, 2) + + fs := th.Fs + + for i := 0; i < 2; i++ { + for j := 0; j < 2; j++ { + pageID := i + j + 1 + writeSource(t, fs, fmt.Sprintf("content/sect/p%d.md", pageID), + fmt.Sprintf(pageTemplate, pageID, fmt.Sprintf("- tag%d", j), fmt.Sprintf("- category%d", j), pageID)) + } + } + + for i := 0; i < 5; i++ { + writeSource(t, fs, fmt.Sprintf("content/assets/image%d.png", i+1), "image") + } + + err := h.Build(BuildCfg{}) + + assert.NoError(err) + + stats := []*helpers.ProcessingStats{ + h.Sites[0].PathSpec.ProcessingStats, + h.Sites[1].PathSpec.ProcessingStats} + + stats[0].Table(ioutil.Discard) + stats[1].Table(ioutil.Discard) + + var buff bytes.Buffer + + helpers.ProcessingStatsTable(&buff, stats...) + + assert.Contains(buff.String(), "Pages | 19 | 6") + +} diff --git a/hugolib/site_test.go b/hugolib/site_test.go index 7c5af6671..6c5c28c54 100644 --- a/hugolib/site_test.go +++ b/hugolib/site_test.go @@ -23,7 +23,6 @@ import ( jww "github.com/spf13/jwalterweatherman" "github.com/gohugoio/hugo/helpers" - "github.com/gohugoio/hugo/source" "github.com/gohugoio/hugo/deps" "github.com/gohugoio/hugo/hugofs" @@ -74,11 +73,11 @@ func TestRenderWithInvalidTemplate(t *testing.T) { func TestDraftAndFutureRender(t *testing.T) { t.Parallel() - sources := []source.ByteSource{ - {Name: filepath.FromSlash("sect/doc1.md"), Content: []byte("---\ntitle: doc1\ndraft: true\npublishdate: \"2414-05-29\"\n---\n# doc1\n*some content*")}, - {Name: filepath.FromSlash("sect/doc2.md"), Content: []byte("---\ntitle: doc2\ndraft: true\npublishdate: \"2012-05-29\"\n---\n# doc2\n*some content*")}, - {Name: filepath.FromSlash("sect/doc3.md"), Content: []byte("---\ntitle: doc3\ndraft: false\npublishdate: \"2414-05-29\"\n---\n# doc3\n*some content*")}, - {Name: filepath.FromSlash("sect/doc4.md"), Content: []byte("---\ntitle: doc4\ndraft: false\npublishdate: \"2012-05-29\"\n---\n# doc4\n*some content*")}, + sources := [][2]string{ + {filepath.FromSlash("sect/doc1.md"), "---\ntitle: doc1\ndraft: true\npublishdate: \"2414-05-29\"\n---\n# doc1\n*some content*"}, + {filepath.FromSlash("sect/doc2.md"), "---\ntitle: doc2\ndraft: true\npublishdate: \"2012-05-29\"\n---\n# doc2\n*some content*"}, + {filepath.FromSlash("sect/doc3.md"), "---\ntitle: doc3\ndraft: false\npublishdate: \"2414-05-29\"\n---\n# doc3\n*some content*"}, + {filepath.FromSlash("sect/doc4.md"), "---\ntitle: doc4\ndraft: false\npublishdate: \"2012-05-29\"\n---\n# doc4\n*some content*"}, } siteSetup := func(t *testing.T, configKeyValues ...interface{}) *Site { @@ -91,7 +90,7 @@ func TestDraftAndFutureRender(t *testing.T) { } for _, src := range sources { - writeSource(t, fs, filepath.Join("content", src.Name), string(src.Content)) + writeSource(t, fs, filepath.Join("content", src[0]), src[1]) } @@ -132,9 +131,9 @@ func TestDraftAndFutureRender(t *testing.T) { func TestFutureExpirationRender(t *testing.T) { t.Parallel() - sources := []source.ByteSource{ - {Name: filepath.FromSlash("sect/doc3.md"), Content: []byte("---\ntitle: doc1\nexpirydate: \"2400-05-29\"\n---\n# doc1\n*some content*")}, - {Name: filepath.FromSlash("sect/doc4.md"), Content: []byte("---\ntitle: doc2\nexpirydate: \"2000-05-29\"\n---\n# doc2\n*some content*")}, + sources := [][2]string{ + {filepath.FromSlash("sect/doc3.md"), "---\ntitle: doc1\nexpirydate: \"2400-05-29\"\n---\n# doc1\n*some content*"}, + {filepath.FromSlash("sect/doc4.md"), "---\ntitle: doc2\nexpirydate: \"2000-05-29\"\n---\n# doc2\n*some content*"}, } siteSetup := func(t *testing.T) *Site { @@ -142,7 +141,7 @@ func TestFutureExpirationRender(t *testing.T) { cfg.Set("baseURL", "http://auth/bub") for _, src := range sources { - writeSource(t, fs, filepath.Join("content", src.Name), string(src.Content)) + writeSource(t, fs, filepath.Join("content", src[0]), src[1]) } @@ -234,29 +233,29 @@ func doTestCrossrefs(t *testing.T, relative, uglyURLs bool) { doc3Slashed := filepath.FromSlash("/sect/doc3.md") - sources := []source.ByteSource{ + sources := [][2]string{ { - Name: filepath.FromSlash("sect/doc1.md"), - Content: []byte(fmt.Sprintf(`Ref 2: {{< %s "sect/doc2.md" >}}`, refShortcode)), + filepath.FromSlash("sect/doc1.md"), + fmt.Sprintf(`Ref 2: {{< %s "sect/doc2.md" >}}`, refShortcode), }, // Issue #1148: Make sure that no P-tags is added around shortcodes. { - Name: filepath.FromSlash("sect/doc2.md"), - Content: []byte(fmt.Sprintf(`**Ref 1:** + filepath.FromSlash("sect/doc2.md"), + fmt.Sprintf(`**Ref 1:** {{< %s "sect/doc1.md" >}} -THE END.`, refShortcode)), +THE END.`, refShortcode), }, // Issue #1753: Should not add a trailing newline after shortcode. { - Name: filepath.FromSlash("sect/doc3.md"), - Content: []byte(fmt.Sprintf(`**Ref 1:**{{< %s "sect/doc3.md" >}}.`, refShortcode)), + filepath.FromSlash("sect/doc3.md"), + fmt.Sprintf(`**Ref 1:**{{< %s "sect/doc3.md" >}}.`, refShortcode), }, // Issue #3703 { - Name: filepath.FromSlash("sect/doc4.md"), - Content: []byte(fmt.Sprintf(`**Ref 1:**{{< %s "%s" >}}.`, refShortcode, doc3Slashed)), + filepath.FromSlash("sect/doc4.md"), + fmt.Sprintf(`**Ref 1:**{{< %s "%s" >}}.`, refShortcode, doc3Slashed), }, } @@ -267,7 +266,7 @@ THE END.`, refShortcode)), cfg.Set("verbose", true) for _, src := range sources { - writeSource(t, fs, filepath.Join("content", src.Name), string(src.Content)) + writeSource(t, fs, filepath.Join("content", src[0]), src[1]) } s := buildSingleSite( @@ -323,13 +322,13 @@ func doTestShouldAlwaysHaveUglyURLs(t *testing.T, uglyURLs bool) { cfg.Set("uglyURLs", uglyURLs) - sources := []source.ByteSource{ - {Name: filepath.FromSlash("sect/doc1.md"), Content: []byte("---\nmarkup: markdown\n---\n# title\nsome *content*")}, - {Name: filepath.FromSlash("sect/doc2.md"), Content: []byte("---\nurl: /ugly.html\nmarkup: markdown\n---\n# title\ndoc2 *content*")}, + sources := [][2]string{ + {filepath.FromSlash("sect/doc1.md"), "---\nmarkup: markdown\n---\n# title\nsome *content*"}, + {filepath.FromSlash("sect/doc2.md"), "---\nurl: /ugly.html\nmarkup: markdown\n---\n# title\ndoc2 *content*"}, } for _, src := range sources { - writeSource(t, fs, filepath.Join("content", src.Name), string(src.Content)) + writeSource(t, fs, filepath.Join("content", src[0]), src[1]) } writeSource(t, fs, filepath.Join("layouts", "index.html"), "Home Sweet {{ if.IsHome }}Home{{ end }}.") @@ -402,7 +401,9 @@ func TestSectionNaming(t *testing.T) { for _, canonify := range []bool{true, false} { for _, uglify := range []bool{true, false} { for _, pluralize := range []bool{true, false} { - doTestSectionNaming(t, canonify, uglify, pluralize) + t.Run(fmt.Sprintf("canonify=%t,uglify=%t,pluralize=%t", canonify, uglify, pluralize), func(t *testing.T) { + doTestSectionNaming(t, canonify, uglify, pluralize) + }) } } } @@ -418,12 +419,12 @@ func doTestSectionNaming(t *testing.T, canonify, uglify, pluralize bool) { expectedPathSuffix = "/index.html" } - sources := []source.ByteSource{ - {Name: filepath.FromSlash("sect/doc1.html"), Content: []byte("doc1")}, + sources := [][2]string{ + {filepath.FromSlash("sect/doc1.html"), "doc1"}, // Add one more page to sect to make sure sect is picked in mainSections - {Name: filepath.FromSlash("sect/sect.html"), Content: []byte("sect")}, - {Name: filepath.FromSlash("Fish and Chips/doc2.html"), Content: []byte("doc2")}, - {Name: filepath.FromSlash("ラーメン/doc3.html"), Content: []byte("doc3")}, + {filepath.FromSlash("sect/sect.html"), "sect"}, + {filepath.FromSlash("Fish and Chips/doc2.html"), "doc2"}, + {filepath.FromSlash("ラーメン/doc3.html"), "doc3"}, } cfg, fs := newTestCfg() @@ -433,8 +434,8 @@ func doTestSectionNaming(t *testing.T, canonify, uglify, pluralize bool) { cfg.Set("pluralizeListTitles", pluralize) cfg.Set("canonifyURLs", canonify) - for _, source := range sources { - writeSource(t, fs, filepath.Join("content", source.Name), string(source.Content)) + for _, src := range sources { + writeSource(t, fs, filepath.Join("content", src[0]), src[1]) } writeSource(t, fs, filepath.Join("layouts", "_default/single.html"), "{{.Content}}") @@ -472,17 +473,17 @@ func doTestSectionNaming(t *testing.T, canonify, uglify, pluralize bool) { } func TestSkipRender(t *testing.T) { t.Parallel() - sources := []source.ByteSource{ - {Name: filepath.FromSlash("sect/doc1.html"), Content: []byte("---\nmarkup: markdown\n---\n# title\nsome *content*")}, - {Name: filepath.FromSlash("sect/doc2.html"), Content: []byte("more content")}, - {Name: filepath.FromSlash("sect/doc3.md"), Content: []byte("# doc3\n*some* content")}, - {Name: filepath.FromSlash("sect/doc4.md"), Content: []byte("---\ntitle: doc4\n---\n# doc4\n*some content*")}, - {Name: filepath.FromSlash("sect/doc5.html"), Content: []byte("{{ template \"head\" }}body5")}, - {Name: filepath.FromSlash("sect/doc6.html"), Content: []byte("{{ template \"head_abs\" }}body5")}, - {Name: filepath.FromSlash("doc7.html"), Content: []byte("doc7 content")}, - {Name: filepath.FromSlash("sect/doc8.html"), Content: []byte("---\nmarkup: md\n---\n# title\nsome *content*")}, + sources := [][2]string{ + {filepath.FromSlash("sect/doc1.html"), "---\nmarkup: markdown\n---\n# title\nsome *content*"}, + {filepath.FromSlash("sect/doc2.html"), "more content"}, + {filepath.FromSlash("sect/doc3.md"), "# doc3\n*some* content"}, + {filepath.FromSlash("sect/doc4.md"), "---\ntitle: doc4\n---\n# doc4\n*some content*"}, + {filepath.FromSlash("sect/doc5.html"), "{{ template \"head\" }}body5"}, + {filepath.FromSlash("sect/doc6.html"), "{{ template \"head_abs\" }}body5"}, + {filepath.FromSlash("doc7.html"), "doc7 content"}, + {filepath.FromSlash("sect/doc8.html"), "---\nmarkup: md\n---\n# title\nsome *content*"}, // Issue #3021 - {Name: filepath.FromSlash("doc9.html"), Content: []byte("doc9: {{< myshortcode >}}")}, + {filepath.FromSlash("doc9.html"), "doc9: {{< myshortcode >}}"}, } cfg, fs := newTestCfg() @@ -493,7 +494,7 @@ func TestSkipRender(t *testing.T) { cfg.Set("baseURL", "http://auth/bub") for _, src := range sources { - writeSource(t, fs, filepath.Join("content", src.Name), string(src.Content)) + writeSource(t, fs, filepath.Join("content", src[0]), src[1]) } @@ -535,9 +536,9 @@ func TestSkipRender(t *testing.T) { func TestAbsURLify(t *testing.T) { t.Parallel() - sources := []source.ByteSource{ - {Name: filepath.FromSlash("sect/doc1.html"), Content: []byte("
link")}, - {Name: filepath.FromSlash("blue/doc2.html"), Content: []byte("---\nf: t\n---\nmore content")}, + sources := [][2]string{ + {filepath.FromSlash("sect/doc1.html"), "link"}, + {filepath.FromSlash("blue/doc2.html"), "---\nf: t\n---\nmore content"}, } for _, baseURL := range []string{"http://auth/bub", "http://base", "//base"} { for _, canonify := range []bool{true, false} { @@ -549,7 +550,7 @@ func TestAbsURLify(t *testing.T) { cfg.Set("baseURL", baseURL) for _, src := range sources { - writeSource(t, fs, filepath.Join("content", src.Name), string(src.Content)) + writeSource(t, fs, filepath.Join("content", src[0]), src[1]) } @@ -584,23 +585,23 @@ func TestAbsURLify(t *testing.T) { } } -var weightedPage1 = []byte(`+++ +var weightedPage1 = `+++ weight = "2" title = "One" my_param = "foo" my_date = 1979-05-27T07:32:00Z +++ -Front Matter with Ordered Pages`) +Front Matter with Ordered Pages` -var weightedPage2 = []byte(`+++ +var weightedPage2 = `+++ weight = "6" title = "Two" publishdate = "2012-03-05" my_param = "foo" +++ -Front Matter with Ordered Pages 2`) +Front Matter with Ordered Pages 2` -var weightedPage3 = []byte(`+++ +var weightedPage3 = `+++ weight = "4" title = "Three" date = "2012-04-06" @@ -609,9 +610,9 @@ my_param = "bar" only_one = "yes" my_date = 2010-05-27T07:32:00Z +++ -Front Matter with Ordered Pages 3`) +Front Matter with Ordered Pages 3` -var weightedPage4 = []byte(`+++ +var weightedPage4 = `+++ weight = "4" title = "Four" date = "2012-01-01" @@ -620,13 +621,13 @@ my_param = "baz" my_date = 2010-05-27T07:32:00Z categories = [ "hugo" ] +++ -Front Matter with Ordered Pages 4. This is longer content`) +Front Matter with Ordered Pages 4. This is longer content` -var weightedSources = []source.ByteSource{ - {Name: filepath.FromSlash("sect/doc1.md"), Content: weightedPage1}, - {Name: filepath.FromSlash("sect/doc2.md"), Content: weightedPage2}, - {Name: filepath.FromSlash("sect/doc3.md"), Content: weightedPage3}, - {Name: filepath.FromSlash("sect/doc4.md"), Content: weightedPage4}, +var weightedSources = [][2]string{ + {filepath.FromSlash("sect/doc1.md"), weightedPage1}, + {filepath.FromSlash("sect/doc2.md"), weightedPage2}, + {filepath.FromSlash("sect/doc3.md"), weightedPage3}, + {filepath.FromSlash("sect/doc4.md"), weightedPage4}, } func TestOrderedPages(t *testing.T) { @@ -635,7 +636,7 @@ func TestOrderedPages(t *testing.T) { cfg.Set("baseURL", "http://auth/bub") for _, src := range weightedSources { - writeSource(t, fs, filepath.Join("content", src.Name), string(src.Content)) + writeSource(t, fs, filepath.Join("content", src[0]), src[1]) } @@ -678,11 +679,11 @@ func TestOrderedPages(t *testing.T) { } } -var groupedSources = []source.ByteSource{ - {Name: filepath.FromSlash("sect1/doc1.md"), Content: weightedPage1}, - {Name: filepath.FromSlash("sect1/doc2.md"), Content: weightedPage2}, - {Name: filepath.FromSlash("sect2/doc3.md"), Content: weightedPage3}, - {Name: filepath.FromSlash("sect3/doc4.md"), Content: weightedPage4}, +var groupedSources = [][2]string{ + {filepath.FromSlash("sect1/doc1.md"), weightedPage1}, + {filepath.FromSlash("sect1/doc2.md"), weightedPage2}, + {filepath.FromSlash("sect2/doc3.md"), weightedPage3}, + {filepath.FromSlash("sect3/doc4.md"), weightedPage4}, } func TestGroupedPages(t *testing.T) { @@ -822,16 +823,16 @@ func TestGroupedPages(t *testing.T) { } } -var pageWithWeightedTaxonomies1 = []byte(`+++ +var pageWithWeightedTaxonomies1 = `+++ tags = [ "a", "b", "c" ] tags_weight = 22 categories = ["d"] title = "foo" categories_weight = 44 +++ -Front Matter with weighted tags and categories`) +Front Matter with weighted tags and categories` -var pageWithWeightedTaxonomies2 = []byte(`+++ +var pageWithWeightedTaxonomies2 = `+++ tags = "a" tags_weight = 33 title = "bar" @@ -840,23 +841,23 @@ categories_weight = 11 alias = "spf13" date = 1979-05-27T07:32:00Z +++ -Front Matter with weighted tags and categories`) +Front Matter with weighted tags and categories` -var pageWithWeightedTaxonomies3 = []byte(`+++ +var pageWithWeightedTaxonomies3 = `+++ title = "bza" categories = [ "e" ] categories_weight = 11 alias = "spf13" date = 2010-05-27T07:32:00Z +++ -Front Matter with weighted tags and categories`) +Front Matter with weighted tags and categories` func TestWeightedTaxonomies(t *testing.T) { t.Parallel() - sources := []source.ByteSource{ - {Name: filepath.FromSlash("sect/doc1.md"), Content: pageWithWeightedTaxonomies2}, - {Name: filepath.FromSlash("sect/doc2.md"), Content: pageWithWeightedTaxonomies1}, - {Name: filepath.FromSlash("sect/doc3.md"), Content: pageWithWeightedTaxonomies3}, + sources := [][2]string{ + {filepath.FromSlash("sect/doc1.md"), pageWithWeightedTaxonomies2}, + {filepath.FromSlash("sect/doc2.md"), pageWithWeightedTaxonomies1}, + {filepath.FromSlash("sect/doc3.md"), pageWithWeightedTaxonomies3}, } taxonomies := make(map[string]string) @@ -884,39 +885,23 @@ func TestWeightedTaxonomies(t *testing.T) { } } -func findPage(site *Site, f string) *Page { - sp := source.NewSourceSpec(site.Cfg, site.Fs) - currentPath := sp.NewFile(filepath.FromSlash(f)) - //t.Logf("looking for currentPath: %s", currentPath.Path()) - - for _, page := range site.Pages { - //t.Logf("page: %s", page.Source.Path()) - if page.Source.Path() == currentPath.Path() { - return page - } - } - return nil -} - func setupLinkingMockSite(t *testing.T) *Site { - sources := []source.ByteSource{ - {Name: filepath.FromSlash("level2/unique.md"), Content: []byte("")}, - {Name: filepath.FromSlash("index.md"), Content: []byte("")}, - {Name: filepath.FromSlash("rootfile.md"), Content: []byte("")}, - {Name: filepath.FromSlash("root-image.png"), Content: []byte("")}, + sources := [][2]string{ + {filepath.FromSlash("level2/unique.md"), ""}, + {filepath.FromSlash("rootfile.md"), ""}, + {filepath.FromSlash("root-image.png"), ""}, - {Name: filepath.FromSlash("level2/2-root.md"), Content: []byte("")}, - {Name: filepath.FromSlash("level2/index.md"), Content: []byte("")}, - {Name: filepath.FromSlash("level2/common.md"), Content: []byte("")}, + {filepath.FromSlash("level2/2-root.md"), ""}, + {filepath.FromSlash("level2/common.md"), ""}, - {Name: filepath.FromSlash("level2/2-image.png"), Content: []byte("")}, - {Name: filepath.FromSlash("level2/common.png"), Content: []byte("")}, + {filepath.FromSlash("level2/2-image.png"), ""}, + {filepath.FromSlash("level2/common.png"), ""}, - {Name: filepath.FromSlash("level2/level3/3-root.md"), Content: []byte("")}, - {Name: filepath.FromSlash("level2/level3/index.md"), Content: []byte("")}, - {Name: filepath.FromSlash("level2/level3/common.md"), Content: []byte("")}, - {Name: filepath.FromSlash("level2/level3/3-image.png"), Content: []byte("")}, - {Name: filepath.FromSlash("level2/level3/common.png"), Content: []byte("")}, + {filepath.FromSlash("level2/level3/start.md"), ""}, + {filepath.FromSlash("level2/level3/3-root.md"), ""}, + {filepath.FromSlash("level2/level3/common.md"), ""}, + {filepath.FromSlash("level2/level3/3-image.png"), ""}, + {filepath.FromSlash("level2/level3/common.png"), ""}, } cfg, fs := newTestCfg() @@ -939,7 +924,7 @@ func TestRefLinking(t *testing.T) { t.Parallel() site := setupLinkingMockSite(t) - currentPage := findPage(site, "level2/level3/index.md") + currentPage := site.getPage(KindPage, "level2/level3/start.md") if currentPage == nil { t.Fatalf("failed to find current page in site") } @@ -953,8 +938,6 @@ func TestRefLinking(t *testing.T) { {"unique.md", "", true, "/level2/unique/"}, {"level2/common.md", "", true, "/level2/common/"}, {"3-root.md", "", true, "/level2/level3/3-root/"}, - {"level2/level3/index.md", "amp", true, "/amp/level2/level3/"}, - {"level2/index.md", "amp", false, "http://auth/amp/level2/"}, } { if out, err := site.Info.refLink(test.link, currentPage, test.relative, test.outputFormat); err != nil || out != test.expected { t.Errorf("[%d] Expected %s to resolve to (%s), got (%s) - error: %s", i, test.link, test.expected, out, err) diff --git a/hugolib/site_url_test.go b/hugolib/site_url_test.go index 272c78c7e..479967673 100644 --- a/hugolib/site_url_test.go +++ b/hugolib/site_url_test.go @@ -20,7 +20,6 @@ import ( "html/template" "github.com/gohugoio/hugo/deps" - "github.com/gohugoio/hugo/source" "github.com/stretchr/testify/require" ) @@ -33,9 +32,9 @@ slug: slug-doc-2 slug doc 2 content ` -var urlFakeSource = []source.ByteSource{ - {Name: filepath.FromSlash("content/blue/doc1.md"), Content: []byte(slugDoc1)}, - {Name: filepath.FromSlash("content/blue/doc2.md"), Content: []byte(slugDoc2)}, +var urlFakeSource = [][2]string{ + {filepath.FromSlash("content/blue/doc1.md"), slugDoc1}, + {filepath.FromSlash("content/blue/doc2.md"), slugDoc2}, } // Issue #1105 diff --git a/hugolib/testhelpers_test.go b/hugolib/testhelpers_test.go index 3db2d9d51..349c39ebc 100644 --- a/hugolib/testhelpers_test.go +++ b/hugolib/testhelpers_test.go @@ -14,7 +14,6 @@ import ( "github.com/spf13/afero" "github.com/gohugoio/hugo/helpers" - "github.com/gohugoio/hugo/source" "github.com/gohugoio/hugo/tpl" "github.com/spf13/viper" @@ -169,6 +168,11 @@ func newDebugLogger() *jww.Notepad { func newErrorLogger() *jww.Notepad { return jww.NewNotepad(jww.LevelError, jww.LevelError, os.Stdout, ioutil.Discard, "", log.Ldate|log.Ltime) } + +func newWarningLogger() *jww.Notepad { + return jww.NewNotepad(jww.LevelWarn, jww.LevelError, os.Stdout, ioutil.Discard, "", log.Ldate|log.Ltime) +} + func createWithTemplateFromNameValues(additionalTemplates ...string) func(templ tpl.TemplateHandler) error { return func(templ tpl.TemplateHandler) error { @@ -203,9 +207,17 @@ func buildSingleSiteExpected(t testing.TB, expectBuildError bool, depsCfg deps.D return h.Sites[0] } -func writeSourcesToSource(t *testing.T, base string, fs *hugofs.Fs, sources ...source.ByteSource) { +func writeSourcesToSource(t *testing.T, base string, fs *hugofs.Fs, sources ...[2]string) { for _, src := range sources { - writeSource(t, fs, filepath.Join(base, src.Name), string(src.Content)) + writeSource(t, fs, filepath.Join(base, src[0]), src[1]) + } +} + +func dumpPages(pages ...*Page) { + for i, p := range pages { + fmt.Printf("%d: Kind: %s Title: %-10s RelPermalink: %-10s Path: %-10s sections: %s Len Sections(): %d\n", + i+1, + p.Kind, p.Title, p.RelPermalink(), p.Path(), p.sections, len(p.Sections())) } } diff --git a/i18n/translationProvider.go b/i18n/translationProvider.go index e0eb89134..52aada8bd 100644 --- a/i18n/translationProvider.go +++ b/i18n/translationProvider.go @@ -17,6 +17,8 @@ import ( "errors" "fmt" + "github.com/gohugoio/hugo/helpers" + "github.com/gohugoio/hugo/deps" "github.com/gohugoio/hugo/source" "github.com/nicksnyder/go-i18n/i18n/bundle" @@ -73,9 +75,8 @@ func (tp *TranslationProvider) Update(d *deps.Deps) error { for _, currentSource := range sources { for _, r := range currentSource.Files() { - err := i18nBundle.ParseTranslationFileBytes(r.LogicalName(), r.Bytes()) - if err != nil { - return fmt.Errorf("Failed to load translations in file %q: %s", r.LogicalName(), err) + if err := addTranslationFile(i18nBundle, r); err != nil { + return err } } } @@ -88,6 +89,19 @@ func (tp *TranslationProvider) Update(d *deps.Deps) error { } +func addTranslationFile(bundle *bundle.Bundle, r source.ReadableFile) error { + f, err := r.Open() + if err != nil { + return fmt.Errorf("Failed to open translations file %q: %s", r.LogicalName(), err) + } + defer f.Close() + err = bundle.ParseTranslationFileBytes(r.LogicalName(), helpers.ReaderToBytes(f)) + if err != nil { + return fmt.Errorf("Failed to load translations in file %q: %s", r.LogicalName(), err) + } + return nil +} + // Clone sets the language func for the new language. func (tp *TranslationProvider) Clone(d *deps.Deps) error { d.Translate = tp.t.Func(d.Language.Lang) diff --git a/resource/image.go b/resource/image.go new file mode 100644 index 000000000..c039f68b6 --- /dev/null +++ b/resource/image.go @@ -0,0 +1,551 @@ +// Copyright 2017-present The Hugo Authors. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package resource + +import ( + "errors" + "fmt" + "image/color" + "io" + "os" + "path/filepath" + "strconv" + "strings" + + "github.com/mitchellh/mapstructure" + + "github.com/gohugoio/hugo/helpers" + "github.com/spf13/afero" + + // Importing image codecs for image.DecodeConfig + "image" + _ "image/gif" + "image/jpeg" + _ "image/png" + + "github.com/disintegration/imaging" + + // Import webp codec + "sync" + + _ "golang.org/x/image/webp" +) + +var ( + _ Resource = (*Image)(nil) + _ Source = (*Image)(nil) + _ Cloner = (*Image)(nil) +) + +// Imaging contains default image processing configuration. This will be fetched +// from site (or language) config. +type Imaging struct { + // Default image quality setting (1-100). Only used for JPEG images. + Quality int + + // Resample filter used. See https://github.com/disintegration/imaging + ResampleFilter string +} + +const ( + defaultJPEGQuality = 75 + defaultResampleFilter = "box" +) + +var imageFormats = map[string]imaging.Format{ + ".jpg": imaging.JPEG, + ".jpeg": imaging.JPEG, + ".png": imaging.PNG, + ".tif": imaging.TIFF, + ".tiff": imaging.TIFF, + ".bmp": imaging.BMP, + ".gif": imaging.GIF, +} + +var anchorPositions = map[string]imaging.Anchor{ + strings.ToLower("Center"): imaging.Center, + strings.ToLower("TopLeft"): imaging.TopLeft, + strings.ToLower("Top"): imaging.Top, + strings.ToLower("TopRight"): imaging.TopRight, + strings.ToLower("Left"): imaging.Left, + strings.ToLower("Right"): imaging.Right, + strings.ToLower("BottomLeft"): imaging.BottomLeft, + strings.ToLower("Bottom"): imaging.Bottom, + strings.ToLower("BottomRight"): imaging.BottomRight, +} + +var imageFilters = map[string]imaging.ResampleFilter{ + strings.ToLower("NearestNeighbor"): imaging.NearestNeighbor, + strings.ToLower("Box"): imaging.Box, + strings.ToLower("Linear"): imaging.Linear, + strings.ToLower("Hermite"): imaging.Hermite, + strings.ToLower("MitchellNetravali"): imaging.MitchellNetravali, + strings.ToLower("CatmullRom"): imaging.CatmullRom, + strings.ToLower("BSpline"): imaging.BSpline, + strings.ToLower("Gaussian"): imaging.Gaussian, + strings.ToLower("Lanczos"): imaging.Lanczos, + strings.ToLower("Hann"): imaging.Hann, + strings.ToLower("Hamming"): imaging.Hamming, + strings.ToLower("Blackman"): imaging.Blackman, + strings.ToLower("Bartlett"): imaging.Bartlett, + strings.ToLower("Welch"): imaging.Welch, + strings.ToLower("Cosine"): imaging.Cosine, +} + +type Image struct { + config image.Config + configInit sync.Once + configLoaded bool + + copiedToDestinationInit sync.Once + + imaging *Imaging + + *genericResource +} + +func (i *Image) Width() int { + i.initConfig() + return i.config.Width +} + +func (i *Image) Height() int { + i.initConfig() + return i.config.Height +} + +// Implement the Cloner interface. +func (i *Image) WithNewBase(base string) Resource { + return &Image{ + imaging: i.imaging, + genericResource: i.genericResource.WithNewBase(base).(*genericResource)} +} + +// Resize resizes the image to the specified width and height using the specified resampling +// filter and returns the transformed image. If one of width or height is 0, the image aspect +// ratio is preserved. +func (i *Image) Resize(spec string) (*Image, error) { + return i.doWithImageConfig("resize", spec, func(src image.Image, conf imageConfig) (image.Image, error) { + return imaging.Resize(src, conf.Width, conf.Height, conf.Filter), nil + }) +} + +// Fit scales down the image using the specified resample filter to fit the specified +// maximum width and height. +func (i *Image) Fit(spec string) (*Image, error) { + return i.doWithImageConfig("fit", spec, func(src image.Image, conf imageConfig) (image.Image, error) { + return imaging.Fit(src, conf.Width, conf.Height, conf.Filter), nil + }) +} + +// Fill scales the image to the smallest possible size that will cover the specified dimensions, +// crops the resized image to the specified dimensions using the given anchor point. +// Space delimited config: 200x300 TopLeft +func (i *Image) Fill(spec string) (*Image, error) { + return i.doWithImageConfig("fill", spec, func(src image.Image, conf imageConfig) (image.Image, error) { + return imaging.Fill(src, conf.Width, conf.Height, conf.Anchor, conf.Filter), nil + }) +} + +// Holds configuration to create a new image from an existing one, resize etc. +type imageConfig struct { + Action string + + // Quality ranges from 1 to 100 inclusive, higher is better. + // This is only relevant for JPEG images. + // Default is 75. + Quality int + + // Rotate rotates an image by the given angle counter-clockwise. + // The rotation will be performed first. + Rotate int + + Width int + Height int + + Filter imaging.ResampleFilter + FilterStr string + + Anchor imaging.Anchor + AnchorStr string +} + +func (i *Image) isJPEG() bool { + name := strings.ToLower(i.rel) + return strings.HasSuffix(name, ".jpg") || strings.HasSuffix(name, ".jpeg") +} + +func (i *Image) doWithImageConfig(action, spec string, f func(src image.Image, conf imageConfig) (image.Image, error)) (*Image, error) { + conf, err := parseImageConfig(spec) + if err != nil { + return nil, err + } + conf.Action = action + + if conf.Quality <= 0 && i.isJPEG() { + // We need a quality setting for all JPEGs + conf.Quality = i.imaging.Quality + } + + if conf.FilterStr == "" { + conf.FilterStr = i.imaging.ResampleFilter + conf.Filter = imageFilters[conf.FilterStr] + } + + key := i.relPermalinkForRel(i.filenameFromConfig(conf)) + + return i.spec.imageCache.getOrCreate(i.spec, key, func(resourceCacheFilename string) (*Image, error) { + ci := i.clone() + + ci.setBasePath(conf) + + src, err := i.decodeSource() + if err != nil { + return nil, err + } + + if conf.Rotate != 0 { + // Rotate it befor any scaling to get the dimensions correct. + src = imaging.Rotate(src, float64(conf.Rotate), color.Transparent) + } + + converted, err := f(src, conf) + if err != nil { + return ci, err + } + + b := converted.Bounds() + ci.config = image.Config{Width: b.Max.X, Height: b.Max.Y} + ci.configLoaded = true + + return ci, i.encodeToDestinations(converted, conf, resourceCacheFilename, ci.RelPermalink()) + }) + +} + +func (i imageConfig) key() string { + k := strconv.Itoa(i.Width) + "x" + strconv.Itoa(i.Height) + if i.Action != "" { + k += "_" + i.Action + } + if i.Quality > 0 { + k += "_q" + strconv.Itoa(i.Quality) + } + if i.Rotate != 0 { + k += "_r" + strconv.Itoa(i.Rotate) + } + k += "_" + i.FilterStr + "_" + i.AnchorStr + return k +} + +var defaultImageConfig = imageConfig{ + Action: "", + Anchor: imaging.Center, + AnchorStr: strings.ToLower("Center"), +} + +func newImageConfig(width, height, quality, rotate int, filter, anchor string) imageConfig { + c := defaultImageConfig + + c.Width = width + c.Height = height + c.Quality = quality + c.Rotate = rotate + + if filter != "" { + filter = strings.ToLower(filter) + if v, ok := imageFilters[filter]; ok { + c.Filter = v + c.FilterStr = filter + } + } + + if anchor != "" { + anchor = strings.ToLower(anchor) + if v, ok := anchorPositions[anchor]; ok { + c.Anchor = v + c.AnchorStr = anchor + } + } + + return c +} + +func parseImageConfig(config string) (imageConfig, error) { + var ( + c = defaultImageConfig + err error + ) + + if config == "" { + return c, errors.New("image config cannot be empty") + } + + parts := strings.Fields(config) + for _, part := range parts { + part = strings.ToLower(part) + + if pos, ok := anchorPositions[part]; ok { + c.Anchor = pos + c.AnchorStr = part + } else if filter, ok := imageFilters[part]; ok { + c.Filter = filter + c.FilterStr = part + } else if part[0] == 'q' { + c.Quality, err = strconv.Atoi(part[1:]) + if err != nil { + return c, err + } + if c.Quality < 1 && c.Quality > 100 { + return c, errors.New("quality ranges from 1 to 100 inclusive") + } + } else if part[0] == 'r' { + c.Rotate, err = strconv.Atoi(part[1:]) + if err != nil { + return c, err + } + } else if strings.Contains(part, "x") { + widthHeight := strings.Split(part, "x") + if len(widthHeight) <= 2 { + first := widthHeight[0] + if first != "" { + c.Width, err = strconv.Atoi(first) + if err != nil { + return c, err + } + } + + if len(widthHeight) == 2 { + second := widthHeight[1] + if second != "" { + c.Height, err = strconv.Atoi(second) + if err != nil { + return c, err + } + } + } + } else { + return c, errors.New("invalid image dimensions") + } + + } + } + + if c.Width == 0 && c.Height == 0 { + return c, errors.New("must provide Width or Height") + } + + return c, nil +} + +func (i *Image) initConfig() error { + var err error + i.configInit.Do(func() { + if i.configLoaded { + return + } + + var ( + f afero.File + config image.Config + ) + + f, err = i.spec.Fs.Source.Open(i.AbsSourceFilename()) + if err != nil { + return + } + defer f.Close() + + config, _, err = image.DecodeConfig(f) + if err != nil { + return + } + i.config = config + }) + + return err +} + +func (i *Image) decodeSource() (image.Image, error) { + file, err := i.spec.Fs.Source.Open(i.AbsSourceFilename()) + if err != nil { + return nil, err + } + defer file.Close() + return imaging.Decode(file) +} + +func (i *Image) copyToDestination(src string) error { + var res error + + i.copiedToDestinationInit.Do(func() { + target := filepath.Join(i.absPublishDir, i.RelPermalink()) + + // Fast path: + // This is a processed version of the original. + // If it exists on destination with the same filename and file size, it is + // the same file, so no need to transfer it again. + if fi, err := i.spec.Fs.Destination.Stat(target); err == nil && fi.Size() == i.osFileInfo.Size() { + return + } + + in, err := i.spec.Fs.Source.Open(src) + if err != nil { + res = err + return + } + defer in.Close() + + out, err := i.spec.Fs.Destination.Create(target) + if err != nil { + res = err + return + } + defer out.Close() + + _, err = io.Copy(out, in) + if err != nil { + res = err + return + } + }) + + return res +} + +func (i *Image) encodeToDestinations(img image.Image, conf imageConfig, resourceCacheFilename, filename string) error { + ext := strings.ToLower(helpers.Ext(filename)) + + imgFormat, ok := imageFormats[ext] + if !ok { + return imaging.ErrUnsupportedFormat + } + + target := filepath.Join(i.absPublishDir, filename) + + file1, err := i.spec.Fs.Destination.Create(target) + if err != nil { + return err + } + defer file1.Close() + + var w io.Writer + + if resourceCacheFilename != "" { + // Also save it to the image resource cache for later reuse. + if err = i.spec.Fs.Source.MkdirAll(filepath.Dir(resourceCacheFilename), os.FileMode(0755)); err != nil { + return err + } + + file2, err := i.spec.Fs.Source.Create(resourceCacheFilename) + if err != nil { + return err + } + + w = io.MultiWriter(file1, file2) + defer file2.Close() + } else { + w = file1 + } + + switch imgFormat { + case imaging.JPEG: + + var rgba *image.RGBA + quality := conf.Quality + + if nrgba, ok := img.(*image.NRGBA); ok { + if nrgba.Opaque() { + rgba = &image.RGBA{ + Pix: nrgba.Pix, + Stride: nrgba.Stride, + Rect: nrgba.Rect, + } + } + } + if rgba != nil { + return jpeg.Encode(w, rgba, &jpeg.Options{Quality: quality}) + } else { + return jpeg.Encode(w, img, &jpeg.Options{Quality: quality}) + } + default: + return imaging.Encode(w, img, imgFormat) + } + +} + +func (i *Image) clone() *Image { + g := *i.genericResource + + return &Image{ + imaging: i.imaging, + genericResource: &g} +} + +func (i *Image) setBasePath(conf imageConfig) { + i.rel = i.filenameFromConfig(conf) +} + +// We need to set this to something static during tests. +var fiModTimeFunc = func(fi os.FileInfo) int64 { + return fi.ModTime().Unix() +} + +func (i *Image) filenameFromConfig(conf imageConfig) string { + p1, p2 := helpers.FileAndExt(i.rel) + sizeModeStr := fmt.Sprintf("_S%d_T%d", i.osFileInfo.Size(), fiModTimeFunc(i.osFileInfo)) + // On scaling an already scaled image, we get the file info from the original. + // Repeating the same info in the filename makes it stuttery for no good reason. + if strings.Contains(p1, sizeModeStr) { + sizeModeStr = "" + } + + const md5Threshold = 100 + + key := conf.key() + + // It is useful to have the key in clear text, but when nesting transforms, it + // can easily be too long to read, and maybe even too long + // for the different OSes to handle. + if len(p1)+len(sizeModeStr)+len(p2) > md5Threshold { + key = helpers.MD5String(p1 + key + p2) + p1 = p1[:strings.Index(p1, "_S")] + } + + return fmt.Sprintf("%s%s_%s%s", p1, sizeModeStr, key, p2) +} + +func decodeImaging(m map[string]interface{}) (Imaging, error) { + var i Imaging + if err := mapstructure.WeakDecode(m, &i); err != nil { + return i, err + } + + if i.Quality <= 0 || i.Quality > 100 { + i.Quality = defaultJPEGQuality + } + + if i.ResampleFilter == "" { + i.ResampleFilter = defaultResampleFilter + } else { + filter := strings.ToLower(i.ResampleFilter) + _, found := imageFilters[filter] + if !found { + return i, fmt.Errorf("%q is not a valid resample filter", filter) + } + i.ResampleFilter = filter + } + + return i, nil +} diff --git a/resource/image_cache.go b/resource/image_cache.go new file mode 100644 index 000000000..14350986e --- /dev/null +++ b/resource/image_cache.go @@ -0,0 +1,112 @@ +// Copyright 2017-present The Hugo Authors. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package resource + +import ( + "fmt" + "os" + "path/filepath" + "strings" + "sync" + "time" + + "github.com/gohugoio/hugo/helpers" +) + +type imageCache struct { + absPublishDir string + absCacheDir string + pathSpec *helpers.PathSpec + mu sync.RWMutex + store map[string]*Image +} + +func (c *imageCache) isInCache(key string) bool { + c.mu.RLock() + _, found := c.store[key] + c.mu.RUnlock() + return found +} + +func (c *imageCache) deleteByPrefix(prefix string) { + c.mu.Lock() + defer c.mu.Unlock() + for k, _ := range c.store { + if strings.HasPrefix(k, prefix) { + delete(c.store, k) + } + } +} + +func (c *imageCache) getOrCreate( + spec *Spec, key string, create func(resourceCacheFilename string) (*Image, error)) (*Image, error) { + // First check the in-memory store, then the disk. + c.mu.RLock() + img, found := c.store[key] + c.mu.RUnlock() + + if found { + return img, nil + } + + // Now look in the file cache. + cacheFilename := filepath.Join(c.absCacheDir, key) + + // The definition of this counter is not that we have processed that amount + // (e.g. resized etc.), it can be fetched from file cache, + // but the count of processed image variations for this site. + c.pathSpec.ProcessingStats.Incr(&c.pathSpec.ProcessingStats.ProcessedImages) + + r, err := spec.NewResourceFromFilename(nil, c.absPublishDir, cacheFilename, key) + notFound := err != nil && os.IsNotExist(err) + if err != nil && !os.IsNotExist(err) { + return nil, err + } + + if notFound { + img, err = create(cacheFilename) + if err != nil { + return nil, err + } + } else { + img = r.(*Image) + } + + c.mu.Lock() + if img2, found := c.store[key]; found { + c.mu.Unlock() + return img2, nil + } + + c.store[key] = img + + c.mu.Unlock() + + if notFound { + // File already written to destination + return img, nil + } + + return img, img.copyToDestination(cacheFilename) + +} + +func newImageCache(ps *helpers.PathSpec, absCacheDir, absPublishDir string) *imageCache { + return &imageCache{pathSpec: ps, store: make(map[string]*Image), absCacheDir: absCacheDir, absPublishDir: absPublishDir} +} + +func timeTrack(start time.Time, name string) { + elapsed := time.Since(start) + fmt.Printf("%s took %s\n", name, elapsed) +} diff --git a/resource/image_test.go b/resource/image_test.go new file mode 100644 index 000000000..3543abb37 --- /dev/null +++ b/resource/image_test.go @@ -0,0 +1,134 @@ +// Copyright 2017-present The Hugo Authors. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package resource + +import ( + "fmt" + "os" + "testing" + + "github.com/stretchr/testify/require" +) + +func TestParseImageConfig(t *testing.T) { + for i, this := range []struct { + in string + expect interface{} + }{ + {"300x400", newImageConfig(300, 400, 0, 0, "", "")}, + {"100x200 bottomRight", newImageConfig(100, 200, 0, 0, "", "BottomRight")}, + {"10x20 topleft Lanczos", newImageConfig(10, 20, 0, 0, "Lanczos", "topleft")}, + {"linear left 10x r180", newImageConfig(10, 0, 0, 180, "linear", "left")}, + {"x20 riGht Cosine q95", newImageConfig(0, 20, 95, 0, "cosine", "right")}, + + {"", false}, + {"foo", false}, + } { + result, err := parseImageConfig(this.in) + if b, ok := this.expect.(bool); ok && !b { + if err == nil { + t.Errorf("[%d] parseImageConfig didn't return an expected error", i) + } + } else { + if err != nil { + t.Fatalf("[%d] err: %s", i, err) + } + if fmt.Sprint(result) != fmt.Sprint(this.expect) { + t.Fatalf("[%d] got\n%v\n but expected\n%v", i, result, this.expect) + } + } + } +} + +func TestImageTransform(t *testing.T) { + fiModTimeFunc = func(fi os.FileInfo) int64 { + return int64(10111213) + } + + assert := require.New(t) + + image := fetchSunset(assert) + + assert.Equal("/a/sunset.jpg", image.RelPermalink()) + assert.Equal("image", image.ResourceType()) + + resized, err := image.Resize("300x200") + assert.NoError(err) + assert.True(image != resized) + assert.True(image.genericResource != resized.genericResource) + + resized0x, err := image.Resize("x200") + assert.NoError(err) + assert.Equal(320, resized0x.Width()) + assert.Equal(200, resized0x.Height()) + assertFileCache(assert, image.spec.Fs, resized0x.RelPermalink(), 320, 200) + + resizedx0, err := image.Resize("200x") + assert.NoError(err) + assert.Equal(200, resizedx0.Width()) + assert.Equal(125, resizedx0.Height()) + assertFileCache(assert, image.spec.Fs, resizedx0.RelPermalink(), 200, 125) + + resizedAndRotated, err := image.Resize("x200 r90") + assert.NoError(err) + assert.Equal(125, resizedAndRotated.Width()) + assert.Equal(200, resizedAndRotated.Height()) + assertFileCache(assert, image.spec.Fs, resizedAndRotated.RelPermalink(), 125, 200) + + assert.Equal("/a/sunset_S90587_T10111213_300x200_resize_q75_box_center.jpg", resized.RelPermalink()) + assert.Equal(300, resized.Width()) + assert.Equal(200, resized.Height()) + + fitted, err := resized.Fit("50x50") + assert.NoError(err) + assert.Equal("/a/sunset_S90587_T10111213_300x200_resize_q75_box_center_50x50_fit_q75_box_center.jpg", fitted.RelPermalink()) + assert.Equal(50, fitted.Width()) + assert.Equal(31, fitted.Height()) + + // Check the MD5 key threshold + fittedAgain, _ := fitted.Fit("10x20") + fittedAgain, err = fittedAgain.Fit("10x20") + assert.NoError(err) + assert.Equal("/a/sunset_f1fb715a17c42d5d4602a1870424d590.jpg", fittedAgain.RelPermalink()) + assert.Equal(10, fittedAgain.Width()) + assert.Equal(6, fittedAgain.Height()) + + filled, err := image.Fill("200x100 bottomLeft") + assert.NoError(err) + assert.Equal("/a/sunset_S90587_T10111213_200x100_fill_q75_box_bottomleft.jpg", filled.RelPermalink()) + assert.Equal(200, filled.Width()) + assert.Equal(100, filled.Height()) + assertFileCache(assert, image.spec.Fs, filled.RelPermalink(), 200, 100) + + // Check cache + filledAgain, err := image.Fill("200x100 bottomLeft") + assert.NoError(err) + assert.True(filled == filledAgain) + assertFileCache(assert, image.spec.Fs, filledAgain.RelPermalink(), 200, 100) + +} + +func TestDecodeImaging(t *testing.T) { + assert := require.New(t) + m := map[string]interface{}{ + "quality": 42, + "resampleFilter": "NearestNeighbor", + } + + imaging, err := decodeImaging(m) + + assert.NoError(err) + assert.Equal(42, imaging.Quality) + assert.Equal("nearestneighbor", imaging.ResampleFilter) +} diff --git a/resource/resource.go b/resource/resource.go new file mode 100644 index 000000000..2c934d031 --- /dev/null +++ b/resource/resource.go @@ -0,0 +1,275 @@ +// Copyright 2017-present The Hugo Authors. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package resource + +import ( + "fmt" + "mime" + "os" + "path" + "path/filepath" + "strings" + + "github.com/gohugoio/hugo/media" + "github.com/gohugoio/hugo/source" + + "github.com/gohugoio/hugo/helpers" +) + +var ( + _ Resource = (*genericResource)(nil) + _ Source = (*genericResource)(nil) + _ Cloner = (*genericResource)(nil) +) + +const DefaultResourceType = "unknown" + +type Source interface { + AbsSourceFilename() string + Publish() error +} + +type Cloner interface { + WithNewBase(base string) Resource +} + +// Resource represents a linkable resource, i.e. a content page, image etc. +type Resource interface { + Permalink() string + RelPermalink() string + ResourceType() string +} + +// Resources represents a slice of resources, which can be a mix of different types. +// I.e. both pages and images etc. +type Resources []Resource + +func (r Resources) ByType(tp string) []Resource { + var filtered []Resource + + for _, resource := range r { + if resource.ResourceType() == tp { + filtered = append(filtered, resource) + } + } + return filtered +} + +// GetBySuffix gets the first resource matching the given filename prefix, e.g +// "logo" will match logo.png. It returns nil of none found. +// In potential ambiguous situations, combine it with ByType. +func (r Resources) GetByPrefix(prefix string) Resource { + for _, resource := range r { + _, name := filepath.Split(resource.RelPermalink()) + if strings.HasPrefix(name, prefix) { + return resource + } + } + return nil +} + +type Spec struct { + *helpers.PathSpec + mimeTypes media.Types + + // Holds default filter settings etc. + imaging *Imaging + + imageCache *imageCache + + AbsGenImagePath string +} + +func NewSpec(s *helpers.PathSpec, mimeTypes media.Types) (*Spec, error) { + + imaging, err := decodeImaging(s.Cfg.GetStringMap("imaging")) + if err != nil { + return nil, err + } + s.GetLayoutDirPath() + + genImagePath := s.AbsPathify(filepath.Join(s.Cfg.GetString("resourceDir"), "_gen", "images")) + + return &Spec{AbsGenImagePath: genImagePath, PathSpec: s, imaging: &imaging, mimeTypes: mimeTypes, imageCache: newImageCache( + s, + // We're going to write a cache pruning routine later, so make it extremely + // unlikely that the user shoots him or herself in the foot + // and this is set to a value that represents data he/she + // cares about. This should be set in stone once released. + genImagePath, + s.AbsPathify(s.Cfg.GetString("publishDir")))}, nil +} + +func (r *Spec) NewResourceFromFile( + linker func(base string) string, + absPublishDir string, + file source.File, relTargetFilename string) (Resource, error) { + + return r.newResource(linker, absPublishDir, file.Filename(), file.FileInfo(), relTargetFilename) +} + +func (r *Spec) NewResourceFromFilename( + linker func(base string) string, + absPublishDir, + absSourceFilename, relTargetFilename string) (Resource, error) { + + fi, err := r.Fs.Source.Stat(absSourceFilename) + if err != nil { + return nil, err + } + return r.newResource(linker, absPublishDir, absSourceFilename, fi, relTargetFilename) +} + +func (r *Spec) newResource( + linker func(base string) string, + absPublishDir, + absSourceFilename string, fi os.FileInfo, relTargetFilename string) (Resource, error) { + + var mimeType string + ext := filepath.Ext(relTargetFilename) + m, found := r.mimeTypes.GetBySuffix(strings.TrimPrefix(ext, ".")) + if found { + mimeType = m.SubType + } else { + mimeType = mime.TypeByExtension(ext) + if mimeType == "" { + mimeType = DefaultResourceType + } else { + mimeType = mimeType[:strings.Index(mimeType, "/")] + } + } + + gr := r.newGenericResource(linker, fi, absPublishDir, absSourceFilename, filepath.ToSlash(relTargetFilename), mimeType) + + if mimeType == "image" { + return &Image{ + imaging: r.imaging, + genericResource: gr}, nil + } + return gr, nil +} + +func (r *Spec) IsInCache(key string) bool { + // This is used for cache pruning. We currently only have images, but we could + // imagine expanding on this. + return r.imageCache.isInCache(key) +} + +func (r *Spec) DeleteCacheByPrefix(prefix string) { + r.imageCache.deleteByPrefix(prefix) +} + +func (r *Spec) CacheStats() string { + r.imageCache.mu.RLock() + defer r.imageCache.mu.RUnlock() + + s := fmt.Sprintf("Cache entries: %d", len(r.imageCache.store)) + + count := 0 + for k, _ := range r.imageCache.store { + if count > 5 { + break + } + s += "\n" + k + count++ + } + + return s +} + +// genericResource represents a generic linkable resource. +type genericResource struct { + // The relative path to this resource. + rel string + + // Base is set when the output format's path has a offset, e.g. for AMP. + base string + + // Absolute filename to the source, including any content folder path. + absSourceFilename string + absPublishDir string + resourceType string + osFileInfo os.FileInfo + + spec *Spec + link func(rel string) string +} + +func (l *genericResource) Permalink() string { + return l.spec.PermalinkForBaseURL(l.RelPermalink(), l.spec.BaseURL.String()) +} + +func (l *genericResource) RelPermalink() string { + return l.relPermalinkForRel(l.rel) +} + +// Implement the Cloner interface. +func (l genericResource) WithNewBase(base string) Resource { + l.base = base + return &l +} + +func (l *genericResource) relPermalinkForRel(rel string) string { + if l.link != nil { + rel = l.link(rel) + } + + if l.base != "" { + rel = path.Join(l.base, rel) + if rel[0] != '/' { + rel = "/" + rel + } + } + + return l.spec.PathSpec.URLizeFilename(rel) +} + +func (l *genericResource) ResourceType() string { + return l.resourceType +} + +func (l *genericResource) AbsSourceFilename() string { + return l.absSourceFilename +} + +func (l *genericResource) Publish() error { + f, err := l.spec.Fs.Source.Open(l.AbsSourceFilename()) + if err != nil { + return err + } + defer f.Close() + + target := filepath.Join(l.absPublishDir, l.RelPermalink()) + + return helpers.WriteToDisk(target, f, l.spec.Fs.Destination) +} + +func (r *Spec) newGenericResource( + linker func(base string) string, + osFileInfo os.FileInfo, + absPublishDir, + absSourceFilename, + baseFilename, + resourceType string) *genericResource { + + return &genericResource{ + link: linker, + osFileInfo: osFileInfo, + absPublishDir: absPublishDir, + absSourceFilename: absSourceFilename, + rel: baseFilename, + resourceType: resourceType, + spec: r, + } +} diff --git a/resource/resource_test.go b/resource/resource_test.go new file mode 100644 index 000000000..34d63cd60 --- /dev/null +++ b/resource/resource_test.go @@ -0,0 +1,108 @@ +// Copyright 2017-present The Hugo Authors. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package resource + +import ( + "path" + "path/filepath" + "testing" + + "github.com/stretchr/testify/require" +) + +func TestGenericResource(t *testing.T) { + assert := require.New(t) + spec := newTestResourceSpec(assert) + + r := spec.newGenericResource(nil, nil, "/public", "/a/foo.css", "foo.css", "css") + + assert.Equal("https://example.com/foo.css", r.Permalink()) + assert.Equal("foo.css", r.RelPermalink()) + assert.Equal("css", r.ResourceType()) + +} + +func TestGenericResourceWithLinkFacory(t *testing.T) { + assert := require.New(t) + spec := newTestResourceSpec(assert) + + factory := func(s string) string { + return path.Join("/foo", s) + } + r := spec.newGenericResource(factory, nil, "/public", "/a/foo.css", "foo.css", "css") + + assert.Equal("https://example.com/foo/foo.css", r.Permalink()) + assert.Equal("/foo/foo.css", r.RelPermalink()) + assert.Equal("css", r.ResourceType()) +} + +func TestNewResourceFromFilename(t *testing.T) { + assert := require.New(t) + spec := newTestResourceSpec(assert) + + writeSource(t, spec.Fs, "/project/a/b/logo.png", "image") + writeSource(t, spec.Fs, "/root/a/b/data.json", "json") + + r, err := spec.NewResourceFromFilename(nil, "/public", + filepath.FromSlash("/project/a/b/logo.png"), filepath.FromSlash("a/b/logo.png")) + + assert.NoError(err) + assert.NotNil(r) + assert.Equal("image", r.ResourceType()) + assert.Equal("a/b/logo.png", r.RelPermalink()) + assert.Equal("https://example.com/a/b/logo.png", r.Permalink()) + + r, err = spec.NewResourceFromFilename(nil, "/public", "/root/a/b/data.json", "a/b/data.json") + + assert.NoError(err) + assert.NotNil(r) + assert.Equal("json", r.ResourceType()) + + cloned := r.(Cloner).WithNewBase("aceof") + assert.Equal(r.ResourceType(), cloned.ResourceType()) + assert.Equal("/aceof/a/b/data.json", cloned.RelPermalink()) +} + +func TestResourcesByType(t *testing.T) { + assert := require.New(t) + spec := newTestResourceSpec(assert) + resources := Resources{ + spec.newGenericResource(nil, nil, "/public", "/a/foo1.css", "foo1.css", "css"), + spec.newGenericResource(nil, nil, "/public", "/a/logo.png", "logo.css", "image"), + spec.newGenericResource(nil, nil, "/public", "/a/foo2.css", "foo2.css", "css"), + spec.newGenericResource(nil, nil, "/public", "/a/foo3.css", "foo3.css", "css")} + + assert.Len(resources.ByType("css"), 3) + assert.Len(resources.ByType("image"), 1) + +} + +func TestResourcesGetByPrefix(t *testing.T) { + assert := require.New(t) + spec := newTestResourceSpec(assert) + resources := Resources{ + spec.newGenericResource(nil, nil, "/public", "/a/foo1.css", "foo1.css", "css"), + spec.newGenericResource(nil, nil, "/public", "/a/logo1.png", "logo1.png", "image"), + spec.newGenericResource(nil, nil, "/public", "/b/logo2.png", "logo2.png", "image"), + spec.newGenericResource(nil, nil, "/public", "/b/foo2.css", "foo2.css", "css"), + spec.newGenericResource(nil, nil, "/public", "/b/foo3.css", "foo3.css", "css")} + + assert.Nil(resources.GetByPrefix("asdf")) + assert.Equal("logo1.png", resources.GetByPrefix("logo").RelPermalink()) + assert.Equal("foo2.css", resources.GetByPrefix("foo2").RelPermalink()) + assert.Equal("foo1.css", resources.GetByPrefix("foo1").RelPermalink()) + assert.Equal("foo1.css", resources.GetByPrefix("foo1").RelPermalink()) + assert.Nil(resources.GetByPrefix("asdfasdf")) + +} diff --git a/resource/testdata/sunset.jpg b/resource/testdata/sunset.jpg new file mode 100644 index 0000000000000000000000000000000000000000..7d7307bed36efb65bf0443b62ebec6be6d7d3420 GIT binary patch literal 90587 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 V6Yqu8|FQfEE;s&{==tyK{{g?L5tsk~ literal 0 HcmV?d00001 diff --git a/resource/testhelpers_test.go b/resource/testhelpers_test.go new file mode 100644 index 000000000..7ab210688 --- /dev/null +++ b/resource/testhelpers_test.go @@ -0,0 +1,78 @@ +package resource + +import ( + "path/filepath" + "testing" + + "image" + "io" + "os" + "path" + + "github.com/gohugoio/hugo/helpers" + "github.com/gohugoio/hugo/hugofs" + "github.com/gohugoio/hugo/media" + "github.com/spf13/afero" + "github.com/spf13/viper" + "github.com/stretchr/testify/require" +) + +func newTestResourceSpec(assert *require.Assertions) *Spec { + cfg := viper.New() + cfg.Set("baseURL", "https://example.com/") + cfg.Set("resourceDir", "/res") + fs := hugofs.NewMem(cfg) + + s, err := helpers.NewPathSpec(fs, cfg) + assert.NoError(err) + + spec, err := NewSpec(s, media.DefaultTypes) + assert.NoError(err) + return spec +} + +func fetchSunset(assert *require.Assertions) *Image { + src, err := os.Open("testdata/sunset.jpg") + assert.NoError(err) + + spec := newTestResourceSpec(assert) + + out, err := spec.Fs.Source.Create("/b/sunset.jpg") + assert.NoError(err) + _, err = io.Copy(out, src) + out.Close() + src.Close() + assert.NoError(err) + + factory := func(s string) string { + return path.Join("/a", s) + } + + r, err := spec.NewResourceFromFilename(factory, "/public", "/b/sunset.jpg", "sunset.jpg") + assert.NoError(err) + assert.IsType(&Image{}, r) + return r.(*Image) + +} + +func assertFileCache(assert *require.Assertions, fs *hugofs.Fs, filename string, width, height int) { + f, err := fs.Source.Open(filepath.Join("/res/_gen/images", filename)) + assert.NoError(err) + defer f.Close() + + config, _, err := image.DecodeConfig(f) + assert.NoError(err) + + assert.Equal(width, config.Width) + assert.Equal(height, config.Height) +} + +func writeSource(t testing.TB, fs *hugofs.Fs, filename, content string) { + writeToFs(t, fs.Source, filename, content) +} + +func writeToFs(t testing.TB, fs afero.Fs, filename, content string) { + if err := afero.WriteFile(fs, filepath.FromSlash(filename), []byte(content), 0755); err != nil { + t.Fatalf("Failed to write file: %s", err) + } +} diff --git a/source/content_directory_test.go b/source/content_directory_test.go index 4ff12af8d..9874acec2 100644 --- a/source/content_directory_test.go +++ b/source/content_directory_test.go @@ -14,6 +14,7 @@ package source import ( + "path/filepath" "testing" "github.com/gohugoio/hugo/hugofs" @@ -41,21 +42,21 @@ func TestIgnoreDotFilesAndDirectories(t *testing.T) { {"foobar/bar~foo.md", false, nil}, {"foobar/foo.md", true, []string{"\\.md$", "\\.boo$"}}, {"foobar/foo.html", false, []string{"\\.md$", "\\.boo$"}}, - {"foobar/foo.md", true, []string{"^foo"}}, - {"foobar/foo.md", false, []string{"*", "\\.md$", "\\.boo$"}}, + {"foobar/foo.md", true, []string{"foo.md$"}}, + {"foobar/foo.md", true, []string{"*", "\\.md$", "\\.boo$"}}, {"foobar/.#content.md", true, []string{"/\\.#"}}, {".#foobar.md", true, []string{"^\\.#"}}, } - for _, test := range tests { + for i, test := range tests { v := viper.New() v.Set("ignoreFiles", test.ignoreFilesRegexpes) s := NewSourceSpec(v, hugofs.NewMem(v)) - if ignored := s.isNonProcessablePath(test.path); test.ignore != ignored { - t.Errorf("File not ignored. Expected: %t, got: %t", test.ignore, ignored) + if ignored := s.IgnoreFile(filepath.FromSlash(test.path)); test.ignore != ignored { + t.Errorf("[%d] File not ignored", i) } } } diff --git a/source/dirs.go b/source/dirs.go index 1e6850da7..49a849453 100644 --- a/source/dirs.go +++ b/source/dirs.go @@ -38,7 +38,7 @@ type Dirs struct { staticDirs []string AbsStaticDirs []string - publishDir string + Language *helpers.Language } // NewDirs creates a new dirs with the given configuration and filesystem. @@ -48,7 +48,12 @@ func NewDirs(fs *hugofs.Fs, cfg config.Provider, logger *jww.Notepad) (*Dirs, er return nil, err } - d := &Dirs{pathSpec: ps, logger: logger} + var l *helpers.Language + if language, ok := cfg.(*helpers.Language); ok { + l = language + } + + d := &Dirs{Language: l, pathSpec: ps, logger: logger} return d, d.init(cfg) @@ -96,8 +101,6 @@ func (d *Dirs) init(cfg config.Provider) error { d.AbsStaticDirs[i] = d.pathSpec.AbsPathify(di) + helpers.FilePathSeparator } - d.publishDir = d.pathSpec.AbsPathify(cfg.GetString("publishDir")) + helpers.FilePathSeparator - return nil } diff --git a/source/file.go b/source/file.go deleted file mode 100644 index a630431c6..000000000 --- a/source/file.go +++ /dev/null @@ -1,172 +0,0 @@ -// Copyright 2015 The Hugo Authors. All rights reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package source - -import ( - "io" - "path/filepath" - "strings" - - "github.com/gohugoio/hugo/hugofs" - - "github.com/gohugoio/hugo/config" - "github.com/gohugoio/hugo/helpers" -) - -// SourceSpec abstracts language-specific file creation. -type SourceSpec struct { - Cfg config.Provider - Fs *hugofs.Fs - - languages map[string]interface{} - defaultContentLanguage string -} - -// NewSourceSpec initializes SourceSpec using languages from a given configuration. -func NewSourceSpec(cfg config.Provider, fs *hugofs.Fs) SourceSpec { - defaultLang := cfg.GetString("defaultContentLanguage") - languages := cfg.GetStringMap("languages") - return SourceSpec{Cfg: cfg, Fs: fs, languages: languages, defaultContentLanguage: defaultLang} -} - -// File represents a source content file. -// All paths are relative from the source directory base -type File struct { - relpath string // Original relative path, e.g. section/foo.txt - logicalName string // foo.txt - baseName string // `post` for `post.md`, also `post.en` for `post.en.md` - Contents io.Reader - section string // The first directory - dir string // The relative directory Path (minus file name) - ext string // Just the ext (eg txt) - uniqueID string // MD5 of the file's path - - translationBaseName string // `post` for `post.es.md` (if `Multilingual` is enabled.) - lang string // The language code if `Multilingual` is enabled -} - -// UniqueID is the MD5 hash of the file's path and is for most practical applications, -// Hugo content files being one of them, considered to be unique. -func (f *File) UniqueID() string { - return f.uniqueID -} - -// String returns the file's content as a string. -func (f *File) String() string { - return helpers.ReaderToString(f.Contents) -} - -// Bytes returns the file's content as a byte slice. -func (f *File) Bytes() []byte { - return helpers.ReaderToBytes(f.Contents) -} - -// BaseFileName is a filename without extension. -func (f *File) BaseFileName() string { - return f.baseName -} - -// TranslationBaseName is a filename with no extension, -// not even the optional language extension part. -func (f *File) TranslationBaseName() string { - return f.translationBaseName -} - -// Lang for this page, if `Multilingual` is enabled on your site. -func (f *File) Lang() string { - return f.lang -} - -// Section is first directory below the content root. -func (f *File) Section() string { - return f.section -} - -// LogicalName is filename and extension of the file. -func (f *File) LogicalName() string { - return f.logicalName -} - -// SetDir sets the relative directory where this file lives. -// TODO(bep) Get rid of this. -func (f *File) SetDir(dir string) { - f.dir = dir -} - -// Dir gets the name of the directory that contains this file. -// The directory is relative to the content root. -func (f *File) Dir() string { - return f.dir -} - -// Extension gets the file extension, i.e "myblogpost.md" will return "md". -func (f *File) Extension() string { - return f.ext -} - -// Ext is an alias for Extension. -func (f *File) Ext() string { - return f.Extension() -} - -// Path gets the relative path including file name and extension. -// The directory is relative to the content root. -func (f *File) Path() string { - return f.relpath -} - -// NewFileWithContents creates a new File pointer with the given relative path and -// content. The language defaults to "en". -func (sp SourceSpec) NewFileWithContents(relpath string, content io.Reader) *File { - file := sp.NewFile(relpath) - file.Contents = content - file.lang = "en" - return file -} - -// NewFile creates a new File pointer with the given relative path. -func (sp SourceSpec) NewFile(relpath string) *File { - f := &File{ - relpath: relpath, - } - - f.dir, f.logicalName = filepath.Split(f.relpath) - f.ext = strings.TrimPrefix(filepath.Ext(f.LogicalName()), ".") - f.baseName = helpers.Filename(f.LogicalName()) - - lang := strings.TrimPrefix(filepath.Ext(f.baseName), ".") - if _, ok := sp.languages[lang]; lang == "" || !ok { - f.lang = sp.defaultContentLanguage - f.translationBaseName = f.baseName - } else { - f.lang = lang - f.translationBaseName = helpers.Filename(f.baseName) - } - - f.section = helpers.GuessSection(f.Dir()) - f.uniqueID = helpers.Md5String(filepath.ToSlash(f.relpath)) - - return f -} - -// NewFileFromAbs creates a new File pointer with the given full file path path and -// content. -func (sp SourceSpec) NewFileFromAbs(base, fullpath string, content io.Reader) (f *File, err error) { - var name string - if name, err = helpers.GetRelativePath(fullpath, base); err != nil { - return nil, err - } - - return sp.NewFileWithContents(name, content), nil -} diff --git a/source/fileInfo.go b/source/fileInfo.go new file mode 100644 index 000000000..e4b4a80fb --- /dev/null +++ b/source/fileInfo.go @@ -0,0 +1,213 @@ +// Copyright 2017-present The Hugo Authors. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package source + +import ( + "io" + "os" + "path/filepath" + "strings" + "sync" + + "github.com/gohugoio/hugo/helpers" +) + +// fileInfo implements the File interface. +var ( + _ File = (*FileInfo)(nil) + _ ReadableFile = (*FileInfo)(nil) +) + +type File interface { + + // Filename gets the full path and filename to the file. + Filename() string + + // Path gets the relative path including file name and extension. + // The directory is relative to the content root. + Path() string + + // Dir gets the name of the directory that contains this file. + // The directory is relative to the content root. + Dir() string + + // Extension gets the file extension, i.e "myblogpost.md" will return "md". + Extension() string + // Ext is an alias for Extension. + Ext() string // Hmm... Deprecate Extension + + // Lang for this page, if `Multilingual` is enabled on your site. + Lang() string + + // LogicalName is filename and extension of the file. + LogicalName() string + + // Section is first directory below the content root. + Section() string + + // BaseFileName is a filename without extension. + BaseFileName() string + + // TranslationBaseName is a filename with no extension, + // not even the optional language extension part. + TranslationBaseName() string + + // UniqueID is the MD5 hash of the file's path and is for most practical applications, + // Hugo content files being one of them, considered to be unique. + UniqueID() string + + FileInfo() os.FileInfo + + String() string + + // Deprecated + Bytes() []byte +} + +// A ReadableFile is a File that is readable. +type ReadableFile interface { + File + Open() (io.ReadCloser, error) +} + +type FileInfo struct { + + // Absolute filename to the file on disk. + filename string + fi os.FileInfo + + // Derived from filename + ext string // Extension without any "." + lang string + + name string + + dir string + relDir string + relPath string + baseName string + translationBaseName string + section string + + uniqueID string + + sp *SourceSpec + + lazyInit sync.Once +} + +func (fi *FileInfo) Filename() string { return fi.filename } +func (fi *FileInfo) Path() string { return fi.relPath } +func (fi *FileInfo) Dir() string { return fi.relDir } +func (fi *FileInfo) Extension() string { return fi.Ext() } +func (fi *FileInfo) Ext() string { return fi.ext } +func (fi *FileInfo) Lang() string { return fi.lang } +func (fi *FileInfo) LogicalName() string { return fi.name } +func (fi *FileInfo) BaseFileName() string { return fi.baseName } +func (fi *FileInfo) TranslationBaseName() string { return fi.translationBaseName } + +func (fi *FileInfo) Section() string { + fi.init() + return fi.section +} + +func (fi *FileInfo) UniqueID() string { + fi.init() + return fi.uniqueID +} +func (fi *FileInfo) FileInfo() os.FileInfo { + return fi.fi +} + +func (fi *FileInfo) Bytes() []byte { + // Remove in Hugo 0.34 + helpers.Deprecated("File", "Bytes", "", false) + return []byte("") +} + +func (fi *FileInfo) String() string { return fi.BaseFileName() } + +// We create a lot of these FileInfo objects, but there are parts of it used only +// in some cases that is slightly expensive to construct. +func (fi *FileInfo) init() { + fi.lazyInit.Do(func() { + parts := strings.Split(fi.relDir, helpers.FilePathSeparator) + var section string + if len(parts) == 1 { + section = parts[0] + } else if len(parts) > 1 { + if parts[0] == "" { + section = parts[1] + } else { + section = parts[0] + } + } + + fi.section = section + + fi.uniqueID = helpers.MD5String(filepath.ToSlash(fi.relPath)) + + }) +} + +func (sp *SourceSpec) NewFileInfo(baseDir, filename string, fi os.FileInfo) *FileInfo { + dir, name := filepath.Split(filename) + + dir = strings.TrimSuffix(dir, helpers.FilePathSeparator) + baseDir = strings.TrimSuffix(baseDir, helpers.FilePathSeparator) + + relDir := "" + if dir != baseDir { + relDir = strings.TrimPrefix(dir, baseDir) + } + + relDir = strings.TrimPrefix(relDir, helpers.FilePathSeparator) + + relPath := filepath.Join(relDir, name) + + ext := strings.ToLower(strings.TrimPrefix(filepath.Ext(name), ".")) + baseName := helpers.Filename(name) + + lang := strings.TrimPrefix(filepath.Ext(baseName), ".") + var translationBaseName string + + if _, ok := sp.Languages[lang]; lang == "" || !ok { + lang = sp.DefaultContentLanguage + translationBaseName = baseName + } else { + translationBaseName = helpers.Filename(baseName) + } + + f := &FileInfo{ + sp: sp, + filename: filename, + fi: fi, + lang: lang, + ext: ext, + dir: dir, + relDir: relDir, + relPath: relPath, + name: name, + baseName: baseName, + translationBaseName: translationBaseName, + } + + return f + +} + +// Open implements ReadableFile. +func (fi *FileInfo) Open() (io.ReadCloser, error) { + return fi.sp.Fs.Source.Open(fi.Filename()) +} diff --git a/source/inmemory.go b/source/fileInfo_test.go similarity index 65% rename from source/inmemory.go rename to source/fileInfo_test.go index 387bde3b8..3f99497ad 100644 --- a/source/inmemory.go +++ b/source/fileInfo_test.go @@ -1,4 +1,4 @@ -// Copyright 2015 The Hugo Authors. All rights reserved. +// Copyright 2017-present The Hugo Authors. All rights reserved. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -13,13 +13,10 @@ package source -// ByteSource represents a source's name and content. -// It's currently only used for testing purposes. -type ByteSource struct { - Name string - Content []byte -} +import ( + "testing" +) + +func TestFileInfo(t *testing.T) { -func (b *ByteSource) String() string { - return b.Name + " " + string(b.Content) } diff --git a/source/file_test.go b/source/file_test.go deleted file mode 100644 index 64ad6fb46..000000000 --- a/source/file_test.go +++ /dev/null @@ -1,62 +0,0 @@ -// Copyright 2015 The Hugo Authors. All rights reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package source - -import ( - "path/filepath" - "strings" - "testing" - - "github.com/gohugoio/hugo/hugofs" - "github.com/spf13/viper" - - "github.com/stretchr/testify/assert" -) - -func TestFileUniqueID(t *testing.T) { - ss := newTestSourceSpec() - - f1 := File{uniqueID: "123"} - f2 := ss.NewFile("a") - - assert.Equal(t, "123", f1.UniqueID()) - assert.Equal(t, "0cc175b9c0f1b6a831c399e269772661", f2.UniqueID()) - - f3 := ss.NewFile(filepath.FromSlash("test1/index.md")) - f4 := ss.NewFile(filepath.FromSlash("test2/index.md")) - - assert.NotEqual(t, f3.UniqueID(), f4.UniqueID()) - - f5l := ss.NewFile("test3/index.md") - f5w := ss.NewFile(filepath.FromSlash("test3/index.md")) - - assert.Equal(t, f5l.UniqueID(), f5w.UniqueID()) -} - -func TestFileString(t *testing.T) { - ss := newTestSourceSpec() - assert.Equal(t, "abc", ss.NewFileWithContents("a", strings.NewReader("abc")).String()) - assert.Equal(t, "", ss.NewFile("a").String()) -} - -func TestFileBytes(t *testing.T) { - ss := newTestSourceSpec() - assert.Equal(t, []byte("abc"), ss.NewFileWithContents("a", strings.NewReader("abc")).Bytes()) - assert.Equal(t, []byte(""), ss.NewFile("a").Bytes()) -} - -func newTestSourceSpec() SourceSpec { - v := viper.New() - return SourceSpec{Fs: hugofs.NewMem(v), Cfg: v} -} diff --git a/source/filesystem.go b/source/filesystem.go index e6e354e99..a5f2988e9 100644 --- a/source/filesystem.go +++ b/source/filesystem.go @@ -14,73 +14,52 @@ package source import ( - "io" "os" "path/filepath" - "regexp" "runtime" - "strings" + "sync" "github.com/gohugoio/hugo/helpers" - "github.com/spf13/cast" jww "github.com/spf13/jwalterweatherman" "golang.org/x/text/unicode/norm" ) -type Input interface { - Files() []*File -} - type Filesystem struct { - files []*File - Base string - AvoidPaths []string + files []ReadableFile + filesInit sync.Once + + Base string SourceSpec } -func (sp SourceSpec) NewFilesystem(base string, avoidPaths ...string) *Filesystem { - return &Filesystem{SourceSpec: sp, Base: base, AvoidPaths: avoidPaths} +type Input interface { + Files() []ReadableFile } -func (f *Filesystem) FilesByExts(exts ...string) []*File { - var newFiles []*File - - if len(exts) == 0 { - return f.Files() - } - - for _, x := range f.Files() { - for _, e := range exts { - if x.Ext() == strings.TrimPrefix(e, ".") { - newFiles = append(newFiles, x) - } - } - } - return newFiles +func (sp SourceSpec) NewFilesystem(base string) *Filesystem { + return &Filesystem{SourceSpec: sp, Base: base} } -func (f *Filesystem) Files() []*File { - if len(f.files) < 1 { +func (f *Filesystem) Files() []ReadableFile { + f.filesInit.Do(func() { f.captureFiles() - } + }) return f.files } // add populates a file in the Filesystem.files -func (f *Filesystem) add(name string, reader io.Reader) (err error) { - var file *File +func (f *Filesystem) add(name string, fi os.FileInfo) (err error) { + var file ReadableFile if runtime.GOOS == "darwin" { // When a file system is HFS+, its filepath is in NFD form. name = norm.NFC.String(name) } - file, err = f.SourceSpec.NewFileFromAbs(f.Base, name, reader) + file = f.SourceSpec.NewFileInfo(f.Base, name, fi) + f.files = append(f.files, file) - if err == nil { - f.files = append(f.files, file) - } return err } @@ -90,16 +69,12 @@ func (f *Filesystem) captureFiles() { return nil } - b, err := f.ShouldRead(filePath, fi) + b, err := f.shouldRead(filePath, fi) if err != nil { return err } if b { - rd, err := NewLazyFileReader(f.Fs.Source, filePath) - if err != nil { - return err - } - f.add(filePath, rd) + f.add(filePath, fi) } return err } @@ -118,11 +93,11 @@ func (f *Filesystem) captureFiles() { } -func (f *Filesystem) ShouldRead(filePath string, fi os.FileInfo) (bool, error) { +func (f *Filesystem) shouldRead(filename string, fi os.FileInfo) (bool, error) { if fi.Mode()&os.ModeSymlink == os.ModeSymlink { - link, err := filepath.EvalSymlinks(filePath) + link, err := filepath.EvalSymlinks(filename) if err != nil { - jww.ERROR.Printf("Cannot read symbolic link '%s', error was: %s", filePath, err) + jww.ERROR.Printf("Cannot read symbolic link '%s', error was: %s", filename, err) return false, nil } linkfi, err := f.Fs.Source.Stat(link) @@ -130,52 +105,25 @@ func (f *Filesystem) ShouldRead(filePath string, fi os.FileInfo) (bool, error) { jww.ERROR.Printf("Cannot stat '%s', error was: %s", link, err) return false, nil } + if !linkfi.Mode().IsRegular() { - jww.ERROR.Printf("Symbolic links for directories not supported, skipping '%s'", filePath) + jww.ERROR.Printf("Symbolic links for directories not supported, skipping '%s'", filename) } return false, nil } + ignore := f.SourceSpec.IgnoreFile(filename) + if fi.IsDir() { - if f.avoid(filePath) || f.isNonProcessablePath(filePath) { + if ignore { return false, filepath.SkipDir } return false, nil } - if f.isNonProcessablePath(filePath) { + if ignore { return false, nil } + return true, nil } - -func (f *Filesystem) avoid(filePath string) bool { - for _, avoid := range f.AvoidPaths { - if avoid == filePath { - return true - } - } - return false -} - -func (sp SourceSpec) isNonProcessablePath(filePath string) bool { - base := filepath.Base(filePath) - if strings.HasPrefix(base, ".") || - strings.HasPrefix(base, "#") || - strings.HasSuffix(base, "~") { - return true - } - ignoreFiles := cast.ToStringSlice(sp.Cfg.Get("ignoreFiles")) - if len(ignoreFiles) > 0 { - for _, ignorePattern := range ignoreFiles { - match, err := regexp.MatchString(ignorePattern, filePath) - if err != nil { - helpers.DistinctErrorLog.Printf("Invalid regexp '%s' in ignoreFiles: %s", ignorePattern, err) - return false - } else if match { - return true - } - } - } - return false -} diff --git a/source/filesystem_test.go b/source/filesystem_test.go index 90512ce3f..25ce0268f 100644 --- a/source/filesystem_test.go +++ b/source/filesystem_test.go @@ -14,11 +14,13 @@ package source import ( - "bytes" - "path/filepath" + "os" "runtime" - "strings" "testing" + + "github.com/gohugoio/hugo/hugofs" + + "github.com/spf13/viper" ) func TestEmptySourceFilesystem(t *testing.T) { @@ -37,54 +39,6 @@ type TestPath struct { dir string } -func TestAddFile(t *testing.T) { - ss := newTestSourceSpec() - tests := platformPaths - for _, test := range tests { - base := platformBase - srcDefault := ss.NewFilesystem("") - srcWithBase := ss.NewFilesystem(base) - - for _, src := range []*Filesystem{srcDefault, srcWithBase} { - - p := test.filename - if !filepath.IsAbs(test.filename) { - p = filepath.Join(src.Base, test.filename) - } - - if err := src.add(p, bytes.NewReader([]byte(test.content))); err != nil { - if err.Error() == "source: missing base directory" { - continue - } - t.Fatalf("%s add returned an error: %s", p, err) - } - - if len(src.Files()) != 1 { - t.Fatalf("%s Files() should return 1 file", p) - } - - f := src.Files()[0] - if f.LogicalName() != test.logical { - t.Errorf("Filename (Base: %q) expected: %q, got: %q", src.Base, test.logical, f.LogicalName()) - } - - b := new(bytes.Buffer) - b.ReadFrom(f.Contents) - if b.String() != test.content { - t.Errorf("File (Base: %q) contents should be %q, got: %q", src.Base, test.content, b.String()) - } - - if f.Section() != test.section { - t.Errorf("File section (Base: %q) expected: %q, got: %q", src.Base, test.section, f.Section()) - } - - if f.Dir() != test.dir { - t.Errorf("Dir path (Base: %q) expected: %q, got: %q", src.Base, test.dir, f.Dir()) - } - } - } -} - func TestUnicodeNorm(t *testing.T) { if runtime.GOOS != "darwin" { // Normalization code is only for Mac OS, since it is not necessary for other OSes. @@ -100,10 +54,11 @@ func TestUnicodeNorm(t *testing.T) { } ss := newTestSourceSpec() + var fi os.FileInfo for _, path := range paths { - src := ss.NewFilesystem("") - _ = src.add(path.NFD, strings.NewReader("")) + src := ss.NewFilesystem("base") + _ = src.add(path.NFD, fi) f := src.Files()[0] if f.BaseFileName() != path.NFC { t.Fatalf("file name in NFD form should be normalized (%s)", path.NFC) @@ -111,3 +66,8 @@ func TestUnicodeNorm(t *testing.T) { } } + +func newTestSourceSpec() SourceSpec { + v := viper.New() + return SourceSpec{Fs: hugofs.NewMem(v), Cfg: v} +} diff --git a/source/lazy_file_reader.go b/source/lazy_file_reader.go deleted file mode 100644 index 7cc484f0b..000000000 --- a/source/lazy_file_reader.go +++ /dev/null @@ -1,170 +0,0 @@ -// Copyright 2015 The Hugo Authors. All rights reserved. -// Portions Copyright 2009 The Go Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package source - -import ( - "bytes" - "errors" - "fmt" - "io" - - "github.com/spf13/afero" -) - -// LazyFileReader is an io.Reader implementation to postpone reading the file -// contents until it is really needed. It keeps filename and file contents once -// it is read. -type LazyFileReader struct { - fs afero.Fs - filename string - contents *bytes.Reader - pos int64 -} - -// NewLazyFileReader creates and initializes a new LazyFileReader of filename. -// It checks whether the file can be opened. If it fails, it returns nil and an -// error. -func NewLazyFileReader(fs afero.Fs, filename string) (*LazyFileReader, error) { - f, err := fs.Open(filename) - if err != nil { - return nil, err - } - defer f.Close() - return &LazyFileReader{fs: fs, filename: filename, contents: nil, pos: 0}, nil -} - -// Filename returns a file name which LazyFileReader keeps -func (l *LazyFileReader) Filename() string { - return l.filename -} - -// Read reads up to len(p) bytes from the LazyFileReader's file and copies them -// into p. It returns the number of bytes read and any error encountered. If -// the file is once read, it returns its contents from cache, doesn't re-read -// the file. -func (l *LazyFileReader) Read(p []byte) (n int, err error) { - if l.contents == nil { - b, err := afero.ReadFile(l.fs, l.filename) - if err != nil { - return 0, fmt.Errorf("failed to read content from %s: %s", l.filename, err.Error()) - } - l.contents = bytes.NewReader(b) - } - if _, err = l.contents.Seek(l.pos, 0); err != nil { - return 0, errors.New("failed to set read position: " + err.Error()) - } - n, err = l.contents.Read(p) - l.pos += int64(n) - return n, err -} - -// Seek implements the io.Seeker interface. Once reader contents is consumed by -// Read, WriteTo etc, to read it again, it must be rewinded by this function -func (l *LazyFileReader) Seek(offset int64, whence int) (pos int64, err error) { - if l.contents == nil { - switch whence { - case 0: - pos = offset - case 1: - pos = l.pos + offset - case 2: - fi, err := l.fs.Stat(l.filename) - if err != nil { - return 0, fmt.Errorf("failed to get %q info: %s", l.filename, err.Error()) - } - pos = fi.Size() + offset - default: - return 0, errors.New("invalid whence") - } - if pos < 0 { - return 0, errors.New("negative position") - } - } else { - pos, err = l.contents.Seek(offset, whence) - if err != nil { - return 0, err - } - } - l.pos = pos - return pos, nil -} - -// WriteTo writes data to w until all the LazyFileReader's file contents is -// drained or an error occurs. If the file is once read, it just writes its -// read cache to w, doesn't re-read the file but this method itself doesn't try -// to keep the contents in cache. -func (l *LazyFileReader) WriteTo(w io.Writer) (n int64, err error) { - if l.contents != nil { - l.contents.Seek(l.pos, 0) - if err != nil { - return 0, errors.New("failed to set read position: " + err.Error()) - } - n, err = l.contents.WriteTo(w) - l.pos += n - return n, err - } - f, err := l.fs.Open(l.filename) - if err != nil { - return 0, fmt.Errorf("failed to open %s to read content: %s", l.filename, err.Error()) - } - defer f.Close() - - fi, err := f.Stat() - if err != nil { - return 0, fmt.Errorf("failed to get %q info: %s", l.filename, err.Error()) - } - - if l.pos >= fi.Size() { - return 0, nil - } - - return l.copyBuffer(w, f, nil) -} - -// copyBuffer is the actual implementation of Copy and CopyBuffer. -// If buf is nil, one is allocated. -// -// Most of this function is copied from the Go stdlib 'io/io.go'. -func (l *LazyFileReader) copyBuffer(dst io.Writer, src io.Reader, buf []byte) (written int64, err error) { - if buf == nil { - buf = make([]byte, 32*1024) - } - for { - nr, er := src.Read(buf) - if nr > 0 { - nw, ew := dst.Write(buf[0:nr]) - if nw > 0 { - l.pos += int64(nw) - written += int64(nw) - } - if ew != nil { - err = ew - break - } - if nr != nw { - err = io.ErrShortWrite - break - } - } - if er == io.EOF { - break - } - if er != nil { - err = er - break - } - } - return written, err -} diff --git a/source/lazy_file_reader_test.go b/source/lazy_file_reader_test.go deleted file mode 100644 index 778a9513b..000000000 --- a/source/lazy_file_reader_test.go +++ /dev/null @@ -1,236 +0,0 @@ -// Copyright 2015 The Hugo Authors. All rights reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package source - -import ( - "bytes" - "io" - "os" - "testing" - - "github.com/spf13/afero" -) - -func TestNewLazyFileReader(t *testing.T) { - fs := afero.NewOsFs() - filename := "itdoesnotexistfile" - _, err := NewLazyFileReader(fs, filename) - if err == nil { - t.Errorf("NewLazyFileReader %s: error expected but no error is returned", filename) - } - - filename = "lazy_file_reader_test.go" - _, err = NewLazyFileReader(fs, filename) - if err != nil { - t.Errorf("NewLazyFileReader %s: %v", filename, err) - } -} - -func TestFilename(t *testing.T) { - fs := afero.NewOsFs() - filename := "lazy_file_reader_test.go" - rd, err := NewLazyFileReader(fs, filename) - if err != nil { - t.Fatalf("NewLazyFileReader %s: %v", filename, err) - } - if rd.Filename() != filename { - t.Errorf("Filename: expected filename %q, got %q", filename, rd.Filename()) - } -} - -func TestRead(t *testing.T) { - fs := afero.NewOsFs() - filename := "lazy_file_reader_test.go" - fi, err := fs.Stat(filename) - if err != nil { - t.Fatalf("os.Stat: %v", err) - } - - b, err := afero.ReadFile(fs, filename) - if err != nil { - t.Fatalf("afero.ReadFile: %v", err) - } - - rd, err := NewLazyFileReader(fs, filename) - if err != nil { - t.Fatalf("NewLazyFileReader %s: %v", filename, err) - } - - tst := func(testcase string) { - p := make([]byte, fi.Size()) - n, err := rd.Read(p) - if err != nil { - t.Fatalf("Read %s case: %v", testcase, err) - } - if int64(n) != fi.Size() { - t.Errorf("Read %s case: read bytes length expected %d, got %d", testcase, fi.Size(), n) - } - if !bytes.Equal(b, p) { - t.Errorf("Read %s case: read bytes are different from expected", testcase) - } - } - tst("No cache") - _, err = rd.Seek(0, 0) - if err != nil { - t.Fatalf("Seek: %v", err) - } - tst("Cache") -} - -func TestSeek(t *testing.T) { - type testcase struct { - seek int - offset int64 - length int - moveto int64 - expected []byte - } - fs := afero.NewOsFs() - filename := "lazy_file_reader_test.go" - b, err := afero.ReadFile(fs, filename) - if err != nil { - t.Fatalf("afero.ReadFile: %v", err) - } - - // no cache case - for i, this := range []testcase{ - {seek: os.SEEK_SET, offset: 0, length: 10, moveto: 0, expected: b[:10]}, - {seek: os.SEEK_SET, offset: 5, length: 10, moveto: 5, expected: b[5:15]}, - {seek: os.SEEK_CUR, offset: 5, length: 10, moveto: 5, expected: b[5:15]}, // current pos = 0 - {seek: os.SEEK_END, offset: -1, length: 1, moveto: int64(len(b) - 1), expected: b[len(b)-1:]}, - {seek: 3, expected: nil}, - {seek: os.SEEK_SET, offset: -1, expected: nil}, - } { - rd, err := NewLazyFileReader(fs, filename) - if err != nil { - t.Errorf("[%d] NewLazyFileReader %s: %v", i, filename, err) - continue - } - - pos, err := rd.Seek(this.offset, this.seek) - if this.expected == nil { - if err == nil { - t.Errorf("[%d] Seek didn't return an expected error", i) - } - } else { - if err != nil { - t.Errorf("[%d] Seek failed unexpectedly: %v", i, err) - continue - } - if pos != this.moveto { - t.Errorf("[%d] Seek failed to move the pointer: got %d, expected: %d", i, pos, this.moveto) - } - - buf := make([]byte, this.length) - n, err := rd.Read(buf) - if err != nil { - t.Errorf("[%d] Read failed unexpectedly: %v", i, err) - } - if !bytes.Equal(this.expected, buf[:n]) { - t.Errorf("[%d] Seek and Read got %q but expected %q", i, buf[:n], this.expected) - } - } - } - - // cache case - rd, err := NewLazyFileReader(fs, filename) - if err != nil { - t.Fatalf("NewLazyFileReader %s: %v", filename, err) - } - dummy := make([]byte, len(b)) - _, err = rd.Read(dummy) - if err != nil { - t.Fatalf("Read failed unexpectedly: %v", err) - } - - for i, this := range []testcase{ - {seek: os.SEEK_SET, offset: 0, length: 10, moveto: 0, expected: b[:10]}, - {seek: os.SEEK_SET, offset: 5, length: 10, moveto: 5, expected: b[5:15]}, - {seek: os.SEEK_CUR, offset: 1, length: 10, moveto: 16, expected: b[16:26]}, // current pos = 15 - {seek: os.SEEK_END, offset: -1, length: 1, moveto: int64(len(b) - 1), expected: b[len(b)-1:]}, - {seek: 3, expected: nil}, - {seek: os.SEEK_SET, offset: -1, expected: nil}, - } { - pos, err := rd.Seek(this.offset, this.seek) - if this.expected == nil { - if err == nil { - t.Errorf("[%d] Seek didn't return an expected error", i) - } - } else { - if err != nil { - t.Errorf("[%d] Seek failed unexpectedly: %v", i, err) - continue - } - if pos != this.moveto { - t.Errorf("[%d] Seek failed to move the pointer: got %d, expected: %d", i, pos, this.moveto) - } - - buf := make([]byte, this.length) - n, err := rd.Read(buf) - if err != nil { - t.Errorf("[%d] Read failed unexpectedly: %v", i, err) - } - if !bytes.Equal(this.expected, buf[:n]) { - t.Errorf("[%d] Seek and Read got %q but expected %q", i, buf[:n], this.expected) - } - } - } -} - -func TestWriteTo(t *testing.T) { - fs := afero.NewOsFs() - filename := "lazy_file_reader_test.go" - fi, err := fs.Stat(filename) - if err != nil { - t.Fatalf("os.Stat: %v", err) - } - - b, err := afero.ReadFile(fs, filename) - if err != nil { - t.Fatalf("afero.ReadFile: %v", err) - } - - rd, err := NewLazyFileReader(fs, filename) - if err != nil { - t.Fatalf("NewLazyFileReader %s: %v", filename, err) - } - - tst := func(testcase string, expectedSize int64, checkEqual bool) { - buf := bytes.NewBuffer(make([]byte, 0, bytes.MinRead)) - n, err := rd.WriteTo(buf) - if err != nil { - t.Fatalf("WriteTo %s case: %v", testcase, err) - } - if n != expectedSize { - t.Errorf("WriteTo %s case: written bytes length expected %d, got %d", testcase, expectedSize, n) - } - if checkEqual && !bytes.Equal(b, buf.Bytes()) { - t.Errorf("WriteTo %s case: written bytes are different from expected", testcase) - } - } - tst("No cache", fi.Size(), true) - tst("No cache 2nd", 0, false) - - p := make([]byte, fi.Size()) - _, err = rd.Read(p) - if err != nil && err != io.EOF { - t.Fatalf("Read: %v", err) - } - _, err = rd.Seek(0, 0) - if err != nil { - t.Fatalf("Seek: %v", err) - } - - tst("Cache", fi.Size(), true) -} diff --git a/source/sourceSpec.go b/source/sourceSpec.go new file mode 100644 index 000000000..74a754a26 --- /dev/null +++ b/source/sourceSpec.go @@ -0,0 +1,117 @@ +// Copyright 2017-present The Hugo Authors. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package source + +import ( + "os" + "path/filepath" + "regexp" + + "github.com/gohugoio/hugo/config" + "github.com/gohugoio/hugo/helpers" + "github.com/gohugoio/hugo/hugofs" + "github.com/spf13/cast" +) + +// SourceSpec abstracts language-specific file creation. +// TODO(bep) rename to Spec +type SourceSpec struct { + Cfg config.Provider + Fs *hugofs.Fs + + // This is set if the ignoreFiles config is set. + ignoreFilesRe []*regexp.Regexp + + Languages map[string]interface{} + DefaultContentLanguage string +} + +// NewSourceSpec initializes SourceSpec using languages from a given configuration. +func NewSourceSpec(cfg config.Provider, fs *hugofs.Fs) *SourceSpec { + defaultLang := cfg.GetString("defaultContentLanguage") + languages := cfg.GetStringMap("languages") + + if len(languages) == 0 { + l := helpers.NewDefaultLanguage(cfg) + languages[l.Lang] = l + defaultLang = l.Lang + } + + ignoreFiles := cast.ToStringSlice(cfg.Get("ignoreFiles")) + var regexps []*regexp.Regexp + if len(ignoreFiles) > 0 { + for _, ignorePattern := range ignoreFiles { + re, err := regexp.Compile(ignorePattern) + if err != nil { + helpers.DistinctErrorLog.Printf("Invalid regexp %q in ignoreFiles: %s", ignorePattern, err) + } else { + regexps = append(regexps, re) + } + + } + } + + return &SourceSpec{ignoreFilesRe: regexps, Cfg: cfg, Fs: fs, Languages: languages, DefaultContentLanguage: defaultLang} +} + +func (s *SourceSpec) IgnoreFile(filename string) bool { + base := filepath.Base(filename) + + if len(base) > 0 { + first := base[0] + last := base[len(base)-1] + if first == '.' || + first == '#' || + last == '~' { + return true + } + } + + if len(s.ignoreFilesRe) == 0 { + return false + } + + for _, re := range s.ignoreFilesRe { + if re.MatchString(filename) { + return true + } + } + + return false +} + +func (s *SourceSpec) IsRegularSourceFile(filename string) (bool, error) { + fi, err := helpers.LstatIfOs(s.Fs.Source, filename) + if err != nil { + return false, err + } + + if fi.IsDir() { + return false, nil + } + + if fi.Mode()&os.ModeSymlink == os.ModeSymlink { + link, err := filepath.EvalSymlinks(filename) + fi, err = helpers.LstatIfOs(s.Fs.Source, link) + if err != nil { + return false, err + } + + if fi.IsDir() { + return false, nil + } + } + + return true, nil +}

c9~wff+kRIAz7e?t9JVy>^a+G7`8eBh}Pzv$A{TOZ8zPcE&vzS7a1 zg{9Alxmkc{m!d7jFYC1WII#~lsaP#6c0sK9e7Mq;y%fLtoacjzU53T3h`DK{9xK-> zb`-z9Tg;}Fk&jDVhoxT=y9iTzZ^BI$!)e<&BPvuJA=aFJ^(W}4a?qcMOuzKKu+dO|j9Bv#GLYaA zQi%^FnvW2@!H$RO6L+c~bkz?=tJeoACqw-yVm6n4{9XDytLkstvi0iio?H6Z?z!`B zO0Bb=4olAvE9$fHw#D>Nf*Ztb+fc&2O4v)@{m)zG!qT(EnosNDguPe{Cn7HvX}$+I z7wXRwYd)<<5?oPCjT4a<3w@w6AL=g+WHVPmELg^d*zcoh~{C5C>Ihr*w0=zB2K-`t@ZKb{*bssJ}FU(euk7Cp(2ciBUvGE|rP}dWAA;A-QHNKE=Z)-Lo*S9Gvq5cuE?I5-t zJmQ37i-{j|n|QF8u!V>I7df@l;`i4jbj2Kp6*d!Jy@M6+EG%$Nta;58bj@Vqh3GXS{aUDhL998$T}#-D z%vvJy{w4j(Q2&Zp9%HBYTk8IGb^pY}^=S7`e`3vW_WV?*Q~EfgSL^v_GmSUw>#(lZ zs>?ngtqZBB3n>#X-no!8Hg3WKx5TPJtQtJ}83i^IvUWLb*-Th7_P?-eb^4P-aaAxq z96of2xk0NZ-FCv}4BH7eXRtvl{oYW&kJxSy+jSq}EvZ$GTTAs;vC*;dS2hJY`RmO_ zr)9#@{lscPtQLIvLufndgW0y7Xdj$Dx994{UlmpQ!}*?;g@04)sTfm4aBwo#MVuaiVpJ4=E+!{#i$*}YkG56Z=9ZFXc)WLK(p-tB73mWy;23_&fVX+xv%`4+by|NlViuQ`$ zb#tNqEHT%hx^Exr6pw@B=qXBnF4UhV)|{xENIxGxd2^zY5A_#_HK*m(1oxqHqhE9SwWz)hXFb&4Al7^gT&+%k%NeH=pHOq5d|p zoc24hw~wm?Zy!vc6K}qKlo|!%JH(tP*zPd*lh4~T8I>RD+LIYJ!K3Wwep~}B8N^YG zZc0}lnhBn5K>)$osqgy;Wk)y=fxu(rhn5J`5+O9d7enKM28XMv?UqP!VBB1OiW6p(O&fL3z2GCDBEp&o1RerfB2Y_&AkX%72yWZ14Icp&5sD%ZcnD~TKrIo1 z+}bxG%xbwW#-+RyeG=u+heJiUif{y;zC%km zYKh?F#(o6B-QJFU1XM&g5rM!%KuZK_i4b-vQib4L7f*czR75xvfxy#bXo)~A5kh_E zv*u>r=iuDl;WZx)72z&~Bk1l0WHy}8}B~xz3Fbgo;470ugvXXbD6u5s-Vja??(aG{ z*Pz=X6D_&!qoXAHhUf&IA%T|Y)N-HR+&{Gl&|O!XJ{&5-Z3#!O9X0(5GDc}Cn~uQ z$bNyOs}6i9l!Q7|0Rm6kp(PZxL{RtlPpv?7&y6D=4;Ar_#Ut>X8d~B}ON3XSMeuw& z2|KCkd{NIH-tI6NkXVK}#HJiEx_xr(T5ZcIo4w zBF>dK1Rf4r;!sP3^GzEOJfg0_xNlLv_F+&F=0+F-&kF!r!cfaS%$xhC-okXFJ^gFX zTm=;|dwva*z%vBV5|dgY%sZDa1EcrXji+LtkA{k98PNzlS1($kQA>oT#mjyOw%*A_ zHQ-~QB*vf^1fDZOOAKm>FkELf_b1JUXEfxap(5I_Xat@!LQ6DiiO}SDJ_5n@(5R1q ziU?yO5O@Y3S|U(OgiwEOX*`Vsa@+S#_&}%#G${~)r{T~Nh*}~bHx!z0WmC{FSfrb# zeKb@=n-Pt`Lqkh6YKhS9?N6EuTXEKhLq)hb;Rrmfh?a2F62aA{e~j>}4`Y@0`8)Z- zleaLax$~t_yvTom6T$FP!+c8lLU8pVraa+ib$b7yq=ldQheprRf$hx8*Z<_8-TSM+ ze7%o;j<2^I&dt?3--V|)4sXA59~#Bs9AEDzc$%B5_hJH1Z=BkG6_~3x4(IrKKf%-7 zT)lg`()u784(Ay;VdHR)v-cAm&dt|5(}k-y&R{+6TcdmKTcZ>1Tcan5f--S9FRBO* z=Qw*m!QtG#yH-t9EElZhf|bm6nzMH~k#40d4(A!?z@0U3?9Ne%)5N4@aBi-pi82bZ1%OEKyM=4(C;uS(8Y2TuaP$rR9S?2UI@TIGkrCXF5kE z&J&Z$#o;`sBs*$oB?`*K;k@WFOA^J7vP4g!qD&mlt4fZ&tV!IoUrWq%rR9N* z!?}5S<8YppC-!uQd3x`5O)3|MbMy4Zkvgy3T!(pj?{^iHi^I8jdgE|jQf^O&d3w)v zRg}99R{zD}ye7HZVXoeTiL{)saX8P&2^*L4tmIJVsKkC^Qn@&s=jyq6$&t=wiNi!e zxj38`>$xS#;m)$eL878u9L}qz{L7j|w&PmjRTs|Q=5TJ_-iN=$+glFj=ImYQ!r9v# z&duBV@RxXd%i-Ldy;r+%_BMxe^Y%XcCEngoa5y(-@8eFKz0Kj=yuE2B+`Z}14(ILN zg}1jkoSVBhQ2AqTw41y4Q77)+=5X%(y?=?nw;ayR-MiX}x3@W*o4YqqW!Bow+k3PN zZ*QF9I8pug@RzuI%i-L-y-zyv_BMxebN7a6zS2x3?V5&D)!yq`bopbM_uh z;OlJ;=jQBbHivWb^~T{G zXYVICoSUzADS@xIIh>obHxB1`dq2V9+?>6yI`Q>3hjVlG#$yz3Z#kTsv-e&CUvG0b zH)n57SDAC2=Iec#z}4Fv&dt}GdxSDaJIvL4y$e@wb2v9&Z<<({rFL`mKJUcSn;Xbr zV6NUcoa5^)hjVlFu65$-Z4T$=>rF%9?2R*YyZL(Wb>iyH#XK08uQv|oID5|UvC`FarWjG-fq6$6J5A^o5Q*Jdh^L=Wxj4V zSMTXAT)oZV+1__@=ITvRe7$M^ z4s-P$O5o{j4(I0TUFKw!Tk9}a@A(9t-sW&_uHH1UG7IhI>0R!`(c2u(&C~mcj#cif z4)gTB?84LA9L~+v8-GN6z2$IjuHLs@xO$tzx%qli7H4nTxWjzCuexycHivWb^~T{G zXKy*2o3Hn90#|QyI5%H!9L{m}mczL@d+&7O>}?L`=IzbpBX{h}c60U~@50&J9L~+# zng}fw>J*wxO+dr;oQ8vYh8GIo5Q)ed*g79zqcID&E5N=3wLih zoSVBhP&s7hJI&j>|0&+y=5TKA-V9=8_H~-O_jUqzZw3qxI{lXxmYDA}ckinN?%w8b zZvNi%t1|mL%-wsb3wLjGI5&Uqqo3pN%|+K??%s=CxOE%!IB9L~+xn|rWau`fEz)jOZS)7u=*&DERR2fp5NI5$`C{sf-hT<4z!=IV{ZIlkU< zI5$`C!%kei&Eed9y*X87_H>%7cQJvhH<$Tmf%$slaE`OL9L~+xdozKnH@)^*V7}fs zoa5}x6r|I9z1I`CdYi+!`Fi7Ujg}fvo{Xsczes?+?>5fy72Wj zhjVlGhN{ft4)gV%OyKHm4(I0Ut!vesu{+Gydo6*hw>g}fulM##e7)sxZm!-Jow$0N z!@2o-Z@}3|Pj4K~arKtN zxp{i`C2;gMhja7v#^D@SZ)VCJ=IOoNg`>AQoSUb&PF9ZCn;quq-J8JC+Z@i#)0i)7u=*ovU{? zz}H(2=jQ4?*oCLJIh>oTHxB3cdduP5T)kg+;pxrglMT$(8;5gzz2$IjuHM&OxO$tz zx%qmlbCrAAZob|_UHE!){bU1k_TGLEXKy*2o3HnA0#|QyI5%H!9L{m}=3dcmzTVj` ze7()#+?>5}ILF&t4(I0VolD^BZ4T$=?9F`5oV+{C*Lxy?tG79vo3A(b3i)jhc9^U8 zN*A8q=5TJV-Z-4&>n(?KbM-#y!qwXx&dt|*^hrsX;~iy*Vpm0(IGk6N#NoVVvi(}( zb!Ym0a&b7%yif9oHkLeSAC>%?k*JcNq|8-yn$FlQVK+XA>FA|#%V)KEyAHA04+eZAgS-w#q z<190$8wQ$7VY%fyH$hLM)a@5HLcJofW{dSEX|aWP zZ&D`1jTTeIn_+=1V$SD4Rrjgt-FRQ4>bnP2_rSXS;&!8WyhP0H*tbKh+diGJ>sx$4 zMXLgPT6`ezEE1um#RqE9;=|BWv)Pl~P#J<-+1>XMP!Zuk1Om@$3R)si%N>F(Q7++J zM-5slI)vwJ1S>usD&if9N8njbK}$SpiSX)+_SxiPn$i7hu5_mcbEg`Ap4iba6rw_9&v24pnPu^lMM!#9j)uxK~-u)T3 z&ACsp#^y=?Yqv!sn{)--HhYtp*-GGA#zXZb*Q^$7Fu&(+oWNpRqNF@pv24j-yA2xq zl2s-9k~QT{zr0pz_GMaYX*UTx1thYzNcZ=nO0i{?#C5_}?5-26*l|=ZZN+Z(B`bD3 z9TG(+Sg+&J^wQSr*ziaH>`7LgV6~1}$Ee$xk@jM}j_G95mg~|)~_XCKz@YjIT6 zFav6F0#A#hr52|awfNq<;hkj=g1Z2-J_0Ht42eMCxwD`p0=3*Bym@CChUZqHM|?a~ z#2Xclz%y*o5|3IUyvUtp43PVUe%uE_MW6|R2s}-PmO#`J0qM>%3BhfAJ>?^yBEqx? z1fDw!S|U)3Bd{D!)o%avoUdwBRQ0T?Ch)WpTB@2_A_pJ2v+TXg)yCid`GmUOxZZxi z*c`IO>^mEye*RTgd+NXHj-UQ(SKY-^|5bPN)PL0-zU#m04xjq3y4r{T+EsV*lwSvE zeYc(Xys!09QS0Z``UHn-Vz=AvqOW39q`jnymq&vK4`L5^ zzL2~(I>~)b4^coADs&X}vmMq7FlV*)$_GP5g;oVC0CS%$A^E6+wOst&=Aa-~FbW7p zg(}yh-#8`%^ljqM`)OVeth1k%B>FzBNL>BYe&fh|nvIj< z{2O*`WA50dKdtBx$3Lw}%zP`W58+OHIw`?%+gEZYKP}ahHOZ+@)2)chFWF~u`#;Sq zb@kru!y>0R6~v~3M{*6yBykNYv}BTU4cZ(HEiCGgqWSSluNq+yWc&TM1skR&cskNP6hfW$L zA6D<^k4k?dJ{r|mo1KRGXT&DMEltLfxc&{dj3wnbJ^oYM(nO9x=MDXMjhLHOUJ!HF z*`;s%qM{*rrSVH}?^3S(RO1&djbCcfHN4-P{a-_HpXPq;BcLL}jR*uD0$L(aON5|D z*)0S&3rPRQZf5fCyE_3x#V)JgKev%SnZiY9; zoT~3PjZd&}qn`LpV6L*d(@dgf_uBXrG55@$Cgxl~W_&G*idrN=j3OH z-|&n?j=QUCoQovSAv&|a1>Yf}q6!yvhy6E$$G*MwocYVef(?upj#)-3k_F}SwJo$jn$%9&)wiLCCEw8yBD zy3i%FNxR=>lX>NCr`=a2IC<{4*c>G7jyu3@phELG%cEvTl)tjy=kft_~G7!?!T8|x)|52Yei zO)ai!^?@Br?^xr$*XJXkqCy!F2=2XymyLjy2-G6w`fE7qlj`4p!)rLlZm+ua*Kq2= zvX+B$ON|4*gF{8UL8%jXUc=GS!BI=(;83@N`*(c}=eVP<;Uxd{*YGT-*!+cPQoj(b z#wYC;qMJhBINgQ?lfL6bMfFYTI0-z*iI$F& zT6CN+wF0-s^uHLl(J*C8r8g`7@-AXd_!ro4BK2rV5EwMf|x$xRV%e`*JmWl4zq zxlfsqk2O}>=AhTt{)o9x3Fe8pue~i0bF-O6V(zz)C1UP-VavqoUm5)%mTl$lyUk+) zp;sm9*FkN)tz(*VM#3W>(2e1%Qt#iFbQuq{)FkG|+^f<+%cRz!I25~b2Uay+(5 zHPDjQ0u%?8l^kfvOK@a%eGIfzl;rU2`sn+B88Ch`+O2@>`>IAoRUfEo0?#l&OI1@#^h}sg18|f63NiP1J@TPY5$aed z0?%2XB^0#?r3N~oYIiMGi8&9(Qy&BsLCypr@SG1?f>4Vf?zW-MKL=n7lJOcbxA1b| zL!lznrBDQ(@r{;H)DlJ69ZJM2IIi8U!`N$Lu2pY{xgUydeMfkW+$?^CHHaVuXZE{@yxw!H*n;TcYW^-dY zz~;uBkj;&kKd`y+@&`C~V5s_A_a#5tcv3$mpS+!OBClMUb6H7p3zCO#7oEVn1A|kr zN>X!0a`l6%6Rb?q`t?t+x*onap+-YpH{$yFA&yPHp@61_!mx(IDD}EAH0D!BMe5^H zCwRp0x(7!`aO#k1=Icy^sMuYolfH^kk@l1-Cb)MeaI<-|R5i7@sx>g}Sf(Mk3GENg( za&V~s`_JY%Zkw%4x*yd@+HA%5qgp)ADY_w9{g!72h>9j#3+~`;2AKJJTGJ|;*Y2>K zNjM2a?enLbRHKuxe(Uz(B2aVceW)!0r;}_EI2fN!YRAT<-v+krrtQj#n!Q3iTp_j* z#5Uaa-ZN&u);42CW)!fWye^(|W71D~uOzgo;HyUQ_$o1X_b(80CRuB~9z{jRxvm~1 z@Ju?;Qjb!LhVtIGtv%|76V83~`^>7KxxroZ(NGa>Q#68mmydhjK}$4hiO^(Lv<1O^ z19qF3TUssoSg44#BNl<@8HScv)FM{>``m7($SLiDar61TZ$Gp*2ED`FT_mTu#o7LL z#BJoM2}5v?K`fv3aJ5{+6SGW)WiIfgL4ZQSH6QoMZ9aN z6L=m7XzAdnC30}6|NB1>IPT~Jf#kpbKzPk5y2<~I?@o@2j{1^?j7x45pSx^;jz%+e zNYx%1^=pnUu!ja`8$L8{f!0?I$89LypZcPrnx@`in(@x(j#f0(rs;80)TU}Zpf!>o$Yxtnc7Z5pPK91fIc)mJW_uA_s^1zyDz6xTAxWx zhdD(zK^yU%A}TuSEWMR|$MbAJM<+-fQnkT)+nToZqj5J_t%XL%8#WJP;lLUv=2ojF zh`Cp*Nn-BBaw_~^{vG$T{~vPSudlCBoz}9bOIOPASH!NbW#!+o8+`p|e;6el%+{A` z5`gS?|Jznu%z|cJpM9sK#VnAvn6>bCECPaezdz6Tngo!9KXRg})| zTUaGBmLA1$GK{Z4{*GB^y&`67Vh=jOuG$4YEWH_)-XeA!#Eyfxh^e(Z}Aa)u&#*{AhD#>oqKYEq4 z&7xO-Oeg8U*B!LdVDE*c%VB99_^J*()4FO$KKK(e6Rdw#Y5jX)>HV>{Vc2 zvnwQ@!!9KCeUjB5*AJZS{@wW=hNUXRR)W}y`%KB2OaK>K*31NO@F!+wQ~!XVn&~Jk zc1$d*ZL9UPjBTiUzq?WIUUMB%hn|G$Rbp;Wa&>4?9l912>m6#%BmL7*|BRUVLOrDY zV_V4|QvFuaDqj8Zv};F<`9l2~v03{T5ASoa?c@*MiXQ~q{5He+4*sOx@V8&Q2n$>i zbJmFM6xflq;CFY-Sa9{nTvY0(+b>>)>es}~AoHR2Y~Ph-a@PFSccek5aU}D8eaz*UyCgV_3<_1&bmH2Z@<_d z78@YutVH$7e5hCE?;hG4^XiYyMpOqk7^-K9xgY8N4E0Kq23`v)NqvoF@F(W?CjFs? zetejin{|);lV<{kitc`+|HS>3z;k~^%O0iwWcSzeKeZ=?);`A|xLt?GeFRiQm=J-$ z^DIJ31ZvS8yiRETk}(O#ZQ4BLEj-G3S%DO3eKzSO|01!q_@7H_h50=4vU1u}xxb6=aK; zn}lr>tD8)Pu^nP=@nV>&^517fb0Lt^c*cK%l(=2lzJ z|1?(n3V%nz6Pm^Sj?05xvpSyYn$;EGQiIiJb?1M|O)&h0lIE~k-OSrIt7Cs5o7K(5 zZC1DTsZHu~W9(E!4YZie>iB6;KSI)MS;-OJp(L+=<>t)`zh%vtG&|nd#QC^2+e&ig z7iLTUxS#}^ZsbreA4z@$tT%z1wVX#rOTTN6yB}#dRb%1^c<`+|Eu|+sOZEl1SRl1 z`Op%SS|ZT;nlqeBIPM01<>R0t&b2rMo(4oq9BPShSnPQXz`bqX_yDK~a4P_T2Y{9U z)Di)hm+VC2;oURgnTDh%jL@q&1%c;jik1k}5+U5%^t=z8`RXtrGCm+mI;DOA2|T;d zq9q`;M1XEUurr-TLON~(;&GuqECztPDc7J6jf&7&p$R;#iI&jR57G50M>cZaTb6%uRUrd|Xt-EsIOwIa##Cr517PKPZCQ2jFJ%2gKZu z(1*mF+fc;^MMcmfK?yt$XtV^SmgdRUAC>jt`nd6YJ`RuLgxLErd1+ONxgXF@iMcL0 zBj$cPKKC6PDmu2Bj*Y>ro^LM;D<9ldAV{jHVv3=z-& zG_oeiD6%z4w%6l@16QsmtkX%@nj|C3)+8Ay1^s*Je=j;w(#r|`UsjUttVj<3dDV%U za_O>bCHLH}4(ETCk$w63pJipMLobe+x%n^6RA>0ToKnN@<&`-(=uCCk!O%=~_MQ}# zyZ5A|+~S}!)uBHt`ghNJRVQl7Ee$$b9dgZ9C-a`!>SW$CTb-T(XRCAcb2HT$`g1eY z8TxZG)uC_AREG^LWQ4Qv#4L3-o|vT$-EEdSSkEf+^3Tjr=km{LGUF+|yw*QCQ*Dg8 z`owl&U44?(=Bb+S>%W@tOETeiBClM=j%~v_`h;y*`OWr2+l6)J!;&(28*tmOG67a@ zA!*yN7LqmP@-|@mu*w)pTca)}Z6DUfWLDd!Vk%|(u#(G0ta=-;eOO;5^UB3k$~I!v zdxmoNleQ7-ezK%o-Ue(ZR^A5KidAm|wiD}ovZh=HxoySDm}M_k%098JSofb~wSOw_ z3bqyN_Di;6eZsqf?Zlc(=9S62g6+ggTd)-?4VJW>Soe}8<@WKKq5tx(z*ek!SFoK} zcak;b4)UH+&rNG<)UBlL#JZKtYWvhISp8S6EP0r;omdZ(w+}D46wNX5(SO#hAjvZE zQT!`^Chc*w-E)j& z*?P)SK6_Uxj*A5|M9kjESP2}Z452WQbX~zO$N++>EiKVc_GBNi9#Gg>2r<;~22R+@| ziGc$43xuw_m9W68I|ce&fxdeMR>J}XV(vqyTK3L#v+P|CGTmDChG2{MBCLf4*6$Gd z9ijgoVIwS1Y!rC#5rlzmeq7201KoD;AlMl#RNW$G%MA~8x5;*Mfy~6S-TDCy&9qzU z=V!05K#7=JwEvI-L*1Qk#joQ--P+rY0=8;jqCt1U0=vYREj`f54(nud!EobbZ@;(~ z>XnJHCT`y-AL*vMa=}QqcBHT)-VgN-h&eMm9r37+xY#y&=ZH_APw2o;pND34hhgyw zvE~>b7pT}a-T*~^$2xr;j`5?g_%X4nJ^*c($fSzjwoNvQ+juH{TyS*z474thldyP| zSaWnut1HJ^r|)#-DXn)J7C0l;yry#9jQHaq*B!m4Y7{sR3)F};e{Y-Z=0-9TpY7Jh z8#JW-Fs5tjA}nx8ta*vdb#sXv2XozbE)i{@aTS)hCT6?oJ>u|V^J;_bmia~-*bk?R z&zQdPL2~`p6_&dpmSvE|AODbY`R<>-6+djvciT^n9NVTV!BmdjN50qB_*(aESUx@3 z@bnjVLEM@6LW65vr`GO4&E1fCi4|nX_J~0eTkPg)*lti&sN*d)4zw>UmmxMC z#HNFXjPBS{H$Q(J2TR@BfrN5)fMyQj9Lj7T4&0+9L!(b-<>dr7wfswGlD6y>|wiVc~ z>Z=+C3$3enhQajrI6*d|`QDm@T5c>XK2EH8k6P1ZdmOAaE?c`tX-rIn1ty6#f5%+! zPN=|ox3*;DgzT406_^SOOcQh4HmEZ<)S1V@#+}Yoftj#Cju?vs5A-`}QT6A7VxxW@ zDxuySvF4#~>d-g@S z0wS!21q#HPjk@Qqki9#Ns&iip3#=1sHdfg+R{36IZG;7i#G3uQuYM>8`;C6EepV}O zh6T2WHAn7&Ms7JcxHEE9U^^^OBG$Zt9ctv3gTp%`R|R&$0=vYT=TOl(l!MBhb5Mc3 zut1rZnXo+kk96EoHzR5$e$=grIUVQrXuAF4eyD$N2XO2f>G%#nt$G+1s1R#*^ojay zCVq0K-&EizEO1QBuGU9f2C=H{!L@ibya(HLTDRy>!IQ9Hl~{8Oo@oru#Lw=GL0#CV zVSzJZt3hnl*?ydNKWBfc_<6UCKR9>072keuv2jB<56jhv%>=QT;L)FOgf%_5YVlg* z!KE8k{gd~?U4+FhiOt(qwJZw6F4dW}_~o6>oPTDgcS^adu-r8=3KTbM~=%Go7M02jb~euQX|7JKgLj zMJ2PJoHWY!h2=BEnsc(=6bEq}^roV7vWZW4{DcJth%E)NrNAD@eJQYmEq$r_cn3(HM&AkS6WVQG}tDFMu{~ije{v3t26PzRCLm)aXl6m7$=qsV!7ZUJs-=a7^YW2HdP;{HoMc@ zVj?UsNz8Q_mw#+1g_+J^%TP+2dNs!N>2vF{71w1tz^SnKG%+_*5N}w#T70;{s}C60 z+tz!TdvkEwib}(?Tz`+o67mSaWJOm!gB2Pp2YNyK^qyolt+5 z*m@9K4<74jG_U$^+vXef>sl@FDzXqwi(1WgU5eD>3oX&@@-o_RexQz zTTba?do7uNX0Ih`hW)Vk0kP)$$byP9rEV0r7e;l^VOXF-tob-!Oz}8B4i;0<_mTAX zd9;NEj)^rN=SwNBFXqyz==(??1x~^ORbtKdTUPtc#FwM(rz1KI_0Nb|3z#+IiZ0!Y zV5M>C+NobWw^P?F;5;l>BWCw9vm9Ja{ZP|})s(x5)$h_OaS@idB*xnM16{HOjpbZW zXpChZUZLJKvF0FNbAx#8&LGw)ybcT85Gw|;V(>^euXSBlwfK7Dx|&q4&p$IuRF%68 z%cZA+_$|L;1&?_{iEX5Qth>lY%4T8Q^%h*gJ&CjDmoCNo5vA%6Dq`+Hb=NDZ=`glz zG@V^-6~<~`SRg~JIs4nv)ix8~YFur`)e-iG1qSXE*j9mZuzjb1+ITQ5kR|4JrqrXi zl;Y9Lq&ii9WwRUVBEw}UEHF&$EQp=CHrP=coIczM+rTdU=}*>m@+;pzlF$_}5|$q& zW;c+BoPBIB^&_3qUdrwqv|)Jb7z;~`6Kjs>vPSewynJUw3o#KEm?YMmpzf#ajbuL+ zUGPzXsj$E_v3c$V@we132kMuJhX;51W%`pf*R55F(#Q6?%v7rJ);tqdmQ!V#g4sB) zXq?Z)D|g4aI&C&AF-Pnqh@AwF{ucaE>K|y*mZOx-TWAs+h|`}O2&{thVZl5xH=guZ zI&lw_lg0zZ#*+#xgasCfHE%yv-F}XP>YdwfVI&ZVUSD`A0G z#CC$%PViXkPiJcT>DIGG+uMjeeLm}&vM8aRSPhF8h&7+n=ep>pThAL8y`9nN^EaQ< zYhm$qV!J_X*SUn&)F9KXwMK*3^Y8TeoTJHdI&zev%l1M!R0UvZf9 zLuAseYiKhpwneNtKrb~wuj7|@2B=;ex5EM@Vy@qGYrE1}UIkZo&Qb+-!UDU*n$PuX z6)4898wJAW`d(O|OsqMjeXWV(RLkqe#4)WF(0pz`EO0=q`P9A9Q?VGoX*?Ah?`Vgi ze&vq-t<%4KQ~xN`KPJ{}qx46#Q8AwWDEe61;DAoT0@XVOdR&2?I|VehPs0Ld#G3cY z-jBHT72~}hMOQ>r;5;l)Bi4NI^?gKN6ytp#MJ5i?zX5dv>{ z@qP&P-LZTGR74mQfxtsRON4+@6#<3?An*Xt5`bDFr@+^TM*z5f z9`ylG5nxOJ0uKN!0jMPc&~Jw0VJ}Sh2&jlKDFVTxNg3RH`3e7u+RvaR0<}a4brU$* z+D!p+_LkE=5Gn%A2t?pH6|@ARmI&xSVk8B?nG4SP0H_EsCjfy5fR+H%5&_8kY#xHM z+RFO~sEDv20)eNk&=P@KA_Qj~HcY`qIL`88$;UxOoMmwcJSI43i9;>-IMo(2!BNkw zfOD3CuY5REgj*Gkz;jw?2}dpWaN-o;xc#cvd>mB7Sr>=E(?Mv7LoE@`F9|08+UW-8BA)qA!wL}QA zf4_n7x3Rya$!>iFR76NmqfX#yGPFdXmI&d5NgqY4@y6BIGabZ#8v7}@UTXT>IT0$t z^$ADd!J#D_wM1}r%f-hHS_YbXGWYvvsE9To8iD7giI!;85}~ZJiUaLFw_#k02l^P--_M`Kt+I20SG(*v;-Kr1Gwf6GX}xlFzA_a9|I*ZCd44{ z^bA^JP)p<_mYvJ|3U)Nqz$r}vbl1+54~L3y)4~yWP6;jHs3n49RyG5`jkKH(fQkUK z0uXr42Q2}pB?7453#M8d=Q9V+O~vPZI8=no3rFA?YG?^ZEfHL3lfD4P&2AQb7*vE= z5{AHYR%i)BE%z`Dds8MY(A-ybR(v#6M0+I~fyZnbEzzjO(U_o6_21a{8w$RvQBl=v zs+z#l|7fXdYKff40Y%m!xChRLkAR8@MG*)*J%W}9)Dj`|w%VPI_lr$9jZ0_CM?y)Y zZIK8(M!;x^L@oD8^;5`9;60?&{@OLS_vPhV|o4D>yK?z$@b zaHt5kFC2jfhn8^E62ZBFUO!h&vk$OCuoU4EfGT9zFhOfDj-{zq^nMSD3pXc6NQ$tHUYKidb4|i_nmtiMe`8cSEb1e>mhl7?l)Dq$Bxl0YsYdG$6 zJvTlMD&pLVL*U_{B@VSjIGe8h;H3Y#(QZBe?3tyYB2Mo=!y)i+&=QAQBAjnpH}Qz- z1LL-0$@nm+2-7bNfyc1{En%qT9>&du>RvIN+5k*9+6R41RK(1RN#GfRXo*QJ5$2uC z7upas_f#DA(NGa>L^J}=)r*#B)Dod-32YRCEopO6jrkZTi7_q)f#;0S5`$VI4A)uf z;RJRfJfle;4HeO*L?iH=5n7^AON6$^RBSrzp&1_m6%leG5O@Y3S|U(OgiwEO>3%c| z$obXG`9P=$G%pZ=r{T~Nh*}~bHx!1$311#s-RaCnLq)Vj(Fi;=v_xCDL#xmHo4BR0 z6_$P`}}Qw z;R#H)CWlS9EY2|qm&N&_9ZlV8zxV+^LxxuSXX&7%dGkb2lYp6yBWM4U*_;D5oAZUg zGoy3p73HqB*|q>2LRRkoy{+c_()%mt{KBWbiJy_;1cH!??XGcQS6? zFVo%T{labp=KeCy_5gBI$*~EJM0ZwhD&sxQ|An3N_1}R9If?63UYQd;&i!S&Coun) z!3Ra7)PN#H$jU-8E&-0abFL$2q?YKgh@_ zCH;{(zu+ig&M%y+{yXv@C(-kfIls))!b$>_D7F?Qrcxz&x8ylhCC6Tx>&s=ls?Wcu<8Dfz+7K;Tg>(4vO6o+mqkuhE-x#bs$`|bTwh*y=au^ks{Xsit`CywmZHQ~ zcS*VI{ZLkNlNOe&v{ohNQZ?mn!BujHj(v!{Xv;{PrLqsn-G!?pxs#Hw+j0`MR9?Az zaO=4R$*Z=a#CfWu+%jAx4}V#am};p?9CX)|xewN5roYI4XInB7mG0~p$vl9n$c^AM=ZEJ&OLMTx%dk}@kWm86|2l4mVdiQDd)a*u#2dHBopBSa<0Nc41P zACY+sR7s!`=Rr=QzdNtY6QC}$Ah8=SN-TGmlvxGpGAk0NK~*BtT~p>MOqZGd68{}+ z$w=&UXTL<|$UlrK#ZZz+x8)?3Q+egF8^yAc7j&xR>(-*gQmUj}Hm4{n$pDrZZmUYH zrE1E&g6T5TkNNLdOGcvHoqbH^6604%pc11GauU5C<(0|4Ap3Vmo5sQfWJ4lmgokbn?O58TYSnakA zF*d;JzuY7wYH`~SW4*hk-7;{Cyw-oWp}vJYY0XH?r?PL6yZMj7sFF}6mRfSA)16l) zK9kEzQnVm>)`}A;=bkDlcOR;fw6MfxP?fk&)|7bwRmmf$ZzE?~GZMq8?AzoXbFNCB z(y@|-)||vdDzDr#uu4+4AUW4slo&~slzR?V$xGVUWNTGoF;!FU6aE4>A(9 zWcI7%t}u?3}-RQ7A+@`)IwfJ)R_a}o=wyz&M=3zl7GLE@yXXd+co<}1dq z%dAL@Kd4G%KB_4*3)5w$zs`S0S~3!Q-Px~`IrLdDswDob5<@LHiQVqJGH?G!uxz?7 z3limcQDUXLq|E7GlwDp$V!ov+anxN?-YO3{mzjP?nemLoYtI-ac4ErR+Lyzm6SRDSx{DTinf)UXsb$Wq-x5Y<~)_$ewqFT;yRv@D0XMR zLFNolCAk4h%(vwvwo`d!&H`03|5;Fw+zW~lx5<)n7oggIUsfaz+Nu(jR85(SK$Tpf zLw`^IZp%m^I3QK~-`Os${t(CvnxCS8f@ql7~R3*6@)4z}0Y|BXOr?S6K?lD*;aom;YiRUDSyYtFCf$A~~ z5`FQa#7K8ZnN^@lQg20at*t7tm#QiE6ly&;{RjMeqb(y*PG$dq+%u?3UU0IKy=^&( zl~i82mtd8={d&QaT8a|sR7sgvV3p)M9m)pR zN~($9MQ*ibB&Ji@cgYrrb%mN>Voc9&$OJk(lq!zDMp9TqSeaU{Z3aH77Ba$}4vku9A7UCR>XVqp6Z| z7vL%>uH;6%DzVUAQ|=;MCAZ&8{~@C9K}O;#mHk69m%u9d3asR6JSUOw&MS8ntdi?s zC8yhp62(+Wxf@`WWP&I$&{maLP1TfHgz7TWf5d+$S~3#*-Pu1Pa}%nPC8(0=)|^CN zDzDrfs7i8!l2~aeN>sZ`%G?F2+3>xOqN4ZFqTWXd9(}&44qAF2 zr53%9E(U465o#r56M}oe-trMp5n)>d0?!*SS|U(Ogs{|Rt5&@6mf-v#_5-aq`#7kG zvnvjP=SW86E9GaBEa$9|08+_C+A@5YQ5VS|S7)9UVY$HbI9z0xBX@L?G}G z&=P@KA_RUEI0E2)-a7UHP!Zrn00IvHEdi({0$}a13c!u0Qy%~o0nP*<@Bq*ffLbB| z86BO6y-@QJP!Zum1Om@^LQ4c{i4a0N4OWi~W=x)zAQb1G;FL@f~zMn|s! zI1`W?9{?2rZUrFl0MHVES|R`$9i?X)zcuyXvh}$?Yoj7U?+gS2Pg|iS0<}a4jioeJ zjN$x4>>s%HGCmF};`EC{;8{dNOB`ys$B7sn4S;jMpAY(Qs0f!8j=*zTXbDFx_i$Q? z9D?)1*bh0aVIKz-aYn=;@N^Jb;!sP3Bcr2H2yUr;%tt^)gmDoFJPn7I2-FfGgoC;9 zBiRHvXAv;z!=WPFlyC%|6GBTkYKh>~WYb}j&G-nYh>#P3z(YVw1Zs&8YyNjN1RerfB2Y_|z!NJE!F?%V!AC$v=ddUOfro&W2-FfGY*1tgLjCLIJ_0HttcXD1 zA)qC~@*RSVj$T2?$#aguyXs@0Bt}6D0?)5FXo*2Bk+Y}|t-Xgfv}XTPzHUFU2DkCM z$GVS;lDHe<5_pC*TH;bmguD09p7$&<*MUWVJwc2=rW!sVN&;>PNZ#AJ{?)J9lBcLKeSp)(P0WA@zB|?yO)jkCG zWBGxPfQkr*A`p0*3@s6;B|^AoT~z_+Oe>FkI8=l?7LLG!LrXYniQwL}t~!C{OvkD| z8Y-flibmjhI-n&QwcMvo{2r4RKyI#c?gODBP)#5L4+t%Rs3ih&Pgf?k7hs$v`lSzp ziZEBg5O{_ITEb9E1Own2fU~WA?E|19z>NR|9spVbP)h_LGp<_*jm=Bb|Kgd6pd?1m zzrY~y3<0#npq2>Zo*7r~zcen=J|7Mh;WEMzcuol|;ix5oW1ia&zzyjE9{?2r1_dDS zoDW(8P)h_*zv(p1xU%5f%gvAvhl+5+!V!3e8d}0pO9bbJ8m|W|DP-EYX#zN%4C)ibJ^ zz|&r6scLG8oXDcH8syT+!D-me%=$Ww1lFT280PD&kyK8c`Xis zhl7?l)Dq!@=5RM)+-SJRda3Sn7j94yvrkL{ z&j>_IOlpZR@7ygIfEj3RcG2&np(5IVXat^{1zMs}ON6FH;6VtsUj)~1*2h3ej3F@y zJZFTK7}OGBylD^ z?wP~Qg{?U6!=WNvUN{0zE21SFwM20BX*45z0ghYJS@dyG5obvp0?&9rOB`y6Z~!a= z_~Y0gGrU)bIS+zYJ`^fKtqMipIVH4&q86cg-A5jqQ_lh%x7qg^F}J9{?jxci;)aL> z9wJ&IQj3Ubyw*%KeqkxXal8JqXIB3GSpNMBSq4TO#hUW>7V3eoSiNtYRZ-ApOP~D z(4>C?nf_U! zR(?9)JrhhU$#PrXJtPB!m`lqB!|0FT}b0V)?nf}#t3zC@rIZ;xsO#hVR zmt6@=|D32PQ>K3|(+nLk{geISY)e+=h%)_C5+e`^O#ht7D^sR_F4N2$G5u5Ogl|ca zDbqhCW%?(H>7Nrd<;wI=NlgD_c326_%CQodm7`4moH6301g3vZn31DQ|6HcoIAZ#z z)Nb5t9A*0FGR?*j(?6w71G90I>7UCq8%Iq4WPCW-Vm6ML{wc*!lEC!O2{Un&>7SA^ z{gcG>&k3_}lW{V-^cBB}XuckevRG z**Q*s$Lt(Ou@KXLC$JEc?EjA0Ire|Y>>M#0G&@Jk2F=j1KW>JO{c$sN#B9(E9Wfg; zOUKhTvvfRdGfPLz2BVgaW6siX?15Q2Vm4@&j@%<;w7B359T!^6&=IpiGjybhm3bYQ zo#Qp%_+lu{a>>LY$**Ri1Xm*a64Vs-} zDKI<7QebwDm<>kl9EV!X&T**K>>M#0G&@Jk2F=j15;sG~O56+`F&i{PM=Z8vtXPYi zp<^v>hK`sGnxUg?|CD>uYKD#{t!C(m*`OIZa>STp z&Cc9jLNLEOWAw)ep?jvHF1-I$~64hK@9`GB*RWbKDHf&Jm+Rvvb5S&4;IGnL6g3sbfAcQ%8&n&D4>Hjw}xk;%4c15I0Llj0(-tkteJ& zdmfmfW6uLKbi}C83>`5lG(*Rcx}jsM89HKAXoij$6`G;rm@{-7Yc)ehJ}sdNfy(f( z*6Pe0Tg}W7qr#|}<4K#DIi9qcnIlGpX68r>tK_&da~ywQW{wyYnwca0s?3oVvvM41 zF)K%m3eC##=;vnSIMm{d99zuD5u?JWm18+>R*vPkSvgMsB5LF~-(p6N^DSoNh*4qG z$Z>QaqnxW&)2WIHF^MM&U{{O7Ke`usjcHiCI(#+1C%sY4P z9oxIH*FR>mxn7pVo_p_lvuw=FVvJe3dpvi2*Tym7<+224al+ocev`#{cM}Umh(;)) z5kd%A5kd&jmgROwuOfG}vMh^1G(w1G7=#dFXoL{WAcjVWK?ot<&-a|}M~_BbCVxbT zs`GT6I^U{#s_Lnyo^wv2kZ6jIC?uMq<5toX9k-IE=!in1DLQgXT_MpF9e1ypq9Y24 zrs#-5qG>wTT+^|3%`_cRNHk4H6cSC-ar2sKI&NMwO-B?GP16yDL{oJvyQ*XPnyEUX zkZ7uo=vTTzqG>uFB~8;2g+$YIWcF8LuG179bDgH>h(e+%I--zhijLbIrs%lcVTz6@ zB$}cl3W=uaxS29d$IX;!I--zhnvS5lLZWFp=C7HiBMOP8>BvYnO~>_Xrs=qT%`_cR zNHk4Hbf%QG+Z7$VQ>N&MLSkIeu{ULkj=d>UbVMQXlA`0PD>|-TGet)f5>3%js8UQ^ zyJnh>Yu8NE5rst4bVMQ1R2_S+nW|&YHB)s&A<FN zRpQJw({!AIc2Jjs4JSPV*xchNnYqQRmX)+Q+1pHSHGgJXsV8- zPE&O(b(*Rp>WZf7sGIBRil*wgmNHdG)D=zDaq|~V)3NuuX*%{^H%&*>6;0C-bw$&3 zTy{;z<&;E1Ie!OH)@@G)>3;Yo_T~0oBzNP0?|@ z!xSCIJ514W9aJTvu4tN$U7e=s*wty8j;Je|rsK#1({x;PO~=I!({$u@&@>%+{+g!a z>X%H@arH~4>4-9;X*#0JXsV8bDN}VEOqr@9%8aJ!h%%$8I*z!i<4DR>9Z_a9RmYc9 zR*H%n9j5BI(P65Nhg8;;8BNo1yVEosx7m|fFC?$~u`3(As+!T;jZLTv--3N<90o3@ z`qJ`@S}i2I<#JB`)SkiS-Y}m-aR9}QU*auxApL81QX?G$=|6CGxl)#cx~+(N8;bps z8$S>CU>bMG%c;Ti?>V>J|4Q~w#JwBi9&+xXH@RO#+%>44WTGc|Lw^5;)A;>cP7SB! z_m85>r?Gs~?M3|im-t7VeRQpZsKJ@9pC z9|IQcE}Uo|gWzU+T~xTVkAW2JV;q0p_A&Upc?!U9CVn%)H|!7qECM(e06_o%E&(7V z2EbS0uD@*QS9Sko@@Cs@TUZ3p^Opb+1OVU?08(NAs0{W3;KwcHpxnT-56X=>`=NXj zY5>YNhw@NsBF zD6e@1>MMz_&==OBysb8%9Ah)$t3tWFXHZ_g=TMHj1?4%mq5Kf19VnN#8&NMJss`m{ z*@N=?wh!g=)`>;Fye4_LV{69;vJ=gqF%G~%7 zuSHCZe@NtK|22(zk3Y}0Tx8Ts7prRD@AUHx+y3ikYmG}kN2=#PnMrSdhne)!2hF7S z*%!>DmyVd1NpF8g$)dmXgT8Oobj7*a4aFzd^PNQb|H^T6#N(g0gTCpnRljUl>RCzL5 z{jhJkbyZhu$%Z2OcGnHNoKQpux5K{Aer$(*)5~l6`Bs-s@usKe72hf;q_?lwRZSs1 zzM*(HX(xTt?d_!RTXxVlUEdD+zGdfp)BWw7?^|}vH$%XV`Tl~P^35=?Q@+1or+hOM z^0yHBg_1&sL;R3$#zaFugZO_DF)$_+uY7Su5u>B3_*TPy1oAdle1KHMFexd1mZ~aZ ztke{rcXYi?#DK{w9{a75B1X-M;*tN#t1&TSr=j@xcK!|#1872VS87EOqo}GF`*1}J zrLK4EazYW~sic_Bq=*C1Yl^ozyWS;YjO7(q?vxZw|9C~wt(wBkA2;kGf0qk};Dll@ z?UHlU6?1;OB8Fwx&k(OACloO@OMY2Z!~m@+KD*WRvqX&2ykgE(D=B8It|-1$Q^cF<%rB{cfy*iAh?bU%zFne_XRPPA0$(*9Gw7og7e_(G8 zyb|iyV$xn5#?yQ+j%K{qw{Nz6#=@aztgHoI!|dOpPeM;*Sj2s*Co)0c+X!5GA|vI8 zCfe2%7uF|d;J8-kc?bs<;dIS_LlAiK!zCP~#BgMN(mm7C3hg0t+j_$ygkB*K1Q6g7 z0#afKvOdXy;Ae36g%Ds7Lcb6Q0tj#k0Vy#AmPZ3o74jhfSOhRA0D{2HfJ*>Ki2*df z_DKtU2q0IP91a1&BA^ig5d>-imw=EG17aOE3V?qx9}5A%B7kuL5Cm!hmjI9w189Ae zMduA1ZZ)fv$q)`K!kH2dLEv*NT*5)h6`Yu1#WZl=HlM_W5F9Lmn-LsApjvPV4k=gQ zbbn^SanqV&2nQD7l!QYNxIb_S2PrWe8CJ}J;96|+Ap}^2upk72K*PZ$1f;|eqOR7` zLN7-ZS`5L#BDf{N5d(Rd1intzh4_61XzTyDFlK50$f5sN(@0}4^1c#IuT(g=NY9V{T`Mbq_2o4s(9SDvfaOdC>98zL%GJ2?k;8V}b z5CSYhI1~aw00Ax`ASH$%qlZ@@xWZy1gaC^Wj)XuEXfn8jfRq@*6{Ck^;9T48bqEd? z!JP<>AOHuK;E)o7>q?ncM&wfV6g0O@Jqw}1BD8a%5d>y#xP*q3t7tNM==!UcvPt(} z1(qSO2&m_;03rwg!6hK1#DM(Chdxa&Fdrp8VmReOFt7-wPcQ_5?f{oykP?HDO+r5i zEtRx^5C%-b$P0rYaEIU$22x@eS8Ngn0rW966oP|AaKnNl2vi9!!679E$MR|f0Pk_5 zAplqeFeU(kKz-m608(NA%{k%1CSe>nU-C|b;9wElq~HhwJpnGkAteUqJ%LTTDPVl5 zH64P1MKA@y5Cm!kmtc@`1?IvgVFole`J4@*!6LMx&A`|NTE z9VVf#2%R8s-{2BDQm&$3=-00T=$-#*2o4s(tqG1G00)=gkP?IQ-Wb!buK?%0ayIa0w16F*xbhZ-U^~Wz`S@EJAqw%e?3Qa-f&MBl*aP$&YE*KLf^&n_;Sb z9s+_%KwGK`L7?T}5)@KmP*=6 z0yuC92PrX}NZq{w%=gU$_E8817Qq|~h9IzjhD$I=xdQX1y8CM|y|15yFkunqsW1rw zT@Wr|A|-}-Y4EbPI0LP@R}(^mMQB~Kpb-SdE?h!8zl0`r_wLyXqvRg4x8JRqHH=)rDlKjh6PhYiX~y)zW_LTH3EuZMC$wTuXba zBQIU*H?_3)TuXbeqomX~wY0lkOS`+hmiC@&Y45ey(mr-A?c-~CDO10xrG4gF+Gp2F zN_|sH`^2@hPp(y!`i7SFlxt~Ebu^UthL-lMYiZB6)zU7wmUf||)J99Y?poUQ_FCGn zTub{^N286F_MU5L@3qy^Zn&0qgU^Q)_YE!WE!WcCYOAGv=vvx`ZMC%XuBDxCr={KP zTH4*$+G=T^xt8`>XFDzJVb{_gzSd4ld(5@8$J%OX&m>JtdnVadOZ&{Vw9h))YH7c4 zE$tVbZMC%LT}ylZT3apcN!QYzY_FxAb1m&$doAsL*V689ucdwHTH1$gwX|oG1u0k0 zCfjLg&%2iPd|NH;Q`gcyZLg($?poUC?X|R5T}ykly_WVf*V2C0R!e)xwX}!YYiaMf zmiAs-E$t)M(mrahrCoO|?Rr}+?XqiWm)mP;zj7_@SM9a5&sYiX~x*U~P!mUgkdmiBAc(th39R!e)%wY2BjYH7c4E$tU=wX}O&OS`AN zmiCBiX^*tm(jIdy?Xh-R+DERXebiPq)WtcvhI;7Y0ELJF8LxaJ?y?tQ_}A1G$n2Huw6+TRHg28 zn3ncVhiPfcF|2--V_3!2lxb;KQ>LXY$FTYpR7Hc=Oi6q2nki|chiyvQD9xId_Qo~S z(%x__ZS=5BOB=_q(!=ganUZ!-%9OO_7*@YFm9%rNq@8mmZ8?Tjq7;Y~KXrGsPp_Gl zHhS2Xw6rU(rCo6?ZS=55q$YtL_JrbI*V68FEp7C$%lZ|^u!@d5Owr=F!xSy#7*@Yx zP^V}&VX78rTAQkcnpo--o35q3=~~)oTAQwgw3d~+ z*6CW>ou;KN$FQcD0j}bWRK+9H(w1XbU8<24KXr$+PdiLYTaID%YfDRe(Y3S}T}yis zT<($mou;Kd18!5(dPVVEXT>Aa(nizTw6uk*pDQWT(ypXTOB+pV)6&K< ztkke`*G)+~cioh<1eNm+SIf*CGGA`Q_}A4G$m~`txZWA$FO2r zawY90SJFn8+LW~A7*?r6DO1uON|};2y40qmy@$569K?>MavqtMwj9Ii@+Fm3yxCz| z+M6AwrF{sj{rV$Q(%$JbCG8zv_@{YQ_5IXB=v5UKy+qFFRh1y{stT80Rgt1s)q~rv zjB8)7q@Xhkj&GzELpZPqrz9ML01jNjLCO^z-iYUb@sHc{AsAQ$vmh9Po9%Ur;Svl| zVldjcD1+d>6&FJYun1vE2m}EHxP*X|7y?yT2Eg6It%Lwz5x}Yd2m%0b2>>ZE0Bu`6 z1;Ldj)JZH3XC979k>LBlo;6a z>nH<&fF?h$=FdV1un6I~5C{TY3oaobC5Ev3dF#V`ciRHT?eDikIIsw3M>qt5n!qI- zq{MLaaeNm9-(r3dLV!gGH6aiL5a1F5Qep@zciH_0!MEM^LkO@4;Xnukfm;uk5Rei> zxb(GJgQX6f_q3NGI9LRCC^&)u99)7!N(?UE(}eaax7QetSE z57-3<;rq5}{yKyJix5tPKoF=8TtYxf3?W`0CW6!GUY&)&U=i54zz72U8ZLn$B?fl! z!J+G~TgPm6|8-yw8y4a8{53cP0sm}p2?r^T!+tlSTYl4WA>lAdc%Ot51X>I(2}eq- z66e=#aF!mm6twyQ^vBsi2o4s(kq(8BU=q@>kO%@5 zgG)$AX@g|-65t4clS#HUndU}AfG`PgOn?LdK)3{mlo;Sb%35+48v!INJz{ei#Ni~W z<{(al5MdJHq!0-Lh;RuJDM7@iAWnh!<;0i4n-1Z@BD{j|2(FCZ>Zh`PfJ=Bt5%X53 zP#4~2^#XwFi_V4sU{Ri;00?f@m}^sCe85lciEi5f;1U2*#N7QU024{rt?_z3EvXF; ze^6D_`)N(l>mQhTMeftQtSl&cNpat&D~gcAl83^%-pE|2aIgq(UhD)ntDV?kKDa2{ zpcM`-6%Hw}!ohBZ8}h;}q^xkmUbwNJv%-yd;l_T>$~Nj{oBGsjKgK?7sHD@ske7AG z_@@(!DEEruiBGG|%ZB2~PrGE@ar{rr^rP?7lCEC=BFinR=m+|iLsf*us>t1%e>>2f z;86vUA=X>EyI2#bmAM7hjje?iLGx$bQV0zeiC9*H5?tv{wI8TE!6iJT2&%cXou`B= zAo$8-HG}|*5S|KwAW$Q?gn*P7g3mVR*X_RXJXizG7OM=9N(c`o;jIggAb4H2N2PcP4F559Q{1 zgHSGS2+A!chKqp}5-h6XNRa{)1R51CRS_u{Rcx;Mc&vlshKyrSJ}$z-5|NK7_f`dhHvw|ZC+)KCwhZMo>x@j)&P(=WI z;FO@ewsTP4f#yS?un2TPpag+B!X;3o2vn~-Wkma!T!ivly#(bQVHwJA@CuY~8?1(k z0E>$7R7D^N++es=1f-}4P1kCEhxLZC299^6N<^)P5MdGGh7bt?h;RuJDMIv7a{;&s zjQ5{v2nH6xJQEB-pl#t23{nK6ccJHq_IBKYavRodDDP7{P(H|Zp?s!z0p+*62IYfn z56V|P`=J8Dq5>YMfCPbdfJ+5L%A4(=nGzK5b}yltR<=-HnpaT1ENMXb0`Uln9+CPc z&wqa9)sG*1HSs!BP*_yZ6R{Hn3JRABiWC*}{JPC^rAMua^%R`1BxJCB2E|TO>Ni_O zIOhkS*1Gr@qu;@8t*g@tFIYz^ny}O5FE1l$an;Vz^Xdq^QIT z?k}*pFQPYvet;-f>dP(U0e<*;;_InjYyFVt2iLzD3>5_y6=g_8AqW%&E)@kSSBs)o zh+%*(HNpr#_}n%M<#&Dz%J1@cs5G#sG!rTfL10k8rP3fprO}FT64Bhf)csb?r}%+h zmeTQQ){mz7;ZkE2_@O!HhDrmAN;9j{5Cqx=E|q4+OXD*^^97k9Pz1&YX$i_VG3G*m zun2HofCK?RxCDq4Re!zXjpfM#I6fJap?rWXLivQe1m#cMWhlQzD^UItA5NU@T!Vp~Hrs&lE|Zrz82+c!#g6Q#S)Iv?oeExw{W{!9=%Z^x9TSn!P` z*;dCnl%lzZ1&>T=iZx(amy>)GQ#}8$;!#!h_N)uHb;&ZXrnu{F-J^z5S;L*^l238c zcq%{4d6buG6U(|0U9w6u*Os#n3%Z$QJHJY<+m%kTz0!>JymY2mTaD;)@~abyRvs2SDk-t6c*(Kl(}xu$K7CkK zVt3IUTTXtpreD_{);(${v8U*cEhoR)C2gqnhdGb(Qi|#=Uh-?X`Oq|`HXoLhnByo_ z@xJ);6-DE3S3Ig(BAB|Qo{FA5tb5c@Vjq~g)b}v?nJhlcd6btWM3gb{sG+nxn7ZVS%E#pH!<}quwafTAC{EL3b1Uc56q+G-ouKn_8wN1$f9stmy<<29w>gh?omUjQ=r-<9~|Xn za{pn@qr9}5rh(NZ3$_WxlaC4>nYvUFSY6^ya7A(bVa21W@>YMett;AB(c#0oM-8Qw zK-DE{GIMHKdT359OAqtXh$@3B?~{DyRMdEAPAwY`OJ&#Obs^^g@OtBO)x0ZbKQ)2I?k4id#n-!1ww8UIrS@Vy~rDgt6Rf#Nu z%%!D1A}cj_*IZiW?lzQq2&#U?nVR&Vs<+LfW%YJmt|wV5nMX@~Lsn|zjwwqu?wGO^ zt0r@4$?C^^TFyMGh-v0gRe4$3m`_W6%hk_=@66 zS^Jn%OX2FQ?d3b>)N=WbIkoKi8+U4XIO63gT)FzL zxwTw<*W6mNA~Uy^tgPIxbhKi)KFfQJtvm>H-3Wm<|FfKx%tTaTCzAXzm}{u%&}$fU2|;Nd)FLW z_Wp%Cw(S24cWk-;PDRct_unzcmIHs$bZq$-?$~noow_;Be8(JHvIsHHma4CGp8D?Q zJj&~&Z5Afx+ETqrKR>%u@TjCz7Axl460H;cx^Ty|rWWp)))ea(^KFT$ixTVa)IDk_ zCrcXhZOID7oLjElG3S=U2o^0*HnajF zxY=$`3?8k2kRjF+-h?+1?5`EokYHHE{Y-)huDscoN6fVlY?6%_m#r0+73Mh*-?r_- ztq=q(%Cs#Af-Af0D-HphAP^(&=Jq=L6WZhb-`HNK^zrR=HHOcH&i-Ug!e-1 z1cB{!xKuc##0m$y74HA&_B!Q`Z?ALtk8iKnsG>Vo+Y40@7P|rTi0!+9&0%;{L1c*4 zw%1R5>ycYvuc>OG8~dOwBohnCo8N|QBK?PVQcKB+^q=AH?Ld6Q!#|w$==`lZ+zI~9 zZ@h$>OD5)$H-DRalj-l?;akLHT0Zy4*RKr3tgpY3IQ;1Rt;1Hv)GH|79a8$Az(GtS zc0I}U5!Y-vbSfR*J4CSX=Fac7#c<;_R4JKY(f)fRPNlzhC-tmjD&5z_oK`I7b|>(8 zVNaoElL@MkCC7C7UsKqQ=`_CjzL7Zlo8)9G$9a^atCUQwCvi1=^CNQ1q-n#E8#C!# z6Jtv8{1e_2zLCgNy>8eYst2l)OjMFL@t~I|rvK#ew+PtMN<+buiDhqY43Ct zKmJZPmCos1YdUT3bkxY+=_sJR)6Jv{N-ffXC#a$y5HuO8A}lJ!l&VM&s3KgdB2rYv zv*<=n1Hj{gHY|hyU=hHK00;s%5-tHCB?b`P$g{gQsye{y=V{6}-mHC2Il3ErwWhU3 z{0*2UWi_8>=qqBB-b~P1WnI!*3>j9E>54~egislu?TS#|NpioMm|${9{hV%M^Mh@_ zJ+N5}Ec*bPq2;=kML1)vk^zWJ+4@SNV8L5p0f0 z4gBiOw#;yd`4oAl?}_Eghb%bMr~|($zH|8IO3CY~1axX1@xC##0Cg*YF=DC=<%8tt zJ=AddS9>>WP1cX78u?V~dc4+0@5O74JgfHcdsc0PTD4E#o6zUp(>{NYp7qfk76EK2 z1T2O64@@flvic7}p#Q+7sv<@Gr~aM|!v2oDT3#)_0#xf*+tm;hOoDnUD1w_dv){RB z1E1935)@L}LD@r_(Z2?uZw^+Vd=RdOfMF5vhJXnIgAgtOBSpad9acwGZWDy&o;;LK ztj|JNRmXZREP_CL!X+%ET*9*Uq;~c9LIaWxqN*Id7aNeYg$+omW+U?CJsXiH@7ai? z^fn?XjE%^x_iRLNQL!!ht54wDRLpk&Z|p$viTpbLcoTDJ9-?2FvqydHEzK+H8A32JaEyX9)7q7J!xnD-P521FGIR3k( znk=g(pDZ_PGN@d|Cku+6{@yc>aFH8jZbX??!4*}oyK|*g!2!?CVLO+yA4S=Zq4tuA zz2vRmBKy-cir`JX$%io~GRM9qZ{oQMOXj z)?39V^eR=DH4xm*H4v0}DY&8gyQ%y8mCfe;{V#Cqj`l{}IVg9WtUFrO9bHXUTX$6L zBmTaKzaMHknP8d64M;ps{{hmUrzN-c@t8Nn`C9`KdmhSEu5Nq__O0|scjy6Iw!ozl z&4xdJYcR?%1a;vFc}Jd*zp`VFkZT|3Tk?k^_7NzXPj7q;`MYVB!@J4d^uJemO1==* zVstdhFa~9=K5qOP8D69xBL7ADkFET+B2{(ABlZa>_xr5Itf?_qlQnNmrg;@e8789) zQ&7GFRX^Laezw=_XU&zajVs-==_pqLYAuQ9&710A`|4ox9s8{ghKX{lf1bZJ6XlzQ z$|n;v%meZrq-o@@9HhT*wdrjYt{AbGpxnVX-nSEVd9hwi*3FAGt!1lZ)n+crFb}nw zOspnvN&ZX8pSu3C31GGF{jS~hzCU0>^VRr5l)D_|7TlrW2CpBs;566tes@&aV!0Qi z+)GfV_h`4ap;>I57#?GdW{LYq=c5C&nuo`7}3gul#qw=*z z<#%5UscGTnNQeCKH<$xqJH z|F`u7pO+2n@FN~L>P$FhkMeFud4GkxT^a86WJg!#50$x;)JtU(GM0NM%DoHaol5oW z&ZwT<86Q#Br3CgOVy{76Oiw)-Dp*eSWbFAXW{VnymJ5 zb7to;6tOp;F6O6x6{no)_wtmI(F}DIWjKafOePkSH#GweNPbUp;4%P<0v|iCqiiQo zm08oe{6jNT52sQMMe^MRi8KI-{ZL^hNplp_Y@0W#8x+ z%dpYWlN`%v?uee-_R!bZ9*DB#p_Y<~rQ}U|V`4n>yK24h%#XZU&D%QHYQ4cI-w@PA zXPdCjHt}X>8;;mVpe{Pwq<6N-E1hjL$}k4ykCU%buBi;O{U=iy9k5XQIBM+ih5Pr)QqmV|JbWVlDX57gE+1~{ZWeSmKPmXl{8*3j;*;Ul=%0=< z6`*VY-24)mW->fT`#NSa|JvJ1O;&so4TPB}+booCLFth-o6%x!HlxX+_OVT$&Bckj zPch0>f+}hE=%!Y2#SDvxzK&w1xlCLp42rl9p}eXZx0@Qbzq8pKw|XLK5BF8X-GI6{>!hlZyi8VG z16DN^|53z$40SQ-Jhw^b`J0o@>xlgX>SEH_@=0gw%}M7p;y;73H-eiQYuhG%`?C1x z#o#>3)%E{150$^EyR{>fzK)&CD7H4V#}CZS#}Aaxa9SSis#AQj>wV(Q8Ll_Vl!Nja z?mn4bWEe1g9WOF}qK?ahVobd;+A5%cyY0 zh`j`LG0PnJa`Y%Z%ZPt2;-81IJ&YUwg<>6N2H0-<N^W@0mv0DIjRZV}((I)!e6B7$lREb<{IMSJ zWB-;Hqlmcz)jHOxE6W5nlj_RqSSKo{hnTq6Bkm2TXUW8~%Q%!#Iiq&vOkCN@uD8wo23UYcJ^jt ztK-$rY`ECLRZ+HWs6rCoQ?{(iWtpA}ow;m$k-Ykuy`(GOPLyvKYA2c4@kK>n_MimhJ z>?l$3+E8{?IVr-COW` zvaf!|_pEOuc0S|XEXv+B-^#9GJVxtl!X3-DhVia)o_^=_4FTO`Yd$QYW?7r3ZYgVG zB0Ho4Ok|goqxP|l|I_dE3VHRjNkugZ&>Q8?Mfo+?O=dOM^>s{UeX=Vh54-?9ZwTm% z1oT54B@;)h(CTM(iP6Xzh%)A(8p%W>dGk-nIGyb#W1(|8 zYeSp6Z{2A1Gb?~{4n{eLpbnFXL(f^ToQs`>X3me-gthwFUJG(K$~Xe`GMRXpy!r2e zoXP$~h%?zKae`?5ZuK*}X+j*0GLAv{Y^_$BwO0Dm*=8eMnygQMKbow^qwEt=cC}H_ z+Gwk@*leTAlXXnMWF%k;%Ey|iQw1!&oi4C=wgqfCv)GU-6^%vRWZu{j9mQPf;c|O4q1U|vQrB5(O`60~J zU$@Uak!{Z$Fs|f1AA*5JFbjeq2z<_hOE5^e0(0Trx(u3s8eI&b!6LLJp%DbWVZkLd zq{PwqvIl^h7OaE-U=hHo00;urflB~Li2pFHyKsxK3y#|~y$IpJBAl9V z2m-AJmvE30!;xEzJrLX@%6_q6(b|jvxRBm*9{R zgNyexRqhlt?*eBbG+2aoE;NEb^T8!Fq{PrMi8hDTmnN%3{2jT`a!UL3P$HZ2m>ZzHs1RJj zKuQebieHRD0Nwr4PzVkd!3_(JATSxgB{-zS;Jp3JO$9i9Ud?C-XT)*FghLRh7F@zX zN*f%T;siGiTuUWoA_NGNDmE!Vf&d^~0z^s-@TymgDG+T#iaR$QLWD_(1tAgy5aALc zQi6ywX`2Djl|*Jkc(4esC_I7y9$dmhN(|3$9cM&p{iLp00?r>Bb0Iib1UD}@f&d&` zf0Pu&#Q>ZVS7!4KeF*ghWd!zJ6tV}7_K^ffjKTp3?Rm9z^ zDaHU-K1;ZTdBx{=1}Ez7ch&2{J2hQ$TN{dB{d&HW=mbBYitE3yqKI2vRs8G+4Mp7V zE}dJu_a!^kmYZJEB`#MKap&z+Tg+&$bII+`D_%&I6m9)?Kh^f+dQF#y|IJUeWksxm zYw00&s%`%EiY_@)w5oXfZbK2h#*Vc;xogMT(sk@u+w)(yV{Pd_cC0PhpgOabPLx;7 zaiogqNp`U9z~}5_+ZWVVKlk3TlWpl!cCxK3nD}*%`YNu!XI4tsM#im_PSa+kbe1+N zC2S+jN(tLYvr;-wo0U>m#;uevVU(#+(@Lp3V^&H%8Mjixf>DWBKbn=&%d}Z39j47n z3HwH~Qo?-Z7EHaFoT6ODtdy{CG%F=6&-80wrl6=lV@68YH=2>slfOhwUT#_W@FV0vOr(Nw0cXgXu&Nit#7B_=9eGBIkTbBd1AW}eg!s4g)) zQ&h+l6wPGJI!Pvso@mBNvzdyniWxIb!c1{nmsC_yDN|Q8moeKU%oI;_iJ77qC(UPa zG9_Bbm~j$jie{VysD3SH3W^ppW}Ac|qS+?N7*;c=Pg5ko{XOFGZw zWIoiDHM1lP5zQ=#2G+0JnS!F7j9DdNh-g+x3`YIBo2e*zkuj?z3=z#L33EdITFcZG z?Pbg=2}4A)O2V8_W=H!OGfFzhm{Agjh-Q=orV{HJvq^fHDcz-wFhnftS1=VFW-5wa zWvWWV5OG_VSfkYxcW3L0da@0rVu*O6OUCKX5H&J6MMs(Z&qyxTb-LWgx=!(Cx}d0< zE-97AR#}&_CREH8tfHZ8RjE9~wsk33#lzXUqLFOFQnBjOC6;+z^1EC~=M=4{^FK>o zZ2m@cDXTuk%V~4yypk>{6`MbE=uE0PbbgvPht6y1s#3A}Gl$NyCRE`A}Dr+vCr?ckL zna8xbbSBkYIv29$(s?FpE}eO1n@i_ej2Pw9c{Xc4or_uX>D>Jn?$a4tQMq28OXn2L zr}JN+$UT4IE}eCE_4A8#K~XJTQmU-_bSbMo#XISWqTO^=sj}*8rkYdd=jpmGx6%!z z=7H5ElDp()`5>KBR8QysDXFX~%&9XY&zw4!vIV8iWqHx{1qZ9B)6k+27OgPOv?wG9 zya&OhMIlnOC~UePYraSFh6{|pZgpWF^}}|?1F#6DdjS}Nz#Dca0v}5aWvj=0r*McC$w6B2mlrV3PfaPBg8 zFa!sS;D!W85V%Qj2@WYSIKN4}<_`noXNHf2U|JwSr49NVx(t?q-3Yje%x5 z7_{Pe2oEOVO$d)5aN-tR!b3_7uX!Mv``sN+mb3x}b`n@OXP63s!XnUVff58N370^T z5(8~^_|}$V0kHp&_z%=@CIkkHz-9$T5V&!02@EMQu!}9nA~LTtYxf4B^U_;~H?@(<&i2SOm8&ID!BiT!KSN3@+Z& zRJje%ybElG&|nc-RcHi(=7URUNQt3o%kdcqzGM45gaC^WwuC?ss1IC1KuQcDULS_( zHemjRVNQuEU+pc<@<2?cLZTpiD5G(>Z6%auH2rdC3B?jbuPAzx_ z4)#{G-+2fJ7U6XLEjR>$_Jd0}NNIx;ZPRxD?ZqjvJ;-XiAc9GNy#gc%0Kz3eq{INP zZqw#K^iJ3p!h=P4{lX&%bV9gG-5u40h2HWg+UOg6I{YTN(|$2 zowN}=1R^a5-f##H7U7Kuk05{tm++7h!}HD&+Xx;7&RuDbh2UTj+_>Nf0(}uK!679E z_k(2i;Cz($h}%>Q;lLuCl5hwDIB*FEDKVVZW0zG8IKC*K58=QfoCVcuN(`=9EpV2>@sYa{!huCNtHL1& zj9j>cgOnJKo`g?9@JV(pgaC^WDncL#)C4XeASH(29RZvh>)>1%Y0YQRjbBd9XQfxT z@wXTDeVeek&Qld?G?_qk7~Q}`Ig9?0w4$gz$E~r!~isI_CRnG z?1k)&YJ2|yR9Fzj+dt$rfA&+F#I^;Kyxp^X3DAVTR)=F)J!OGva@>IzMs%c)@m>QoK{o& zSfg#+KEKhR7OsB&fRZjs>-0Fah+MQTpGX^Y_=lzuKKw(p_Tlx8d<4ZMjM4 zDmTBw-ROoIOeO}CW=gk`{p~xcq0~xNrgS~!mW2uWg0Oj!b5Iu+7^_*7%lA{OS(z)5 zL52y^oa>AD`=Pqb1miyCc$!5ccqsKWE4_U9TP7F-5r6&?|C;l!y~#fq@ee^=sDf9r zsK*bbDp{E(BEMU$CtdB~D8mSpeVD!>_2PB4`A}-z)QibL7x+eEO}c+khOtW-Hax?| zr3^wCk1|X^2+S35X|6zu=8B1EGFk<|53PC{0)RyTYXTq$0Kg>x zq{IO5>sg1|!?E&(7V z2Jlg9HToPFe+X?s`4{zVDF4d71La@$ccJ`_y$BTt78R$a;t&Mt3zv$66cy(qd)%@L znz)_FU+2Fs`GB99`MyQOME4OBdY7`?Ong()o8Q4Fd>(JQBcc*jJ+_Pf9h{n&PnRFq zXK-p`pTTccq@L<8%ivL=o!sD z?Dxz&?DK41eq0v;bU&`<9roY2bJ%Q2Y1JQo-Q7qTi}p*iaIK^~94fCwY+gZPfe;QJA-}YOcxv(~rMXu&|^ghH6z6# zRT?8TKBuH@PDwYEH2jkj@$oHKIJ#~MgJiP^lP}(!Udp&{i8+Jy??FlfFHG7>_A zMQEc!BM5v}gG*>gxq{ZyX?vNsO3h8HF))2IeLRE-i!djINf4MR;1VWMVwmgf&`yHj zTh3D<1XzSHEd+u<&wxt^NQohI-)${;3gEc9=S&C(7U9eahak{;a0v$~F`W7x!||?h zfXzR0Sltu>wU;fHbEOb0OoE*gEWu6N68M=1{1o@q50_w(5`!J~%`1oXn>Nm*=-~5! zw>EAULf|k7yex2nK>vhG;7EyqH_vApiH^})1kg7GmqKu`2yR($1c6%#m*9{RgS*%{ zTZy&mY6uA?Aw3lmL7-xA2?;4NB;T?fioR&Cf!93DCWHoy(AI@U5Euk-39WJo?G|qd z0Qju683KSs0964H1gZm<0FV-^PV>041)jP{pjSQvZdSft>6OnzfG`PgOMnD7YjV61 zb2r&Mlgt5;5(B(67`#``d#~)m1Fn~0n=;rdGiBHbl>sJ|VOM1!2$TUXRT?S(co~M? zEW-=RV0$N&p%y9wOe({k%0Lhpop7lPNQsrf9~aGj^!&O_3SFtz@Z1O8KO-N6uwfB) zUDyPH(E^vSkrKns-?j;fyZsUzUs4{1a9|P6E8!3XaNrUSQersG?Q?J%;P}SrQ3wYX z;T#KxATUbc5)M*gI9nXy{Tc*c+|PZp{Tc!e0Ss^s%D|m~cz7g!?wgXn;x1z;{z+8) zQb0Hy65fOGo;$+7;@A`pi7we2s|s<7&;_}UriYz{S_LM_Jy)v`1X>?1$wo@7ReJof zBdD&$)|bw1+*q|;VZmY*SOlmCrWI|fzWV^|_=5&60U;#@ba~~|dc5_5>1zHtC|~CH zLHQd}f2bU=*j-XN24J#1r`vCq11^;VDJn^z zN;LVt6-iqSJwI*Lz8A_3f^tyaJ^G-081zTf0F-}B%!kSZi^?>pG7$vI1eeN$lvwv< zIX47=7i1X9Uv5T1P_PJUR8Rzg$q+64!0DOonMxaYjzLUQk0)<7OD*`15+#9$AiWGsy z52h6KDlk6%KZUw9_pI@QKMyKU-cQy;Wr0Oy*-%*s0?#nGR2HOMl%>bL4EReTcW@Ih zpYp0+BHH~~RFvnT0>GjIY^eYQfhi9z6#ywJfL`#o5$#Wdosei)Bzjk(2?944E{R5p zL^lr!ramtK@E%oz^4*HP5ELwe+7}c-pc&y36jB6LzY|*u97L~C2cY@fQit+$kY9#y zVG-`3a0voyFSvw@6yXm0FmJ#1dIhFWG7TuVn>`Al!y@!!p%Vl;GF(DOiqOY>X*?3` zpu7ghrRT}!Q|?Z#1P`(^EtLG>&F zMG&YQf&_&WLHQ$X$hS`b>;=Y0X%5P#g}x9VEUH_-00{zsa0w780&E@{*;IA|aR3~@ ze|ach!VE(B6Lbj5Jj60KhePFnN#z((IS2x;rf{hoNKrX1^<|$D=3R&W;>~mva9>)C zL3QclKgAdi6$2&}V?xCs2owV@6$2@OVhp`mj7h+Kd`&_5KI?R-5U{8a1r>rIFuveY zA&{a%_*C8O1ke5W`L1a1ZU)fi!wbsye~KaaS%)tPo*>ZO;SxMj1fTb>*7Sur0Q^Zf z59PgLA^NQh<^5w3%17W*s35SY9hOxPg1{^dmkNRu6-4jWD-ql(luxHmq5P@22Ia-7 zKruX0zs*OEhR*+8=Lf$_8&KYDHlfTzFWsgZDk)4V=`)p-AkbuRsia6zNqc-I*8A>r zFuZVEP_E{-9m0Y|SUbWZ2+aC$2@5F~z2nXIzpc(2`7b5%UwV1t!JD74u-g_$_19xM zTW=hvdg^DsoTlwV)|U~W$dfgP{zJ$VKQuAwVH>ij%4h!)<~wL58jvz+jp(Wui9s=v5bA! z8p~9b*o#@EK6W*~luu;r%hp7uVTp_WX-ihY`WChSfqmTC|G>U(VNe|Zyfu}v?^{zD z`@n@kv3=ko>x!~A()Nj~k+yGK{h;bs3`i9fGWL@%z=Z`T(p9#t(BR9#Y6MHnM{)KH>~ zk##9!WPLEl7}=w|4nCDJvM#Y(RfI9JM|e1 zsB0NJPIWC)Z629w=c!_;YzL~oPTPU1uhR{sVySEgs`ANFN1U!_avs@vs#q$I=#uY< ziZ(L^kL)~EES1Z;1XR)UOvNKRPZdk$ZCzriYzM0LW$U`^%i4jeYk=w!dr3P`bs(G5 zA*lmdJ5Y7%$9A47mdbXX>UpN1#Pf`ur;4Sr9jJ<7uzuanR6MftRIyZ!pQpN;sVi|e zW9O-2sT@B~wU){0;L}Fu~a_MrL1J-S)e+1=U2;q1N?_u{oJZ!Ufc>zzqk^>$3rbx3&>R(D z9c_*ZuyQp|1)J%LQa97)sbCUNU9ul$t_pVV)OERg$6OV#<#l4rKkAbAfERaj9+|5G zcEQY5!QOwI(66KK6g)Cl1x0GAOU8_%;jdLZGFJs9Ky}IFQB%Bix9*YoDq#QYlCOgL z2RV5WsDF^ZP3yC#X1)qA=Qd{rgV};o2eT!mvcYD~3b;4stzbA?QR;BEs?;*Ly5zJ? zMbGZmJ!&X%5m;T)!g3}s_F>K=b5^hfsxG;!iblR(@W`AMECcF^=Br@t>lIziecgN& zuyePqOE%)nS3&pJ>$>dzy7?+N7Jqzk^HwnG-U>$DTR|02r84o$pTOjY=B;4z zL-SU^=An5jpoNuq?A{8F-CF@0iE(cQ^Bmao3y`H11Z-SplH>RpV9h z!UyK8VBv#?QrVg`X9ZaA%a_3OyXLFl`Cao>z;31aD(L=c(wr5Hzi-Y8#@{z*1wB7? zX9c91vx3t5=B%LfzBwyk&(WL}to}E5REd@!5FambrM*`NAH`nf}{7%S-}*r`jypyIV+gTnzMqb ztT`)Sug{znkZR5f3R!bjP{^9If&$f5UUY-xhG6Aq%~!$7&zi4-8DRD66fT7nkGx~P z3P#>3$&u=b>lKfxN@dS*TbCy|$WeUo`MO69rIvuzCEJ2sKTrJf^Er?5 zKTm2ITwRiPLhO!-%e5 zP@K(ql>Y@%Yk!#>(IqpKqW%vH9+i~H&Ryn+X6~&u3Djrpp%7)gq zF4>=|DPFo!_o$&%Hk?j$$^KE-FA}fa&3TmnMN-)u8qp#wsoocDqeiQ?omUj^1Pu-#_lf>&82f5<$sApdEU^aJZ~t*^M*$y zrONY$F6DVc@lLwpQB|q(ywOapDaP}LM-8PeaI&?fE+xBunbhOEIgj$cth`If5nWQ` z3B_9<6g(;^HNTWBH&a&>?|e}4sH#+UdA4=QmQ79Z!Ee+(YAAJdDS4txc2c^2g}8Pn z=TZJwNM%oCM3-!FOekLajeLTr|OExRI?h}{q@&5LbavXD}=cen0QLy7EXoamB{(e=-WyWh`wl>cX>vd1x^OI{Nu6ysLKqmokD z@F?q2i&e#k?^HahDwR!;ZC$dXQB!>UcHN_fQrWaP(ItBjU0)(zypi*WeQ$O#d>`dS zXcq$(Z7?jn%_oqzZ?;oFfI~YNND!m;b!w5=Jv@rH-9Lpz-22)bAxM}{Z>a@*%hdwh z)Cw*s<0D1PO?7ByS9giv5KQHBe8v7;+nWf7AkO}! z_`ZqS3o^X{PeNsfMa-uvJHeH`w5px&43`8W#U!f&D#jV|U1Q@sBp()K>H0h56I?mY ze%s{3CHY7ZbN8nJOeA5S(9QYZIL)4t+YRgcbVc_MIeZcRyJXY4um{|>Eeeb9dQ~`r zz-jhysc=Y%6%KYQ-2c(j>?wErGC^?P|=oOYJIfBvNX^J;%OT93& zyTZRRtGmL#!r4Du3I0%ZhH`DS!O(qxMc6~S4+K{_p=%7nrE(%g{cr!i4WRvZ`OE== z`~4h=s8J~2cOHZC8DkvERSG6TC4ogHnN&##0-NA)sU%3Tl2C;G`-w)1e>)o8C%@hw zYA&MPG#Bl^E3vJ)?|ytPqVzTw72OnxD%e!?O`D0RhIQ7QBdUw0?iDUDu)!WT-40_@7^fsY&T8tm(4J!qy+EZkL_Pm z)R81bq!p>HidygpT_cL>)6#6HsIW+4QAH(C=f0vd2agJh3*(A9oAj)O)|X_K%OdQ2vqfMfBV9=X|v&%lxjC&zNifk7i6nXvPFWlA2TIG6!Ao zqgIPVh^{E6!R><=0DSP`1(#`2F))1cVmVIzYCtyC^ZL%s{4PJyxy7Uqer1wK8|1A0n%FEJ#@<-NDlzI&1kF3{F zF69L3R)UpLYVuy9(aHY@G+0yXmIA23Kv#nm?#0?`@?O+luv02~#N_=EL(%LJbIORe zS^ivAmz1)mxNzItK2y}ZRv{Drq@;-Q+K9bX(-md50gFPJElQB6_~7joMU=j( zSS@=-O?>2@hwcL`szTQ?jZ1K4ZuVsWT)GiRQNJwQvti4p@b2Z7mz*B*{;=H&8WsWc z3Vr)IJks{lo%Rs2}1x>k_rA64LAgW z1TkW6JB3t#Eu0QXg+*|z4n6L@8t^n!7Fbl4HI;=R(9&?JEJ#sV zTyLmy-v$JQr~uOhWD%p%^8q;(g4mo-w~8=p&W-`VG-I8eD=!$^~q*>eQJ%*L-Ip-}xsG z-h6js^&sh!_hRpEj17Bt)1IxpwB7S}w|l01#CR#|S2pZfjj@w_kHwfGTZ=JA$9ZRK1tedu;VyKE)D-t~#Pi`rU-${`&=wN=l_Sm36s? zR*vHJdlirD)tDY;ug0X>t8wL?y&6~UHI$cLchbyjcJ;M;rh!zuXBtTKMAJZ`V@-4* zx$nNIAoblh6(stLsUY#C&UBD+_e}>Wci(i7=tHK1M2Dy;@8&&ILfX7%N=V%36aC74 zGbN;>d!~eRbPuyJ?z}6zpGLjm49eHc=TJ8iHyEkA_Y++m{QnZSt~t`1UQUppg+n{5|Uun4#3@9CBV zfkg*g>Xt}Rw=DZa!3gLDps6+s<O}ScjH?P$g=KAr?T$4 zblBuWc?~W>A>{(f>m|U0w?iF; zj{uUs`*v(z+wAg=LdC43Y`kk7W#e7zD7;mcH8=5AX&vRoyA@r&c-Q7Ns%9O9l3GVO zeAhb4A=?bof8YFKaic)3H!Rs~isW$WX?*FUzyLRSi-yhhKqjKvt zOD5YYy-|cR?bjPP+)C`r9pX@G-`pXReLxP%l%W)5n1dQiCdS+yVqNYKhf;NOhe!ro zyK#c-zdL_xKFY8FWoD%}@y3>TDFnr3t zlmoHJjze=GMm~2SX4wuuvIBVKerzeqy$ogM(l>o+pc9lXUiqI{cBL&*e1&>cS29iC2|w(f9W3#b}pcy#d2?F# z0Hp56-%^#jAM4m`fFh@LwJ5_LRKX6+{xvf6JmwyqrFtIA@g5nhgvBS#0-nFMALToM z@^k5dNc2AbNcnmn%gY`4thW}QFcke>)uVhbq1;QT&a=-w{v8!C_xJ~%ufLVyFv{=> z>ZK0*y``Jm_n4cz+|l>A*&7%wLa^~ye8OOMyhfD$2+GSTC!+(8@Uf0g2h|2i^*iTpokbbWq1=a_ z#^kWz);oqUvpZrSw{ILqI{E3 zK256!&Ug=;Y4t#R5X7eGsVLtx)I}efRUev8&0gw50xCoqW}x$TQD}$840R2sOqMA$9A&kfrok=Y~JOR(fpbhLdH>vmAS5CsW%~D-tjV zWxj20d(J62?Wv_l#P zF1BV7>m}9i*kS9%Cp*fn!LSl#Uxj*=OuS0o`U7B>9{({OUOSg)Eyp#$;uAZuy!d3l zmH%m!e+_CC7tX0$c5wIdV;$UGyte#!qbcD`@#*i6>U{RNJ@+P2T(o0xFOD z5m4x?JhuDI{j(ds`kBem{o9Um?m!(U6UWJ$KO*P)<6g_T{GhQax^oo6r-!huCNqrxEwv>IH(K}rlq-&)5&aIK5+5CSYhm=FR% z00Ax`ASH&NLy#sx_*UXu^yjG%0xUw976L&40WKjRC5E8g{sIWT&oL81fJF$iLLdm- zdbosulo&$u!@9363BD2bbWG5`&BPG@;Fd=3QVRga(Vy%0eRu zG#^|-LrM%yhafG2;3oV_Ap}^2uq*_EKz-m60#afK@%k`KR{*mWHvM5W1P7Dgo(hg2 z00)=gkP?GCzivC#rAPK{2Ea7{C*;{1z)A=ZCIPMskRSjEmjICx1H62O%Mxd}Y=CHQ z*dT6(5MdHxRfq%uM7V^Alpvx`jd=#5Pe;!~c(4d>OLznUJh+61lo+1h!3$@c+n~8V z+76U|1=xl1&m%9O{L_C8%J+izpe}h@+UJK$o|X>y;j*_Met3|0aN(`!B|ltpA9VO; zmRJ06$vsPhAJ~pfNrm4GwvYJXlF(y*xMb43^LAoI|KlAGXf4<3V0TPf3df&mulnG& znz6Z8z4P{jv^1J3z_d$MYo&#^8;WS0t`xBpg%$5M&!*mg+cv9dv6_Cy(}na9XtuoK zfzOo`(RQY!aPT&J^6dWqb<#HFM;@>#kNWyU+mnBpWlJ7qk-tvbo;)_LSO#M|`_K%7 z53>_W#g@9DU$=gQWiX#H9-3irBfFwRY^f{y6R+<@+k@2e|q94=sqo>r&q6UV?OjlFg z%zHeF%wTxr8>*}O**>v-A|fJ=-v0sHg4y!W6*v2W zTW)RX&#}j5TkydT*cEK{Qk!kTEw^g4ZFl0a*%h4r0lR|DUTU)~n2hSrsmEqla7iJ% zg7aeRmNwghk*PnYADdmlrG;z?W{D#*b(h(qEuFg_n_a;xKVVaEUaYDsZgvGX6x3*^ z@9g6SoyrQ?6U=6auDID0+)&W1yYr73_-7AtA)A6({f|(SOo6j4nC1A7&92~@ z!eRZ}hE(0{?25B5m@;@`wgvYWF6m!3HJfe0Y-(m-a6xSCvDp?}Tga|p=C8gsyMifG z?c&{dY<30L7qThXe16&N3T9JtxBl&ZY<2~&{eWG;%;6wacQLR|TaWFo;KC*S$);wr zEqL+&+R~ppkIk;&#=;V9*kx0**%pjY?c3dbY<2}V7qTmux2cm=-DOiV`-0g*^~7uo z9w=m6Fnbvgs=Je9Rp<66W?%4NA^UwPP0p z>$LyaYzs~nvMrbuTu8NlvM-pOSx?Ni;FdzR1v86>Q2QtQf^mc=b2_yavMtzbYBu|V zsi?YJ{$x+5wnDZAn@!DTUobMYZMX7CgW20#nAD$aYBu|V@g&`?deW~`M`U=?lzSk03?ojMCk{wMw<_L^4!yvoE;2a9IBm z$j!cBd9eN+dt&wlj~6cKU!uC%7|g$0`gh`q*%&-g$j0Ej7$M&53}$B9A(7!idU#t%a0wO^T62u|UB?BcvaES;y)~Rkpn0<+IQ%D#P32T-x z4uNL`P!a~0h_F5OQYDdKzoXm|k^n>!S|x!)KmsU9fJ;QeI4`wnLxO#QV|z#f5J~8e z1P%cSpd()bBU6}y1jD)2iM6s zc&ggY=khPLjwb8|wN9rkrQNKy>r{5C?K+i%8w`@N6Rl*G-FljgYT#qXEcUOWLn-F8$ky?9nU>T>Nr+g`kC&^X%Jl?4+a zp93PT247`y->Z29rxX4LLjDE^0h=+zBy6vlmD^Jxwm^hV$!;7@R2#cv1e93A#j=(| zOOt5?*m^k=5&%SLhVM~c_X68Rz=%CO1a;d*hVPlD^gm#K9C{nGyZv#n;V~A??7-4o zNHZW3H;QJX_X2xGz(_NAL^K<NlMxwWBb_`Vl5%rrcLjDj1Vn?71s zF%yILV%wjmb!z>gnXOQtX%iM!`7Nl$cx*BLGTDu76|ziW9T z^xHmtVh75W(k_&Lum4`iBLS%(_T|7F0&ffiC7*ia60nEi)Oo~dNnbuzZmB_ zK)QVuW;!Grh-8=i0@)k_9S%^E4VQ@QV;zptU-)&WWl%&aoU|N{P$#$j0+HAXiRF+t z9FJvr_c|zvg^R=QFubNn(xi$stg*pp;Lz zD4z#*J>m0S5;?7GcHD7$s13CfP{9lQ{$ z$>DdS0BO|Er<|((PcuAbFvFta~q*h7}nm!q?NV z60az#Idw@WDzh4Pqi{`^rMYG`EJd}aONy#Q17cf+6*^7k(z!)f`_A^{F9Od%K%``g zjKx7?!^!x|%8?!LvknAGffFv?g8*pJV=EHuMj+n&kk#WsNI);(-WLwz^3g{cK;qwj zIbyKhLxb^GWS1EIW2CzNamWdP7_pZTdpQryPV^r@$N}09_3MDG-E!FpRT_`+V~Qgr z0+2*>%XA!0^d+q6KuHW-PLc~ zKOG3k03;cMlEEP$1C(UIB_c!H2zxH)ng{2Ti+i!A81LTpE@Mm41RYjoQX6>Nhh2+4 zWY?mz^UnkwcK(^5GkVzsozcstkIz29Ii(rDvZPbDUEAAD0S}Q+`$CD`+cBffiIyK_ zwROEVx>uIiiw*u^0R06_|l3)1kkh36649T5?vg?@iShK6g znx(|9S&KOE;~J^3VON_D{5bvMJYb`FVgbr5_@gc@hRg{_23nGA4uOFNP_iamrv*%TYHakH$^$In#2G zQ`2&=EJHIWWHn&-F#s7es0h!IK|b=W@-fE zn5hx+n$qmYZlRePN#)bm##;Uzzk4Bj0aAwcWiJka(gh`Z!A16}J6^g6NcueXIbM_w z$pIocC8NmU5GWT=k^`5B92PQ^j{1TxBP~tF$?h8v2`HBU4gmq6BmgcE0c?|~K!AIv zct`*c38<0)4gmq6B%tz$08NlrBf)+(xF#e4h$PfX0*63ZfRY5bM6%#!|0SpnLAF0s z4`oM^8lY^YYYYhoBH>LE&fzd>9_ej>l5n_4IEHJ6v#p#-C>xnuLNb6zMyq6S2$&F* zWWYr-N)o1anw(wEO%VhW4+@SCT2VR0xH`JIike{>G-?L5R5io&qIYdC8Y`IwjhCqE z&xw4~o=xPN_6)EEgRHGA69m{kcM*wiI2(NpJcDc=lPE#;dbE9_y0tjL}j zvYN{`LsoP7-Rdrmw;y@4^JM4|9 zP}>38Ha?wDty++ur!|`gTC=%#>Yz|-#7U=deNJXvUn5#wK3$?4%C|myv^G7F>jSQP zx%RCO*t0MPLSKjb?!y9w*?W~Bj2B;~mow^zzXnKVr{D*nti#k^rY!mCp(uvDr<_Qk zU<(fg+x=)Sz4l13UH`d>wLdbE7VgnViwF~GyBMnQ!q{i83PhymMLPgA+QungHcp9V#wlk{ndTq$ zj8o2CN~zgLN7MXIUNX)9{HSgIr!JZ1A8pMTTbsO3j*(*sDqYTo{U z@+sX`h+H8fcIVk@$oN2%gEiG=4u|GH;_;wleYiXWJc|#k!`iOi*$A-)BG#K?%^}c$ zff8%DSk@-KuUx88ZDNFI3pxG)Z#yIjkR{#33LFlqA6=BFT1tHRy#P>vCx*`=N@GU&iyYc4UA^VCgRr$RW^3f|5YENZ`sP zV?;!i{nEdbrX0$y0j>y%0wPhB62&1P3Y0{_#fW;%i>g9^?Nn4l*`bD-kSHJ$RVz^( z0-``k6kH_A_RGoC?4{fqMywJV&N&(}sgz z^Y&HK?qgZg@GoC74gc~b)9_2zTM zJM2*(vH%dN+8_&XP~o2#_yD8)!$VNjx<(j(&n&HN3NZ#Ebh8+9IAK~laRN%L;bK|K zz($uO66`}&OGp9`C2Exf4uQE7P?7)_f!*8*aMMiw0h1@_ZX%?cJb@3xNhoKR&9{e? z10s1Hf^!H=pMa8baET}f+$i@)oj*Zu6T98~36~~z2j@>Z$>P6?{VQTnS15}>q;={x zZQ$*|peYz-5FUb>8I)NY6(|A|@r;GKk!Bl+9;otoj32$dkYqq&*C*q0IN@7%APtmc z!$n>-bK67+4W#uW!+z3xAS3~ZBn(Odhkyi7k^q;81obwCkYM)Ok&EGw3_y}GA{iV4 zGC)ZNTp}_wkT!EWG?0ch#dzm=18Ix5P5fEBZQ{@IfwYy|CjPA4Hu2}!K-$#pHAS!~ z%6*i4UNaM@JE4Izlu-v|=C)LF9h99T18Fcxsg;!@jls};GW(Z-0cap%H6gQc2=t9X zN$fagM`XC%@!B;++19V@QTB!$geeJzVmkA)hILJwFA$KA?<+(-3Qmc{D6JHh%Y>(yBn_2gUS;8m$eNM`z(hf0Fs0i*@r{GKAsBZLfX{%GQtV47CGg z`}ez0)~q^6gIWPV46~ZdZP2B!t?gY&2$`RH>5`h3ODsS<@qG&u>>)Y0ozi2^*Ro5&xPVQJWnK zY0Ebe3A>se5&xPVQL`NiY0lqLZwgzR9ufbV9#NAW3u&@rA=uxHgSStSdu+GiO6T|?b{0{Wg5D3`O2*ec8&RDFSE{l z-Yt-sJ+-A!1W)rgCbubvzjc-h_Jw9GARyx0bcNBdD>3twpx&DAecCr}1CkOj`70wg zom&ZK6M)Pf*tFIdBok?~#-M7AJz`gDmpC_jpmX4IxWa$QoiOsqsuxH5;5PFr|x2t?gin8Y) zgz~@h0r>}P2NZWch?EArQPWMU0+%I9ij>H=Js(7i11>3*gIllETWO0!^DfN@sE)_j zv5SRcWy*a|qO3?SMo5mu&BV(-JMvqAS#z~Q*+DP8=c1yBC14$iiXv^{CxIC(+yBB0 zdMRC-PnT$iDlkh`I-qQSy)#rrfhaRwvKNOy6$Pa#3Kvz;@*)!u`skQ+Bf-9PuO}n{ zh$Qq%0*64L1tke^IU>OZS_G9Bh@p*=M7&A`=P9icBOZ zX|R!?yun6-ilT90D{!Pfa$_GR`$M?_B54E44TpfeKq)tHQEoOaWb8GFgwM?!!ca&8 z5J?!81P%dvfszEc9FdT**T#jIvDZ5V@QM!dVJ`V_x$)ucf6{2{7oKOdtqbYg5wdjn z2Jgxu=H|*1l|>qx9nH9D`o%F|*00B*Z1j+B)v5^Tc(thrBq&k+-~Ymd5Bc>(Cfy{| zP&_tdR|nK6-Atk;dpfh9TVugfK6xSqWmi8>L)l`U2^9hm6~e3vfkU8}L8%bnqC%)T ztQK=fu%CjQ4@m$b2@8_IA@IBdN)q65M1m{kq(Y4b#1@ff-D)W$4~XO~OCE=STY-{1 zxMY*Zlu%LVAp!G>f62SSYFKHjVWq8xd;h^!!}Nc!)v(4^!4^%J$|qLk0z+3~$Mx90D!^N(P0C3|jJTCK7BT!9Ec0 zgd_lwgk4GC5O5Jtk^q+@5{|pb9`fuX@qS1i5Xn1`JPrXD0VR2G$tI7nZUos;=8|{q z)Q1MNj>I5*MKP!<+K!gI8*N8nl9F?8TrfSby07 z|Es3R%taksF#Rt@d-cB*?RBm$GLuntI8w>4qJgX42CjM&xJrNJ+t>7qWx%W}l|vl{ zu0|WU8chHq!STRVkx5qxbr`ssY~X6jo-Px(s(kW9HIxlpHBdHi)&44;m$gR+L}gg_ zE6R{Vz$-zi4B?_OY&Z;D^+>RRt05!-h$J*h0*8QCf|3Nd9FcI`E1QsK16OlM9uUb( zN*;%RSAvo}xMY(@A2ArXFt7MmgacQ-4P5ov16Pv`Tus>nSECJFjrdy&c|8nV%{Fi~ zo4}RK1g=&<*4x^k4g*)x2Ck$DT*>2stKFwcbU@j_)fqA<5M{Va2IUZN5l}KHTx8IS z!@$*z1RJ<|LK1*TLa!un2)GC+Nr1}{3CCTe4|z6l^@rpEk-P!P;}CEWP?86iZ1Pwg z5eip$h{9DvG+b5u;o+*@hO6f6;i}1otFm{qhO0&!u9CRVAaVxq{< zuk4G}Hu+S_Ffijli4iCpH%6gsk&T5+2t+0vmkBupoC1_g2p5^K)y9pHa}1mz!A^%x zh9m%ygeghj5E%UcB?)km1hH-{3VkSq42t92xk#5|-1httKy$)=TU&Ko=-j7J(Y{+{ zI;0{HF`SW#90EoFB^BW!73a>GCS97&or^7L$J|>5+>iFTQB)4pTI3bw|Fs;`dt1xt zww<_PJ=BkDBOgPdzoPZyoH}PZK`D68W(+(BWo!6+C?7zSj|Js}Lm(fZln=Nl9}6}g zdZ=4Of_0arkOUx-uq+820yP|zB*5i}gyS`Q1$k~dHzW^;PnC3&maeoaTd-=IX@eJF4|FoUrG)%a&F7?m*|I>iT88q+)V`7 zH~L)x&{o7KLS3S*=zpQlyXCqoWxURF8<-6kJ5Y?HFrv2$WhbQeLL~x3O6{veI0SqQ zlu86H@_=?5Fq+vSbASZv#p#d)Ad*lrjsy;YfB{Mp;35fP-5v}WWKbNZ?)!RZsvM7+ zY%3qP0i(?Zj5Y#B>9~IzPZ`p)_O^hCVYyV~5HJELsR$RTICb9y3~4%bKM*ibROQ|t z4H)zHO~9DHpCw?Ry$Kkd_f5d)gm(qnTLV`@+3H*s$_EhTqgwgk5Xc88q%CU*O+8Kt4`=Ky_ zGIE!c*;eMl#02ibJ@+~kxR@}}eE&$8n7YrnBm(SvJl`in9Yw6Lt4nkg{Uu>y@uyl^ zH~K?fCJD#}i54ik?5GvW_TAe;r2s@$YF8<62>2B!l>%H;3Ih*K{iw>JFZVFi^rM9s zr!JnX$x|0h%im!uat9T;14V87(iu_|i1>9$Q4Rq`K}k`#7xqzNB8@p^smN0oOg%n0YwGay&<$I+(2ZgE=Yc9Y@b$AFWg!!WiBK1V`~fe1Y+#vD%Aqrbs4*}%jb zHkP*xVw4#}gsm>)ArU~7XhI@5oLGS}Y()T*2-pbimY{$)ZuJK&K|%X&brReX6!!ai%|B_PcuQ?nhE+&x0wh! z_%~)d{}K{kT+ZNEp!oL9X`%aszS8H=jErVbYfvmyIIR-w*W=`se)BXb+3Oya*nqMh zmDz-{YXP=G_5&iLY|BMB1iEaXWI?#7a`a>D9a!7Cu^VCyM6CD3n!}0e=Qf&J)^M?` zO@!{H4cJG*U_8c;zGp}VAjwEe28Y0=QBYDJE)f}a<7Sn8sGDNa1U^+c!#ZhzzU0@w z+g}Q0_Xw3i+129ZP&QUp{5sIn1R~Wce+@GZ0n37tYH*Qi%6C;pNHvt*bW{Unr#fq) z{M+&BLZSglbiG7#2y7V!CDCw^=$DP*t8z?zP>amHD*vdb9eC-9=mK8)2J0o74;| z_t|lpK08i>xy-OKLN#vOZ-;66i_9<$7Br*En8S=J4_`2&%EP#F!>|2rfX0mJo1pAA z-o6Vb`fw!p9A(J3dJ6rft#f_2K6Pa>eK`1~WJmv*X}FqaJw>Z#Bv=nhLfI(S5-Lz2 zvT>^lltZ8@fl`6OMFl!-J3H#_w;{nkPqc?50Fi_aN#GEOq@W}LE=MF7pXo~&pHbcE zM4s)wb%o>sk-Ton;}GcWgOWVBWRu5Itc#)EKIRqw$!K@;Xm5Y^V!K>v_F~rF{`^Jb zmGc*~_V(v4t|{%@MVjG@C;Y?pvrs|)F?~^rIRBWu81)aoGp{OVOK!sWf^m-&YGhbIIzF+76^wbzxPG!T`*OELzHH*%k9cnl^6XAcy~kmo zi1#=wCkBeN#AE-jYwXI9PQO5;53p?w`=RW+)mc#z8!X}-=_4-;7U@$7`+r?!CWikS zGrRZJ_+*JeD8D{rfS5NFxgO+tm}|d21ngOO17VRQ_pMb%q3l-?$3iX!Lc1X!Bp8}NGj-KC5?qZVy_{61asB6} z@AxCC3)1YSqnTd^))xVhlvx>#LoAtfb3Z6)1eb_ou_QHj4he@_m4}Pis+>#=7wKL5 z^S`!BW+Ho)7eHG-T7+uLygOyI2q#?588w|7(v`@AIA?Y%FZqOtWhn1S!+6e0>7Tw!G4I4H!$pOnJF2IfyeQHu-8w<%i5AonK~v5b<_~N!`yebw8^UW9G?! z>(_C8;-&tXnH$$;ylueNx;s#2$E}%BpU}iq`qYFSSNwHcU!x#3%baXA-Sz1bdr;oE zV;FNkay`NI0oUHRU}an&^u+9a>dtt;xFBTQsXKJECj4+oDU@9oIdvxzRFU!&Z25mQ z#wDeUJ03Oe)SaktVQ4DD%cd^C)Yb)-@4?@$%3OatFYD+a2&q-Uux~kF+dfyG%MJ!1 z@ET9%6@cx-Xv@{?U=RWiv-PhMu=S?#&$5F-2;9LUx2lZJ{b#a+K?pp{OR}mnI`3V{ z4hA8xw(!*ewx5YUct1NBgurP&cUlYBK2y{MID-(FEqrxgZGUF=c6P=fjLMhjo&qi~ z;{$6CvV%bgJWW5QA*02{OWDC7jLI0J5wIPG*?%QF7=*w(uP|l@*cM>>ox_IWl6_3J ziz$PTd?*AxY5Fko4{Eu&eDPzYY57>pn|T}l;>X#u2wcF8j~TVh7^EX)5FkP~zKfT< zo7Es7Bpwa|Zqr}y%ot?%-GI(OlxXu^n?^cI#HJB((jdSE+y&AFbGs35E-%0wh?qC! zDUBJ!&^D8%yzKS>E!2K7;$eYP@>sWvP<6?-W^nsU3cIDCV97hFWhZ(XulHT4o2KNuPD(2G1uOh&On#~ zEnNE*hEp@lo6m=sgAw!A^GcL9s<)h{cAU?yI&cA-f%L=O&gD-8M`FQ<`@9=1mF^l_ zoevGaTJ94-2HHK*g(X*;;b~PJ}c&Bj80da&8|9d0k_YvZUN@o@z{3! z<)3nAvWO4wEGH(5%=;(zzcA~ah9=_X1-kXmco4Fy#)nB|yBi}=_RB~A8|kNt{yp!j z$(brLZwc7{g2%0UG18B_^NR0xjCux%F(}{fn53UE9=V?4dV*`;?*MxiDM099bKeHq zwYw3k0DlUk+m3cxvuxj0Zp%!GDr#-t&2AQ03b=Ncr!2VJ60Q8;ko(cMQh|}tt3FVo zTXm*oo8>)Y z^?|?zT-+yLWN`-EDdj|r>&AbFLXqoct{3dJ*+c+VUI2tPg8SAB79){52K-PfFw$!4 zSg76#glgc@YLQUA1a}*%$09XvDQ@#@!zmbXpFE>PnOHp;=)i#%Zj73@40H3HxtG0F$yAl9Spz zlXGtOwQk)fPi#Q>T9=}hZAPxAx!&U1*E+DWHxR1MMEtbdhXKOAIjKG34>1zT^5FC| zyJL-$Jlc>Y1O5P7#%X_%SB%4b*1X;ObMDOO0bn69Q)GtI-SYFjiMR%;vM6p zvgSE}nlaxn<*76_TlBBbCMr+O7P);K<}-4nH?IfhJmC$L_6!mwzd1C}3NkPzB@m$xh@uDC zyO$s&9u5MopHAmi!*(|w+l`yrF=tkpEF|WN+GO?pFBl)@MWMgpIgWGvvkiMdmOW5AyZVn+Y~nGBmA&$?*_WS*)(j|aF6v;R>#Hwk;Y@|acfu>}o; zEF>0+^sUqVFU&Yd%WpKmB(s>7SWo(`B(i2{gEEsQ<^#lwMU2W-o?0~HFZ*9;X#lB> zr*rNR7a679Cr@-hd7~^~gwDwIBG+A9d!vArQGnn`+_w!uXSCu2j~E4zal&IQL3g0$ z1D8=csrfyyw}DM_b4!|=TSzQL0$cBIY+$Q@X5yM`(nlI=lYXdf?Gk?Z8mX7Hig)1D zvRTEu|AhuWNNwKC&Dr>$Y%<`JCkCOsO_s31P~>`<>tU|FO~A?~Kp3m!zHKN*--^_F z;IfGu%>X2ujJ>6-W?G7|x3YH^Knpke7W3I~x0Sx*WTm&S6a^yQJ;y42PoUBR7xNBY z`ZNafLnmCZPPh_v!ts+%I6)$7@JXmcCtS5oxEgUnQX41aoN>Y_pFEL*@&;eQz|)cI zRjy~a_67$lg9D*A@*6*oGY7)DW7qYF=}9QlgHt;M$he~!RXyyObYIVId*Cup*Y$Mn zJnRqMam~8pTEra}PP*eFX{>dYpbp(}-MZs?#2ra(+>vv}9hZIb#0r$R&KlNOja;vD zy~ee-4p>ui9qj=A9wfMlJ$SCr|DW9|h;Qa}s0_6kFka6j~& z4eL7_QQz4*={wsbvewywI`o}Q>pPnf-yyZ}9nKlw+4ad2dr;mw8(3pMa=pp*0oUF- zU}YU34770HdQ2)eViVx9iG5QE7@1@>S6MxDnAP0u4g*}kR4)5gCZi6sWgTWK;xMI? zC*oHbX{<@gp$;8p+d9m4#9>Hn9ENkoVJdv`L?x6r$rdK4id=7VUCp&O30Ro~2;+m? zw{DU?8!-uRnWXKRyabF)QvRxPn(>ly^Y;Cd-3rjcrFjaig}GhYUG`ptd9)J^M7%5C zdq$eQ(`H`gM|4Qu%WiJqVqW$h1CTJcYhml5?26q6D7%Vx^!>aN)~F`V6#%ya8~z{T z^Q4o+vG>Ku%(Eopqwm{U%}F|z+}(L8r4!tibROi{ZY(f*3ODf?1=5Ic`-R2b{6pcx z?wP?!2PEkg??t5V=4X?h90mVn$J1-iNL{ zPkQ@h+PJ_d3*01q=n9J!k$w=59mMnWo#@yO!vLBS+9@($^GQy|XKiO@+n(4?O#=q3OOVVj~-qcyGcAHO|XovD%zk`=|M6P$a?&R8gJy>}? z5PCS=|5@y3OkH$C*{Pn@%X!@lA0*5!0TMn1TyFdyw5+yqIZ|e;m!EGnGaCW(8ataqM!=wWOEZ(|d^31Ky$7R;sAGHUgsO43YFG8_hNXLbgm z?Bd(8dl3cQ!@t##l+tkaUZm8<>=!Et7}0tTUsKO_UojfO+-O)q#hbmCz1UzbwqtxV zV+dXBdu4{9tl7%02df}(sa1J6&6|vuG0h9NV`{<9s5Ntyco^ufz)gCTG4VWt^b+?z zxlw5Qus#N5{d?;Dh^1^%rvE<^5lJbPQqhPwl{F&5*Qk^{Z7cI=F)JA z06C5>jA!9s6Hs;za5x;SfJ?2>Xs{a28mwSv)H--bmpKru;3hqW309LxH$wz@|CT#@ zMSM6snb<2b9ge9=)GvNx}|y9`k`} z#-~ioLis?oM_`(ZT<>!|&$SO!U=^r{=J#GFkiK zVw7aOg~cc!jyV_XjLBF7(S9+zkHbtBYhj(r62iZZeND*?MMBfjb`^{%u4qIU%FiZy z=oePD1}8=XApmX?J_KZWGJg7W>@>nxP{X`=19}zOHu{S~O-HH}%7+HV@ihPiRYt5z_u2q%-D?wSA|7L4m_e&px`=W4mYj5v8O$T08TH^i?A>e2 zr%Y@^dG|WNopvJEX|8v<_U;8%?gfMeo7}f!R)bNe0{#?;b1FclV53eonANGg6>+N3 zfK$Otb{f2x&fQ12nSjVElY^EN*KyiOloXp0kAuk*a}Q|}SWA`s*3CVz-jbxH#WkE# z-zqIOgJ%^8`_97Q zi;D&eR-;N8@jsDQFGG|Sw{a@Z zDJwQHsOGovMeAn!_Qcp439Jq4piCDzuU1LRi(5FY=9CwY2usp=ciz?646FIHi3TWd z!!m5v7`ZOzx`}IVL$IM4_sQ+oB2YgRo(e) zTEWg}wQ`2Zkic{z+@wd{d8W*fZeQEe_C`=TAW3h3L#dqfwl}g#ulqYATyd-YjqGs? zW@6L!29S({cc6x8=ZLeN(6*`W%24&!^2`TrE)|f}b|pwGuP3E+YrGcGt^V3`bnCV2 zc93Gqt1n>!E}~4tU4F2nz;-_luAN{!dDX9UTTS$~Z_eI_G4sBFfM$w)7>?GyE0 z%Nx##4d=Xfs6I)gK6t6$7gfLa4^SW8M*TXwq>J1b_4^V=eR5;eUw%-djS%D}sk3s^ z7sw5YC^x;=(z$);y`=5Sd2}~o6~(1^c`{K!b){PN|2A$Olj@(j2Q0=k!P^=>2(=K8 zEyVM_BxPms->W^TEH*Q=B4royMp>W61lGAdX#Hlzrm`010iB@ z-#&znL)o{D^j!ZF zIWU)oTg>L9(4{vX<41gg#+XpeXCrz=pSFNYtyVM3@6>8On@uei8CtbY8MWYT)Y6)O z*1(zom`kl@ATy|9zmeK}>#)?0ML$4NCV4ATYR$Kvr_As>tYEs8z1ZMpq~GFU3+eVr zYAxb3$D{+2^peXF>1$biCSwYUq$Ke84L9*w12Tv7<~W@^3S#q8q#%ws2q=j!jf&s= zC&Zs{kkWuQFqbx)XfuyCHF~QA+AKiZy3}28SSm+*-{7TJpP7qt9@1Tqtx(`*JVY+h z7nrJon-u9TV4fY}KZ^YbHI|^cuMh*GWch`#zTq&px< zfQeTpcMsMkQkumQRmEnpL{+i2?AgT<`@cQ0SmJ;*wh2r_9WIurDK?8GYKrxiF}qlT z)aLn$b7rwb$&^c;D24LvU={6NS>(Eg>vFDrI|x?oAP}A*xNnz8R2OFtdmxm>*)Msp zn2Mja^=kIZ$S66ypMv0D^-RFaGS$UOl^KJtLXIuk>ZyP?0#TA3I(R#8MA+~Ct+?BQ z1!I_7Xww_d_~)&3ZVlWIXTWNU&4g@i#CWw+CnhxNNMlW357nKSkgYE^6SDQidaJ0N zkR`R5(BPbz&}i_<6OB;b^tG6}DRN!Ubu-uA^k8LrAXE(QTa(lUObY~dhaE5Lr( z+FCgfVhcp*M#fVc&5-K}wjjh74gzZAa}c(6FnTD&7KqT*1n%nWYx+QlEgS?SY7b{j zI}+jwMBq{;!%EEr(FtWih$|cfJkWR>Y^{Hdh1dcSdX1NJ@WeSDf6fIqT7nT@cqqb;*f&d!p3~r&d8O9^V(Q~;j7HF6NDv?i>Lyrq-wy}^ zBSG+xpn3a7n)&-ikhYF4A;>OlUJi)?A~AayYA<3a*XwmFFs&GPNX&}D|0evSQTQ%j9A|Bn*fW9Y`35thoRq{_qe~ zZ(2)da#8ZTKz{^?(51hFF^3bnyVrF96K~j9-qPJDQ}#RmN`mr`2p~#SArY0oi=U<& zfkSh7VxEA1WhfFz7z~YSUm+|R2X7vqvc9+jtDC2~im%M$H5uvFD1du&2aH&Ofui=! z9n~R4fkVgx6V1kA*Q9a`9Zs3NHI3VKDD2p~x^me?5%M(S3 z#s&We7yaNr94UGj(Kkg=yY3|!QWS^;wg}E4Q1qar9b6*X0srF{J$grrp3CPKeJfeC z6O(PBECP|%!xa5+sOZ5cgYXd47X4aIi5esd!4$nQQ9I&nN3$a&4v2Vk%Ay=Xfd!Z( z!ba%BJ!f4=u>JY&kOUw~GfEGp2j8;KY@;8aa4r6nYXO%e*eO-1jVhxbhdm3eqd{fo zt7uGt4IN{Yw4crC3n>Xi;>J;O{NsRIfstnLh-fx$HT$Cm6qJs76_?NVs($ikA5#WG z`2!-Q8_8ee$AN$XM)`w>ptg+bM!^9&;F^O(LHJQNZJL>z`?`w@!V&J1yR zqRjbMWljP~hGE3A;KPN!_p@l3@BJ)V=CGm1j+(X|84IZiMB>H;=MX4$P|^)95#4|r z-TtV>j^5E?=koc*K0y|3J2Dx{A`od^{wEB&{7InL!6<|95Y(>Sth2>V5!iBG$0O)#KA*QGbYpis&TT4Mk}ql5oyy%bFX6vNdqDlvr>*j*3K3f zNt?0IU3%YhFt(LtKExP^7%zx1hZ8Z;E_nqd)^HJc_rCgCMwdk-xUt`m1RzSZED0P= z)QdT@9S@WwELpG%g}}qrV)x5vwLtf1y?_s6A1G&Apw*CaK&0H7;2Z+=0+f`4i@;7f z;D7vjf!@)2!R7Po#X4EE--+1>Wf6$9-g%Yby;lQ{3Pu@(hoHt$ckLq?MPRChvCt;c zYzw#*k_JR9wq;NbSsfLOq`^Z_y|`v4la1XFV<1BBi7|(Oqk!9qiiTVuH0A>_;*!kO=)Ch% zw@&16*j_SBPj2l9P)o?JK$Oi%o*yRf1S|qZ7J)~^B9pu*hJ@ZCYCon?+|_Kkq2fRRz)5i!cFT{h)Cr9Cg|DXVWh&r=q@ ziq@T(ua5Z1%vax}MLMyFodNF(Spp94#zN5qj4T3=h(*SZMw6o!S%3R^7U}#? zN8F_CKOJ=wuD?k)>BlIx-5CfO1&DGwj#0)#Mgb$Ez$0Rm@#h)k`5|`fAC4Gh_#ciM zh3jw9D1#YK844K%h;lkYmuTc(AfSMeQQ#3V%81=^lRd<`9XEl-cy8o~QD#Pt8ing` z(kR0jql|=%0>tDLPbm#~3K$s$9ucFIKF?G7&pfaC^!%42M(O-7M~%YuH))j7O!XNH z83l-Py3EVxmR}2a3K$s$9ucD~zxJG_XYb1Mj573Jj~J!@zaBLT*WaX3#xaU*dL}|f z0iv8Xu!5}NQNSo*WE6NrjM88it!1x1bu=I1lNiN5I8B9&0z^4o zWj*Zb?SN6h$SClL7-iM2$jxq)+1tvE#+_A&US} zHv8$__lJ7-U}O<^L@d((yxx5~t7+jHXpF0m_{hPRM=Wyi47CPjCvw)I>>$kslpUIZ!HL}=@YCcDB4kojkR-SM6}<5> zBz0?;q07EI0C7w9(ijz)H8L(EAvz`929Z{4RP-<-FkLShtD;O&PfDB0%NClY;xT>< zxrQ(jML*bS@k zugpXO34);$q+wd4S~_FzlHUhLLV+k%>F<%oA!|;+NB}$pZT*Td)8G3=pXDLOK!mOk zV-APPm$-G=b}1|{@rI4%E!~YWm57+hiSc7;M@R@DC0k*UbM^1NscJ}R2m5L>R2`HX z9?Vb;nSUFh?1KNM47KtwZ!0IZm2>UT-iVOB5h|5YO0u0>t~@keiEQJQtzVgu4HPh5 z+4`07O0+Ou>4pXCe{Y8cyIwNE4}FYRQq;yR(aN|b)-$yo-BNN>nKZWk_ZrndGh2=H-li7dcA0Q1)Lc9^7tj0O;nh_9GZN-B6*p>g5(#_U*}UV+ zy!^qZOteG!6~Yay2=0hnH*wv`wO=6&_AKmy@a)fhyM41UutFGwOj*eWt;*cPJq9s2 zKIOi9s}m^Mz0s@-c4n{4HD(|GM{D+%jny|wtkqfNpWBV_zId!Je)|7_Q**JlzFuiA z?o>8=(C)=v0M;^nQ2p^(fBZBX)MG8h<$|^pn^)HvXnzJe0A-Ari}_-$#d?#*cUp^$ z@qilRnQzeyW|9m+4eG-yr13^3lN!kQia0da8tmMVR}$9Gh9>`lN9U}to<(1RERksF`pK5 z4u|#q2y;+k4j0S3gshqGvm}e{4j_F;>FCZ4vM9!>FWJzY7b`jX4V30$b`ca%t{5jT zR(kXsC@sZoOXl0B#VP$+cI+D{t;K8lx3zdn|5hFS21;9TMS?%uifa=5S$*^yDDB1V z`m-I=q`r)}tJ{xbKQDmVdZT(W>aD3Sjkh-PCVJ)jpfYa!wMk!P;kxFPbk5$J)Z^Ga z^ZLzPRUuyeJ%jyy#oK!`oiodIw+DUcKywigfOO70H$HcqYD{g^u9t-f3`9C-@dT_F z*ir-rBAwIxJ}>{VY9&ugq?j#7P|feBa~57_EvN-`Wk4$t(8BBKoK>!mq9kxFf&zhF z1sQ>T8D8rV)M7z8XX!XdZ-U>5fR+H&=Vmyi45u~TWV{&x)#s*js&g~OnlYdbg3(q4 zR1K*15VV?*5d_+ffNBAyUrG$eofXy%tG1WuB}7o^m(n>cuN*7F9+vm-MnEk%L&@2U z=9Mo<-X4}o>_<=~XVW6D_L0tG<7kZGjKh_=|{?5CzF-s z5zN5#bk6S0Ozv#ywNiQ&5zy|^0rWPAEGU+y!Nqu69G&@#-EZJDlGO^?6JS z*ZQFB0+D_wJ4-eIWuK@AGt>~2O*@>yjbx}%D9dFG%DxX|JoE1alwB<~nfZ4L%C5ah zLD{jdX{cxB?LIS5e;@mM^qYmMi?b99dM#l)DSicF*r3luf?`Wj>J1|I3;G zS2ENplzkh`8kBvH*E*Elda(gzAMZAy?8DzyhT4X*??c+j;C3_r?m<~D`x)E;lr5EX z=3dEv_nb?iEWff0Ri62`B12VX{;h(to%^#c-H`UP0G<1F6oi2+XxdLnhk zDKdS=<$3*#8^hW-<3daAS*KCmSr^b6&pIPEd7|yCFI`Xcumw4$S0nVEbsLNa{9l8f z81b0Vvo3&4`M*+Uolk7=#1gv#pUtywg+=wNPUo6e-O{nSSAD6xnpk-u#*cpItKNk? zvG=Omr?da63v!LGIU!B2IUT!RbC&IXjn2Yf!KcU9@xj+zrpI6N1@oHQkT>t|EO=t= zHD{0Y*PQwXuQ}=I*D`^%{dH&Sj@Mn@x?gwcdR}*`jlAx}j=t^;I`z7fpYp`U>yG#4 z>-Otj=$-ZqO3pbeRh@I`sy)$o&Pi+XM8E%Q;GAoACjFf$Pb{5t8ZCQb%_m>?#MU|I zvpeTpF_fHlcgoH?q2-=vIPVxXdZNt}?dQE0op*NZJMU~Zc-~oP$P?4&oukg2PmIQ6 z{Ajy8r+JTBKkv$V%k$p$clNzT2OeDdhEu=H6IE|GWvkzCeCqsP4R5%dHNN3gOZvZB ze5wwQ>GVXO|Eu3K9P)RDJu&L}O!-tPFJk@;XPAXIoMG1eUmI_@T2=9;|5TPI>fdy^ zXn4~ZxW(U@eADd*oqE%b3t`2XH=P+4-*mxj=}p&ZS$WfCdczZ&o;Y~ZSt$LcbMLaZ zeA#=V@-63-Ri3Evf7QO_tk~@TO1|X^xYZMFZ@Jx-Lq658C&oQ7;rYyXV)iZ9&)V_C z?pp~nVMAUg-cF3fWBeG}csnuwIK~e@dfSPfe>)TSSKfAkX!UJZ#kSsdx!Hc(RiB-= zU5vH!NqR{Cvc)XH~U8C1RFf=<&rKI@)nd&hBZf5$1(|BkcnfG0-Yak55zsy+4C&-JyH6uH`cpOkt$Cl-*wVj-gVMC{9k+T zCVm?GDV+D;P3-V#i#*8ki*B5&;$kArn6QS08!vjpUrdx}Z#eflF1k|b^u+i@$A7{T z8yB52n-`r9d!87+tJ5vmL z%&@;R;)(goPM?L#&NVmvoh?t4U2(-#ekJ45tyi3~ZC5fKn64|Xwsc=%KrP0PR`H7C z-+RT|+*z8snar$#=$?&3E3tknfaV%y)TT z^LJ|Ab7fuop6|}R=fEwVXnoIV*yf3LPjtTLRPFLawp@6^qArI zTrQ^GbDg==dzt>g%zMt{vtFYWpKkR%*Xh~wy!YR;F95-^C0CttrJktpM5QOHue#jU z_&c@!PTf`4Dm7kpMsK?6a?<9B_NzW__~hMJow53^x-1QQV)Uvj;IXT&(>Hh3mB;*5 z=cvn9ozt&gbvawR>R!;ieKk>&6XQp;gM2Z@kMQ8-9b9!yX8HTB_gnG4YrAUScZR5Y z-znGXiMID$CFptI<)rt0x6XaYry76XX*uDEX`g(?C*SbNH+}Nm_nl=+KX8Vq{lJN+ z`@r?an?7)uHjf$gn9UEIt+zZ;cFhH$@@t8)c#I!oQr8^s=4;N6lh>Rdw_kIa?!V?T zG;qzexO3N>wdb!nBQIWaiY#4o_E^8>GQDxlDZA}u?Rd_+KGmKFmt1!YORqaiS6z3` zQ+?fuXu0l9e%)oU*JEa`yAI6k^+cNdDT}+;UC#EdyPTEXaGc6-I30U#xF@Jye`oB5 z3(Mm-+!Mpp4QG#OpM1s>^EaGE3qJYk4OivXZn!wJ=abjobXlysnQ8r!H=T)FZf0s< z$4#eY=S|mr?!M_X=<~$TP1lMHdt$<;n)Jk+C+2Uu+^*krk$&T*Mm+g3T6indMfTmh-rdTbXvE@0QC^|Eem;Se1(Ug0l`PB5e&iT7d7|qh=klXI)!0WGQ|E^vK62{Mc%reu*|(`6 z(e^@&A0wXyPH<;|Q?9?ji5Vzx3{m=f-Ay3TTai(6llc;+=#*YD5|L4jbSE74&oT>NkWNLTGr%w0MPkqVw zJ5~Np-KQ?c^`ANh?f$QhPkkKz)J37*PhC?x;ANkD<@KS1$E;UAeT~^%eK7bFJaKE@+P5b;?b6V$y?Cp3k)B zGw<&#_&bYtosE_}v3u7Q>)zc&Z%&LKlSH4ng01>2u@;ZAoxFHGgN_6Pun- z$ph!Fr4O8WsvbCfsvkJtX!LiQ9yooH4;<$fkLi2h^40&qnSRI)%@W{&O9TJTu>PEcg7#NOilV! zQ;%F{ea34r`^Xt}?vaa-EB>!7|JU{-_aw37@9cW;ftQtj#PM14#I`3Ip8CK1jM9cDw)|ha{?5L?Q}Smn zRpp;K8`k(c?VjlNM4u;yJTc`{&HkCQeDnY87`Aw#>YqDnjCo?_pF7OFzq91;Z1_8S zo;dJC$)CGaWqYzQ^M4KaJENYM@Zglcv;AGy@8A8d zv-AFUof;+Ib9c(V=k8Q{qS61=?1>gnw0+Mp9QJpnJhASHZBOiZ;=mK7-*-YQzVD3C zEU-iJ9;FVZ86V%DCcFRsDqK_cw*8M(;hSD ziB134j=xj;FI@7`f8iKTd*ZEFcue`6f0g8%>k literal 0 HcmV?d00001 diff --git a/hugolib/menu_old_test.go b/hugolib/menu_old_test.go deleted file mode 100644 index 65db31588..000000000 --- a/hugolib/menu_old_test.go +++ /dev/null @@ -1,654 +0,0 @@ -// Copyright 2016 The Hugo Authors. All rights reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package hugolib - -// TODO(bep) remove this file when the reworked tests in menu_test.go is done. -// NOTE: Do not add more tests to this file! - -import ( - "fmt" - "strings" - "testing" - - "github.com/gohugoio/hugo/deps" - - "path/filepath" - - "github.com/BurntSushi/toml" - "github.com/gohugoio/hugo/source" - "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/require" -) - -const ( - confMenu1 = ` -[[menu.main]] - name = "Go Home" - url = "/" - weight = 1 - pre = "