From 1d8f3128cfa8985870c51e96bc8b2f04ab900b93 Mon Sep 17 00:00:00 2001 From: DonislawDev Date: Mon, 19 Oct 2026 20:03:06 +0200 Subject: [PATCH 1/7] tool: one way to open a file for every tool The open that looks at what was opened rather than at the name moves from the checksum tool to the tool package, so a second tool reading files opens them the same way. The checksum tools keep their own words for the refusal, which now unwraps to the shared one. Co-Authored-By: Claude Opus 5.5 --- internal/guard/mutation/entries.py | 2 +- internal/guard/mutationcoverage_test.go | 2 +- internal/guard/writeescape_test.go | 2 +- internal/tool/checksum/read.go | 38 ++++--------- internal/tool/checksum/refusals.go | 6 +++ internal/tool/open.go | 57 ++++++++++++++++++++ internal/tool/{checksum => }/open_unix.go | 6 +-- internal/tool/{checksum => }/open_windows.go | 4 +- 8 files changed, 81 insertions(+), 36 deletions(-) create mode 100644 internal/tool/open.go rename internal/tool/{checksum => }/open_unix.go (87%) rename internal/tool/{checksum => }/open_windows.go (93%) diff --git a/internal/guard/mutation/entries.py b/internal/guard/mutation/entries.py index 795754f2..2166c7eb 100644 --- a/internal/guard/mutation/entries.py +++ b/internal/guard/mutation/entries.py @@ -13223,7 +13223,7 @@ # through - read from the source, so a file built only off Windows # is held on the Windows machine too. "the checksum tool opens its file for writing as well, and the one claim does not notice", - "internal/tool/checksum/open_unix.go", + "internal/tool/open_unix.go", "os.O_RDONLY|syscall.O_NONBLOCK, 0)", "os.O_RDWR|syscall.O_NONBLOCK, 0)", "TestEveryFileThisToolWritesIsCreatedThroughOneClaim", diff --git a/internal/guard/mutationcoverage_test.go b/internal/guard/mutationcoverage_test.go index cfceab0a..f7ecae88 100644 --- a/internal/guard/mutationcoverage_test.go +++ b/internal/guard/mutationcoverage_test.go @@ -37,7 +37,7 @@ var notProvenByMutation = map[string]bool{ // - the substitution would be applied and the test would not exist to // catch it. It runs on every Linux and macOS runner of the CI. The two // breaks it is for - asking IsDir where IsRegular stands in - // checksum.openRegular, and an open without O_NONBLOCK in open_unix.go. + // tool.OpenRegular, and an open without O_NONBLOCK in tool/open_unix.go. // The first was read, not run (2026-09-29). The second was run by hand in // a Linux container on 2026-09-30, through the tool rather than through // this test: without the flag a pipe was still waited on after five diff --git a/internal/guard/writeescape_test.go b/internal/guard/writeescape_test.go index 887ec86c..018710a7 100644 --- a/internal/guard/writeescape_test.go +++ b/internal/guard/writeescape_test.go @@ -133,7 +133,7 @@ func TestEveryFileThisToolWritesIsCreatedThroughOneClaim(t *testing.T) { // readingFlags are the flags of an open that only reads - os.Open with // something os.Open cannot ask for. O_NONBLOCK is why this exists: the -// checksum tool opens without waiting on a pipe (checksum.openRegular), which +// tools open without waiting on a pipe (tool.OpenRegular), which // takes os.OpenFile, and it creates nothing and writes nothing. var readingFlags = map[string]bool{ "O_RDONLY": true, "O_NONBLOCK": true, "O_CLOEXEC": true, "O_NOFOLLOW": true, "O_NOCTTY": true, diff --git a/internal/tool/checksum/read.go b/internal/tool/checksum/read.go index 98f7c6dd..7a83df5c 100644 --- a/internal/tool/checksum/read.go +++ b/internal/tool/checksum/read.go @@ -3,9 +3,12 @@ package checksum import ( "context" "encoding/hex" + "errors" "hash" "io" "os" + + "github.com/donislawdev/TestingFilesGenerator/internal/tool" ) // Reading files, for all three tools of this package. One way in, so a file @@ -64,36 +67,15 @@ func digest(ctx context.Context, path string, chosen map[string]bool, scratch [] return out, before, nil } -// openRegular opens a path for reading, and hands it back only when what was -// opened is a file. -// -// Followed through a link, the way a person naming a file means it - but what -// is at the end has to be a file. A directory cannot be read as one, and a -// pipe or a device can be read forever. -// -// Asked of the open file rather than of the name, since 2026-09-30. The name -// was asked first and opened second until then, and between the two looks it -// could come to stand for a pipe, which open then waited on for good - a -// review of #157 found it. Now there is one look, at what was opened, and the -// open itself does not wait (openForLooking). The price is that a device named -// on purpose is opened and closed again, never read. +// openRegular is tool.OpenRegular with its refusal in the words of these +// tools - a checksum of a directory, not just a directory. func openRegular(path string) (*os.File, os.FileInfo, error) { - f, err := openForLooking(path) - if err != nil { - return nil, nil, err - } - info, err := f.Stat() - if err == nil && !info.Mode().IsRegular() { - err = &NotAFileError{Path: path, Directory: info.IsDir()} - } - if err == nil { - err = waitAgain(f) - } - if err != nil { - _ = f.Close() - return nil, nil, err + f, info, err := tool.OpenRegular(path) + var not *tool.NotRegularError + if errors.As(err, ¬) { + return nil, nil, &NotAFileError{Path: path, Directory: not.Directory} } - return f, info, nil + return f, info, err } // changed says whether the file moved under the read. A checksum of a file diff --git a/internal/tool/checksum/refusals.go b/internal/tool/checksum/refusals.go index 0c9eed44..a2de117b 100644 --- a/internal/tool/checksum/refusals.go +++ b/internal/tool/checksum/refusals.go @@ -123,6 +123,12 @@ func (e *NotAFileError) instead() core.Said { func (e *NotAFileError) Error() string { return e.Said().String() } +// Unwrap is the refusal every tool shares, so a check that asks any tool +// whether it turned a pipe away finds this one too. +func (e *NotAFileError) Unwrap() error { + return &tool.NotRegularError{Path: e.Path, Directory: e.Directory} +} + // Said is the whole refusal, for a window that says it in its own language. func (e *NotAFileError) Said() core.Said { return tool.Said(e.what(), e.why(), e.instead()) } diff --git a/internal/tool/open.go b/internal/tool/open.go new file mode 100644 index 00000000..1f5484f7 --- /dev/null +++ b/internal/tool/open.go @@ -0,0 +1,57 @@ +package tool + +import "os" + +// Opening a file a tool reads. One way in for every tool, so a file named on +// its own, the thousandth file of a folder and an archive somebody was sent +// are opened with the same care - the review of #157 found a pipe swapped in +// between two looks at a name, and the answer to that is here rather than in +// each tool (docs/NARZEDZIA-SUMY-2026-09-29.md §13.4). Moved out of the +// checksum tool on 2026-10-19, when a second tool came to read files. + +// NotRegularError is a path that names something other than a file. Each tool +// says it in its own words, wrapping this, so a check that every tool refuses +// a pipe asks for this one type. +type NotRegularError struct { + Path string + Directory bool +} + +func (e *NotRegularError) Error() string { + if e.Directory { + return e.Path + " is a directory" + } + return e.Path + " is not a file but a device, a pipe or a socket" +} + +// OpenRegular opens a path for reading, and hands it back only when what was +// opened is a file. +// +// Followed through a link, the way a person naming a file means it - but what +// is at the end has to be a file. A directory cannot be read as one, and a +// pipe or a device can be read forever. +// +// Asked of the open file rather than of the name, since 2026-09-30. The name +// was asked first and opened second until then, and between the two looks it +// could come to stand for a pipe, which open then waited on for good - a +// review of #157 found it. Now there is one look, at what was opened, and the +// open itself does not wait (openForLooking). The price is that a device named +// on purpose is opened and closed again, never read. +func OpenRegular(path string) (*os.File, os.FileInfo, error) { + f, err := openForLooking(path) + if err != nil { + return nil, nil, err + } + info, err := f.Stat() + if err == nil && !info.Mode().IsRegular() { + err = &NotRegularError{Path: path, Directory: info.IsDir()} + } + if err == nil { + err = waitAgain(f) + } + if err != nil { + _ = f.Close() + return nil, nil, err + } + return f, info, nil +} diff --git a/internal/tool/checksum/open_unix.go b/internal/tool/open_unix.go similarity index 87% rename from internal/tool/checksum/open_unix.go rename to internal/tool/open_unix.go index 3d256fab..a3b5e9bf 100644 --- a/internal/tool/checksum/open_unix.go +++ b/internal/tool/open_unix.go @@ -1,6 +1,6 @@ //go:build !windows -package checksum +package tool import ( "os" @@ -12,7 +12,7 @@ import ( // // A pipe opened for reading waits until something writes to it, which may be // never. O_NONBLOCK makes the open return at once, so what was opened can be -// asked what it is before a byte is read - see openRegular. +// asked what it is before a byte is read - see OpenRegular. func openForLooking(path string) (*os.File, error) { return os.OpenFile(path, os.O_RDONLY|syscall.O_NONBLOCK, 0) } @@ -22,7 +22,7 @@ func openForLooking(path string) (*os.File, error) { // open(2) says the flag has no effect on a regular file, and in the same // paragraph that a program should not depend on that staying so (man7.org, // open(2), O_NONBLOCK, read 2026-09-30). A read that came back "try again" -// would end the checksum with an error nobody could act on. +// would end the work of a tool with an error nobody could act on. func waitAgain(f *os.File) error { raw, err := f.SyscallConn() if err != nil { diff --git a/internal/tool/checksum/open_windows.go b/internal/tool/open_windows.go similarity index 93% rename from internal/tool/checksum/open_windows.go rename to internal/tool/open_windows.go index 2c574338..b8143393 100644 --- a/internal/tool/checksum/open_windows.go +++ b/internal/tool/open_windows.go @@ -1,6 +1,6 @@ //go:build windows -package checksum +package tool import "os" @@ -8,7 +8,7 @@ import "os" // flags it knows and O_NONBLOCK is not one of them (syscall_windows.go, Open, // read 2026-09-30), so asking for it would change nothing. What was opened is // still asked what it is before a byte is read, the same as everywhere else - -// see openRegular. +// see OpenRegular. func openForLooking(path string) (*os.File, error) { return os.Open(path) } From e469034ee1a74bf85b9b0309a70eb86cde248e21 Mon Sep 17 00:00:00 2001 From: DonislawDev Date: Mon, 19 Oct 2026 20:04:35 +0200 Subject: [PATCH 2/7] tool: conclusions a tool declares, like its notes A tool can declare the answers it may come to, each with its sentence and whether it fails. The command line prints the sentence and ends with VERIFY on a failing one, and the window says it through the registry's catalogue in the colour of its answer, so a new answer reaches both surfaces and every language without a case added anywhere. Co-Authored-By: Claude Opus 5.5 --- internal/cli/toolcmd.go | 11 +++-- internal/gui/text/registry.go | 8 ++++ internal/gui/text/registrywords.go | 3 ++ internal/gui/window/toolsresult.go | 7 +++ internal/gui/window/toolstext.go | 13 ++++++ internal/tool/tool.go | 72 ++++++++++++++++++++++++++++++ 6 files changed, 110 insertions(+), 4 deletions(-) diff --git a/internal/cli/toolcmd.go b/internal/cli/toolcmd.go index eb2be61d..e6acd993 100644 --- a/internal/cli/toolcmd.go +++ b/internal/cli/toolcmd.go @@ -297,11 +297,11 @@ func parseAround(fs *flag.FlagSet, args []string) ([]string, error) { // renderToolResult prints what a tool found. // -// A mismatch is a failure with its own code, and a failed run writes nothing -// to standard output - the same as verify - so the whole answer goes to the -// error channel, JSON included. +// A mismatch, or a conclusion the tool declares failing, is a failure with its +// own code, and a failed run writes nothing to standard output - the same as +// verify - so the whole answer goes to the error channel, JSON included. func renderToolResult(d tool.Descriptor, r tool.Result, asJSON bool, out, errOut io.Writer) int { - failed := r.Verdict.Outcome == tool.Mismatch + failed := d.Failed(r) w := out if failed { w = errOut @@ -318,6 +318,9 @@ func renderToolResult(d tool.Descriptor, r tool.Result, asJSON bool, out, errOut if said := r.Verdict.Said(); said != "" { fmt.Fprintf(w, "\n%s\n", said) } + if c, ok := d.Conclusion(r.Concluded); ok { + fmt.Fprintf(w, "\n%s\n", c.Says) + } } if failed { return ExitVerify diff --git a/internal/gui/text/registry.go b/internal/gui/text/registry.go index 02825fe6..132ba486 100644 --- a/internal/gui/text/registry.go +++ b/internal/gui/text/registry.go @@ -92,6 +92,9 @@ func ToolQuestionKey(id string) string { return "Tool." + id + ".Question" } func ToolDetailKey(id string) string { return "Tool." + id + ".Detail" } func InputKey(id, name string) string { return "Input." + id + "." + name } func ToolNoteKey(id, note string) string { return "Tool." + id + ".Note." + note } +func ToolConclusionKey(id, conclusion string) string { + return "Tool." + id + ".Conclusion." + conclusion +} // lookup is say for a sentence whose key is made of identifiers and whose // English comes from a registry rather than from this package. Nothing to say @@ -201,6 +204,11 @@ func ToolInput(id, name, english string) string { return lookup(InputKey(id, nam // ToolNote is a line a tool's result may carry, before its items. func ToolNote(id, note, english string) string { return lookup(ToolNoteKey(id, note), english) } +// ToolConclusion is the answer a run of a tool came to. +func ToolConclusion(id, conclusion, english string) string { + return lookup(ToolConclusionKey(id, conclusion), english) +} + // HumanBytes is core.HumanBytes with the decimal mark of the window's language. // // The pseudo language keeps the mark the number was written with: it disguises diff --git a/internal/gui/text/registrywords.go b/internal/gui/text/registrywords.go index c3504630..848cbad6 100644 --- a/internal/gui/text/registrywords.go +++ b/internal/gui/text/registrywords.go @@ -110,6 +110,9 @@ func (w registryWords) tool(d tool.Descriptor) { for _, n := range d.Notes { w.add(ToolNoteKey(d.ID, n.ID), n.Says, "A line of the result of "+whose+", ending in a colon - what follows it is a list of names or one number.") } + for _, c := range d.Conclusions { + w.add(ToolConclusionKey(d.ID, c.ID), c.Says, "The answer a run of "+whose+" comes to, shown under the lines of its result.") + } w.settings(ToolOwner(d.ID), whose, d.Settings) } diff --git a/internal/gui/window/toolsresult.go b/internal/gui/window/toolsresult.go index 993cf49a..d0f875fa 100644 --- a/internal/gui/window/toolsresult.go +++ b/internal/gui/window/toolsresult.go @@ -74,6 +74,13 @@ func (t *Tools) resultObjects(d tool.Descriptor, r *tool.Result) []fyne.CanvasOb out = append(out, parts.Verdict(parts.Disagrees, verdictSaid(r.Verdict))) case tool.Unasked: } + if said, ok := conclusionSaid(d, *r); ok { + tone := parts.Agrees + if d.Failed(*r) { + tone = parts.Disagrees + } + out = append(out, parts.Verdict(tone, said)) + } return append(out, t.copyAll(d, *r)) } diff --git a/internal/gui/window/toolstext.go b/internal/gui/window/toolstext.go index 85778d7f..c5d603b3 100644 --- a/internal/gui/window/toolstext.go +++ b/internal/gui/window/toolstext.go @@ -86,9 +86,22 @@ func resultText(d tool.Descriptor, r tool.Result) string { if r.Verdict.Outcome != tool.Unasked { lines = append(lines, verdictSaid(r.Verdict)) } + if said, ok := conclusionSaid(d, r); ok { + lines = append(lines, said) + } return strings.Join(lines, "\n") } +// conclusionSaid is the conclusion a run came to, in the window's language, +// or nothing when it came to none. +func conclusionSaid(d tool.Descriptor, r tool.Result) (string, bool) { + c, ok := d.Conclusion(r.Concluded) + if !ok { + return "", false + } + return text.ToolConclusion(d.ID, c.ID, c.Says), true +} + // ranIn is the folder a run of a tool worked in, for Open folder: the folder // it was given, or the folder of the file it was given - the first thing the // tool works on, which is the one its question is about. Empty when it was diff --git a/internal/tool/tool.go b/internal/tool/tool.go index dc01930c..ed3f734d 100644 --- a/internal/tool/tool.go +++ b/internal/tool/tool.go @@ -125,6 +125,27 @@ type Note struct { Says string } +// Conclusion is one answer a tool may come to about what it read - "safe to +// unpack", "not safe to unpack" - declared once, the way a note is. +// +// Declared rather than added to Outcome, which holds the one comparison a +// checksum makes. Each tool has answers of its own, and an answer added to a +// switch in the registry, in the window and in the command line is three +// edits that a guard listing the cases by hand would never miss. Declared, +// the window says it through the registry's catalogue and the guards that +// walk the registry hold it in every language on the day it arrives. +type Conclusion struct { + // ID is the key of the conclusion, in a result and in the words of every + // language. + ID string + // Says is the sentence, in English. No number, for the reason a note has + // none: what is counted is in the notes above it. + Says string + // Fails is an answer the command line ends with VERIFY on - a check that + // found something - and the window shows in the colour of a mismatch. + Fails bool +} + // Noted is one note a run of a tool made, with what it is about. type Noted struct { ID string @@ -155,6 +176,9 @@ type Result struct { // Notes are what the run has to say besides the table, in the order it // says them. Each is one the tool declared. Notes []Noted + // Concluded is the key of the conclusion the run came to, one the tool + // declared, or nothing. + Concluded string // Data is the same answer typed, for --json. A script reading a digest // asks for checksums.sha256 rather than for the second cell of a row. Data any @@ -189,6 +213,8 @@ type Descriptor struct { Columns []string // Notes are everything the tool may say besides the table. Notes []Note + // Conclusions are every answer the tool may come to. + Conclusions []Conclusion // Run does the work, on a request that has been checked and defaulted. Run func(ctx context.Context, in Request, progress Progress) (Result, error) } @@ -238,9 +264,50 @@ func unusable(d Descriptor) string { if problem := unusableNote(d.Notes); problem != "" { return problem } + if problem := unusableConclusion(d.Conclusions); problem != "" { + return problem + } return clashingName(d) } +// unusableConclusion is what is wrong with the conclusions a tool declares, or +// nothing. +func unusableConclusion(conclusions []Conclusion) string { + seen := map[string]bool{} + for _, c := range conclusions { + switch { + case c.ID == "" || c.Says == "": + return "declares a conclusion without a key or without a sentence" + case seen[c.ID]: + return "declares the conclusion " + c.ID + " twice" + } + seen[c.ID] = true + } + return "" +} + +// Conclusion is the conclusion of this tool with that key, if it declares one. +func (d Descriptor) Conclusion(id string) (Conclusion, bool) { + for _, c := range d.Conclusions { + if c.ID == id { + return c, true + } + } + return Conclusion{}, false +} + +// Failed says whether a result is the answer of a check that found something: +// a comparison that did not match, or a conclusion the tool declared failing. +// One question for both surfaces - the command line ends with VERIFY on it and +// the window colours it - so they cannot disagree about which runs failed. +func (d Descriptor) Failed(r Result) bool { + if r.Verdict.Outcome == Mismatch { + return true + } + c, ok := d.Conclusion(r.Concluded) + return ok && c.Fails +} + // unusableNote is what is wrong with the notes a tool declares, or nothing. func unusableNote(notes []Note) string { seen := map[string]bool{} @@ -379,5 +446,10 @@ func (d Descriptor) Start(ctx context.Context, in Request, progress Progress) (R return Result{}, core.Defect(fmt.Errorf("the tool %s said a note it never declared (%s). This is a fault in the build", d.ID, n.ID)) } } + // The same for a conclusion: one nobody declared has no words and no + // answer to which exit code it is. + if _, ok := d.Conclusion(result.Concluded); result.Concluded != "" && !ok { + return Result{}, core.Defect(fmt.Errorf("the tool %s came to a conclusion it never declared (%s). This is a fault in the build", d.ID, result.Concluded)) + } return result, nil } From 31354c34d64e7c1d6ddb63b2de1915147f3f065e Mon Sep 17 00:00:00 2001 From: DonislawDev Date: Mon, 19 Oct 2026 20:30:19 +0200 Subject: [PATCH 3/7] engine: the name rules, asked of one part of a path Unwritable answers whether the generator would refuse to write a file under a name, through the same checkFileName, so a tool judging names somebody else made uses the rules this program writes its own names by. Co-Authored-By: Claude Opus 5.5 --- internal/engine/filename.go | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/internal/engine/filename.go b/internal/engine/filename.go index 92cfc06d..ba8ed3af 100644 --- a/internal/engine/filename.go +++ b/internal/engine/filename.go @@ -203,3 +203,15 @@ func describeForbidden(r rune) core.Said { } return core.Says("engine.Character", "the character %q", core.A("Character", string(r))) } + +// Unwritable says whether the generator would refuse to write a file under +// this name - for a tool asking about names somebody else made, each part of a +// path inside an archive. The same rules rather than a copy of them, so a name +// this program writes and a name it warns about are judged by one list. +// +// A part, not a path: a separator is refused here, so a caller splits first, +// and "." and ".." are refused as names of directories, which a caller asking +// about where an entry lands answers before it gets here. +func Unwritable(name string) bool { + return checkFileName("", core.Said{}, name) != nil +} From 545aae67dbb9574e9677817c633f202836f4c9ef Mon Sep 17 00:00:00 2001 From: DonislawDev Date: Mon, 19 Oct 2026 20:30:20 +0200 Subject: [PATCH 4/7] tool: archive-scan, whether an archive is safe to unpack Reads a ZIP, TAR, TAR.GZ or gzip file and everything in it without writing anything, and says what unpacking it would do: entries outside the folder, links, devices, names that land on one file or cannot be written, archives built to explode, contents that are not what the list says. The list of a ZIP is read record by record rather than whole, an archive that explodes is stopped where it is found, and --unpacked_limit reports more than a given size. Safe ends with 0 and anything found with 7. The tests about the checksum tools now choose their tool, since the Tools tab opens on the first by name and that is this one now. Co-Authored-By: Claude Opus 5.5 --- internal/guard/keyboard_test.go | 1 + internal/guard/layers_test.go | 12 +- internal/guard/parity_test.go | 5 + internal/guard/screenpixels_test.go | 3 +- internal/guard/tools_test.go | 2 + internal/guard/toolsscreen_test.go | 20 +- internal/gui/text/locale/registry/en.json | 130 +++++++++ internal/gui/text/locale/registry/pl.json | 26 ++ internal/gui/text/locale/said/en.json | 230 ++++++++++++++++ internal/gui/text/locale/said/pl.json | 46 ++++ internal/tool/all/all.go | 1 + internal/tool/archivescan/archivescan.go | 141 ++++++++++ internal/tool/archivescan/findings.go | 292 ++++++++++++++++++++ internal/tool/archivescan/names.go | 168 ++++++++++++ internal/tool/archivescan/refusals.go | 133 +++++++++ internal/tool/archivescan/sniff.go | 92 +++++++ internal/tool/archivescan/tar.go | 311 ++++++++++++++++++++++ internal/tool/archivescan/zip.go | 303 +++++++++++++++++++++ internal/tool/archivescan/ziplist.go | 223 ++++++++++++++++ 19 files changed, 2128 insertions(+), 11 deletions(-) create mode 100644 internal/tool/archivescan/archivescan.go create mode 100644 internal/tool/archivescan/findings.go create mode 100644 internal/tool/archivescan/names.go create mode 100644 internal/tool/archivescan/refusals.go create mode 100644 internal/tool/archivescan/sniff.go create mode 100644 internal/tool/archivescan/tar.go create mode 100644 internal/tool/archivescan/zip.go create mode 100644 internal/tool/archivescan/ziplist.go diff --git a/internal/guard/keyboard_test.go b/internal/guard/keyboard_test.go index 560a6e90..4147967d 100644 --- a/internal/guard/keyboard_test.go +++ b/internal/guard/keyboard_test.go @@ -131,6 +131,7 @@ func TestTheKeyboardRunsAToolFromInsideItsBox(t *testing.T) { entryUnder(t, first, text.FieldTargetID()).SetText("keys") screen := selectTab(t, content, text.TabTools()) + chooseTool(t, screen, checksum.ID) box := entryUnder(t, screen, text.SettingLabel(checksum.InputFile)) box.SetText(path) pressInABox(t, box, fyne.KeyReturn, fyne.KeyModifierControl) diff --git a/internal/guard/layers_test.go b/internal/guard/layers_test.go index 781ee2f3..91bb59d2 100644 --- a/internal/guard/layers_test.go +++ b/internal/guard/layers_test.go @@ -98,9 +98,10 @@ var layer = map[string]int{ "internal/engine": 3, "internal/audit": 3, - "internal/tool": 4, - "internal/tool/checksum": 4, - "internal/tool/all": 4, + "internal/tool": 4, + "internal/tool/checksum": 4, + "internal/tool/archivescan": 4, + "internal/tool/all": 4, "internal/cli": 5, "internal/gui": 5, @@ -203,8 +204,9 @@ var sameLayerAllowed = map[string][]string{ // A tool registers itself with the registry beside it, and the package that // pulls every tool in reaches each of them - the arrangement of the formats. - "internal/tool/checksum": {"internal/tool"}, - "internal/tool/all": {"internal/tool/checksum"}, + "internal/tool/checksum": {"internal/tool"}, + "internal/tool/archivescan": {"internal/tool"}, + "internal/tool/all": {"internal/tool/checksum", "internal/tool/archivescan"}, // A recipe checks the damages it names against the registry that holds // them, the same way it checks a format against the format registry. It diff --git a/internal/guard/parity_test.go b/internal/guard/parity_test.go index 4a977df3..beecd8e1 100644 --- a/internal/guard/parity_test.go +++ b/internal/guard/parity_test.go @@ -360,6 +360,11 @@ var reachableFromTheWindow = []string{ "tool:checksum-write", "tool:checksum-write.algorithm", "tool:checksum-write.folder", + // Held by TestTheToolsTabLooksIntoAnArchive, which runs it from the + // screen with the limit set and holds what it says to the command line. + "tool:archive-scan", + "tool:archive-scan.archive", + "tool:archive-scan.unpacked_limit", } // notYetReachable is everything the engine can do that the window cannot. diff --git a/internal/guard/screenpixels_test.go b/internal/guard/screenpixels_test.go index d9f5df17..6a4bd261 100644 --- a/internal/guard/screenpixels_test.go +++ b/internal/guard/screenpixels_test.go @@ -332,6 +332,7 @@ func screenScenes() []screenScene { pressNamed(t, s.tab, text.ButtonRunTool()) }}, {name: "tools-result", tab: text.TabTools(), set: func(t *testing.T, s scene) { + chooseToolIn(checksum.ID)(t, s) fillField(t, s.tab, text.SettingLabel("file"), "testdata/checksum-sample.txt") fillField(t, s.tab, text.SettingLabel("expected"), "ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad") pressNamed(t, s.tab, text.ButtonRunTool()) @@ -341,7 +342,7 @@ func screenScenes() []screenScene { // its section keeping the height of the tool before - so the picture // is of the change, not of a screen that opened with it. And a check // that matches, its verdict in the colour of a match. - {name: "tools-write", tab: text.TabTools(), after: chooseToolIn(checksum.WriteID)}, + {name: "tools-write", tab: text.TabTools(), set: chooseToolIn(checksum.ID), after: chooseToolIn(checksum.WriteID)}, {name: "tools-check-result", tab: text.TabTools(), set: func(t *testing.T, s scene) { chooseToolIn(checksum.CheckID)(t, s) fillField(t, s.tab, text.SettingLabel(checksum.InputChecksumFile), "testdata/checksum-sample.SHA256SUMS") diff --git a/internal/guard/tools_test.go b/internal/guard/tools_test.go index 8fc02403..e9cd47d1 100644 --- a/internal/guard/tools_test.go +++ b/internal/guard/tools_test.go @@ -223,6 +223,7 @@ func TestTheWindowRunsAToolAndSaysWhatTheCommandLineSays(t *testing.T) { host := newFakeHost(t) window.Open(host) screen := selectTab(t, host.content, text.TabTools()) + chooseTool(t, screen, checksum.ID) fillField(t, screen, text.SettingLabel(checksum.InputFile), path) pressNamed(t, screen, text.ButtonRunTool()) host.waitForWork() @@ -321,6 +322,7 @@ func TestTheToolsScreenTakesAChosenFileAndCopiesTheChecksum(t *testing.T) { host.pickedFile = path window.Open(host) screen := selectTab(t, host.content, text.TabTools()) + chooseTool(t, screen, checksum.ID) pressNamed(t, screen, text.ButtonChoose()) if host.askedFile == 0 { diff --git a/internal/guard/toolsscreen_test.go b/internal/guard/toolsscreen_test.go index a4048d0e..daed6b3d 100644 --- a/internal/guard/toolsscreen_test.go +++ b/internal/guard/toolsscreen_test.go @@ -19,6 +19,20 @@ import ( // The Tools tab as somebody uses it - the owner's list of 2026-10-05 after // looking at the window with the folder tools in it. +// chooseTool picks the tool with this ID in the menu at the head of the Tools +// tab. A test about one tool chooses it rather than counting on the tool the +// tab opens with: that is the first by name, and it changed the day a tool +// whose name sorts first arrived (archive-scan, 2026-10-19) - five tests about +// checksum found the box of another tool where theirs had been. +func chooseTool(t *testing.T, screen fyne.CanvasObject, id string) { + t.Helper() + d, err := tool.Get(id) + if err != nil { + t.Fatal(err) + } + chooserUnder(t, screen, text.FieldTool()).SetSelected(text.ToolChoice(d.ID, d.Question)) +} + // chooseToolIn is a step of a scene: the tool with this ID chosen in the menu // at the head of the Tools tab, the way a person picks it. func chooseToolIn(id string) func(t *testing.T, s scene) { @@ -92,11 +106,7 @@ func TestTheMenuOfToolsNamesEachToolAsTheCommandLineDoes(t *testing.T) { // names, presses Run and waits for the answer. func runOnToolsTab(t *testing.T, host *fakeHost, screen fyne.CanvasObject, id string, boxes map[string]string) { t.Helper() - d, err := tool.Get(id) - if err != nil { - t.Fatal(err) - } - chooserUnder(t, screen, text.FieldTool()).SetSelected(text.ToolChoice(d.ID, d.Question)) + chooseTool(t, screen, id) for name, value := range boxes { fillField(t, screen, text.SettingLabel(name), value) } diff --git a/internal/gui/text/locale/registry/en.json b/internal/gui/text/locale/registry/en.json index 7b804291..7aa79170 100644 --- a/internal/gui/text/locale/registry/en.json +++ b/internal/gui/text/locale/registry/en.json @@ -1939,6 +1939,11 @@ "hash": "sha256-be929d76067d", "other": "The size limit your upload form declares. This set takes one step either side of it - for a file at every distance, run the size-boundaries preset." }, + "Detail.tool/archive-scan.unpacked_limit": { + "description": "The sentence under the unpacked_limit setting of the archive-scan tool, after what it takes.", + "hash": "sha256-db62592b44cd", + "other": "The most the archive may unpack to, all its files together - for a server or a disk that takes no more. Left empty, only an archive built to explode is reported: 1 GB or more, and more than 100 times its own size." + }, "Detail.tool/checksum-write.algorithm": { "description": "The sentence under the algorithm setting of the checksum-write tool, after what it takes.", "hash": "sha256-bc3d55ed0c3c", @@ -2134,6 +2139,11 @@ "hash": "sha256-1652b4354ef8", "other": "Pictures in the document" }, + "Input.archive-scan.archive": { + "description": "The sentence under the archive box of the archive-scan tool.", + "hash": "sha256-c362fd635273", + "other": "The archive to look into: ZIP (DOCX, XLSX and JAR are ZIP inside), TAR or TAR.GZ. It is only read." + }, "Input.checksum-check.checksum_file": { "description": "The sentence under the checksum_file box of the checksum-check tool.", "hash": "sha256-90d7baf0d228", @@ -2219,6 +2229,11 @@ "hash": "sha256-cd0da1397b61", "other": "Antimeridian" }, + "Label.archive": { + "description": "The name beside the box of what the archive-scan tool works on.", + "hash": "sha256-66f4804ee23d", + "other": "Archive" + }, "Label.attachment_format": { "description": "The name beside the box of a setting a recipe writes as attachment_format.", "hash": "sha256-29f25b6c026f", @@ -2684,6 +2699,11 @@ "hash": "sha256-9d9b671e4837", "other": "Unlocated" }, + "Label.unpacked_limit": { + "description": "The name beside the box of a setting a recipe writes as unpacked_limit.", + "hash": "sha256-ea378e1bd7aa", + "other": "Unpacked limit" + }, "Label.vertices": { "description": "The name beside the box of a setting a recipe writes as vertices.", "hash": "sha256-f5af129ea336", @@ -2849,6 +2869,116 @@ "hash": "sha256-ba4463cda83e", "other": "Upload validation" }, + "Tool.archive-scan.Conclusion.safe": { + "description": "The answer a run of the archive-scan tool comes to, shown under the lines of its result.", + "hash": "sha256-e08326f1d03f", + "other": "Safe to unpack: none of the traps this tool looks for is in it." + }, + "Tool.archive-scan.Conclusion.unsafe": { + "description": "The answer a run of the archive-scan tool comes to, shown under the lines of its result.", + "hash": "sha256-39cb8195e90a", + "other": "Not safe to unpack: the lines above say why." + }, + "Tool.archive-scan.Detail": { + "description": "One sentence under the question of the archive-scan tool, saying what it does.", + "hash": "sha256-eb1cf4210b4a", + "other": "Reads a ZIP or TAR archive and everything in it without unpacking anything, and says whether unpacking it could write outside its folder, overwrite a file or fill the disk." + }, + "Tool.archive-scan.Note.bomb": { + "description": "A line of the result of the archive-scan tool, ending in a colon - what follows it is a list of names or one number.", + "hash": "sha256-ad7c0631bd1c", + "other": "Unpacks to far more than its own size, the way an archive built to explode does:" + }, + "Tool.archive-scan.Note.collides": { + "description": "A line of the result of the archive-scan tool, ending in a colon - what follows it is a list of names or one number.", + "hash": "sha256-d5cea6f318c4", + "other": "Entries that land on the same file as another on Windows or macOS:" + }, + "Tool.archive-scan.Note.damaged": { + "description": "A line of the result of the archive-scan tool, ending in a colon - what follows it is a list of names or one number.", + "hash": "sha256-6faaa2b49d18", + "other": "Damaged, so programs that unpack it may disagree on what it holds:" + }, + "Tool.archive-scan.Note.entries": { + "description": "A line of the result of the archive-scan tool, ending in a colon - what follows it is a list of names or one number.", + "hash": "sha256-89a7fe8936b2", + "other": "Entries:" + }, + "Tool.archive-scan.Note.kind": { + "description": "A line of the result of the archive-scan tool, ending in a colon - what follows it is a list of names or one number.", + "hash": "sha256-bf476a924b4e", + "other": "Archive:" + }, + "Tool.archive-scan.Note.leaves_folder": { + "description": "A line of the result of the archive-scan tool, ending in a colon - what follows it is a list of names or one number.", + "hash": "sha256-5d69160ea44c", + "other": "Entries that would be written outside the folder:" + }, + "Tool.archive-scan.Note.links": { + "description": "A line of the result of the archive-scan tool, ending in a colon - what follows it is a list of names or one number.", + "hash": "sha256-ec9bee24c930", + "other": "Links, which a later entry can be written through:" + }, + "Tool.archive-scan.Note.longer_than_said": { + "description": "A line of the result of the archive-scan tool, ending in a colon - what follows it is a list of names or one number.", + "hash": "sha256-f68f6d40c1ff", + "other": "Entries holding more than the archive says they do:" + }, + "Tool.archive-scan.Note.nested": { + "description": "A line of the result of the archive-scan tool, ending in a colon - what follows it is a list of names or one number.", + "hash": "sha256-d256c3caa62f", + "other": "Archives inside it, which were not opened:" + }, + "Tool.archive-scan.Note.over_limit": { + "description": "A line of the result of the archive-scan tool, ending in a colon - what follows it is a list of names or one number.", + "hash": "sha256-6179368adab1", + "other": "Unpacks to more than the limit given:" + }, + "Tool.archive-scan.Note.overlapping": { + "description": "A line of the result of the archive-scan tool, ending in a colon - what follows it is a list of names or one number.", + "hash": "sha256-cd5cedc1af84", + "other": "Entries that share their bytes with another, which only an archive built to explode does:" + }, + "Tool.archive-scan.Note.size": { + "description": "A line of the result of the archive-scan tool, ending in a colon - what follows it is a list of names or one number.", + "hash": "sha256-c987f668d963", + "other": "Size:" + }, + "Tool.archive-scan.Note.special": { + "description": "A line of the result of the archive-scan tool, ending in a colon - what follows it is a list of names or one number.", + "hash": "sha256-077308fc7873", + "other": "Entries that are not plain files or folders:" + }, + "Tool.archive-scan.Note.stopped": { + "description": "A line of the result of the archive-scan tool, ending in a colon - what follows it is a list of names or one number.", + "hash": "sha256-90de24758d21", + "other": "Reading stopped before the end:" + }, + "Tool.archive-scan.Note.two_names": { + "description": "A line of the result of the archive-scan tool, ending in a colon - what follows it is a list of names or one number.", + "hash": "sha256-672e79c37984", + "other": "Entries named one way in the list of contents and another at the entry itself:" + }, + "Tool.archive-scan.Note.unchecked": { + "description": "A line of the result of the archive-scan tool, ending in a colon - what follows it is a list of names or one number.", + "hash": "sha256-94238136c3ba", + "other": "Entries whose contents could not be checked:" + }, + "Tool.archive-scan.Note.unpacked": { + "description": "A line of the result of the archive-scan tool, ending in a colon - what follows it is a list of names or one number.", + "hash": "sha256-75d57d9929a3", + "other": "Unpacked:" + }, + "Tool.archive-scan.Note.unwritable": { + "description": "A line of the result of the archive-scan tool, ending in a colon - what follows it is a list of names or one number.", + "hash": "sha256-40ba7750552a", + "other": "Names that Windows, macOS or Linux cannot write as they are:" + }, + "Tool.archive-scan.Question": { + "description": "The question the archive-scan tool answers - its name in the list of tools and the title over it.", + "hash": "sha256-d91795de08fb", + "other": "Is this archive safe to unpack?" + }, "Tool.checksum-check.Detail": { "description": "One sentence under the question of the checksum-check tool, saying what it does.", "hash": "sha256-3480ee8eb9ae", diff --git a/internal/gui/text/locale/registry/pl.json b/internal/gui/text/locale/registry/pl.json index a297d603..3540a848 100644 --- a/internal/gui/text/locale/registry/pl.json +++ b/internal/gui/text/locale/registry/pl.json @@ -387,6 +387,7 @@ "Detail.preset/upload-validation.deny": { "hash": "sha256-f9e5c633d218", "other": "Jakie rozszerzenia twój formularz ma odrzucać. Rozszerzenie, dla którego ta wersja nie ma formatu, i tak dostaje plik o tej nazwie, ze zwykłym tekstem w środku." }, "Detail.preset/upload-validation.far-over": { "hash": "sha256-6a0093c6d7a0", "other": "Jak daleko ponad limit sięga jeden duży plik. Wyłącz tam, gdzie zapis kilkukrotności limitu nie jest wart miejsca na dysku." }, "Detail.preset/upload-validation.limit": { "hash": "sha256-be929d76067d", "other": "Limit rozmiaru, który deklaruje twój formularz przesyłania. Ten zestaw robi jeden krok po obu stronach - żeby dostać plik w każdej odległości, uruchom preset size-boundaries." }, + "Detail.tool/archive-scan.unpacked_limit": { "hash": "sha256-db62592b44cd", "other": "Najwięcej, ile archiwum może zająć po rozpakowaniu, wszystkie pliki razem - dla serwera albo dysku, który więcej nie przyjmie. Puste zgłasza tylko archiwum zbudowane, żeby eksplodować: 1 GB albo więcej i ponad 100 razy więcej niż ono samo." }, "Detail.tool/checksum-write.algorithm": { "hash": "sha256-bc3d55ed0c3c", "other": "Który skrót zapisać. sha256 to ten, którego używa sha256sum i większość stron z wydaniami." }, "Detail.tool/checksum.algorithm": { "hash": "sha256-b2c6c5ddeaa1", "other": "Które sumy kontrolne policzyć: md5, sha1, sha256, sha512 albo crc32. Tylko sha256 i sha512 nadal pokazują, że nikt celowo nie zmienił pliku. crc32 to ta, której używają ZIP i PNG, a nie ta, którą wypisuje cksum." }, "Detail.tool/checksum.expected": { "hash": "sha256-d2a5105f8783", "other": "Suma kontrolna, jaką plik powinien mieć. Algorytm rozpoznaje się po jej długości i liczy go, nawet jeśli nie wybrano go wyżej." }, @@ -426,6 +427,7 @@ "Group.format/html.Pictures in the page": { "hash": "sha256-af608b8ed33a", "other": "Obrazki w stronie" }, "Group.format/pdf.Document properties": { "hash": "sha256-7115a778ab47", "other": "Właściwości dokumentu" }, "Group.format/rtf.Pictures in the document": { "hash": "sha256-1652b4354ef8", "other": "Obrazki w dokumencie" }, + "Input.archive-scan.archive": { "hash": "sha256-c362fd635273", "other": "Archiwum do sprawdzenia: ZIP (DOCX, XLSX i JAR to w środku ZIP), TAR albo TAR.GZ. Jest tylko czytane." }, "Input.checksum-check.checksum_file": { "hash": "sha256-90d7baf0d228", "other": "Plik sum kontrolnych. Ścieżki w nim są czytane z folderu, w którym leży, i nic nie jest zapisywane." }, "Input.checksum-write.folder": { "hash": "sha256-3040f185111b", "other": "Folder do spisania. Każdy plik w nim jest czytany, a plik sum kontrolnych jest zapisywany do niego." }, "Input.checksum.file": { "hash": "sha256-a87fb4cce79e", "other": "Plik, którego sumy kontrolne mają zostać policzone. Jest tylko czytany." }, @@ -443,6 +445,7 @@ "Label.allow": { "hash": "sha256-e213c161d5ce", "other": "Dozwolone" }, "Label.altitude": { "hash": "sha256-cbc2e75740ca", "other": "Wysokość" }, "Label.antimeridian": { "hash": "sha256-cd0da1397b61", "other": "Antypołudnik" }, + "Label.archive": { "hash": "sha256-66f4804ee23d", "other": "Archiwum" }, "Label.attachment_format": { "hash": "sha256-29f25b6c026f", "other": "Format załączników" }, "Label.attachment_size": { "hash": "sha256-151d41e8a53c", "other": "Rozmiar załączników" }, "Label.attachments": { "hash": "sha256-634de1147750", "other": "Liczba załączników" }, @@ -536,6 +539,7 @@ "Label.timestamps": { "hash": "sha256-755f099dbf49", "other": "Znaczniki czasu" }, "Label.title": { "hash": "sha256-7e8cd2056da7", "other": "Tytuł" }, "Label.unlocated": { "hash": "sha256-9d9b671e4837", "other": "Bez położenia" }, + "Label.unpacked_limit": { "hash": "sha256-ea378e1bd7aa", "other": "Limit po rozpakowaniu" }, "Label.vertices": { "hash": "sha256-f5af129ea336", "other": "Punkty" }, "Label.width": { "hash": "sha256-3019947b6daf", "other": "Szerokość" }, "Label.winding": { "hash": "sha256-a886eddec337", "other": "Kierunek obiegu" }, @@ -569,6 +573,28 @@ "Title.tabular-import": { "hash": "sha256-a08572cdb93c", "other": "Import tabel" }, "Title.text-encoding": { "hash": "sha256-f6726ca0b9fe", "other": "Kodowanie tekstu" }, "Title.upload-validation": { "hash": "sha256-ba4463cda83e", "other": "Walidacja uploadu" }, + "Tool.archive-scan.Conclusion.safe": { "hash": "sha256-e08326f1d03f", "other": "Można bezpiecznie rozpakować: nie ma w nim żadnej z pułapek, których szuka to narzędzie." }, + "Tool.archive-scan.Conclusion.unsafe": { "hash": "sha256-39cb8195e90a", "other": "Nie można bezpiecznie rozpakować: powody są w liniach powyżej." }, + "Tool.archive-scan.Detail": { "hash": "sha256-eb1cf4210b4a", "other": "Czyta archiwum ZIP albo TAR i wszystko, co w nim jest, niczego nie rozpakowując, i mówi, czy rozpakowanie może zapisać coś poza jego folderem, nadpisać plik albo zapełnić dysk." }, + "Tool.archive-scan.Note.bomb": { "hash": "sha256-ad7c0631bd1c", "other": "Rozpakowuje się do wielokrotności własnego rozmiaru, jak archiwum zbudowane, żeby eksplodować:" }, + "Tool.archive-scan.Note.collides": { "hash": "sha256-d5cea6f318c4", "other": "Wpisy, które na Windows albo macOS trafiają do tego samego pliku co inny:" }, + "Tool.archive-scan.Note.damaged": { "hash": "sha256-6faaa2b49d18", "other": "Uszkodzone, więc programy rozpakowujące mogą różnie odczytać, co zawiera:" }, + "Tool.archive-scan.Note.entries": { "hash": "sha256-89a7fe8936b2", "other": "Wpisy:" }, + "Tool.archive-scan.Note.kind": { "hash": "sha256-bf476a924b4e", "other": "Archiwum:" }, + "Tool.archive-scan.Note.leaves_folder": { "hash": "sha256-5d69160ea44c", "other": "Wpisy, które zostałyby zapisane poza folderem:" }, + "Tool.archive-scan.Note.links": { "hash": "sha256-ec9bee24c930", "other": "Dowiązania, przez które może zostać zapisany późniejszy wpis:" }, + "Tool.archive-scan.Note.longer_than_said": { "hash": "sha256-f68f6d40c1ff", "other": "Wpisy zawierające więcej, niż podaje archiwum:" }, + "Tool.archive-scan.Note.nested": { "hash": "sha256-d256c3caa62f", "other": "Archiwa w środku, których nie otwierano:" }, + "Tool.archive-scan.Note.over_limit": { "hash": "sha256-6179368adab1", "other": "Po rozpakowaniu więcej niż podany limit:" }, + "Tool.archive-scan.Note.overlapping": { "hash": "sha256-cd5cedc1af84", "other": "Wpisy dzielące bajty z innym, co robi tylko archiwum zbudowane, żeby eksplodować:" }, + "Tool.archive-scan.Note.size": { "hash": "sha256-c987f668d963", "other": "Rozmiar:" }, + "Tool.archive-scan.Note.special": { "hash": "sha256-077308fc7873", "other": "Wpisy, które nie są zwykłymi plikami ani folderami:" }, + "Tool.archive-scan.Note.stopped": { "hash": "sha256-90de24758d21", "other": "Czytanie zatrzymane przed końcem:" }, + "Tool.archive-scan.Note.two_names": { "hash": "sha256-672e79c37984", "other": "Wpisy nazwane inaczej w spisie zawartości, a inaczej przy samym wpisie:" }, + "Tool.archive-scan.Note.unchecked": { "hash": "sha256-94238136c3ba", "other": "Wpisy, których zawartości nie dało się sprawdzić:" }, + "Tool.archive-scan.Note.unpacked": { "hash": "sha256-75d57d9929a3", "other": "Po rozpakowaniu:" }, + "Tool.archive-scan.Note.unwritable": { "hash": "sha256-40ba7750552a", "other": "Nazwy, których Windows, macOS albo Linux nie zapisze w tej postaci:" }, + "Tool.archive-scan.Question": { "hash": "sha256-d91795de08fb", "other": "Czy to archiwum można bezpiecznie rozpakować?" }, "Tool.checksum-check.Detail": { "hash": "sha256-3480ee8eb9ae", "other": "Czyta plik sum kontrolnych - SHA256SUMS, MD5SUMS albo w postaci ze znacznikami, którą pisze shasum - i sprawdza każdy wymieniony w nim plik w folderze, w którym ten plik leży. Plików, których nie wymienia, nie ogląda, tak samo jak sha256sum -c." }, "Tool.checksum-check.Note.changed": { "hash": "sha256-3f2770c1e166", "other": "Zmienione w trakcie czytania, więc bez sumy kontrolnej:" }, "Tool.checksum-check.Note.checked": { "hash": "sha256-cb6fcab36d77", "other": "Sprawdzone pliki:" }, diff --git a/internal/gui/text/locale/said/en.json b/internal/gui/text/locale/said/en.json index 4a06ce18..19371199 100644 --- a/internal/gui/text/locale/said/en.json +++ b/internal/gui/text/locale/said/en.json @@ -49,6 +49,236 @@ "hash": "sha256-213afa915dd9", "other": "Write {{.Key}}: true or {{.Again}}: false." }, + "archivescan.ADirectoryIsUnpacked": { + "description": "Said by internal/tool/archivescan - a refusal under the box it is about or at the foot of the form, or a note after a run.", + "hash": "sha256-625960667a52", + "other": "a directory is what an archive unpacks into, not an archive" + }, + "archivescan.AnswerAboutNoVersion": { + "description": "Said by internal/tool/archivescan - a refusal under the box it is about or at the foot of the form, or a note after a run.", + "hash": "sha256-a9d2669e6062", + "other": "an answer about a file being written is an answer about no version of it" + }, + "archivescan.Bomb": { + "description": "Said by internal/tool/archivescan - a refusal under the box it is about or at the foot of the form, or a note after a run. Carries {{.Unpacked}}, {{.Size}}, written the way the program writes them - keep each spelled exactly that way.", + "hash": "sha256-1b4a0ab80849", + "other": "{{.Unpacked}} from {{.Size}}" + }, + "archivescan.Bytes": { + "description": "Said by internal/tool/archivescan - a refusal under the box it is about or at the foot of the form, or a note after a run. Carries {{.Size}}, written the way the program writes them - keep each spelled exactly that way.", + "hash": "sha256-a7df568dcb25", + "other": "{{.Size}}" + }, + "archivescan.Changed": { + "description": "Said by internal/tool/archivescan - a refusal under the box it is about or at the foot of the form, or a note after a run. Carries {{.Path}}, written the way the program writes them - keep each spelled exactly that way.", + "hash": "sha256-7b323b86f3c7", + "other": "{{.Path}} changed while it was being read" + }, + "archivescan.Checksum": { + "description": "Said by internal/tool/archivescan - a refusal under the box it is about or at the foot of the form, or a note after a run.", + "hash": "sha256-046f31c01563", + "other": "its contents do not match their checksum" + }, + "archivescan.Counted": { + "description": "Said by internal/tool/archivescan - a refusal under the box it is about or at the foot of the form, or a note after a run. Carries {{.Counted}}, {{.Listed}}, written the way the program writes them - keep each spelled exactly that way.", + "hash": "sha256-7ec127709e04", + "other": "the record at its end gives the number of entries as {{.Counted}} and the list holds {{.Listed}}" + }, + "archivescan.Device": { + "description": "Said by internal/tool/archivescan - a refusal under the box it is about or at the foot of the form, or a note after a run.", + "hash": "sha256-679cb400e806", + "other": "it is a device" + }, + "archivescan.Encrypted": { + "description": "Said by internal/tool/archivescan - a refusal under the box it is about or at the foot of the form, or a note after a run.", + "hash": "sha256-f93c3b3dbeb0", + "other": "it is encrypted" + }, + "archivescan.EndsEarly": { + "description": "Said by internal/tool/archivescan - a refusal under the box it is about or at the foot of the form, or a note after a run.", + "hash": "sha256-d7126b8d60eb", + "other": "its contents end before the size the list gives them" + }, + "archivescan.EntryWhy": { + "description": "Said by internal/tool/archivescan - a refusal under the box it is about or at the foot of the form, or a note after a run. Carries {{.Name}}, {{.Why}}, written the way the program writes them - keep each spelled exactly that way.", + "hash": "sha256-13b3c18bff10", + "other": "{{.Name}}: {{.Why}}" + }, + "archivescan.GzipHeader": { + "description": "Said by internal/tool/archivescan - a refusal under the box it is about or at the foot of the form, or a note after a run.", + "hash": "sha256-7a245481ab58", + "other": "its gzip header is broken" + }, + "archivescan.IsADirectory": { + "description": "Said by internal/tool/archivescan - a refusal under the box it is about or at the foot of the form, or a note after a run. Carries {{.Path}}, written the way the program writes them - keep each spelled exactly that way.", + "hash": "sha256-99f387f3e133", + "other": "{{.Path}} is a directory and this looks into one archive" + }, + "archivescan.IsNotAFile": { + "description": "Said by internal/tool/archivescan - a refusal under the box it is about or at the foot of the form, or a note after a run. Carries {{.Path}}, written the way the program writes them - keep each spelled exactly that way.", + "hash": "sha256-28957d41213f", + "other": "{{.Path}} is not a file but a device, a pipe or a socket" + }, + "archivescan.IsNotAnArchive": { + "description": "Said by internal/tool/archivescan - a refusal under the box it is about or at the foot of the form, or a note after a run. Carries {{.Path}}, written the way the program writes them - keep each spelled exactly that way.", + "hash": "sha256-852351e5de82", + "other": "{{.Path}} is not a ZIP, TAR or gzip archive" + }, + "archivescan.ItDoesNotBegin": { + "description": "Said by internal/tool/archivescan - a refusal under the box it is about or at the foot of the form, or a note after a run.", + "hash": "sha256-fc6fa1f8683f", + "other": "it does not begin the way any of them does, and the name of a file does not decide what it is" + }, + "archivescan.ItsOwnFormat": { + "description": "Said by internal/tool/archivescan - a refusal under the box it is about or at the foot of the form, or a note after a run.", + "hash": "sha256-13b59184ca3a", + "other": "its list of contents is written in a format of its own" + }, + "archivescan.Link": { + "description": "Said by internal/tool/archivescan - a refusal under the box it is about or at the foot of the form, or a note after a run. Carries {{.Name}}, {{.Target}}, written the way the program writes them - keep each spelled exactly that way.", + "hash": "sha256-f259a6b86f03", + "other": "{{.Name}} -> {{.Target}}" + }, + "archivescan.ListElsewhere": { + "description": "Said by internal/tool/archivescan - a refusal under the box it is about or at the foot of the form, or a note after a run.", + "hash": "sha256-f2723b1851e0", + "other": "its list of contents is not where the record at its end says" + }, + "archivescan.ListEndsEarly": { + "description": "Said by internal/tool/archivescan - a refusal under the box it is about or at the foot of the form, or a note after a run.", + "hash": "sha256-13e077022aaf", + "other": "its list of contents ends in the middle of an entry" + }, + "archivescan.ListHoldsOther": { + "description": "Said by internal/tool/archivescan - a refusal under the box it is about or at the foot of the form, or a note after a run.", + "hash": "sha256-294d9d38d2bf", + "other": "its list of contents holds something that is not an entry" + }, + "archivescan.Method": { + "description": "Said by internal/tool/archivescan - a refusal under the box it is about or at the foot of the form, or a note after a run. Carries {{.Method}}, written the way the program writes them - keep each spelled exactly that way.", + "hash": "sha256-909cb4c9c048", + "other": "it is packed with method {{.Method}}, which this tool does not read" + }, + "archivescan.Name": { + "description": "Said by internal/tool/archivescan - a refusal under the box it is about or at the foot of the form, or a note after a run. Carries {{.Name}}, written the way the program writes them - keep each spelled exactly that way.", + "hash": "sha256-1a0545a47535", + "other": "{{.Name}}" + }, + "archivescan.NameAZipOrTar": { + "description": "Said by internal/tool/archivescan - a refusal under the box it is about or at the foot of the form, or a note after a run.", + "hash": "sha256-6b8df2e3f117", + "other": "name a ZIP, TAR or TAR.GZ file" + }, + "archivescan.NameOneArchive": { + "description": "Said by internal/tool/archivescan - a refusal under the box it is about or at the foot of the form, or a note after a run.", + "hash": "sha256-b3119045be6e", + "other": "name one archive file" + }, + "archivescan.NoEnd": { + "description": "Said by internal/tool/archivescan - a refusal under the box it is about or at the foot of the form, or a note after a run.", + "hash": "sha256-638b1e0460e7", + "other": "the record at its end, which says where its list of contents is, is missing" + }, + "archivescan.NotReadYet": { + "description": "Said by internal/tool/archivescan - a refusal under the box it is about or at the foot of the form, or a note after a run. Carries {{.Path}}, {{.Kind}}, written the way the program writes them - keep each spelled exactly that way.", + "hash": "sha256-bfe67470dde3", + "other": "{{.Path}} is a {{.Kind}} archive, which this tool does not read yet" + }, + "archivescan.NotWhereListed": { + "description": "Said by internal/tool/archivescan - a refusal under the box it is about or at the foot of the form, or a note after a run.", + "hash": "sha256-8e9d4c7346e8", + "other": "it does not start where the list of contents says" + }, + "archivescan.OverLimit": { + "description": "Said by internal/tool/archivescan - a refusal under the box it is about or at the foot of the form, or a note after a run. Carries {{.Unpacked}}, {{.Limit}}, written the way the program writes them - keep each spelled exactly that way.", + "hash": "sha256-31b786bac0bd", + "other": "{{.Unpacked}} against a limit of {{.Limit}}" + }, + "archivescan.PackAsZip": { + "description": "Said by internal/tool/archivescan - a refusal under the box it is about or at the foot of the form, or a note after a run.", + "hash": "sha256-97b44719e0c2", + "other": "pack the same files as ZIP or TAR, and look into that" + }, + "archivescan.Pipe": { + "description": "Said by internal/tool/archivescan - a refusal under the box it is about or at the foot of the form, or a note after a run.", + "hash": "sha256-357c8d55b7cd", + "other": "it is a pipe" + }, + "archivescan.ReadingMayNeverEnd": { + "description": "Said by internal/tool/archivescan - a refusal under the box it is about or at the foot of the form, or a note after a run.", + "hash": "sha256-9055c322986c", + "other": "reading one may never end, so it is not started" + }, + "archivescan.Rights": { + "description": "Said by internal/tool/archivescan - a refusal under the box it is about or at the foot of the form, or a note after a run.", + "hash": "sha256-0f9eff296b16", + "other": "it runs with the rights of its owner" + }, + "archivescan.RunsIntoList": { + "description": "Said by internal/tool/archivescan - a refusal under the box it is about or at the foot of the form, or a note after a run.", + "hash": "sha256-a7a637c4c573", + "other": "its contents run into the list of contents" + }, + "archivescan.Same": { + "description": "Said by internal/tool/archivescan - a refusal under the box it is about or at the foot of the form, or a note after a run. Carries {{.Name}}, {{.First}}, written the way the program writes them - keep each spelled exactly that way.", + "hash": "sha256-8c7055ead538", + "other": "{{.Name}} = {{.First}}" + }, + "archivescan.Size": { + "description": "Said by internal/tool/archivescan - a refusal under the box it is about or at the foot of the form, or a note after a run. Carries {{.Size}}, {{.Exactly}}, written the way the program writes them - keep each spelled exactly that way.", + "hash": "sha256-8deb8dd02c4a", + "other": "{{.Size}} ({{.Exactly}})" + }, + "archivescan.Socket": { + "description": "Said by internal/tool/archivescan - a refusal under the box it is about or at the foot of the form, or a note after a run.", + "hash": "sha256-a0d8c46d99ca", + "other": "it is a socket" + }, + "archivescan.Split": { + "description": "Said by internal/tool/archivescan - a refusal under the box it is about or at the foot of the form, or a note after a run.", + "hash": "sha256-66a4b1365362", + "other": "it says it is one part of an archive split across several files" + }, + "archivescan.StoppedBomb": { + "description": "Said by internal/tool/archivescan - a refusal under the box it is about or at the foot of the form, or a note after a run. Carries {{.Ratio}}, written the way the program writes them - keep each spelled exactly that way.", + "hash": "sha256-a9e09bc34953", + "other": "it unpacks to more than {{.Ratio}} times what was read of it, and no more is read" + }, + "archivescan.StoppedEntries": { + "description": "Said by internal/tool/archivescan - a refusal under the box it is about or at the foot of the form, or a note after a run. Carries {{.Most}}, written the way the program writes them - keep each spelled exactly that way.", + "hash": "sha256-f587645b5f7b", + "other": "it lists more than {{.Most}} entries, and no more are read" + }, + "archivescan.StoppedNames": { + "description": "Said by internal/tool/archivescan - a refusal under the box it is about or at the foot of the form, or a note after a run.", + "hash": "sha256-21ea12750101", + "other": "its names take more room than this tool sets aside to compare them, and no more are read" + }, + "archivescan.StreamBroken": { + "description": "Said by internal/tool/archivescan - a refusal under the box it is about or at the foot of the form, or a note after a run.", + "hash": "sha256-afe268a16a8f", + "other": "it ends early, or its contents do not unpack" + }, + "archivescan.TarHeader": { + "description": "Said by internal/tool/archivescan - a refusal under the box it is about or at the foot of the form, or a note after a run.", + "hash": "sha256-0350e128590c", + "other": "a header is broken, or it ends in the middle of one" + }, + "archivescan.TwoNames": { + "description": "Said by internal/tool/archivescan - a refusal under the box it is about or at the foot of the form, or a note after a run. Carries {{.Listed}}, {{.Local}}, written the way the program writes them - keep each spelled exactly that way.", + "hash": "sha256-8816d7bc260e", + "other": "{{.Listed}} in the list, {{.Local}} at the entry" + }, + "archivescan.Type": { + "description": "Said by internal/tool/archivescan - a refusal under the box it is about or at the foot of the form, or a note after a run. Carries {{.Type}}, written the way the program writes them - keep each spelled exactly that way.", + "hash": "sha256-ea85c62d6ca3", + "other": "it is an entry of type {{.Type}}, which most programs do not unpack" + }, + "archivescan.WaitAndRunAgain": { + "description": "Said by internal/tool/archivescan - a refusal under the box it is about or at the foot of the form, or a note after a run.", + "hash": "sha256-161d36039e9c", + "other": "wait until whatever is writing it has finished, and run this again" + }, "avif.MinimumReason": { "description": "Said by internal/format/avif - a refusal under the box it is about or at the foot of the form, or a note after a run. Carries {{.Coded}}, {{.Box}}, written the way the program writes them - keep each spelled exactly that way.", "hash": "sha256-97b2a4a72e3a", diff --git a/internal/gui/text/locale/said/pl.json b/internal/gui/text/locale/said/pl.json index 2338a61b..44e7a9c2 100644 --- a/internal/gui/text/locale/said/pl.json +++ b/internal/gui/text/locale/said/pl.json @@ -9,6 +9,52 @@ "archive.LockedWithoutPassword": { "hash": "sha256-b5d56de9a9b9", "other": "archiwum ma być zamknięte metodą {{.Method}}, a nie ma hasła, którym można by je zamknąć" }, "archive.SetEncryption": { "hash": "sha256-0b2a90b45006", "other": "Ustaw szyfrowanie na {{.Method}}, żeby zamknąć archiwum, albo usuń hasło, żeby zostało otwarte." }, "archive.WriteTrueOrFalse": { "hash": "sha256-213afa915dd9", "other": "Wpisz {{.Key}}: true albo {{.Again}}: false." }, + "archivescan.ADirectoryIsUnpacked": { "hash": "sha256-625960667a52", "other": "katalog to miejsce, do którego rozpakowuje się archiwum, a nie archiwum" }, + "archivescan.AnswerAboutNoVersion": { "hash": "sha256-a9d2669e6062", "other": "odpowiedź o pliku, który właśnie jest zapisywany, nie dotyczy żadnej jego wersji" }, + "archivescan.Bomb": { "hash": "sha256-1b4a0ab80849", "other": "{{.Unpacked}} z {{.Size}}" }, + "archivescan.Bytes": { "hash": "sha256-a7df568dcb25", "other": "{{.Size}}" }, + "archivescan.Changed": { "hash": "sha256-7b323b86f3c7", "other": "{{.Path}} zmienił się w trakcie czytania" }, + "archivescan.Checksum": { "hash": "sha256-046f31c01563", "other": "jego zawartość nie zgadza się ze swoją sumą kontrolną" }, + "archivescan.Counted": { "hash": "sha256-7ec127709e04", "other": "rekord na jego końcu podaje liczbę wpisów {{.Counted}}, a spis zawiera ich {{.Listed}}" }, + "archivescan.Device": { "hash": "sha256-679cb400e806", "other": "to urządzenie" }, + "archivescan.Encrypted": { "hash": "sha256-f93c3b3dbeb0", "other": "jest zaszyfrowany" }, + "archivescan.EndsEarly": { "hash": "sha256-d7126b8d60eb", "other": "jego zawartość kończy się przed rozmiarem podanym w spisie" }, + "archivescan.EntryWhy": { "hash": "sha256-13b3c18bff10", "other": "{{.Name}}: {{.Why}}" }, + "archivescan.GzipHeader": { "hash": "sha256-7a245481ab58", "other": "jego nagłówek gzip jest uszkodzony" }, + "archivescan.IsADirectory": { "hash": "sha256-99f387f3e133", "other": "{{.Path}} to katalog, a to narzędzie sprawdza jedno archiwum" }, + "archivescan.IsNotAFile": { "hash": "sha256-28957d41213f", "other": "{{.Path}} nie jest plikiem, tylko urządzeniem, potokiem albo gniazdem" }, + "archivescan.IsNotAnArchive": { "hash": "sha256-852351e5de82", "other": "{{.Path}} nie jest archiwum ZIP, TAR ani gzip" }, + "archivescan.ItDoesNotBegin": { "hash": "sha256-fc6fa1f8683f", "other": "nie zaczyna się tak jak żadne z nich, a o tym, czym jest plik, nie decyduje jego nazwa" }, + "archivescan.ItsOwnFormat": { "hash": "sha256-13b59184ca3a", "other": "jego spis zawartości jest zapisany we własnym formacie" }, + "archivescan.Link": { "hash": "sha256-f259a6b86f03", "other": "{{.Name}} -> {{.Target}}" }, + "archivescan.ListElsewhere": { "hash": "sha256-f2723b1851e0", "other": "jego spisu zawartości nie ma tam, gdzie wskazuje rekord na jego końcu" }, + "archivescan.ListEndsEarly": { "hash": "sha256-13e077022aaf", "other": "jego spis zawartości urywa się w środku wpisu" }, + "archivescan.ListHoldsOther": { "hash": "sha256-294d9d38d2bf", "other": "jego spis zawartości zawiera coś, co nie jest wpisem" }, + "archivescan.Method": { "hash": "sha256-909cb4c9c048", "other": "jest spakowany metodą {{.Method}}, której to narzędzie nie czyta" }, + "archivescan.Name": { "hash": "sha256-1a0545a47535", "other": "{{.Name}}" }, + "archivescan.NameAZipOrTar": { "hash": "sha256-6b8df2e3f117", "other": "wskaż plik ZIP, TAR albo TAR.GZ" }, + "archivescan.NameOneArchive": { "hash": "sha256-b3119045be6e", "other": "wskaż jeden plik archiwum" }, + "archivescan.NoEnd": { "hash": "sha256-638b1e0460e7", "other": "brakuje rekordu na jego końcu, który mówi, gdzie jest spis zawartości" }, + "archivescan.NotReadYet": { "hash": "sha256-bfe67470dde3", "other": "{{.Path}} to archiwum {{.Kind}}, którego to narzędzie jeszcze nie czyta" }, + "archivescan.NotWhereListed": { "hash": "sha256-8e9d4c7346e8", "other": "nie zaczyna się tam, gdzie podaje spis zawartości" }, + "archivescan.OverLimit": { "hash": "sha256-31b786bac0bd", "other": "{{.Unpacked}} przy limicie {{.Limit}}" }, + "archivescan.PackAsZip": { "hash": "sha256-97b44719e0c2", "other": "spakuj te same pliki jako ZIP albo TAR i sprawdź to archiwum" }, + "archivescan.Pipe": { "hash": "sha256-357c8d55b7cd", "other": "to potok" }, + "archivescan.ReadingMayNeverEnd": { "hash": "sha256-9055c322986c", "other": "jego czytanie może się nigdy nie skończyć, więc nie jest zaczynane" }, + "archivescan.Rights": { "hash": "sha256-0f9eff296b16", "other": "uruchamia się z uprawnieniami swojego właściciela" }, + "archivescan.RunsIntoList": { "hash": "sha256-a7a637c4c573", "other": "jego zawartość zachodzi na spis zawartości" }, + "archivescan.Same": { "hash": "sha256-8c7055ead538", "other": "{{.Name}} = {{.First}}" }, + "archivescan.Size": { "hash": "sha256-8deb8dd02c4a", "other": "{{.Size}} ({{.Exactly}})" }, + "archivescan.Socket": { "hash": "sha256-a0d8c46d99ca", "other": "to gniazdo" }, + "archivescan.Split": { "hash": "sha256-66a4b1365362", "other": "podaje, że jest jedną częścią archiwum podzielonego na kilka plików" }, + "archivescan.StoppedBomb": { "hash": "sha256-a9e09bc34953", "other": "rozpakowuje się do ponad {{.Ratio}} razy więcej, niż z niego przeczytano, więc dalej nie jest czytane" }, + "archivescan.StoppedEntries": { "hash": "sha256-f587645b5f7b", "other": "wymienia ponad {{.Most}} wpisów, więc dalsze nie są czytane" }, + "archivescan.StoppedNames": { "hash": "sha256-21ea12750101", "other": "jego nazwy zajmują więcej miejsca, niż to narzędzie przeznacza na ich porównanie, więc dalsze nie są czytane" }, + "archivescan.StreamBroken": { "hash": "sha256-afe268a16a8f", "other": "kończy się przedwcześnie albo jego zawartość się nie rozpakowuje" }, + "archivescan.TarHeader": { "hash": "sha256-0350e128590c", "other": "nagłówek jest uszkodzony albo archiwum urywa się w jego środku" }, + "archivescan.TwoNames": { "hash": "sha256-8816d7bc260e", "other": "{{.Listed}} w spisie, {{.Local}} przy wpisie" }, + "archivescan.Type": { "hash": "sha256-ea85c62d6ca3", "other": "to wpis typu {{.Type}}, którego większość programów nie rozpakowuje" }, + "archivescan.WaitAndRunAgain": { "hash": "sha256-161d36039e9c", "other": "poczekaj, aż to, co go zapisuje, skończy, i uruchom to jeszcze raz" }, "avif.MinimumReason": { "hash": "sha256-97b2a4a72e3a", "other": "najmniejszy obrazek, jaki rysuje ten format, koduje się w najgorszym razie do {{.Coded}} B, a plik zawsze niesie wolny blok, który kosztuje {{.Box}} B nawet pusty" }, "avif.MinimumReasonOwn": { "hash": "sha256-ff69f6fa9b64", "other": "obrazek {{.Width}}x{{.Height}} w jakości {{.Quality}} koduje się do {{.Coded}} B, a plik zawsze niesie wolny blok, który kosztuje {{.Box}} B nawet pusty" }, "checksum.AChecksumDigitsLongIsNot": { "hash": "sha256-0dcdc03bd2f7", "other": "suma kontrolna o długości {{.Digits}} cyfr nie jest taką, jaką to narzędzie wylicza" }, diff --git a/internal/tool/all/all.go b/internal/tool/all/all.go index 0b479c61..19946848 100644 --- a/internal/tool/all/all.go +++ b/internal/tool/all/all.go @@ -7,5 +7,6 @@ package all import ( // Each tool registers itself when its package is loaded. + _ "github.com/donislawdev/TestingFilesGenerator/internal/tool/archivescan" _ "github.com/donislawdev/TestingFilesGenerator/internal/tool/checksum" ) diff --git a/internal/tool/archivescan/archivescan.go b/internal/tool/archivescan/archivescan.go new file mode 100644 index 00000000..c20016fa --- /dev/null +++ b/internal/tool/archivescan/archivescan.go @@ -0,0 +1,141 @@ +// Package archivescan is the tool that looks into an archive and says whether +// unpacking it is safe - without unpacking it. +// +// What it looks for are the ways an archive hurts whoever unpacks it: an entry +// written outside the folder, a link written through, two entries landing on +// one file, a name a system cannot hold, an archive built to explode, contents +// that are not what the list of contents says. Everything is read, the list +// and the contents, and nothing is written - the contents go through a +// checksum and are thrown away. +// +// The analysis, the measurements behind the limits and what was left out: +// docs/SKANER-ARCHIWUM-2026-10-19.md. +package archivescan + +import ( + "context" + "errors" + "io" + "os" + + "github.com/donislawdev/TestingFilesGenerator/internal/core" + "github.com/donislawdev/TestingFilesGenerator/internal/format" + "github.com/donislawdev/TestingFilesGenerator/internal/tool" +) + +// ID is the name of the tool, after "tfg tool". +const ID = "archive-scan" + +// The names of what the tool declares, used by the request and by both +// surfaces. +const ( + InputArchive = "archive" + SettingLimit = "unpacked_limit" +) + +// The limits, fixed. The one a person sets is SettingLimit. +const ( + // MostEntries is where reading stops. A million names held to find two + // that land on one file is a few hundred megabytes, and an archive with + // more is a trap of its own for a file system. + MostEntries = 1_000_000 + // MostPlaces and MostNameBytes bound what is held to compare names: the + // files and folders the entries unpack to, and the bytes of their names. + // An entry with a name of 64 KiB, a million times, would otherwise be + // 64 GB held in memory to answer a question about a file. + MostPlaces = 2 * MostEntries + MostNameBytes = 256 << 20 + // BombBytes and BombRatio are an archive built to explode: at least this + // much when unpacked, and more than this many times its own size. Both, + // because either alone is innocent - a file of zeros packs a thousand to + // one, and a big archive unpacks big. Measured on 906 real archives + // (docs/SKANER-ARCHIWUM-2026-10-19.md §2.2): 99 in 100 unpack to 7 times + // their size or less, the largest to 73. + BombBytes = 1 << 30 + BombRatio = 100 +) + +// The keys of the conclusions. +const ( + concludedSafe = "safe" + concludedUnsafe = "unsafe" +) + +func init() { + tool.Register(tool.Descriptor{ + ID: ID, + Question: "Is this archive safe to unpack?", + Detail: "Reads a ZIP or TAR archive and everything in it without unpacking anything, " + + "and says whether unpacking it could write outside its folder, overwrite a file or fill the disk.", + Inputs: []tool.Input{{ + Name: InputArchive, Kind: tool.File, + Detail: "The archive to look into: ZIP (DOCX, XLSX and JAR are ZIP inside), TAR or TAR.GZ. It is only read.", + }}, + Settings: []format.Property{{ + Name: SettingLimit, Kind: format.PropertySize, + Detail: "The most the archive may unpack to, all its files together - for a server or a disk that takes no more. " + + "Left empty, only an archive built to explode is reported: 1 GB or more, and more than 100 times its own size.", + }}, + Notes: declaredNotes(), + Conclusions: []tool.Conclusion{ + {ID: concludedSafe, Says: "Safe to unpack: none of the traps this tool looks for is in it."}, + {ID: concludedUnsafe, Says: "Not safe to unpack: the lines above say why.", Fails: true}, + }, + Run: run, + }) +} + +// run is the tool, on a request tool.Start has checked and defaulted. +func run(ctx context.Context, in tool.Request, progress tool.Progress) (tool.Result, error) { + limit := int64(-1) + if raw := in.Values[SettingLimit]; raw != "" { + // Checked by the registry already, which is why the error is not. + limit, _ = core.ParseSize(raw) + } + path := in.Inputs[InputArchive] + f, before, err := tool.OpenRegular(path) + var not *tool.NotRegularError + if errors.As(err, ¬) { + return tool.Result{}, &NotAFileError{Path: path, Directory: not.Directory} + } + if err != nil { + return tool.Result{}, err + } + defer func() { _ = f.Close() }() + + s := newScan(ctx, path, before.Size(), limit, progress) + if err := s.look(f); err != nil { + return tool.Result{}, err + } + after, err := f.Stat() + if err != nil { + return tool.Result{}, err + } + if after.Size() != before.Size() || !after.ModTime().Equal(before.ModTime()) { + return tool.Result{}, &ChangedError{Path: path} + } + return s.result(), nil +} + +// look tells what the file is and reads it as that. +func (s *scan) look(f *os.File) error { + head := make([]byte, headLength) + n, err := f.ReadAt(head, 0) + if err != nil && !errors.Is(err, io.EOF) { + return err + } + head = head[:n] + switch k, other := sniff(head); { + case k == kindZip: + s.kind = kindZip + return s.zip(f) + case k == kindTar: + s.kind = kindTar + return s.tar(io.NewSectionReader(f, 0, s.size)) + case k == kindGzip: + return s.gzip(io.NewSectionReader(f, 0, s.size)) + case other != "": + return &NotReadYetError{Path: s.path, Kind: other} + } + return &NotAnArchiveError{Path: s.path} +} diff --git a/internal/tool/archivescan/findings.go b/internal/tool/archivescan/findings.go new file mode 100644 index 00000000..9b2db70b --- /dev/null +++ b/internal/tool/archivescan/findings.go @@ -0,0 +1,292 @@ +package archivescan + +import ( + "context" + "math" + + "github.com/donislawdev/TestingFilesGenerator/internal/core" + "github.com/donislawdev/TestingFilesGenerator/internal/tool" +) + +// What a scan found, kept as notes from the first entry to the result. + +// The keys of the notes. Also the keys of what --json reports as found, so +// each is a public name (untouchable rule 10). +const ( + noteKind = "kind" + noteEntries = "entries" + notePacked = "size" + noteUnpacked = "unpacked" + + noteLeaves = "leaves_folder" + noteLinks = "links" + noteSpecial = "special" + noteCollides = "collides" + noteUnwritable = "unwritable" + noteTwoNames = "two_names" + noteOverlapping = "overlapping" + noteBomb = "bomb" + noteLonger = "longer_than_said" + noteOverLimit = "over_limit" + noteDamaged = "damaged" + noteUnchecked = "unchecked" + noteStopped = "stopped" + + noteNested = "nested" +) + +// declared is every note, in the order a result says them: what the archive +// is, then everything that makes it unsafe, then what is worth knowing and is +// harmless on its own. +var declared = []struct { + tool.Note + // harmless is a note that does not make an archive unsafe. + harmless bool +}{ + {tool.Note{ID: noteKind, Says: "Archive:"}, true}, + {tool.Note{ID: noteEntries, Says: "Entries:"}, true}, + {tool.Note{ID: notePacked, Says: "Size:"}, true}, + {tool.Note{ID: noteUnpacked, Says: "Unpacked:"}, true}, + {tool.Note{ID: noteLeaves, Says: "Entries that would be written outside the folder:"}, false}, + {tool.Note{ID: noteLinks, Says: "Links, which a later entry can be written through:"}, false}, + {tool.Note{ID: noteSpecial, Says: "Entries that are not plain files or folders:"}, false}, + {tool.Note{ID: noteCollides, Says: "Entries that land on the same file as another on Windows or macOS:"}, false}, + {tool.Note{ID: noteUnwritable, Says: "Names that Windows, macOS or Linux cannot write as they are:"}, false}, + {tool.Note{ID: noteTwoNames, Says: "Entries named one way in the list of contents and another at the entry itself:"}, false}, + {tool.Note{ID: noteOverlapping, Says: "Entries that share their bytes with another, which only an archive built to explode does:"}, false}, + {tool.Note{ID: noteBomb, Says: "Unpacks to far more than its own size, the way an archive built to explode does:"}, false}, + {tool.Note{ID: noteLonger, Says: "Entries holding more than the archive says they do:"}, false}, + {tool.Note{ID: noteOverLimit, Says: "Unpacks to more than the limit given:"}, false}, + {tool.Note{ID: noteDamaged, Says: "Damaged, so programs that unpack it may disagree on what it holds:"}, false}, + {tool.Note{ID: noteUnchecked, Says: "Entries whose contents could not be checked:"}, false}, + {tool.Note{ID: noteStopped, Says: "Reading stopped before the end:"}, false}, + {tool.Note{ID: noteNested, Says: "Archives inside it, which were not opened:"}, true}, +} + +// declaredNotes is what the registry is told. +func declaredNotes() []tool.Note { + out := make([]tool.Note, len(declared)) + for i, d := range declared { + out[i] = d.Note + } + return out +} + +// harmless says whether a note leaves an archive safe to unpack. +func harmless(id string) bool { + for _, d := range declared { + if d.ID == id { + return d.harmless + } + } + return false +} + +// found is one thing a scan found: the entry it is about, as data, and the +// words for it when the entry alone does not say it. +type found struct { + name string + words core.Said +} + +// Report is what --json prints. Names are the names in the archive, byte for +// byte, so a script compares them. The window and the text show them escaped. +type Report struct { + File string `json:"file"` + Kind string `json:"kind"` + Bytes int64 `json:"bytes"` + Entries int `json:"entries"` + Unpacked uint64 `json:"unpacked_bytes"` + Safe bool `json:"safe"` + // Found is every finding by its key, each with the entries it is about. + // A finding about the archive as a whole has no entry and an empty list. + Found map[string][]string `json:"found"` +} + +// scan is one run of the tool over one archive. +type scan struct { + ctx context.Context + path string + size int64 + limit int64 + progress tool.Progress + read int64 + + kind kind + entries int + unpacked uint64 + names *book + nameRoom int + stopped bool + // exploded is an archive found built to explode, noted once. + exploded bool + + found map[string][]found +} + +func newScan(ctx context.Context, path string, size, limit int64, progress tool.Progress) *scan { + return &scan{ + ctx: ctx, path: path, size: size, limit: limit, progress: progress, + names: newBook(), nameRoom: MostNameBytes, found: map[string][]found{}, + } +} + +// note records a finding about an entry, shown as the entry's name. +func (s *scan) note(id, name string) { + s.found[id] = append(s.found[id], found{name: name}) +} + +// noteSaid records a finding with words of its own. +func (s *scan) noteSaid(id, name string, words core.Said) { + s.found[id] = append(s.found[id], found{name: name, words: words}) +} + +// counted tells the progress how much more of the archive has been read. +func (s *scan) counted(n int64) { + s.read += n + s.progress(min(s.read, s.size), s.size) +} + +// stop ends reading, saying why. Everything after this point is unseen, so +// the archive cannot be called safe (MF5). +func (s *scan) stop(why core.Said) { + if s.stopped { + return + } + s.stopped = true + s.noteSaid(noteStopped, "", why) +} + +// entry is what every kind of archive does for each entry it lists: count it, +// judge its name, and record where it lands. False when reading has to stop. +func (s *scan) entry(name string, folder bool) bool { + if s.entries >= MostEntries { + s.stop(core.Says("archivescan.StoppedEntries", "it lists more than %s entries, and no more are read", core.A("Most", core.Exactly(MostEntries)))) + return false + } + s.nameRoom -= len(name) + if s.nameRoom < 0 || s.names.full() { + s.stop(core.Says("archivescan.StoppedNames", "its names take more room than this tool sets aside to compare them, and no more are read")) + return false + } + s.entries++ + if leaves(name) { + s.note(noteLeaves, name) + } + if unwritable(name) { + s.note(noteUnwritable, name) + } + if first, ok := s.names.add(name, folder); ok { + s.noteSaid(noteCollides, name, core.Says("archivescan.Same", "%s = %s", core.A("Name", core.Shown(name)), core.A("First", core.Shown(first)))) + } + return true +} + +// weigh is the size of what an archive unpacks to, against the archive and +// against the limit given. +func (s *scan) weigh() { + if !s.exploded && s.unpacked >= BombBytes && s.unpacked > uint64(s.size)*BombRatio { + s.exploded = true + s.noteSaid(noteBomb, "", core.Says("archivescan.Bomb", "%s from %s", core.A("Unpacked", bytesOf(s.unpacked)), core.A("Size", core.Bytes(s.size)))) + } + if s.limit >= 0 && s.unpacked > uint64(s.limit) { + s.noteSaid(noteOverLimit, "", core.Says("archivescan.OverLimit", "%s against a limit of %s", core.A("Unpacked", bytesOf(s.unpacked)), core.A("Limit", core.Bytes(s.limit)))) + } +} + +// bytesOf is a count of bytes for a sentence. An archive can claim more than +// a signed number holds, and says the most one holds then. +func bytesOf(n uint64) core.Bytes { + if n > math.MaxInt64 { + return core.Bytes(math.MaxInt64) + } + return core.Bytes(n) +} + +// result is what the scan found, as the registry hands it to both surfaces. +func (s *scan) result() tool.Result { + report := Report{ + File: s.path, Kind: string(s.kind), Bytes: s.size, Entries: s.entries, + Unpacked: s.unpacked, Safe: true, Found: map[string][]string{}, + } + summary := map[string]tool.Noted{ + noteKind: {ID: noteKind, Items: []string{string(s.kind)}}, + noteEntries: {ID: noteEntries, Items: []string{core.Exactly(int64(s.entries))}}, + notePacked: sized(notePacked, uint64(s.size)), + noteUnpacked: sized(noteUnpacked, s.unpacked), + } + r := tool.Result{Data: &report, Concluded: concludedSafe} + for _, d := range declared { + if n, ok := summary[d.ID]; ok { + r.Notes = append(r.Notes, n) + continue + } + list := s.found[d.ID] + if len(list) == 0 { + continue + } + r.Notes = append(r.Notes, noted(d.ID, list)) + report.Found[d.ID] = namesOf(list) + if !d.harmless { + report.Safe = false + r.Concluded = concludedUnsafe + } + } + return r +} + +// namesOf is the entries a list of findings is about, for --json: a finding +// about the archive as a whole names none. +func namesOf(list []found) []string { + names := make([]string, 0, len(list)) + for _, f := range list { + if f.name != "" { + names = append(names, f.name) + } + } + return names +} + +// special notes an entry that is not a plain file or folder, and why. +func (s *scan) special(name string, why core.Said) { + s.noteSaid(noteSpecial, name, entryWhy(name, why)) +} + +// entryWhy is an entry and what is wrong with it, as one item of a note. +func entryWhy(name string, why core.Said) core.Said { + return core.Says("archivescan.EntryWhy", "%s: %s", core.A("Name", core.Shown(name)), core.A("Why", why)) +} + +// sized is a note of one size, said the way a person reads it with the exact +// count beside it. Below a kilobyte the two are one number, said once. +func sized(id string, n uint64) tool.Noted { + words := core.Says("archivescan.Size", "%s (%s)", core.A("Size", bytesOf(n)), core.A("Exactly", core.ExactBytes(int64(bytesOf(n))))) + if n < 1024 { + words = core.Says("archivescan.Bytes", "%s", core.A("Size", bytesOf(n))) + } + return tool.Noted{ID: id, Items: []string{words.String()}, Words: []core.Said{words}} +} + +// noted is a note as the registry carries it: each finding as data, and in +// words where any of them has words - then every one, since a window shows +// the words of all or of none. +func noted(id string, list []found) tool.Noted { + n := tool.Noted{ID: id} + worded := false + for _, f := range list { + worded = worded || !f.words.IsZero() + } + for _, f := range list { + words := f.words + if words.IsZero() { + words = core.Says("archivescan.Name", "%s", core.A("Name", core.Shown(f.name))) + } + if worded { + n.Items = append(n.Items, words.String()) + n.Words = append(n.Words, words) + continue + } + n.Items = append(n.Items, f.name) + } + return n +} diff --git a/internal/tool/archivescan/names.go b/internal/tool/archivescan/names.go new file mode 100644 index 00000000..f0262d41 --- /dev/null +++ b/internal/tool/archivescan/names.go @@ -0,0 +1,168 @@ +package archivescan + +import ( + "strings" + + "golang.org/x/text/unicode/norm" + + "github.com/donislawdev/TestingFilesGenerator/internal/engine" +) + +// Where the entries of an archive land, judged the same way on every system: +// an archive travels between machines, and one judged safe on Linux is +// unpacked on Windows next. So both separators are separators everywhere, the +// way the generator refuses both in a name (engine/filename.go). + +// isSeparator is either separator, on every system. +func isSeparator(r rune) bool { return r == '/' || r == '\\' } + +// parts is a path inside an archive split at both separators, with the empty +// parts two separators in a row leave out. +func parts(name string) []string { + return strings.FieldsFunc(name, isSeparator) +} + +// leaves says whether unpacking an entry under this name writes outside the +// folder it is unpacked into: a path from the root, from a drive, or one that +// climbs out. +// +// Any part that climbs is reported, even "a/../b", which stays inside. The +// generator refuses ".." in a name for the same reason, and a name that only +// stays inside after a program works it out is one that some program will not. +// A part of dots and spaces alone counts as climbing too, because Windows +// drops dots and spaces at the end of a name, so ".. " is ".." there. +func leaves(name string) bool { + if name == "" { + return false + } + if name[0] == '/' || name[0] == '\\' { + return true + } + if drive(name) { + return true + } + for _, p := range parts(name) { + if climbs(p) { + return true + } + } + return false +} + +// drive says whether a name starts with a drive letter, as "C:" and "C:x" do - +// the second is a path on that drive's current folder on Windows. +func drive(name string) bool { + return len(name) >= 2 && name[1] == ':' && isLetter(name[0]) +} + +// climbs says whether a part of a path names the folder above, on any system. +func climbs(part string) bool { + return strings.Trim(part, ". ") == "" && strings.Count(part, ".") >= 2 +} + +func isLetter(b byte) bool { + return (b >= 'a' && b <= 'z') || (b >= 'A' && b <= 'Z') +} + +// unwritable says whether some part of a name is one a system cannot hold as +// it is - judged by the rules the generator writes its own names by, part by +// part. An entry with no name at all is one too. +func unwritable(name string) bool { + ps := parts(name) + if len(ps) == 0 { + return name == "" + } + // A drive is not a name, and an entry that starts with one is reported as + // leaving the folder already. + if drive(name) { + ps = ps[1:] + } + for _, p := range ps { + if p == "." || climbs(p) { + continue + } + if engine.Unwritable(p) { + return true + } + } + return false +} + +// landing is the name a part of a path lands under where names are told apart +// least: case ignored as Windows and macOS do, accents composed as macOS does, +// and dots and spaces at the end dropped as Windows does. Two names with one +// landing may be one file once unpacked - "may", because the case rules of the +// file systems are tables of their own and this is the part they share. +func landing(part string) string { + if kept := strings.TrimRight(part, ". "); kept != "" { + part = kept + } + return strings.ToLower(norm.NFC.String(part)) +} + +// place is one file or folder an archive unpacks to: the folder it is in, and +// its name as it lands. +type place struct { + in int32 + name string +} + +// book is every place the entries seen so far unpack to, as a tree, to find +// the second entry that lands on a file already written, or a file where a +// folder has to be. +// +// A tree rather than whole paths, so the work for an entry is the length of +// its name: looking up every folder above an entry by its whole path costs the +// square of its depth, and an archive of deep, different paths would turn +// this tool into the thing it warns about. +type book struct { + at map[place]int32 + file []bool + named []string +} + +// root is the folder an archive is unpacked into. +const root = -1 + +func newBook() *book { + return &book{at: map[place]int32{}} +} + +// full says the book holds as many places as it is allowed to. +func (b *book) full() bool { return len(b.named) >= MostPlaces } + +// add records an entry, and says which entry seen before it lands on the same +// place - or put a file where this one needs a folder - if one did. +func (b *book) add(name string, folder bool) (string, bool) { + in := int32(root) + ps := parts(name) + for i, p := range ps { + if p == "." { + continue + } + file := i == len(ps)-1 && !folder + here := place{in: in, name: landing(p)} + id, seen := b.at[here] + if !seen && b.full() { + return "", false + } + if !seen { + in = b.put(here, name, file) + continue + } + if b.file[id] || file { + return b.named[id], true + } + in = id + } + return "", false +} + +// put records a place first reached by the entry with this name. +func (b *book) put(here place, name string, file bool) int32 { + id := int32(len(b.named)) + b.at[here] = id + b.file = append(b.file, file) + b.named = append(b.named, name) + return id +} diff --git a/internal/tool/archivescan/refusals.go b/internal/tool/archivescan/refusals.go new file mode 100644 index 00000000..fcf9e2bc --- /dev/null +++ b/internal/tool/archivescan/refusals.go @@ -0,0 +1,133 @@ +package archivescan + +import ( + "github.com/donislawdev/TestingFilesGenerator/internal/core" + "github.com/donislawdev/TestingFilesGenerator/internal/tool" +) + +// NotAFileError is a path naming something that is not a file. +type NotAFileError struct { + Path string + Directory bool +} + +// AboutSetting is the input this is about. +func (e *NotAFileError) AboutSetting() string { return InputArchive } + +func (e *NotAFileError) what() core.Said { + if e.Directory { + return core.Says("archivescan.IsADirectory", "%s is a directory and this looks into one archive", core.A("Path", e.Path)) + } + return core.Says("archivescan.IsNotAFile", "%s is not a file but a device, a pipe or a socket", core.A("Path", e.Path)) +} + +func (e *NotAFileError) why() core.Said { + if e.Directory { + return core.Says("archivescan.ADirectoryIsUnpacked", "a directory is what an archive unpacks into, not an archive") + } + return core.Says("archivescan.ReadingMayNeverEnd", "reading one may never end, so it is not started") +} + +func (e *NotAFileError) instead() core.Said { + return core.Says("archivescan.NameOneArchive", "name one archive file") +} + +func (e *NotAFileError) Error() string { return e.Said().String() } + +// Unwrap is the refusal every tool shares. +func (e *NotAFileError) Unwrap() error { + return &tool.NotRegularError{Path: e.Path, Directory: e.Directory} +} + +// Said is the whole refusal, for a window that says it in its own language. +func (e *NotAFileError) Said() core.Said { return tool.Said(e.what(), e.why(), e.instead()) } + +// Class says this is a mistake in the request. +func (e *NotAFileError) Class() tool.Class { return tool.Asked } + +// NotAnArchiveError is a file that begins neither as a ZIP nor as a TAR nor as +// gzip. +type NotAnArchiveError struct { + Path string +} + +// AboutSetting is the input this is about. +func (e *NotAnArchiveError) AboutSetting() string { return InputArchive } + +func (e *NotAnArchiveError) what() core.Said { + return core.Says("archivescan.IsNotAnArchive", "%s is not a ZIP, TAR or gzip archive", core.A("Path", e.Path)) +} + +func (e *NotAnArchiveError) why() core.Said { + return core.Says("archivescan.ItDoesNotBegin", "it does not begin the way any of them does, and the name of a file does not decide what it is") +} + +func (e *NotAnArchiveError) instead() core.Said { + return core.Says("archivescan.NameAZipOrTar", "name a ZIP, TAR or TAR.GZ file") +} + +func (e *NotAnArchiveError) Error() string { return e.Said().String() } + +// Said is the whole refusal, for a window that says it in its own language. +func (e *NotAnArchiveError) Said() core.Said { return tool.Said(e.what(), e.why(), e.instead()) } + +// Class says this is a mistake in the request. +func (e *NotAnArchiveError) Class() tool.Class { return tool.Asked } + +// NotReadYetError is an archive of a kind this tool recognises and does not +// read. +type NotReadYetError struct { + Path string + Kind string +} + +// AboutSetting is the input this is about. +func (e *NotReadYetError) AboutSetting() string { return InputArchive } + +func (e *NotReadYetError) what() core.Said { + return core.Says("archivescan.NotReadYet", "%s is a %s archive, which this tool does not read yet", core.A("Path", e.Path), core.A("Kind", e.Kind)) +} + +func (e *NotReadYetError) why() core.Said { + return core.Says("archivescan.ItsOwnFormat", "its list of contents is written in a format of its own") +} + +func (e *NotReadYetError) instead() core.Said { + return core.Says("archivescan.PackAsZip", "pack the same files as ZIP or TAR, and look into that") +} + +func (e *NotReadYetError) Error() string { return e.Said().String() } + +// Said is the whole refusal, for a window that says it in its own language. +func (e *NotReadYetError) Said() core.Said { return tool.Said(e.what(), e.why(), e.instead()) } + +// Class says this is a mistake in the request. +func (e *NotReadYetError) Class() tool.Class { return tool.Asked } + +// ChangedError is an archive that changed while it was being read. +type ChangedError struct { + Path string +} + +// AboutSetting is the input this is about. +func (e *ChangedError) AboutSetting() string { return InputArchive } + +func (e *ChangedError) what() core.Said { + return core.Says("archivescan.Changed", "%s changed while it was being read", core.A("Path", e.Path)) +} + +func (e *ChangedError) why() core.Said { + return core.Says("archivescan.AnswerAboutNoVersion", "an answer about a file being written is an answer about no version of it") +} + +func (e *ChangedError) instead() core.Said { + return core.Says("archivescan.WaitAndRunAgain", "wait until whatever is writing it has finished, and run this again") +} + +func (e *ChangedError) Error() string { return e.Said().String() } + +// Said is the whole refusal, for a window that says it in its own language. +func (e *ChangedError) Said() core.Said { return tool.Said(e.what(), e.why(), e.instead()) } + +// Class says the disk did not cooperate rather than the request being wrong. +func (e *ChangedError) Class() tool.Class { return tool.Reading } diff --git a/internal/tool/archivescan/sniff.go b/internal/tool/archivescan/sniff.go new file mode 100644 index 00000000..b5b29e9c --- /dev/null +++ b/internal/tool/archivescan/sniff.go @@ -0,0 +1,92 @@ +package archivescan + +import "bytes" + +// Telling what a file is from the bytes it begins with, never from its name - +// a name is the first thing that lies about a file somebody was sent. + +// kind is an archive this tool reads. +type kind string + +const ( + kindZip kind = "zip" + kindTar kind = "tar" + kindTarGz kind = "tar.gz" + kindGzip kind = "gzip" +) + +// headLength is how much of a file is read to tell what it is: a TAR header +// is one block of 512 bytes with its magic at 257. +const headLength = 512 + +var ( + zipLocal = []byte("PK\x03\x04") + zipEmpty = []byte("PK\x05\x06") + gzipMagic = []byte{0x1f, 0x8b} + tarMagic = []byte("ustar") +) + +// others are archives recognised and not read, by the bytes they begin with - +// named in the refusal, so a person learns what they gave rather than that it +// is nothing. +var others = []struct { + name string + magic []byte +}{ + {"7z", []byte{'7', 'z', 0xBC, 0xAF, 0x27, 0x1C}}, + {"RAR", []byte("Rar!\x1a\x07")}, + {"xz", []byte{0xFD, '7', 'z', 'X', 'Z', 0x00}}, + {"bzip2", []byte("BZh")}, + {"zstd", []byte{0x28, 0xB5, 0x2F, 0xFD}}, + {"CAB", []byte("MSCF")}, +} + +// sniff is the kind of an archive from its first bytes, or the name of one +// this tool does not read, or neither. +func sniff(head []byte) (kind, string) { + switch { + case bytes.HasPrefix(head, zipLocal), bytes.HasPrefix(head, zipEmpty): + return kindZip, "" + case bytes.HasPrefix(head, gzipMagic): + return kindGzip, "" + case isTar(head): + return kindTar, "" + } + for _, o := range others { + if bytes.HasPrefix(head, o.magic) { + return "", o.name + } + } + return "", "" +} + +// isTar says whether a block is a TAR header, or the block of zeros an empty +// TAR is. POSIX and GNU both write "ustar" at 257. The old V7 layout has no +// magic at all and is not told apart from any other file. +func isTar(head []byte) bool { + if len(head) < headLength { + return false + } + return bytes.Equal(head[257:257+len(tarMagic)], tarMagic) || allZero(head[:headLength]) +} + +// archiveIn names the archive a piece of contents begins as, or nothing - for +// an entry holding another archive, which is reported and never opened. +func archiveIn(head []byte) string { + if k, other := sniff(head); other != "" { + return other + } else if k != "" && !(k == kindTar && allZero(head)) { + return string(k) + } + return "" +} + +// allZero says whether every byte is zero. +func allZero(b []byte) bool { + for _, c := range b { + if c != 0 { + return false + } + } + return true +} diff --git a/internal/tool/archivescan/tar.go b/internal/tool/archivescan/tar.go new file mode 100644 index 00000000..05e560ac --- /dev/null +++ b/internal/tool/archivescan/tar.go @@ -0,0 +1,311 @@ +package archivescan + +import ( + "archive/tar" + "bufio" + "bytes" + "compress/gzip" + "context" + "errors" + "io" + "os" + + "github.com/donislawdev/TestingFilesGenerator/internal/core" +) + +// Reading a TAR archive, bare or inside gzip, and a gzip file that holds one +// file. A TAR has no list of contents: each entry is a header and its bytes, +// one after another, so the only way to the next name is through the bytes +// before it. That is why an archive built to explode is caught while it is +// read rather than from a list, and reading stops there. + +// stream is the reading of one TAR or gzip archive, front to back. +type stream struct { + *scan +} + +// tar reads a TAR archive from its first byte. +func (s *scan) tar(r io.Reader) error { + if err := (stream{s}).walk(&counting{r: r, s: s}); err != nil { + return err + } + s.weigh() + return nil +} + +// gzip reads a gzip file, and a TAR in it when there is one. +// +// What the gzip stream unpacks to is counted on its own, below any TAR: that +// is what gunzip writes before anything looks inside, so an archive built to +// explode at that layer is one whatever the TAR in it says - and a stream of +// zeros, which a TAR reader takes for an empty TAR, is caught there. +func (s *scan) gzip(r io.Reader) error { + s.kind = kindGzip + z, err := gzip.NewReader(&counting{r: r, s: s}) + if err != nil { + if failedToRead(err) { + return err + } + s.noteSaid(noteDamaged, "", core.Says("archivescan.GzipHeader", "its gzip header is broken")) + return nil + } + in := bufio.NewReaderSize(&inflating{r: z, s: s}, 64<<10) + head, err := in.Peek(headLength) + if err != nil && failedToRead(err) { + return err + } + if err := (stream{s}).gzipped(in, head); err != nil { + return err + } + s.weigh() + return nil +} + +// gzipped reads what a gzip stream holds: a TAR, told by its magic and not by +// a block of zeros - inside gzip that is the start of any stream of zeros - +// or one file. +func (st stream) gzipped(in io.Reader, head []byte) error { + if len(head) < 257+len(tarMagic) || !bytes.Equal(head[257:257+len(tarMagic)], tarMagic) { + return st.one(in) + } + st.kind = kindTarGz + if err := st.walk(in); err != nil || st.stopped { + return err + } + // What follows the end of the TAR, which a TAR program never reads and + // gunzip writes all the same. + _, _, err := drain(st.ctx, in, ^uint64(0), nil, nil) + return st.ended(err, "") +} + +// one reads a gzip file that holds one file. Its name is not judged: gunzip +// names what it unpacks after the archive, not after the name inside. +func (st stream) one(in io.Reader) error { + st.scan.entries = 1 + _, head, err := drain(st.ctx, in, ^uint64(0), nil, st.unpacking) + if err := st.ended(err, ""); err != nil || st.stopped { + return err + } + if archiveIn([]byte(head)) != "" { + st.note(noteNested, "") + } + return nil +} + +// walk reads the entries of a TAR one after another. +func (st stream) walk(r io.Reader) error { + tr := tar.NewReader(r) + for !st.stopped { + h, err := st.next(tr) + if err != nil || h == nil { + return err + } + if !st.entry(h.Name, h.Typeflag == tar.TypeDir) { + return nil + } + st.kindOf(h) + if h.Size <= 0 { + continue + } + _, head, err := drain(st.ctx, tr, uint64(h.Size), nil, st.unpacking) + if err := st.ended(err, h.Name); err != nil { + return err + } + if archiveIn([]byte(head)) != "" { + st.note(noteNested, h.Name) + } + } + return nil +} + +// next is the header of the next entry, or nothing at the end of the archive +// or where a broken one ends the reading. +func (st stream) next(tr *tar.Reader) (*tar.Header, error) { + if err := st.ctx.Err(); err != nil { + return nil, err + } + h, err := tr.Next() + switch { + case err == nil: + return h, nil + case errors.Is(err, io.EOF): + return nil, nil + case st.exploded || failedToRead(err): + return nil, st.ended(err, "") + } + st.noteSaid(noteDamaged, "", core.Says("archivescan.TarHeader", "a header is broken, or it ends in the middle of one")) + return nil, nil +} + +// kindOf notes an entry that is not a plain file or folder. +func (st stream) kindOf(h *tar.Header) { + switch h.Typeflag { + case tar.TypeSymlink, tar.TypeLink: + st.noteSaid(noteLinks, h.Name, linked(h.Name, h.Linkname)) + return + case tar.TypeChar, tar.TypeBlock: + st.special(h.Name, core.Says("archivescan.Device", "it is a device")) + return + case tar.TypeFifo: + st.special(h.Name, core.Says("archivescan.Pipe", "it is a pipe")) + return + case tar.TypeReg, tar.TypeDir, tar.TypeGNUSparse, tar.TypeCont, '\x00': + default: + st.special(h.Name, core.Says("archivescan.Type", "it is an entry of type %q, which most programs do not unpack", core.A("Type", string(h.Typeflag)))) + return + } + if h.Mode&(modeSetUser|modeSetGroup) != 0 { + st.special(h.Name, core.Says("archivescan.Rights", "it runs with the rights of its owner")) + } +} + +// unpacking is told every piece of contents read from a stream, and says +// whether to go on: not once what it unpacks to is an archive built to explode. +// Contents and not only a gzip layer, because a sparse entry in a bare TAR +// unpacks to its holes too. +func (st stream) unpacking(n int) bool { + st.unpacked = addCapped(st.unpacked, uint64(n)) + return !st.explodes(st.unpacked) +} + +// ended sorts the end of reading one entry of a stream: a stop and a disk that +// would not read are errors, and contents that end early or do not unpack are +// damage, after which nothing more is read. +func (st stream) ended(err error, name string) error { + switch { + case err == nil, st.exploded: + return nil + case st.ctx.Err() != nil: + return st.ctx.Err() + case failedToRead(err): + return err + } + words := core.Says("archivescan.StreamBroken", "it ends early, or its contents do not unpack") + if name != "" { + words = entryWhy(name, words) + } + st.noteSaid(noteDamaged, name, words) + st.stopped = true + return nil +} + +// explodes says whether having unpacked this much from what was read of the +// archive to get there is an archive built to explode - a gigabyte, and more +// than a hundred times what was read - and notes it the first time. Reading +// stops there: going on is what such an archive is built to make a program do. +func (s *scan) explodes(unpacked uint64) bool { + if s.exploded { + return true + } + if unpacked < BombBytes || unpacked <= uint64(s.read)*BombRatio { + return false + } + s.exploded = true + s.noteSaid(noteBomb, "", core.Says("archivescan.Bomb", "%s from %s", core.A("Unpacked", bytesOf(unpacked)), core.A("Size", core.Bytes(s.read)))) + s.stop(core.Says("archivescan.StoppedBomb", "it unpacks to more than %d times what was read of it, and no more is read", core.A("Ratio", BombRatio))) + return true +} + +// errExploded unwinds a reader once the archive has been found built to +// explode, from inside the gzip layer the TAR reader reads through. +var errExploded = errors.New("built to explode") + +// inflating counts what a gzip stream unpacks to. +type inflating struct { + r io.Reader + s *scan + out uint64 +} + +func (i *inflating) Read(p []byte) (int, error) { + n, err := i.r.Read(p) + i.out = addCapped(i.out, uint64(n)) + if i.s.explodes(i.out) { + return n, errExploded + } + return n, err +} + +// failedToRead says whether an error is the disk's rather than the archive's. +func failedToRead(err error) bool { + var path *os.PathError + return errors.As(err, &path) +} + +// The mode bits that make a program run with the rights of its owner or its +// group, in the octal a Unix mode is written in. +const ( + modeSetUser = 0o4000 + modeSetGroup = 0o2000 +) + +// kindOfMode is what a Unix mode says an entry is besides a file or a folder: +// a link, or the words for something else. Nothing for a plain file or folder. +func kindOfMode(mode uint32) (core.Said, bool) { + switch mode & 0xF000 { + case 0xA000: + return core.Said{}, true + case 0x1000: + return core.Says("archivescan.Pipe", "it is a pipe"), false + case 0x2000, 0x6000: + return core.Says("archivescan.Device", "it is a device"), false + case 0xC000: + return core.Says("archivescan.Socket", "it is a socket"), false + } + if mode&(modeSetUser|modeSetGroup) != 0 { + return core.Says("archivescan.Rights", "it runs with the rights of its owner"), false + } + return core.Said{}, false +} + +// linked is a link in words: its name and where it points, when known. +func linked(name, target string) core.Said { + if target == "" { + return core.Says("archivescan.Name", "%s", core.A("Name", core.Shown(name))) + } + return core.Says("archivescan.Link", "%s -> %s", core.A("Name", core.Shown(name)), core.A("Target", core.Shown(target))) +} + +// keepHead is how much of an entry's contents is kept: enough to tell an +// archive inside it, and the whole target of a link, which a system keeps to +// 4096 bytes. +const keepHead = 4096 + +// drain reads r through sum, when there is one, until it ends or one byte past +// most - an entry holding more than it was said to is found without reading +// the rest of it - and hands back how much it read and the first bytes. After +// every piece it asks more, when there is one, whether to go on. +func drain(ctx context.Context, r io.Reader, most uint64, sum io.Writer, more func(int) bool) (uint64, string, error) { + buf := make([]byte, 64<<10) + var got uint64 + var head []byte + for { + if err := ctx.Err(); err != nil { + return got, string(head), err + } + n, err := r.Read(buf[:wanted(len(buf), most, got)]) + got += uint64(n) + head = append(head, buf[:min(n, keepHead-len(head))]...) + if sum != nil { + _, _ = sum.Write(buf[:n]) + } + if n > 0 && more != nil && !more(n) { + return got, string(head), nil + } + if got > most || errors.Is(err, io.EOF) { + return got, string(head), nil + } + if err != nil { + return got, string(head), err + } + } +} + +// wanted is how much to read next: a buffer, or what is left to one byte past +// most when that is less. Most of all bits is no bound. +func wanted(buffer int, most, got uint64) int { + if most == ^uint64(0) || most+1-got >= uint64(buffer) { + return buffer + } + return int(most + 1 - got) +} diff --git a/internal/tool/archivescan/zip.go b/internal/tool/archivescan/zip.go new file mode 100644 index 00000000..064aee30 --- /dev/null +++ b/internal/tool/archivescan/zip.go @@ -0,0 +1,303 @@ +package archivescan + +import ( + "bufio" + "bytes" + "compress/flate" + "errors" + "hash/crc32" + "io" + "sort" + + "github.com/donislawdev/TestingFilesGenerator/internal/core" +) + +// Reading a ZIP archive: the record at its end, which says where the list of +// contents is, then the list, one record at a time, then each entry where the +// list says it starts, and what each entry holds. +// +// Read here rather than through archive/zip, which holds the whole list in +// memory before a caller can ask how long it is - 216 bytes an entry, measured +// (docs/SKANER-ARCHIWUM-2026-10-19.md §2.1) - and which never shows the name +// written at the entry itself, the one a program unpacking from the front +// reads instead of the list's. + +// zipScan is the reading of one ZIP: the scan it reports to, the archive and +// where its list is. +type zipScan struct { + *scan + r io.ReaderAt + end zipEnd + // data is where the contents of each entry start, by its place in the + // list - zero for an entry whose header is not where the list says. + data []uint64 + // shared are the entries whose bytes lie in another's. + shared map[int]bool + // open is an archive whose contents are read: not one already found + // built to explode, which is what reading them would do. + open bool +} + +// zip reads a ZIP archive. +func (s *scan) zip(r io.ReaderAt) error { + end, err := findEnd(r, s.size) + switch { + case errors.Is(err, errNoEnd): + s.noteSaid(noteDamaged, "", core.Says("archivescan.NoEnd", "the record at its end, which says where its list of contents is, is missing")) + return nil + case err != nil: + return err + case end.split: + s.noteSaid(noteDamaged, "", core.Says("archivescan.Split", "it says it is one part of an archive split across several files")) + return nil + case end.listAt > end.at || end.listSize > end.at-end.listAt: + s.noteSaid(noteDamaged, "", core.Says("archivescan.ListElsewhere", "its list of contents is not where the record at its end says")) + return nil + } + z := &zipScan{scan: s, r: r, end: end} + spans, err := z.list() + if err != nil { + return err + } + if !s.stopped && uint64(len(z.data)) != end.entries { + s.noteSaid(noteDamaged, "", core.Says("archivescan.Counted", "the record at its end gives the number of entries as %d and the list holds %d", + core.A("Counted", end.entries), core.A("Listed", len(z.data)))) + } + z.shared = overlapping(spans) + s.weigh() + z.open = !s.stopped && len(z.shared) == 0 && !s.exploded + return z.contents() +} + +// span is where one entry lies in the archive, from its header to the end of +// its contents. +type span struct { + from, to uint64 + entry int +} + +// list is the first look at every entry: its name, its place among the +// others, and its header where the list says it starts. It hands back where +// each entry lies. +func (z *zipScan) list() ([]span, error) { + var spans []span + err := z.each(true, func(e zipEntry) bool { + if !z.entry(e.name, isFolder(e)) { + return false + } + z.unpacked = addCapped(z.unpacked, e.unpacked) + at := z.header(e) + z.data = append(z.data, at) + if at != 0 { + spans = append(spans, span{from: e.at, to: at + e.packed, entry: len(z.data) - 1}) + } + return true + }) + return spans, err +} + +// header reads the header an entry begins with, and says where its contents +// start - or nothing, when the header is not where the list says or the +// contents run into the list. +func (z *zipScan) header(e zipEntry) uint64 { + end := z.end + if e.at > end.listAt || end.listAt-e.at < lenLocal { + return z.broken(e, core.Says("archivescan.NotWhereListed", "it does not start where the list of contents says")) + } + // One read for the header and a name as long as the listed one, which is + // what it nearly always is - a second only when it is not. + head := make([]byte, min(uint64(lenLocal+len(e.name)), end.listAt-e.at)) + if _, err := z.r.ReadAt(head, int64(e.at)); err != nil || le32(head) != sigLocal { + return z.broken(e, core.Says("archivescan.NotWhereListed", "it does not start where the list of contents says")) + } + nameLen, extraLen := uint64(le16(head[26:])), uint64(le16(head[28:])) + data := e.at + lenLocal + nameLen + extraLen + if data > end.listAt || e.packed > end.listAt-data { + return z.broken(e, core.Says("archivescan.RunsIntoList", "its contents run into the list of contents")) + } + local := head[lenLocal:] + if uint64(len(local)) != nameLen { + local = make([]byte, nameLen) + if _, err := z.r.ReadAt(local, int64(e.at+lenLocal)); err != nil { + return z.broken(e, core.Says("archivescan.NotWhereListed", "it does not start where the list of contents says")) + } + } + if !bytes.Equal(local, []byte(e.name)) { + z.noteSaid(noteTwoNames, e.name, core.Says("archivescan.TwoNames", "%s in the list, %s at the entry", + core.A("Listed", core.Shown(e.name)), core.A("Local", core.Shown(string(local))))) + } + return data +} + +// broken notes an entry that is not what the list says, and hands back the +// nothing its header's reader answers with then. +func (z *zipScan) broken(e zipEntry, why core.Said) uint64 { + z.noteSaid(noteDamaged, e.name, entryWhy(e.name, why)) + return 0 +} + +// overlapping is every entry whose bytes lie in another's - the way the +// archives that unpack to a million times their size are built, since one +// stretch of contents read as many files is the only way past what deflate +// can do once (docs/SKANER-ARCHIWUM-2026-10-19.md §3). +func overlapping(spans []span) map[int]bool { + order := make([]span, len(spans)) + copy(order, spans) + sort.Slice(order, func(i, j int) bool { return order[i].from < order[j].from }) + shared := map[int]bool{} + reach, owner := uint64(0), -1 + for i, sp := range order { + if i > 0 && sp.from < reach { + shared[sp.entry] = true + shared[owner] = true + } + if sp.to > reach { + reach, owner = sp.to, sp.entry + } + } + return shared +} + +// contents is the second look at every entry the first one counted: the kind +// of thing it is, whether its bytes are another's and what it holds. +func (z *zipScan) contents() error { + index := 0 + var failed error + err := z.each(false, func(e zipEntry) bool { + if index >= len(z.data) { + return false + } + failed = z.inside(e, index) + index++ + return failed == nil + }) + if failed != nil { + return failed + } + return err +} + +// inside is the second look at one entry. +func (z *zipScan) inside(e zipEntry, index int) error { + if z.shared[index] { + z.note(noteOverlapping, e.name) + } + special, link := unixKind(e) + if !special.IsZero() { + z.special(e.name, special) + return nil + } + at := z.data[index] + readable := z.open && at != 0 && !isFolder(e) + if link { + target := "" + var err error + if readable { + target, err = z.read(e, at) + } + z.noteSaid(noteLinks, e.name, linked(e.name, target)) + return err + } + if !readable { + return nil + } + head, err := z.read(e, at) + if err == nil && archiveIn([]byte(head)) != "" { + z.note(noteNested, e.name) + } + return err +} + +// read reads what an entry holds, through its checksum and no further than +// one byte past what the list says it holds, and hands back its first bytes. +// What is wrong with the contents is noted, and only a stop or a disk that +// fails to read is an error. +func (z *zipScan) read(e zipEntry, at uint64) (string, error) { + switch { + case e.flags&1 != 0 || e.method == methodAES: + z.noteSaid(noteUnchecked, e.name, entryWhy(e.name, core.Says("archivescan.Encrypted", "it is encrypted"))) + return "", nil + case e.method != methodStored && e.method != methodDeflated: + z.noteSaid(noteUnchecked, e.name, entryWhy(e.name, core.Says("archivescan.Method", + "it is packed with method %d, which this tool does not read", core.A("Method", int(e.method))))) + return "", nil + } + var src io.Reader = &counting{r: io.NewSectionReader(z.r, int64(at), int64(e.packed)), s: z.scan} + if e.method == methodDeflated { + src = flate.NewReader(src) + } + sum := crc32.NewIEEE() + got, head, err := drain(z.ctx, src, e.unpacked, sum, nil) + var corrupt flate.CorruptInputError + switch { + case z.ctx.Err() != nil: + return "", z.ctx.Err() + case got > e.unpacked: + z.note(noteLonger, e.name) + case errors.As(err, &corrupt), errors.Is(err, io.ErrUnexpectedEOF), got < e.unpacked: + z.broken(e, core.Says("archivescan.EndsEarly", "its contents end before the size the list gives them")) + case err != nil: + return "", err + case sum.Sum32() != e.crc: + z.broken(e, core.Says("archivescan.Checksum", "its contents do not match their checksum")) + } + return head, nil +} + +// each reads the list of contents one record at a time and hands each to see, +// until the list ends or see says to stop. A list that ends in the middle of a +// record, or holds something that is not one, is noted as damage on the first +// look and passed over on the second, which reads the same bytes again. +func (z *zipScan) each(first bool, see func(zipEntry) bool) error { + in := bufio.NewReaderSize(io.NewSectionReader(z.r, int64(z.end.listAt), int64(z.end.listSize)), 64<<10) + for { + if err := z.ctx.Err(); err != nil { + return err + } + e, size, problem, err := readListed(in) + switch { + case errors.Is(err, io.EOF): + return nil + case err != nil: + return err + case !problem.IsZero(): + return z.listBroken(first, problem) + } + if first { + z.counted(int64(size)) + } + if !see(e) { + return nil + } + } +} + +// listBroken notes a list of contents that is not one, on the first look. +func (z *zipScan) listBroken(first bool, problem core.Said) error { + if first { + z.noteSaid(noteDamaged, "", problem) + } + return nil +} + +// counting tells the scan how much of the archive is read through it. +type counting struct { + r io.Reader + s *scan +} + +func (c *counting) Read(p []byte) (int, error) { + n, err := c.r.Read(p) + c.s.counted(int64(n)) + return n, err +} + +// addCapped adds two sizes, holding at the most a size can be. An archive +// whose entries claim more than that in total is reported as built to explode +// either way. +func addCapped(a, b uint64) uint64 { + if a+b < a { + return ^uint64(0) + } + return a + b +} diff --git a/internal/tool/archivescan/ziplist.go b/internal/tool/archivescan/ziplist.go new file mode 100644 index 00000000..a3adcc7f --- /dev/null +++ b/internal/tool/archivescan/ziplist.go @@ -0,0 +1,223 @@ +package archivescan + +import ( + "bufio" + "encoding/binary" + "errors" + "io" + + "github.com/donislawdev/TestingFilesGenerator/internal/core" +) + +// The records a ZIP is made of, read from their bytes: the one at the end +// that says where the list of contents is, and the records of the list. What +// is done with them is in zip.go. + +// The records of a ZIP, by the four bytes each begins with, and their lengths +// before the parts of variable length (APPNOTE 6.3.10, sections 4.3.7-4.3.16). +const ( + sigEnd = 0x06054b50 + sigEnd64 = 0x06064b50 + sigLocator64 = 0x07064b50 + sigListed = 0x02014b50 + sigLocal = 0x04034b50 + + lenEnd = 22 + lenLocator64 = 20 + lenEnd64 = 56 + lenListed = 46 + lenLocal = 30 + mostComment = 0xFFFF +) + +// The methods whose contents are read. +const ( + methodStored = 0 + methodDeflated = 8 + // methodAES is WinZip's encryption, which a ZIP marks with a method of + // its own rather than with the encryption flag. + methodAES = 99 +) + +// zipEnd is the record at the end of a ZIP that says where its list is. +type zipEnd struct { + // at is where the record starts. The list has to end before it. + at uint64 + entries uint64 + listAt uint64 + listSize uint64 + // split is an archive that says it is one part of several. + split bool +} + +// zipEntry is one record of the list of contents. +type zipEntry struct { + name string + flags uint16 + method uint16 + system byte + crc uint32 + packed uint64 + unpacked uint64 + at uint64 + external uint32 +} + +// errNoEnd is a file that begins as a ZIP and has no record at its end saying +// where its list of contents is. +var errNoEnd = errors.New("no end record") + +func le16(b []byte) uint16 { return binary.LittleEndian.Uint16(b) } +func le32(b []byte) uint32 { return binary.LittleEndian.Uint32(b) } +func le64(b []byte) uint64 { return binary.LittleEndian.Uint64(b) } + +// findEnd reads the record at the end of a ZIP. The comment after it is up to +// 64 KiB long, so the record is searched for from the end, and taken only +// where its comment ends exactly where the file does - a record found inside +// somebody's comment would point at a list of their choosing. +func findEnd(r io.ReaderAt, size int64) (zipEnd, error) { + tail := min(size, lenEnd+mostComment) + buf := make([]byte, tail) + if _, err := r.ReadAt(buf, size-tail); err != nil && !errors.Is(err, io.EOF) { + return zipEnd{}, err + } + for i := len(buf) - lenEnd; i >= 0; i-- { + rec := buf[i:] + if le32(rec) != sigEnd || i+lenEnd+int(le16(rec[20:])) != len(buf) { + continue + } + e := zipEnd{ + at: uint64(size - tail + int64(i)), + entries: uint64(le16(rec[10:])), + listSize: uint64(le32(rec[12:])), + listAt: uint64(le32(rec[16:])), + split: le16(rec[4:]) != 0 || le16(rec[6:]) != 0, + } + if e.entries == 0xFFFF || e.listSize == 0xFFFFFFFF || e.listAt == 0xFFFFFFFF { + return findEnd64(r, e) + } + return e, nil + } + return zipEnd{}, errNoEnd +} + +// findEnd64 reads the larger record a ZIP of more than 65 535 entries or 4 GiB +// keeps before the ordinary one, through the locator just before that. +func findEnd64(r io.ReaderAt, e zipEnd) (zipEnd, error) { + if e.at < lenLocator64+lenEnd64 { + return zipEnd{}, errNoEnd + } + var loc [lenLocator64]byte + if _, err := r.ReadAt(loc[:], int64(e.at-lenLocator64)); err != nil { + return zipEnd{}, errNoEnd + } + at := le64(loc[8:]) + if le32(loc[:]) != sigLocator64 || at > e.at-lenLocator64-lenEnd64 { + return zipEnd{}, errNoEnd + } + var rec [lenEnd64]byte + if _, err := r.ReadAt(rec[:], int64(at)); err != nil || le32(rec[:]) != sigEnd64 { + return zipEnd{}, errNoEnd + } + return zipEnd{ + at: at, + entries: le64(rec[32:]), + listSize: le64(rec[40:]), + listAt: le64(rec[48:]), + split: e.split || le32(loc[16:]) > 1 || le32(rec[16:]) != 0 || le32(rec[20:]) != 0, + }, nil +} + +// readListed reads one record of the list of contents, and how long it was. +// io.EOF is a list that ended between records, and a problem one that did not. +func readListed(in *bufio.Reader) (zipEntry, int, core.Said, error) { + endsEarly := core.Says("archivescan.ListEndsEarly", "its list of contents ends in the middle of an entry") + var head [lenListed]byte + if _, err := io.ReadFull(in, head[:]); err != nil { + if errors.Is(err, io.ErrUnexpectedEOF) { + return zipEntry{}, 0, endsEarly, nil + } + return zipEntry{}, 0, core.Said{}, err + } + if le32(head[:]) != sigListed { + return zipEntry{}, 0, core.Says("archivescan.ListHoldsOther", "its list of contents holds something that is not an entry"), nil + } + nameLen, comment := int(le16(head[28:])), int(le16(head[32:])) + rest := make([]byte, nameLen+int(le16(head[30:]))) + if _, err := io.ReadFull(in, rest); err != nil { + return zipEntry{}, 0, endsEarly, nil + } + if _, err := in.Discard(comment); err != nil { + return zipEntry{}, 0, endsEarly, nil + } + e := zipEntry{ + name: string(rest[:nameLen]), flags: le16(head[8:]), method: le16(head[10:]), + system: head[5], crc: le32(head[16:]), + packed: uint64(le32(head[20:])), unpacked: uint64(le32(head[24:])), + at: uint64(le32(head[42:])), external: le32(head[38:]), + } + larger(&e, rest[nameLen:]) + return e, lenListed + len(rest) + comment, core.Said{}, nil +} + +// larger takes the sizes and the place of an entry from its ZIP64 field, +// where the list writes the most a 32 bit number holds instead. +func larger(e *zipEntry, extra []byte) { + for len(extra) >= 4 { + id, size := le16(extra), int(le16(extra[2:])) + extra = extra[4:] + if size > len(extra) { + return + } + if id == 0x0001 { + zip64(e, extra[:size]) + } + extra = extra[size:] + } +} + +// zip64 reads the ZIP64 field (APPNOTE 4.5.3): each value is there only when +// its field in the record holds the most 32 bits do, and in this order. +func zip64(e *zipEntry, field []byte) { + for _, v := range []*uint64{&e.unpacked, &e.packed, &e.at} { + if *v != 0xFFFFFFFF { + continue + } + if len(field) < 8 { + return + } + *v = le64(field) + field = field[8:] + } +} + +// isFolder says whether a listed entry is a folder: a name that ends in a +// separator, or the folder bit of the system that wrote it. +func isFolder(e zipEntry) bool { + if n := len(e.name); n > 0 && (e.name[n-1] == '/' || e.name[n-1] == '\\') { + return true + } + mode, unix := unixMode(e) + return (unix && mode&0xF000 == 0x4000) || e.external&0x10 != 0 +} + +// unixMode is the Unix file mode of an entry written on a Unix system, which +// keeps it in the upper half of its external attributes. +func unixMode(e zipEntry) (uint32, bool) { + switch e.system { + case 3, 19: // Unix, and OS X - which writes the same + return e.external >> 16, true + } + return 0, false +} + +// unixKind says what an entry is besides a file or a folder, from the mode a +// Unix system wrote: a link, or something that is not a plain file, with the +// words for it. +func unixKind(e zipEntry) (core.Said, bool) { + mode, unix := unixMode(e) + if !unix { + return core.Said{}, false + } + return kindOfMode(mode) +} From 0e799d7ec14002390a0ed19a71260e74d6bb6f19 Mon Sep 17 00:00:00 2001 From: DonislawDev Date: Mon, 19 Oct 2026 20:49:16 +0200 Subject: [PATCH 5/7] gui: an empty setting of a tool is not set, not worked out from the size A format works out a setting left empty from the size it was asked for. A tool makes no file of any size, and the empty limit of archive-scan read "worked out from the size" when it means no limit. The fields of a tool now say not set, the way free text already did, and their box is as wide as that. The two signals the scanner uses inside itself are faults of the program if they ever reach a person, and say so. Co-Authored-By: Claude Opus 5.5 --- internal/gui/parts/property.go | 39 ++++++++++++++++++---------- internal/gui/text/registry.go | 5 +++- internal/tool/archivescan/tar.go | 2 +- internal/tool/archivescan/ziplist.go | 2 +- 4 files changed, 32 insertions(+), 16 deletions(-) diff --git a/internal/gui/parts/property.go b/internal/gui/parts/property.go index 0aab5144..a703cc98 100644 --- a/internal/gui/parts/property.go +++ b/internal/gui/parts/property.go @@ -59,14 +59,17 @@ type PropertyField struct { // An empty control sends nothing rather than sending emptiness. The registry // reads an empty value as "not stated", which is what leaving a field alone // means, so a format that works its own answer out still gets to. -func FromProperty(p format.Property) PropertyField { +func FromProperty(p format.Property) PropertyField { return fromProperty(p, false) } + +// fromProperty is FromProperty for a setting of a tool, or of anything else. +func fromProperty(p format.Property, ofATool bool) PropertyField { switch p.Kind { case format.PropertyChoice: - return choiceField(p) + return choiceField(p, ofATool) case format.PropertyBool: return boolField(p) default: - return textField(p) + return textField(p, ofATool) } } @@ -115,10 +118,10 @@ func FromProperty(p format.Property) PropertyField { // Boxes somebody types in are NOT this case and were left alone: a preset's // limit and spread are parameters, so an empty box there does reach the // manifest as defaulted. Measured in the same run. -func choiceField(p format.Property) PropertyField { +func choiceField(p format.Property, ofATool bool) PropertyField { sel := NewChooser(p.Choices, nil) sel.ShownAs = func(v string) string { return text.ChoiceName(p.Name, v) } - sel.PlaceHolder = leftAlone(p) + sel.PlaceHolder = leftAlone(p, ofATool) if p.Default != "" { sel.SetSelected(p.Default) } @@ -153,9 +156,9 @@ func boolField(p format.Property) PropertyField { // textField covers a number, a size and free text alike, because all three are // a box somebody types into and the difference between them is what the engine // accepts rather than what the box does. -func textField(p format.Property) PropertyField { +func textField(p format.Property, ofATool bool) PropertyField { entry := NewEntry() - entry.SetPlaceHolder(leftAlone(p)) + entry.SetPlaceHolder(leftAlone(p, ofATool)) return PropertyField{ Name: p.Name, Control: entry, @@ -173,14 +176,18 @@ func textField(p format.Property) PropertyField { // worked out there - an empty password is no password - and the same would // have been said of the author of a PDF. What leaving it empty gives is the // format's to say, in the sentence beside the box. -func leftAlone(p format.Property) string { +// +// Nor is anything worked out for a tool, which makes no file of any size: the +// limit of archive-scan read "worked out from the size" on the day it arrived +// (2026-10-19), and an empty limit is no limit. +func leftAlone(p format.Property, ofATool bool) string { switch { case p.Default != "" && len(p.Choices) > 0: // A value of a list is said the way the list says it. return text.PlaceholderLeftEmpty(text.ChoiceName(p.Name, p.Default)) case p.Default != "": return text.PlaceholderLeftEmpty(p.Default) - case p.Kind == format.PropertyText: + case p.Kind == format.PropertyText || ofATool: return text.PlaceholderNotSet() default: return text.PlaceholderWorkedOut() @@ -255,7 +262,7 @@ func DeclaredFields(owner text.Owner, declared []format.Property, into *Fields, if p.Group != "" && (i == 0 || declared[i-1].Group != p.Group) { objects = append(objects, Subheading(text.SettingGroup(owner, p.Group))) } - f := FromProperty(p) + f := fromProperty(p, text.IsTool(owner)) fields = append(fields, f) // A setting the format itself calls a size gets its count of bytes. // Read off the declaration rather than off the name, so a format that @@ -274,7 +281,7 @@ func DeclaredFields(owner text.Owner, declared []format.Property, into *Fields, // somebody who finds a setting here has to be able to write it down. // For a tool that is a flag rather than a recipe key - see WrittenAs. field := into.Add(p.Name, text.SettingLabel(p.Name), PropertyDetail(owner, p), - tips.Say(text.WrittenAs(owner, p.Name)), ShapedFor(p, f.Control)) + tips.Say(text.WrittenAs(owner, p.Name)), shapedFor(p, f.Control, text.IsTool(owner))) if longText(p) { field = Wide(field) } @@ -311,13 +318,19 @@ func longText(p format.Property) bool { // Text the declaration calls long is left to the row it is given - see // Property.Long and DeclaredFields. func ShapedFor(p format.Property, control fyne.CanvasObject) fyne.CanvasObject { + return shapedFor(p, control, false) +} + +// shapedFor is ShapedFor for a setting of a tool, whose box shows another +// placeholder - see leftAlone. +func shapedFor(p format.Property, control fyne.CanvasObject, ofATool bool) fyne.CanvasObject { switch { case longText(p): return control case narrowOnAScreen(p): - return Sized(fyne.Max(NumericWidth, roomFor(leftAlone(p))), control) + return Sized(fyne.Max(NumericWidth, roomFor(leftAlone(p, ofATool))), control) case p.Kind == format.PropertyText: - return Sized(fyne.Max(TextWidth, roomFor(leftAlone(p))), control) + return Sized(fyne.Max(TextWidth, roomFor(leftAlone(p, ofATool))), control) } return control } diff --git a/internal/gui/text/registry.go b/internal/gui/text/registry.go index 132ba486..357fbd65 100644 --- a/internal/gui/text/registry.go +++ b/internal/gui/text/registry.go @@ -55,13 +55,16 @@ func ToolOwner(id string) Owner { return Owner(toolPrefix + id) } const toolPrefix = "tool/" +// IsTool says whether a declaration is a tool's. +func IsTool(o Owner) bool { return strings.HasPrefix(string(o), toolPrefix) } + // WrittenAs is what the button beside a declared setting says about writing // it down: the key a recipe writes it under, or for a tool - which no recipe // runs - the flag of tfg tool. A sentence about a recipe beside a setting // nobody can put in one would send somebody looking for a file that cannot // hold it. func WrittenAs(o Owner, key string) string { - if strings.HasPrefix(string(o), toolPrefix) { + if IsTool(o) { return ToolFlag(key) } return SettingKey(key) diff --git a/internal/tool/archivescan/tar.go b/internal/tool/archivescan/tar.go index 05e560ac..44da23c9 100644 --- a/internal/tool/archivescan/tar.go +++ b/internal/tool/archivescan/tar.go @@ -208,7 +208,7 @@ func (s *scan) explodes(unpacked uint64) bool { // errExploded unwinds a reader once the archive has been found built to // explode, from inside the gzip layer the TAR reader reads through. -var errExploded = errors.New("built to explode") +var errExploded = core.Defect(errors.New("reading an archive built to explode did not stop where it was found")) // inflating counts what a gzip stream unpacks to. type inflating struct { diff --git a/internal/tool/archivescan/ziplist.go b/internal/tool/archivescan/ziplist.go index a3adcc7f..77bdcbe8 100644 --- a/internal/tool/archivescan/ziplist.go +++ b/internal/tool/archivescan/ziplist.go @@ -65,7 +65,7 @@ type zipEntry struct { // errNoEnd is a file that begins as a ZIP and has no record at its end saying // where its list of contents is. -var errNoEnd = errors.New("no end record") +var errNoEnd = core.Defect(errors.New("a ZIP without an end record was not noted as damaged")) func le16(b []byte) uint16 { return binary.LittleEndian.Uint16(b) } func le32(b []byte) uint32 { return binary.LittleEndian.Uint32(b) } From e6d578dc3afd53b69bb940439b1030f94d260e13 Mon Sep 17 00:00:00 2001 From: DonislawDev Date: Mon, 19 Oct 2026 20:49:16 +0200 Subject: [PATCH 6/7] guard: archive-scan finds every trap it names An archive for each kind of trap, built in the test, held to exactly what the report says and to its conclusion. The scanner's own reader of a ZIP held to archive/zip, the exit codes to the frozen table, the Tools tab to what the command line says, a stored picture of its answer, a fuzz target added to the weekly search, and the pipe guard walked over every tool that reads a file. Mutation entries for the new guards and five re-pointed at the lines of the placeholder they prove. Co-Authored-By: Claude Opus 5.5 --- .github/workflows/ci.yml | 6 +- CHANGELOG.md | 9 + README.md | 8 + internal/guard/archivescan_test.go | 319 ++++++++++++++ internal/guard/archivescanbuild_test.go | 201 +++++++++ internal/guard/mutation/entries.py | 175 +++++++- internal/guard/screenpixels_test.go | 9 + internal/guard/testdata/archive-sample.zip | Bin 0 -> 335 bytes .../testdata/screens/tools-archive-result.png | Bin 0 -> 127582 bytes .../testdata/screens/tools-archive-result.xml | 389 ++++++++++++++++++ .../guard/testdata/screens/tools-refused.png | Bin 105165 -> 106130 bytes .../guard/testdata/screens/tools-refused.xml | 68 +-- internal/guard/testdata/screens/tools.png | Bin 96920 -> 97984 bytes internal/guard/testdata/screens/tools.xml | 68 +-- internal/guard/tools_unix_test.go | 38 +- 15 files changed, 1177 insertions(+), 113 deletions(-) create mode 100644 internal/guard/archivescan_test.go create mode 100644 internal/guard/archivescanbuild_test.go create mode 100644 internal/guard/testdata/archive-sample.zip create mode 100644 internal/guard/testdata/screens/tools-archive-result.png create mode 100644 internal/guard/testdata/screens/tools-archive-result.xml diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index e2ba8fde..129f0115 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -1436,8 +1436,8 @@ jobs: # searching. if: github.event_name == 'schedule' || github.event_name == 'workflow_dispatch' runs-on: ubuntu-latest - # Four targets at five minutes each, plus the build and the baseline pass. - timeout-minutes: 45 + # Seven targets at five minutes each, plus the build and the baseline pass. + timeout-minutes: 55 env: CGO_ENABLED: "0" steps: @@ -1461,7 +1461,7 @@ jobs: # next search starts from nothing. run: | set -euo pipefail - for target in FuzzParseSize FuzzParseRecipe FuzzNameTemplate FuzzCanonicalRecipe FuzzPresetExpansion FuzzChecksumFile; do + for target in FuzzParseSize FuzzParseRecipe FuzzNameTemplate FuzzCanonicalRecipe FuzzPresetExpansion FuzzChecksumFile FuzzArchiveScan; do echo "=== $target ===" go test -tags "$(cat .github/build-tags)" ./internal/guard/ -run "^$" -fuzz "^${target}$" -fuzztime 5m done diff --git a/CHANGELOG.md b/CHANGELOG.md index 1130a5e7..d1a90fda 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -42,6 +42,15 @@ because it turns other people's test suites red. ### Added +- **Is this archive safe to unpack?** `tfg tool archive-scan `, and + the same on the Tools tab, reads a ZIP, TAR, TAR.GZ or gzip file and + everything in it without writing anything, and says what unpacking it + would do: entries written outside the folder, links, devices, names that + land on one file on Windows or macOS, names a system cannot write, + archives built to explode, contents that are not what the archive says. + `--unpacked_limit` reports an archive that unpacks to more than you allow. + Safe ends with code 0 and anything found with 7, the whole report on the + error channel. 7z and RAR are recognised and not read yet. - **Documents: the `rtf` format.** A Rich Text Format document at the exact size you ask for, read by LibreOffice, pandoc, the RichEdit control of Windows, striprtf and Apache Tika. It holds headings, paragraphs with bold diff --git a/README.md b/README.md index 64950636..5cd0aacb 100644 --- a/README.md +++ b/README.md @@ -405,6 +405,7 @@ tfg tool show [--json] what one tool works on and takes tfg tool checksum [--algorithm sha256] [--expected ] [--json] tfg tool checksum-write [--algorithm sha256] [--json] tfg tool checksum-check [--json] +tfg tool archive-scan [--unpacked_limit ] [--json] ``` Small things to do with files you already have, beside the generator. Every tool @@ -420,6 +421,13 @@ there. `checksum-check` checks every file a checksum file lists, in the folder the checksum file is in. Files it does not list are not looked at, the same as `sha256sum -c`, and a path that leaves that folder is refused rather than read. +`archive-scan` looks into a ZIP, TAR, TAR.GZ or gzip file without unpacking it +and says whether unpacking it is safe: no entry written outside the folder, no +link, no device, no two names landing on one file, no name a system cannot +write, nothing built to explode and nothing damaged. `--unpacked_limit 500mb` +also reports an archive that unpacks to more than that. Safe ends with code 0, +anything found with 7. + ### `tfg damage` ``` diff --git a/internal/guard/archivescan_test.go b/internal/guard/archivescan_test.go new file mode 100644 index 00000000..1b86e5ec --- /dev/null +++ b/internal/guard/archivescan_test.go @@ -0,0 +1,319 @@ +package guard + +import ( + "archive/zip" + "bytes" + "context" + "fmt" + "os" + "path/filepath" + "slices" + "sort" + "strings" + "testing" + + "github.com/donislawdev/TestingFilesGenerator/internal/cli" + "github.com/donislawdev/TestingFilesGenerator/internal/gui/text" + "github.com/donislawdev/TestingFilesGenerator/internal/gui/window" + "github.com/donislawdev/TestingFilesGenerator/internal/tool" + "github.com/donislawdev/TestingFilesGenerator/internal/tool/archivescan" +) + +// The archive scanner, tfg tool archive-scan: what it finds in each kind of +// trap, what it ends with, that its own reader of a ZIP lists what archive/zip +// lists, and that the window says what the command line says. +// docs/SKANER-ARCHIWUM-2026-10-19.md. + +// archiveFile writes bytes to a file of this name in a folder of the test's. +func archiveFile(t *testing.T, name string, data []byte) string { + t.Helper() + path := filepath.Join(t.TempDir(), name) + if err := os.WriteFile(path, data, 0o600); err != nil { + t.Fatal(err) + } + return path +} + +// scanArchive runs the tool on an archive and hands back what --json would print +// and the result both surfaces are drawn from. +func scanArchive(t *testing.T, path string, values map[string]string) (*archivescan.Report, tool.Result) { + t.Helper() + d, err := tool.Get(archivescan.ID) + if err != nil { + t.Fatal(err) + } + r, err := d.Start(context.Background(), tool.Request{Inputs: map[string]string{archivescan.InputArchive: path}, Values: values}, nil) + if err != nil { + t.Fatalf("%s was refused: %v", filepath.Base(path), err) + } + report, ok := r.Data.(*archivescan.Report) + if !ok { + t.Fatalf("the result of %s carries %T, not the report --json prints", filepath.Base(path), r.Data) + } + return report, r +} + +// trap is one archive and what the scanner has to find in it. +type trap struct { + what string + file string + data []byte + values map[string]string + // found is every finding the report has to hold, and no other. + found []string + // names are entries one finding has to name. + names map[string][]string + safe bool + // kind is what the archive has to be read as, where that is the point: + // a gzip of zeros begins as an empty TAR would, and is not one. + kind string +} + +// traps is an archive for each kind of trap, and the clean ones beside them. +func traps(t *testing.T) []trap { + t.Helper() + e, accent := string(rune(0xe9)), string(rune(0x301)) + clean := zipOf(t, zipPart{name: "a.txt", body: "hello"}, zipPart{name: "dir/b.txt", body: strings.Repeat("world", 100)}) + return []trap{ + {what: "a clean ZIP", file: "clean.zip", data: clean, safe: true}, + {what: "names Windows stores perfectly well, measured in engine/filename.go", file: "fine.zip", safe: true, + data: zipOf(t, zipPart{name: "con.txt"}, zipPart{name: "nul.txt"}, zipPart{name: "aux"}, zipPart{name: "./a/./b.txt"})}, + {what: "entries leaving the folder", file: "leaves.zip", found: []string{"leaves_folder"}, + data: zipOf(t, zipPart{name: "../up.txt"}, zipPart{name: "/abs.txt"}, zipPart{name: "C:/drive.txt"}, + zipPart{name: "C:rel.txt"}, zipPart{name: "a/../../x"}, zipPart{name: `..\back.txt`}, zipPart{name: ".. /dots.txt"}, zipPart{name: "ok.txt"}), + names: map[string][]string{"leaves_folder": {"../up.txt", "/abs.txt", "C:/drive.txt", "C:rel.txt", "a/../../x", `..\back.txt`, ".. /dots.txt"}}}, + {what: "a link in a ZIP", file: "link.zip", found: []string{"links"}, + data: zipOf(t, zipPart{name: "link", body: "../../etc/passwd", mode: os.ModeSymlink | 0o777}), + names: map[string][]string{"links": {"link"}}}, + {what: "entries landing on one file", file: "collide.zip", found: []string{"collides"}, + data: zipOf(t, zipPart{name: "Readme.txt"}, zipPart{name: "README.TXT"}, zipPart{name: "a"}, zipPart{name: "a/b"}, + zipPart{name: "caf" + e}, zipPart{name: "cafe" + accent}), + names: map[string][]string{"collides": {"README.TXT", "a/b", "cafe" + accent}}}, + {what: "a name Windows strips and lands on another", file: "trail.zip", found: []string{"collides", "unwritable"}, + data: zipOf(t, zipPart{name: "trail"}, zipPart{name: "trail."})}, + {what: "names no system writes as they are", file: "names.zip", found: []string{"unwritable"}, + data: zipOf(t, zipPart{name: "nul"}, zipPart{name: "q?.txt"}, zipPart{name: strings.Repeat("x", 256)}), + names: map[string][]string{"unwritable": {"nul", "q?.txt"}}}, + {what: "a name at the entry other than the one listed", file: "twonames.zip", found: []string{"two_names"}, + data: handZip("good.txt", "evil.txt", false)}, + {what: "two entries sharing their bytes", file: "overlap.zip", found: []string{"overlapping", "two_names"}, + data: handZip("first", "first", true), names: map[string][]string{"overlapping": {"first", "second"}}}, + {what: "a ZIP built to explode, by its list", file: "bomb.zip", found: []string{"bomb"}, + data: zipOf(t, zipPart{raw: &zip.FileHeader{Name: "zeros", Method: zip.Deflate, UncompressedSize64: 2 << 30, + CompressedSize64: uint64(len(deflated(t, "x")))}, body: deflated(t, "x")})}, + {what: "an entry holding more than its size", file: "longer.zip", found: []string{"longer_than_said"}, + data: zipOf(t, zipPart{raw: &zip.FileHeader{Name: "more", Method: zip.Deflate, UncompressedSize64: 10, + CompressedSize64: uint64(len(deflated(t, strings.Repeat("y", 1000))))}, body: deflated(t, strings.Repeat("y", 1000))})}, + {what: "contents that do not match their checksum", file: "crc.zip", found: []string{"damaged"}, + data: zipOf(t, zipPart{raw: &zip.FileHeader{Name: "stored", Method: zip.Store, CRC32: 1, UncompressedSize64: 4, CompressedSize64: 4}, body: "abcd"})}, + {what: "entries that cannot be checked", file: "unchecked.zip", found: []string{"unchecked"}, + data: zipOf(t, zipPart{raw: &zip.FileHeader{Name: "locked", Method: zip.Store, Flags: 1, UncompressedSize64: 4, CompressedSize64: 4}, body: "abcd"}, + zipPart{raw: &zip.FileHeader{Name: "lzma", Method: 14, UncompressedSize64: 4, CompressedSize64: 4}, body: "abcd"}), + names: map[string][]string{"unchecked": {"locked", "lzma"}}}, + {what: "an archive inside, reported and harmless", file: "nested.zip", found: []string{"nested"}, safe: true, + data: zipOf(t, zipPart{name: "inner.zip", body: string(clean)})}, + {what: "a ZIP without the record at its end", file: "cut.zip", found: []string{"damaged"}, data: clean[:len(clean)-5]}, + {what: "a TAR.GZ with every kind of entry that is not a file", file: "bad.tar.gz", found: []string{"leaves_folder", "links", "special"}, + data: tarOf(t, true, tarPart{name: "../up.txt", body: "abc"}, tarPart{name: "lnk", typ: '2', link: "/etc/shadow"}, + tarPart{name: "hard", typ: '1', link: "../outside"}, tarPart{name: "fifo", typ: '6'}, tarPart{name: "dev", typ: '3'}, + tarPart{name: "suid", body: "x", mode: 0o4755}), + names: map[string][]string{"links": {"lnk", "hard"}, "special": {"fifo", "dev", "suid"}}}, + {what: "a clean TAR", file: "clean.tar", data: tarOf(t, false, tarPart{name: "x.txt", body: "abc"}), safe: true}, + {what: "an empty TAR", file: "empty.tar", data: make([]byte, 1024), safe: true, kind: "tar"}, + {what: "a gzip of one file", file: "one.gz", data: gzipOf(t, []byte("hello\n")), safe: true, kind: "gzip"}, + {what: "a gzip of zeros built to explode", file: "bomb.gz", found: []string{"bomb", "stopped"}, data: zerosMembers(t, nil), kind: "gzip"}, + {what: "a TAR.GZ built to explode", file: "bomb.tar.gz", found: []string{"bomb", "stopped"}, data: tarGzBomb(t), kind: "tar.gz"}, + // Zeros after the end of a small TAR: no TAR program reads them, and + // gunzip writes every one - only the count below the TAR sees them. + {what: "a TAR.GZ exploding after the end of its TAR", file: "after.tar.gz", found: []string{"bomb", "stopped"}, kind: "tar.gz", + data: zerosMembers(t, gzipOf(t, tarOf(t, false, tarPart{name: "a", body: "abc"})))}, + {what: "a TAR.GZ cut short", file: "cut.tar.gz", found: []string{"damaged"}, data: tarOf(t, true, tarPart{name: "a", body: strings.Repeat("z", 5000)})[:40]}, + {what: "more than the limit given", file: "limit.zip", data: clean, values: map[string]string{archivescan.SettingLimit: "100"}, + found: []string{"over_limit"}}, + {what: "within the limit given", file: "within.zip", data: clean, values: map[string]string{archivescan.SettingLimit: "1kb"}, safe: true}, + } +} + +// TestTheArchiveScanFindsEveryTrapItNames scans an archive for each kind of +// trap and holds the report to exactly what is in it, and the conclusion to +// whether any of that makes it unsafe. +func TestTheArchiveScanFindsEveryTrapItNames(t *testing.T) { + for _, c := range traps(t) { + report, r := scanArchive(t, archiveFile(t, c.file, c.data), c.values) + found := make([]string, 0, len(report.Found)) + for k := range report.Found { + found = append(found, k) + } + sort.Strings(found) + want := append([]string{}, c.found...) + sort.Strings(want) + if !slices.Equal(found, want) { + t.Errorf("%s (%s): found %v and holds %v", c.what, c.file, found, want) + } + for key, names := range c.names { + for _, name := range names { + if !slices.Contains(report.Found[key], name) { + t.Errorf("%s (%s): %s names %q and not %q", c.what, c.file, key, report.Found[key], name) + } + } + } + if c.kind != "" && report.Kind != c.kind { + t.Errorf("%s (%s): read as %s, and it is %s", c.what, c.file, report.Kind, c.kind) + } + if report.Safe != c.safe || (r.Concluded == "safe") != c.safe { + t.Errorf("%s (%s): safe is %v in the report and the conclusion is %q, and it is %v", c.what, c.file, report.Safe, r.Concluded, c.safe) + } + } +} + +// TestTheArchiveScanReadsTheListArchiveZipReads holds the scanner's own +// reader of a ZIP to archive/zip, a reader nobody here wrote: as many entries, +// as many bytes once unpacked - with ZIP64, a comment after the end record, +// entries whose sizes follow their contents, and names outside ASCII. +func TestTheArchiveScanReadsTheListArchiveZipReads(t *testing.T) { + var many []zipPart + for i := range 70000 { + many = append(many, zipPart{name: fmt.Sprintf("d/%06d", i)}) + } + var commented bytes.Buffer + w := zip.NewWriter(&commented) + for _, name := range []string{"zolty-" + string(rune(0x17c)) + ".txt", "dir/", "dir/b.bin"} { + out, err := w.Create(name) + if err == nil && !strings.HasSuffix(name, "/") { + _, err = out.Write(bytes.Repeat([]byte(name), 300)) + } + if err != nil { + t.Fatal(err) + } + } + if err := w.SetComment(strings.Repeat("PK comment ", 100)); err != nil { + t.Fatal(err) + } + if err := w.Close(); err != nil { + t.Fatal(err) + } + for name, data := range map[string][]byte{"many.zip": zipOf(t, many...), "commented.zip": commented.Bytes()} { + r, err := zip.NewReader(bytes.NewReader(data), int64(len(data))) + if err != nil { + t.Fatal(err) + } + var unpacked uint64 + for _, f := range r.File { + unpacked += f.UncompressedSize64 + } + report, _ := scanArchive(t, archiveFile(t, name, data), nil) + if report.Entries != len(r.File) || report.Unpacked != unpacked || !report.Safe { + t.Errorf("%s: the scan read %d entries and %d bytes unpacked, safe %v, and archive/zip reads %d and %d", + name, report.Entries, report.Unpacked, report.Safe, len(r.File), unpacked) + } + } +} + +// TestTheArchiveScanEndsWithTheCodeOfWhatHappened holds tfg tool archive-scan +// to the frozen table: safe is OK, a trap is VERIFY with the whole report on +// the error channel, a mistake in the request USAGE, a file that is not there +// IO, a stop INTERRUPTED. +func TestTheArchiveScanEndsWithTheCodeOfWhatHappened(t *testing.T) { + clean := archiveFile(t, "clean.zip", zipOf(t, zipPart{name: "a.txt", body: "a"})) + leaves := archiveFile(t, "leaves.zip", zipOf(t, zipPart{name: "../a.txt"})) + sevenZip := archiveFile(t, "x.7z", append([]byte{'7', 'z', 0xBC, 0xAF, 0x27, 0x1C}, make([]byte, 32)...)) + text := archiveFile(t, "notes.txt", []byte("not an archive")) + stopped, stop := context.WithCancel(context.Background()) + stop() + for _, c := range []struct { + name string + ctx context.Context + args []string + want int + }{ + {"a clean archive", context.Background(), []string{clean}, cli.ExitOK}, + {"an archive with a trap", context.Background(), []string{leaves}, cli.ExitVerify}, + {"more than the limit", context.Background(), []string{clean, "--unpacked_limit", "0"}, cli.ExitVerify}, + {"a limit that is not a size", context.Background(), []string{clean, "--unpacked_limit", "10xb"}, cli.ExitUsage}, + {"a file that is not an archive", context.Background(), []string{text}, cli.ExitUsage}, + {"an archive this tool does not read", context.Background(), []string{sevenZip}, cli.ExitUsage}, + {"a directory", context.Background(), []string{filepath.Dir(clean)}, cli.ExitUsage}, + {"no file", context.Background(), nil, cli.ExitUsage}, + {"two files", context.Background(), []string{clean, clean}, cli.ExitUsage}, + {"a file that is not there", context.Background(), []string{clean + ".missing"}, cli.ExitIO}, + {"a stop", stopped, []string{clean}, cli.ExitInterrupted}, + } { + var out, errOut bytes.Buffer + code := cli.Run(c.ctx, append([]string{"tool", archivescan.ID}, c.args...), &out, &errOut) + if code != c.want { + t.Errorf("%s: ended with %d and the table says %d. It said: %s%s", c.name, code, c.want, out.String(), errOut.String()) + } + if code != cli.ExitOK && out.Len() > 0 { + t.Errorf("%s: failed and still wrote to standard output: %s", c.name, out.String()) + } + } +} + +// TestTheToolsTabLooksIntoAnArchive runs the scanner from the screen, with a +// limit typed into its box, and holds what the screen says to what the +// command line says: the finding, the entry it names and the conclusion. +func TestTheToolsTabLooksIntoAnArchive(t *testing.T) { + path := archiveFile(t, "leaves.zip", zipOf(t, zipPart{name: "../escape.txt", body: "a"})) + var out, errOut bytes.Buffer + if code := cli.Run(context.Background(), []string{"tool", archivescan.ID, path, "--unpacked_limit", "0"}, &out, &errOut); code != cli.ExitVerify { + t.Fatalf("the command line ended with %d: %s", code, errOut.String()) + } + d, err := tool.Get(archivescan.ID) + if err != nil { + t.Fatal(err) + } + var said []string + for _, c := range d.Conclusions { + if c.Fails { + said = append(said, c.Says) + } + } + said = append(said, d.NoteSays("leaves_folder"), d.NoteSays("over_limit"), "../escape.txt") + host := newFakeHost(t) + window.Open(host) + screen := selectTab(t, host.content, text.TabTools()) + chooseTool(t, screen, archivescan.ID) + fillField(t, screen, text.SettingLabel(archivescan.InputArchive), path) + fillField(t, screen, text.SettingLabel(archivescan.SettingLimit), "0") + pressNamed(t, screen, text.ButtonRunTool()) + host.waitForWork() + words := allText(screen) + for _, s := range said { + if s == "" || !strings.Contains(errOut.String(), s) || !strings.Contains(words, s) { + t.Errorf("%q is not on both: the command line said\n%s\nand the screen\n%s", s, errOut.String(), words) + } + } +} + +// FuzzArchiveScan hands the scanner whatever bytes the fuzzer makes, as an +// archive somebody was sent. It must answer - refuse or conclude - without +// failing in itself, and a conclusion has to agree with the report. +func FuzzArchiveScan(f *testing.F) { + t := &testing.T{} + f.Add(zipOf(t, zipPart{name: "a.txt", body: "abc"}, zipPart{name: "../b"})) + f.Add(tarOf(t, true, tarPart{name: "a", body: "abc"}, tarPart{name: "l", typ: '2', link: "/x"})) + f.Add(tarOf(t, false, tarPart{name: "a", body: "abc"})) + f.Add(handZip("first", "first", true)) + d, err := tool.Get(archivescan.ID) + if err != nil { + f.Fatal(err) + } + dir := f.TempDir() + f.Fuzz(func(t *testing.T, data []byte) { + if len(data) > 1<<20 { + return + } + path := filepath.Join(dir, "fuzzed") + if err := os.WriteFile(path, data, 0o600); err != nil { + t.Fatal(err) + } + r, err := d.Start(context.Background(), tool.Request{Inputs: map[string]string{archivescan.InputArchive: path}}, nil) + if err != nil { + return + } + report, ok := r.Data.(*archivescan.Report) + if !ok || report.Safe != (r.Concluded == "safe") || r.Concluded == "" { + t.Fatalf("a scan concluded %q with a report saying safe is %v", r.Concluded, ok && report.Safe) + } + }) +} diff --git a/internal/guard/archivescanbuild_test.go b/internal/guard/archivescanbuild_test.go new file mode 100644 index 00000000..72a24222 --- /dev/null +++ b/internal/guard/archivescanbuild_test.go @@ -0,0 +1,201 @@ +package guard + +import ( + "archive/tar" + "archive/zip" + "bytes" + "compress/flate" + "compress/gzip" + "encoding/binary" + "hash/crc32" + "io" + "os" + "testing" +) + +// The archives the guards of the archive scanner look into, built here rather +// than kept as files: each is the smallest that holds one trap, and a builder +// says what it holds where a file of bytes would not. + +// zipPart is one entry of a ZIP built with archive/zip. +type zipPart struct { + name string + body string + // mode is the Unix mode written with the entry, when there is one - a + // link is a ZIP entry whose mode says so and whose contents are its target. + mode os.FileMode + // raw is an entry written as it is, header and all, for the entries + // archive/zip would not write: a size that lies, a checksum that is wrong. + raw *zip.FileHeader +} + +// zipOf is a ZIP holding these entries. +func zipOf(t *testing.T, parts ...zipPart) []byte { + t.Helper() + var buf bytes.Buffer + w := zip.NewWriter(&buf) + for _, p := range parts { + writeZipPart(t, w, p) + } + if err := w.Close(); err != nil { + t.Fatal(err) + } + return buf.Bytes() +} + +// writeZipPart writes one entry of zipOf. +func writeZipPart(t *testing.T, w *zip.Writer, p zipPart) { + t.Helper() + if p.raw != nil { + out, err := w.CreateRaw(p.raw) + if err == nil { + _, err = io.WriteString(out, p.body) + } + if err != nil { + t.Fatal(err) + } + return + } + h := &zip.FileHeader{Name: p.name, Method: zip.Deflate} + if p.mode != 0 { + h.SetMode(p.mode) + } + out, err := w.CreateHeader(h) + if err == nil { + _, err = io.WriteString(out, p.body) + } + if err != nil { + t.Fatal(err) + } +} + +// deflated is text through deflate, for an entry written raw. +func deflated(t *testing.T, text string) string { + t.Helper() + var buf bytes.Buffer + w, err := flate.NewWriter(&buf, flate.BestCompression) + if err == nil { + _, err = io.WriteString(w, text) + } + if err == nil { + err = w.Close() + } + if err != nil { + t.Fatal(err) + } + return buf.String() +} + +// tarPart is one entry of a TAR. +type tarPart struct { + name string + typ byte + link string + body string + mode int64 +} + +// tarOf is a TAR holding these entries, through gzip when asked. +func tarOf(t *testing.T, gzipped bool, parts ...tarPart) []byte { + t.Helper() + var buf bytes.Buffer + tw := tar.NewWriter(&buf) + for _, p := range parts { + h := &tar.Header{Name: p.name, Typeflag: p.typ, Linkname: p.link, Size: int64(len(p.body)), Mode: 0o644} + if p.mode != 0 { + h.Mode = p.mode + } + if p.typ == 0 { + h.Typeflag = tar.TypeReg + } + if err := tw.WriteHeader(h); err != nil { + t.Fatal(err) + } + if _, err := io.WriteString(tw, p.body); err != nil { + t.Fatal(err) + } + } + if err := tw.Close(); err != nil { + t.Fatal(err) + } + if !gzipped { + return buf.Bytes() + } + return gzipOf(t, buf.Bytes()) +} + +// gzipOf is bytes through gzip. +func gzipOf(t *testing.T, data []byte) []byte { + t.Helper() + var buf bytes.Buffer + w, err := gzip.NewWriterLevel(&buf, gzip.BestCompression) + if err == nil { + _, err = w.Write(data) + } + if err == nil { + err = w.Close() + } + if err != nil { + t.Fatal(err) + } + return buf.Bytes() +} + +// zerosMembers is gzip that unpacks to a little over a gigabyte of zeros from +// about a megabyte: one member of 64 MiB, repeated, which gzip reads as one +// stream. Built in a fraction of a second where compressing a gigabyte would +// take several. +func zerosMembers(t *testing.T, in []byte) []byte { + t.Helper() + member := gzipOf(t, make([]byte, 64<<20)) + out := append([]byte(nil), in...) + for range 17 { + out = append(out, member...) + } + return out +} + +// tarGzBomb is a TAR.GZ whose one entry says it holds 2 GiB of zeros, and +// does, through members of zeros after its header. +func tarGzBomb(t *testing.T) []byte { + t.Helper() + var head bytes.Buffer + if err := tar.NewWriter(&head).WriteHeader(&tar.Header{Name: "big", Typeflag: tar.TypeReg, Size: 2 << 30, Mode: 0o644}); err != nil { + t.Fatal(err) + } + return zerosMembers(t, gzipOf(t, head.Bytes())) +} + +// handZip is a ZIP of one stored entry written byte by byte, which lists the +// entry under listed and writes it under local at the entry itself - and, +// when twice, lists a second entry starting at the same header, so two +// entries share their bytes. +func handZip(listed, local string, twice bool) []byte { + data := []byte("shared bytes") + sum := crc32.ChecksumIEEE(data) + var out bytes.Buffer + le := func(vs ...any) { + for _, v := range vs { + _ = binary.Write(&out, binary.LittleEndian, v) + } + } + le(uint32(0x04034b50), uint16(20), uint16(0), uint16(0), uint16(0), uint16(0), + sum, uint32(len(data)), uint32(len(data)), uint16(len(local)), uint16(0)) + out.WriteString(local) + out.Write(data) + listAt := out.Len() + names := []string{listed} + if twice { + names = append(names, "second") + } + for _, name := range names { + le(uint32(0x02014b50), uint16(20), uint16(20), uint16(0), uint16(0), uint16(0), uint16(0), + sum, uint32(len(data)), uint32(len(data)), uint16(len(name)), uint16(0), uint16(0), + uint16(0), uint16(0), uint32(0), uint32(0)) + out.WriteString(name) + } + listSize := out.Len() - listAt + le(uint32(0x06054b50), uint16(0), uint16(0), uint16(len(names)), uint16(len(names)), + uint32(listSize), uint32(listAt), uint16(0)) + return out.Bytes() +} diff --git a/internal/guard/mutation/entries.py b/internal/guard/mutation/entries.py index 2166c7eb..1073998c 100644 --- a/internal/guard/mutation/entries.py +++ b/internal/guard/mutation/entries.py @@ -2276,7 +2276,7 @@ # entry beside this one already proves the too-narrow direction. "a box for a number goes back to running the width of the form", "internal/gui/parts/property.go", - " return Sized(fyne.Max(NumericWidth, roomFor(leftAlone(p))), control)", + " return Sized(fyne.Max(NumericWidth, roomFor(leftAlone(p, ofATool))), control)", " return Sized(ColumnWidth, control)", "TestABoxForANumberIsNotAsWideAsTheForm", ), @@ -2286,7 +2286,7 @@ # mid-word. "a box for a number is too narrow to show its own placeholder", "internal/gui/parts/property.go", - " return Sized(fyne.Max(NumericWidth, roomFor(leftAlone(p))), control)", + " return Sized(fyne.Max(NumericWidth, roomFor(leftAlone(p, ofATool))), control)", " return Numeric(control)", "TestABoxIsWideEnoughForItsOwnPlaceholder", ), @@ -2314,8 +2314,8 @@ # is the only spelling that works in a recipe. "the recipe key of a setting is nowhere on the screen", "internal/gui/parts/property.go", - " tips.Say(text.WrittenAs(owner, p.Name)), ShapedFor(p, f.Control))", - " NoDetail, ShapedFor(p, f.Control))", + " tips.Say(text.WrittenAs(owner, p.Name)), shapedFor(p, f.Control, text.IsTool(owner)))", + " NoDetail, shapedFor(p, f.Control, text.IsTool(owner)))", "TestTheRecipeKeyOfASettingIsStillReachable", ), ( @@ -10071,7 +10071,7 @@ "internal/gui/parts/property.go", # Repointed 2026-09-23: unsized, a box takes one column of the grid, # so the defect is a width as wide as the form. - "\tcase p.Kind == format.PropertyText:\n\t\treturn Sized(fyne.Max(TextWidth, roomFor(leftAlone(p))), control)\n", + "\tcase p.Kind == format.PropertyText:\n\t\treturn Sized(fyne.Max(TextWidth, roomFor(leftAlone(p, ofATool))), control)\n", "\tcase p.Kind == format.PropertyText:\n\t\treturn Sized(ColumnWidth, control)\n", "TestOnlyAPathTakesTheWholeRow", ), @@ -12911,8 +12911,8 @@ ( "an empty text box says its value is worked out from the size again", "internal/gui/parts/property.go", - "\tcase p.Kind == format.PropertyText:\n\t\treturn text.PlaceholderNotSet()\n", - "\tcase false && p.Kind == format.PropertyText:\n\t\treturn text.PlaceholderNotSet()\n", + "\tcase p.Kind == format.PropertyText || ofATool:\n\t\treturn text.PlaceholderNotSet()\n", + "\tcase false && p.Kind == format.PropertyText || ofATool:\n\t\treturn text.PlaceholderNotSet()\n", "TestEveryScreenStillDrawsItsStoredPicture", ), ( @@ -15025,4 +15025,165 @@ "\"zero-heads\":", "TestEveryLanguageDescribesEveryDamage", ), + ( + "archive-scan takes only a part of two dots for the folder above, not one Windows trims to it", + "internal/tool/archivescan/names.go", + "return strings.Trim(part, \". \") == \"\" && strings.Count(part, \".\") >= 2", + "return part == \"..\"", + "TestTheArchiveScanFindsEveryTrapItNames", + ), + ( + "archive-scan takes a backslash for part of a name, as Linux does", + "internal/tool/archivescan/names.go", + "func isSeparator(r rune) bool { return r == '/' || r == '\\\\' }", + "func isSeparator(r rune) bool { return r == '/' }", + "TestTheArchiveScanFindsEveryTrapItNames", + ), + ( + "archive-scan lets a drive letter stay in the folder", + "internal/tool/archivescan/names.go", + "return len(name) >= 2 && name[1] == ':' && isLetter(name[0])", + "return false", + "TestTheArchiveScanFindsEveryTrapItNames", + ), + ( + "archive-scan tells names apart by case, as Linux does and Windows does not", + "internal/tool/archivescan/names.go", + "return strings.ToLower(norm.NFC.String(part))", + "return norm.NFC.String(part)", + "TestTheArchiveScanFindsEveryTrapItNames", + ), + ( + "archive-scan compares accents as they are written, not as macOS stores them", + "internal/tool/archivescan/names.go", + "return strings.ToLower(norm.NFC.String(part))", + "return strings.ToLower(part) + norm.NFC.String(\"\")", + "TestTheArchiveScanFindsEveryTrapItNames", + ), + ( + "archive-scan misses a file standing where another entry needs a folder", + "internal/tool/archivescan/names.go", + "\t\tif b.file[id] || file {\n", + "\t\tif file {\n", + "TestTheArchiveScanFindsEveryTrapItNames", + ), + ( + "archive-scan never sees two entries sharing their bytes", + "internal/tool/archivescan/zip.go", + "\t\tif i > 0 && sp.from < reach {\n", + "\t\tif i > 0 && sp.from < reach && false {\n", + "TestTheArchiveScanFindsEveryTrapItNames", + ), + ( + "archive-scan never compares the name at an entry with the listed one", + "internal/tool/archivescan/zip.go", + "\tif !bytes.Equal(local, []byte(e.name)) {\n", + "\tif false && !bytes.Equal(local, []byte(e.name)) {\n", + "TestTheArchiveScanFindsEveryTrapItNames", + ), + ( + "archive-scan calls a ZIP built to explode only at four gigabytes and more", + "internal/tool/archivescan/findings.go", + "if !s.exploded && s.unpacked >= BombBytes && s.unpacked > uint64(s.size)*BombRatio {", + "if !s.exploded && s.unpacked >= 4*BombBytes && s.unpacked > uint64(s.size)*BombRatio {", + "TestTheArchiveScanFindsEveryTrapItNames", + ), + ( + "archive-scan counts only the contents of a TAR.GZ, so zeros after its TAR are unpacked unseen", + "internal/tool/archivescan/tar.go", + "\tin := bufio.NewReaderSize(&inflating{r: z, s: s}, 64<<10)\n", + "\tin := bufio.NewReaderSize(z, 64<<10)\n", + "TestTheArchiveScanFindsEveryTrapItNames", + ), + ( + "archive-scan reads a gzip of zeros as an empty TAR", + "internal/tool/archivescan/tar.go", + "\tif len(head) < 257+len(tarMagic) || !bytes.Equal(head[257:257+len(tarMagic)], tarMagic) {\n", + "\tif !isTar(head) && !bytes.Equal(head, nil) {\n", + "TestTheArchiveScanFindsEveryTrapItNames", + ), + ( + "archive-scan never holds contents to their checksum", + "internal/tool/archivescan/zip.go", + "\tcase sum.Sum32() != e.crc:\n", + "\tcase false:\n", + "TestTheArchiveScanFindsEveryTrapItNames", + ), + ( + "archive-scan misses an entry holding more than the list says", + "internal/tool/archivescan/zip.go", + "\tcase got > e.unpacked:\n\t\tz.note(noteLonger, e.name)\n", + "\tcase false:\n\t\tz.note(noteLonger, e.name)\n", + "TestTheArchiveScanFindsEveryTrapItNames", + ), + ( + "archive-scan reads an encrypted entry as if it were not", + "internal/tool/archivescan/zip.go", + "\tcase e.flags&1 != 0 || e.method == methodAES:\n", + "\tcase e.method == methodAES:\n", + "TestTheArchiveScanFindsEveryTrapItNames", + ), + ( + "archive-scan takes a hard link in a TAR for something else than a link", + "internal/tool/archivescan/tar.go", + "\tcase tar.TypeSymlink, tar.TypeLink:\n", + "\tcase tar.TypeSymlink:\n", + "TestTheArchiveScanFindsEveryTrapItNames", + ), + ( + "archive-scan misses a TAR entry that runs with its owner's rights", + "internal/tool/archivescan/tar.go", + "\tif h.Mode&(modeSetUser|modeSetGroup) != 0 {\n", + "\tif false && h.Mode&(modeSetUser|modeSetGroup) != 0 {\n", + "TestTheArchiveScanFindsEveryTrapItNames", + ), + ( + "archive-scan calls an archive unsafe for holding another archive", + "internal/tool/archivescan/findings.go", + "{tool.Note{ID: noteNested, Says: \"Archives inside it, which were not opened:\"}, true},", + "{tool.Note{ID: noteNested, Says: \"Archives inside it, which were not opened:\"}, false},", + "TestTheArchiveScanFindsEveryTrapItNames", + ), + ( + "archive-scan never compares what an archive unpacks to with the limit given", + "internal/tool/archivescan/findings.go", + "if s.limit >= 0 && s.unpacked > uint64(s.limit) {", + "if s.limit < 0 && s.unpacked > uint64(s.limit) {", + "TestTheArchiveScanFindsEveryTrapItNames", + ), + ( + "archive-scan reads a ZIP of more than 65 535 entries without its ZIP64 record", + "internal/tool/archivescan/ziplist.go", + "\t\tif e.entries == 0xFFFF || e.listSize == 0xFFFFFFFF || e.listAt == 0xFFFFFFFF {\n", + "\t\tif false {\n", + "TestTheArchiveScanReadsTheListArchiveZipReads", + ), + ( + "a conclusion a tool declares failing ends the command line with success", + "internal/tool/tool.go", + "\treturn ok && c.Fails\n", + "\treturn false && ok && c.Fails\n", + "TestTheArchiveScanEndsWithTheCodeOfWhatHappened", + ), + ( + "the Tools tab leaves out the conclusion a tool came to", + "internal/gui/window/toolsresult.go", + "\tif said, ok := conclusionSaid(d, *r); ok {\n", + "\tif said, ok := conclusionSaid(d, *r); ok && false {\n", + "TestTheToolsTabLooksIntoAnArchive", + ), + ( + "the conclusions a tool declares never reach the window's catalogue", + "internal/gui/text/registrywords.go", + "\tfor _, c := range d.Conclusions {\n", + "\tfor _, c := range d.Conclusions[:0] {\n", + "TestTheRegistryCatalogueSaysWhatTheRegistriesSay", + ), + ( + "an empty limit of a tool says it is worked out from the size, as a format's does", + "internal/gui/parts/property.go", + "\tcase p.Kind == format.PropertyText || ofATool:\n", + "\tcase p.Kind == format.PropertyText:\n", + "TestEveryScreenStillDrawsItsStoredPicture", + ), ] diff --git a/internal/guard/screenpixels_test.go b/internal/guard/screenpixels_test.go index 6a4bd261..4843c6d9 100644 --- a/internal/guard/screenpixels_test.go +++ b/internal/guard/screenpixels_test.go @@ -22,6 +22,7 @@ import ( "github.com/donislawdev/TestingFilesGenerator/internal/gui/parts" "github.com/donislawdev/TestingFilesGenerator/internal/gui/text" "github.com/donislawdev/TestingFilesGenerator/internal/gui/window" + "github.com/donislawdev/TestingFilesGenerator/internal/tool/archivescan" "github.com/donislawdev/TestingFilesGenerator/internal/tool/checksum" ) @@ -348,6 +349,14 @@ func screenScenes() []screenScene { fillField(t, s.tab, text.SettingLabel(checksum.InputChecksumFile), "testdata/checksum-sample.SHA256SUMS") pressNamed(t, s.tab, text.ButtonRunTool()) }}, + // The archive scanner's answer, since 2026-10-19: what it found and a + // conclusion in the colour of a mismatch - the first answer a tool + // declares rather than compares. + {name: "tools-archive-result", tab: text.TabTools(), set: func(t *testing.T, s scene) { + chooseToolIn(archivescan.ID)(t, s) + fillField(t, s.tab, text.SettingLabel(archivescan.InputArchive), "testdata/archive-sample.zip") + pressNamed(t, s.tab, text.ButtonRunTool()) + }}, {name: "generate", tab: text.TabOneTarget()}, {name: "generate-empty", tab: text.TabOneTarget(), set: func(t *testing.T, s scene) { fillField(t, s.tab, text.FieldCount(), "0") diff --git a/internal/guard/testdata/archive-sample.zip b/internal/guard/testdata/archive-sample.zip new file mode 100644 index 0000000000000000000000000000000000000000..1c95a2f0c07c8f7c710f77987d340da21096d6e8 GIT binary patch literal 335 zcmWIWW@Zs#U|`^2U`Pm#UH13YR!$&~9f)~>SWizswKzGkAXTrVqU5x`uI4!(PgaHi z6g?l?a;jK?YMFtU3y6bK6H{^_8qRy8D^BY=C5WQf)zQV*RWBqWL|gMbJJ4iCCJ_eQ z?g1JP1`UiL3dMEkTG5>a(a6Biz-R(wA{>dX58Z_beTg7_aQ6myv$BEYn1OILknRI< F7y!tSI;a2u literal 0 HcmV?d00001 diff --git a/internal/guard/testdata/screens/tools-archive-result.png b/internal/guard/testdata/screens/tools-archive-result.png new file mode 100644 index 0000000000000000000000000000000000000000..3f27f10d8d64bb85aadd0f6d22f8742fd1b9131e GIT binary patch literal 127582 zcmeFZbx>TitLNoZv?gtQ$IU7Nf4~C785G)X-nc}<5fPDWh;y|okmJBjV6tHU0y(tDfa%?vzy%x9^K5v8 zU{cf@t}Ns%d5N7-+#Bx~5qUj5cl-O6%=R%adcJr1!8E^KfL_JN8$u4@4C&Wo5a8j1 zh%Fo(zKl406cF%(6>@GNDV~+zUvKZs5wF#yNJT1nd3hlvD<2;@^Icu$`_R`IVz=HeV1>-;h76eE z7En_T0}bbUdsF+2KAyu2y+!xx17HQ5ai+ELC?#!GAHK?KB4A#CYR5l8ec@- z`A*?CD$o6?;P7xilitL{#FWfT&*No%`(-LJaKHBUC-mB@Ihm}$9G<0i9>*o+<@=Z_ ze*9RpVNdj^Gngr3dwP1I-RN5}{Vv|a2?;6Re&LM2d0YBT;QH@UbhqRBMBH&$5(Y_D zJUKTv%Cu`f4aDYWp4Umz9}gZlI&VLw?Mi2`KjQR!e||byWqfBPhf4W+-Pt-=4SXpVXnz4c$Y8yP>T{5;`OwCpmaRj+%IIE+r?c{mbxWv)8q}{Ym@Q7Hjm5p6T|xGt%q# zsHk6)lgBnsk=}^7xNNt3)wNFF+{5kc>`Yqd+1k>ps;V+YweDJbSX!PxKE5g{D*Am8 zlb%jfJl*Vli|{5;YDA5lV~xVsEkDm_V`BpcssHa^2eCev_9y@IjFgnQgpYmx{z4)m zf$CK{-r|H3*bJFY&!MXx=D;ChVq!|m$}~E>w|{@Ftg51*q^vG1EbZt(7MuM28!1ip zjgW(R@!ifSLU$5!&-aT9*&0rqko6~D=;fhlP#sas=G(VYlarrV@l?xaR-2T}nA0{k z(J>-4u0KoEEL0>UP@0keh#?RpCNli&+PgoPcKJ$B_KfZ2gCnLnxL?HD{`WoczK`0JOYMTxzYm8cRc zAKz!vcwy8kwes>Z8hm890AgCTHnWEG;a^qT+h99Zb#>i-{i<4TDksZRq@t#_WY**i z7M`^5q^0@Aw<0MkTcKRq&D8(L;Q8`!`%O=fgmL_E{-+UZn-Nn?79HAMa!1b0xH!eY zu8AoK4?Vp|X%r)UyX>*^M}*g!-wkp_NeKuD+FhX$q2dU^d0)S>5)lyvcI`P{p~J%> zV$tD!_&|aepn;!|ocxKC(_vTszB~BV4x7_n!8TDH=HI(y)K==KS@E<#@z?I|4X_Vn zWIgKD{5LL9(b0v)>mU^2y-Qu&|Duxvj0sx$wt!Mo*^pkuq$h z$lV*ob^k74mU%)W76Vj zOXf6kG)*0y?iBswy_30?@ptVv8^bUCi2{g~OGnlO{wVk@is@aY8Q9q9P+=J3yy^L_ zTw1GT8y~M^!|rA9jYufY<&ZrjC`ev5YLkCRjI9T9-lq&XibN?2M0Fa~9G@REb15f>!*1i>A(pI+@Bvu#G=oD! zY#DN|UOm>-{A%Ky!PYLh=i(v_e1M*hi>hpt6=ceyVX?cr8xvuBEK3`_f9s5jVUCiD zDr_9PzM;VY=W3Ja`RnlZfipKv5*{HTE&)NS(=PkjuR7!HU#duNUiIuLm&%f(ovhqb z(j>K5PPh8{2CN(MA@!`Uzn3nwI-FGq2ndp;7=}je+SfHFGl+_bRqM55g%}2Qq2ke~ zmTt&ravq%i8Xg?HI6n_HO#S0RatQ7QxLoI*l{yH?y}cfc z?e*PO4VDe<@83hf*8k~xw6z_rTf4|Cy1BWrUHZ|ip8sxOU;y}t?b_3V|Eqfv_`ALQ z*ocUTBiH+_EfZyBWkbWRyUW7{t;+i};*FDPzsJM8JkoZ(;z^5S2Ho_WoKCaR581O9 zy!9#Hh~owS)cUb!5MW`so}0anh_PS1uoD#gxwl6Zkq53Ijqd1Amk$O)nM&D+S)FjM z2{Uec`!yBDum0$aVByo7o75#7QZiD~>*GfRA=JDA6}>0M}-4B_WyperIOtJ;V<}^ufd0cI>QgImRbkei={UB2% z)B7rA?%?*%#~Tlw1GhxR-x(RH1jQPe7ca^|Hq7EOM@DS0A_IxPtI#A4Z|C^l)$|#~ zM1Adiy32qMXo}X!Q|`;+_o*!^iWoAXO`@q(JM=YCU&~V|+jFj{KFO9O4!FX>UIbaOUYL<~`>Swes7u;Vh;oo5c%c&4>3GnDqIIRIP3&NBjF%=jUs++m9ef z3`oVKU;})b!U}R`NE9w^T4AAjiHa4-#qD}?^YcFqnD`(5t{EGBrSiPkjD0@D?z{nc zd!gabDa$UbXMJmHiz{o4fak|Mq>J6Ht(_eP<+_+fkByYF07P|(FBTR3&&Z3lrw$QQ5GY<_NC>99}|a=i+Oin>i< z&~@O>YHp4!E2DY7YU~t7El{K)hUfNuDA8JZk4N+F?OPIzD05qS6`F=`-z+>AJ8YLI zjg9j`-Ui63#$qy|-K(>#x>~!5Nr0PMyt1Qb7ZLWQK%ik>c{vNK3L1L;loea6E7X~@ zD23kZ6Bidf7uV(8TU&|HrG;RcarG^OzRdvG9DXi z6%!lAkJ%sRU*hJiNF3^(tMu|Z-RNfQTz*eLusKURrl!7jagCx#Wh6_niEi&He_EIG zh$J>ysohA(?JSwAc(mH?b-qKC#dVII%T!WQGHAhCrT5q(U;I33&#%+syuULl0NmY= z48^4|GZP;^VAb#Wacr#W=!g#B388PhW$pO9O&nZYrVF*(qoa+nL;^2`6g@rF1O)|s ze4s;#1BN)OO{ZBURKXwv;ya%L?B=-My#}@|OWs^qI6;xB!>4tBF#Z)2QnmKAtA>WV zs3`gSmM>ifnF4-4s;bPM9*zP6x>Ipx`XYCYjg3v27X}Ca#t}Up&_cD zL&3u{XTW5$bOroUN@1Lij&5vh>~SX}adHv?J^-1B-{C}0!QEZdzyLL7+>r^Xv91sy zfViP0zr1{UJr#J$`8CP~e7IdC8;EieutNVpih_S~zJArw)6>#=QT`iDy9g$ZPJG?4Qn(&$z?*V&YU4PI$AZ;BPSO({}@9@h4GydDIDP-&+e9C+BL>bA2ot;*w*xgYhc z<4~(KN=?L+!)U|QAyzIw-=d6tl58FuixRg){J#BZ%JBDoB7u?gl7&^$UknSre;=e5 zza4QeIh?D0U**Z3QCW6Sq{E=!FFDx zSEZ+?r5*gX8X8S0*em1XIYTCzbjkJgthE^ASdk9+L^u=T;=d3PB1~$TD%F-&SFetG z<3iVGg?mWgxjoJbyp()pyu2h-zUmYz1JELj>bx0Zy#W)Fi%u#1k7Ssdy7h^?JCmE6 z8x0MO|Iyjn#YI(H`@Sy{8@~PG){+rL46kVoX8FkmHDi=S3oBTdL>i5JVBh&`lI}>C@{Vq4pGT}4I7V&iO)^mM#RwUlMIo4+qwS7J7sq%q-o zzOUF(wl#;veBzv+`GkyQ(X5j*Q@*BHKBHx;@8mR{S)F`(y8bp8R3azKmTq3>s{qxi zmNg+_6UJpOE^6g9R)8Sc*2Kib6gGSb{!~t3DI66qE9)RW{ypFxaur1hVF3^L_n8D{ z==McCK6lobnNx+@aD%mawQj3)v9a}R8zvg5l&owEWP1uJAuv(IviST7Zq7OhHN`qI zREAfUhL`vaDkrj2Gq2m5-_z6EcW_-S((-b0@kF_$)I1?V7zh9>HJe2bSLRhKurN); zZgQ?uv%aD_Xo)Z{4e^>BB#W=+lZ6?0jt`snqXdf(zO;96U}I%PT&FvPKADQ6VT_Yi zf|_AlmY?tA?Ck8h__UqE;{-V?P_~3XtRRqst*r!*+}_8E7f$hF&QDJAmy0|AGaTse z2gHJOp>$z{cALAD)X*eu<0)N5FuX<-@nDaeB=5=1jfR_BqbTWHkZyt~jBX@VUPfOH zitx1^uRXq7)h}vr+%!Y#dGqED?#&xIES4Iq!~MVW2`k5Ug1O&#vrmfTPHHtqa&x=7 zy8MTRq>u-^`jxUjWMumqM4+%_hJFYzSIc(C!tpg&Cm^UQ@x(ybKHH8|D`#U@qfU{a z#i+TxeZ4!LL(kYLo_(a*H9WlC5w^+siPTLXIC9F%V=`PfJCr#?mxu`|!!bnv@gNW& zX%mwIOe`#LwC{G`ySOy4MEJx)gXwNyMAdr?CbHz!hrmxv%vE@J_y7+>9(k7Ub0$_~ z16VolhZnC%I&|`?dmQJT!Un2%iNfr2q{WDyuA;@&O*#Q9!o@`fV7qi74FiMkP(of$ z=yhX5Ljrc%tKR-H9X@I#znk^WM2|RST(_qOO$7nVMghpU3Qe$k^1fy0Kx+6v?xaQb zE@>hAxWxZtp#GVPx}788T3?T+Rj)cYnLA!?UfFlnqEqWuipEiW=EET%0K^7Bj@{!V zyu4?Q0&w}026YQ1DhJ`{65&i1!nu;wa{_IynKz}ES38hq{>@Ee-fYHCFa#eyjE?Gp z6c~fgHNU(pS~!)E_<1Oh@Wp#$Vk$||FkY}JxVQ^YXytL~FA3k0a1zAZP5uE+*CW*1 z({SS7Nii`$WKtNKu+Q#(GVyYA3l~nM%9`2Qs!9#LXU_nYUdYd%g3Y`URMm5bS0`(m z6d#b-GcK8iPLV{teQrfWUZpVV3o1EJ<^eb}(%W0mOvs16kT8@vHWSfQ7% zUh$zngL(rkT(mR_9idOFGUTQxtW&FU=jJp&=vf0~68M&8F#nUS|uUu2E6a$v=NUs3l)M=y-ro#%xkk;|2$d zNl8(!y%@s9#bw8f25cBR`xRh{a6-hyTNcgS+^|1+1O9_#2XSLV$G^Fywbfjd03HFM zti1eolSsgjISpLvuvp|70JS4rL$~IO!<&f&Jw4o|Dzo$Rib{?v1mAn-)>E@nQ@>5) zvPj27HH|II&PrDZU!1P5bMo`^i;L!GV+QqsIGdc(`Xe!MIv_Bxyqq?Ci3NuuY-fLa zyKnohNtHQu;C#lyb38{trf>=YF>-fQMoLmLT{|IPWmP|ph23?{>vN&9WAieo-p5-L z$kB$NOVNa%tV~RtZARD%0}N9I{}j(10&pw%$20PaJjWJv)RDH_239CjzPPhfz=Qff zSt|hnG%>O08}T|=YY?+G4~Nmi1G3~P*WotOw!Bh9M+8+>#k{@qlyL{P&!{khde#%X zcz-(LS66kUrKLU2YJb4PvwIB-3-YOD!y*Vx38u$A`_2{moi*+4^fWY!Q0m`?>=|LD zdnHt_V|dWfcjHY@6l$EBt4fN1xis2yTwY#Ah<4d`+`1|#m>X^Ig3y9Yra5W|7Jq1P zFkL|4gAf%~Bp06#f5zxS`#oZ!C8Q^WNKQc^C0P%UST;Yb>p!uw7EE5mL`Q>!r|)Um zH!)!#EUYXj_-CQcue78|eq?|aqw2-s?YX(Wk4uu^ACL`}rl;vK5W;(ghWSOT(^7Hl z?d_9>^XIB`{dVQO08TS0XsbEJs!`5sZZ2)Q0d;@}A?^TF(1k~!Q?O9_yG8{dD}hac zs#jBA$hfX~@Vg3L)$~4CqdcuA2|Deo02LbG1~%-&2B~|;#~APr%XZPZ2x3txG-T{j zB9H|QX=#vvnjG`nii&91*dC)fX4%+QBBG+O5P}mE6|^Od*)uZI@j!xWTwR=4TqI5U zm6wMB_(nLCW9`}kPG;rR)z#U>MY{N=hu)Bo9ru;n#HkwN0d|}Dze{URyZXf2~LA5-Wb7$9;rAPXQmyM4&ZGsVQ5>s0-2A1C9(iw5iO`n)&xtt?1-ZE-w6xaH#Rk{bM-;ysfnG#cUTX+QZN8_GIc~159aoFiM7}qXTQ?F7jBQx`EN`@8`SD+9jM3%f64~%oH*NP5ZZ{mZ=SSG1dB`hqjzle|| zj|mS4#8$CF4sqCWvy)#Xut+GB`RvP=Z=m0jfR<8Z)u5%2&1+Vp@$yxmJMU_6@|pQ9GV+_OIh3mNJizl&44c)BY54xVCI?h-F*@Zc zZhBf;ySt;I%jGBt+$_z{FQ_mOGDd4O=tRG*Qu>SM=TdQRK4#mnn_K-7mpu?b!U@4e zDq65P+mmNa#}4db!lB^he;l_pV%CHYz=@8PW!dB$TX!(P0U0!PJuc9&>NTc#zF~j< zGs=)nbiH4@rxP9J^@WcXH)cv* zE7RJc$))Y&cuej`4J;94$+K#2UTcIhA=PQnB@VIXAAVC* zWcR`%3pE4{LCuU0Nz!6U2X$eKFaK9F?w`7HP707G!$A|n!&%$ROy~A(RI$l|0u#LG zs~L5D5O~Iw@jwv+1M^28B#&$XsPWsyaH)lrU$3=CheGD<8=*AEO7edLANU4F`2Y5u|8Km25qvI=EuDqd*3_ag0pvfOSKo#@`v{H1^d9n!MA4Nd zsNrAsBcdm&vC30zV8(H=8e_PMw0wAtPjei?$?P3DYV^k_!BAIC|7ULRN)*>`!FJ-T zw;M7A7SL}E+ZS}Z_}QdYpIB&zUap-ax@VtflBu`fZe1T%&l?23V+RkTe#Yp1?1M)` zwWh;YN4Kdf!3uuQfgd=y7j$8j)zpfnPep$(KgbcI8Vm>`$GzHu;rjQdXFRUc)3^6m zm^H0`YZjicHMfoylZc3N1V!oT*IxdIKmMn;ilTA(3mP~(e_c_Mm5tJ(zx>#;Vkd;U z#R9s2#^di{g;2p^qV{?)EqD<0%sB$Pejb-pR?L4^eT)XL(59)us(fRpQ zs)!>x*?O(YwG$Nea;2Kl)=3N20OB@}^ALjnc&Y#N?cVSZe%1^Q^Q7eD3f)$A8X6i@ z_>0R&-=~M$jt;M*=K6$$gkQq~qhqUiGge|s`1ts3&ih^&&|hAn^(I3JfpEihb&aAD z66o>6Y@UyI4J_tk?(KS42>->>2+9}4e^yaZ(bXM2wpeZR01bx>cGKT8GYe4H+bHGF zpB1vW3nwioWY}p`rKKbK&P=tmJbirl?yIL0zFzp1&y>xG*S(rL#KywLuGa5d|LLzl zK|wM9NnFx6i1mN>;JhU+$*2#~V@9|nYEW`=azq3I_#`IKyzK4oM|(fu_>ZE$*n8A)$|O zN%$&||NMkhYe-5#A+Z{eo+;i*YU*>NjX71?DGV#9E^g2GcW>m~t}6|gN}Ow{Wj!gc zk5^KvO=^B;@_GFLc!z^yZW|)RiHaQbYF+SOPGeCBa7mfXdPCtcvr^c3@$a#D@&U(p zD~*UHDR5jmO&@0$rc+hw_Tbw&a85aX$Qd(j)j${<%9keV<#k`CO3mZ8gI+p2L_(^B z0lmtJArg3T@P+#ua>=WIJ+Vj-s6cj{KMoucq*V8wCoabOsY}$pdmkMe8~T*gz;YR5 z^I>0`JC7DIN}ddtGq5Ft9%*r77%|H*j!0G18kJzC9tavlUXd_MIx)+S(c# z^S^(S3*^?>Ar(nS*VM&;w{chRE4;*)tBe~ua~q67H0r+8zoNmKI!XMBovgj z&Szp4mT42__exASZIEpV(iWfl*>d&cR2<*UemT%HWzV1|A*m@UqPW2Be!{VEaytK& zM4P1lvSGo-s=;$IPwWic^XY-w3-OVCQKyC+GR+1c5^v_dy?yFbKi!U{Dx?P9~j zb^ALIgeFYC6tv)01Yn!|YMTn$i$&8f{3n1ex0i&6ih|Z9LIC_7N z23jxil4|9cqc_%=*w`uYT{)>Z5-i?#3^VXTsK}wT3|L8D!yKBv+}_^S)}GzodSr}> z7b*t^1lX{D@cgsZDoKu(B<*$Z`1D0IH%_V`?&M}LOw>q2BX!~7h;g$tZ`xQyWaxt* z9aiKLRQ&q+k%o$jij>sI*7n`#-*EX@5FiAs^Z~sCNFss9u=V!sK?(a?^Xl*49e4?U zEI}&olbVugj;Qsh%0uBAV2Mu3mgsuXbi z{4ctLTM1Gw6&h%g`YJDEtM`X(5*#wV$N6YuUjF{x7*Q3U*OjT+843Kx`Rmb9ugN30 zU*n8G@Db8RLq}ItZ7+DuiyE4!qNF63ADoLju7M;jtft1^aw$^pQr^_!$en#sME=u@ zuW3VTb>>7ZmvpLHT6*e@uU0%G04)zRnjvEgB zg|J#K+xynZiTLiATP_97$Jz+7u|w@1sib9PF(PU6^YSL5h?FcX_wnTut`)-ijEHz# z(N@l%;|~r$L_|nW(&qpX%hid%R#ssi2#_Bs?S-x%1lJv!YHK0PX;Eem&^{Ap7G~Hz ztgjgv`r55MCd>>BWBDEmN)}Yj6%`=s6=eDH<;xRIm+z9G016xH zk&dqJQ|$B28uEarfq{Xs@wp5m)MGd6Ir#XwMn$h<6c|i&okc%I!Vo!4l97)O!KgdH zEc1W~hBRZ0-YgyVM_1dewCp=@wsq)B*;hM5&b&qtr}mu-l}|@GING%*Ivl5xo?eT~ zVSjgk{a93&0S55eA(Kkie@HS0WPq5123Dx6i^SA)+tCrJd}eXR#ol7jJmyv0OCs5Z{_92(|h0OwUxnj8sIR-FH4;BQWFz@|NcE_ zSk9F@%gQB3bZV1BCM9)nWONj0Za<%3)jOF_4-PVI7=0vX0%}YK-Ikw5j=;t`AI_|d zjh)=xQx#LuiE?g+D2WX9G#zW;V?!|`^wMMlu#Timn47DPn*nA_84g~V9Lr){ZE~~) z3M+er?*#=>eMU=A*EHFwwY5;$7s{peQ&Y96sW^2W(BqZX#6*k;VVMQqKvwPb`YUHlqMuX1@W`uV1}F zLcLGEs_H2xchnftj*gl(HkqSl$*(Rcyh%F6Hp4S~gYp!nzI=MN9lGU#`hG%kgS z=1JDG@$+{XeFC4&eheGVKxXTE-EXDh~};@OWSNnM5snW3pSpbQwtXl);Ye9gDmxMIycz66cthV2~B!hh^M824wI#{n!p}hat zCG<|~y8n=V8M;Oy^#Wl zU;6*;MwH{Q_f=I^#>2#9VPkVSoOS68t5{qlc>6Z|)2GAS+^yN!;nYG}EPFDvz=lPC z;IIYB%XWZ%)e{%rNt8&cuSfD1#KFK|WiPU~zQ?+E(|Fn|q4e`vNgUrb2i=*}QS0XB z*TciZfG!V@iFqIX>n*Ieef81PBO!c1UcPZeq}a*|bm@m`7t_BIt{HgDH&OR zf4|-8142zDQ07WYiz11)jhd-bdA={_V`X)|zuE;Qotj<;Juk13jm^asRC|!;<-V!6 zZ}QT+hQ>89#^)L<3yU_V-4FSWYE&cd;D2gXCIj_e@$}5fO70A@QI{|2F3&deue;a$eHryz$(JS>GB=1K3KMs;mFWc z1re8&S~jZj5XZX{YAP#3?CgXbn1<|c5Z--^6xB91-URukrIqJ_;SC)x3>F~_BFdLw zxS!pxVs+gOtgP~yG%#@YBk{F$b-OD3>+47E?smagiShz?!R_y#$q7X*b#=IKQErDn z-gK*Tx`Kt!7|TsViql_j6==xQ^*Q8X|hGvuklBA?}c9~E4#mY7Y+NercoW3l*`e4_!k%j_>X~IoW2kBJv9u8E3q*} z0@urk)YQCNBKi3e+Ie|-?Z_kZ{;wn+giWKw^MNF2p~CZVVljQ7WU;wUimqzH3P>MV z`}*=y^cDjN?*+YmXFGi0+WUR%eSKeKWJMkOUqN|Nb8^qgzd+rKzc_r6qg}AKG(z8}R3k!3Am#GJ)0l=@bUS?fksO=g&?; z{=0ZUa_9S?;@}`DG0@)J+-y9chm43QG5(hv^c&*ihqj9h_>-;!iDGTzQ`DQhu0fl2 ze^rkwW0cGH0fR91deQrn%@4+GxVHfju?nJ%-r$kf;|#NSdSQCnl08G;_m(yKYNF9^ zP?wdhy}q_Kit`OMbsL#P%=q~DkO`l&=Mexkf87J--jprWYzEhSY8Qn7=@E3r3qBHt z*Wpjxq=gEN7m%!c|ASjT(_*Xr(ah1zbQ|b@`3}}$U%$7uc0)o&j*5*vo}Y|MNr}A~ zFIMQp!o>U-?+jY-C#&r!rD>NgULMUje3-w6hQRcRYwNq%0U`lkZW4d$M5%XgdY&Fb z-qnbE!;t!Ss95AIEKeXk60JblS$8G=8vrzfCeVa@YW!oVk$IFf~TKseQ z{p{>)iHerIJpZi7@NgrED+@*bBs#>nVX>{!0yE$n*pK1izE`i(yM*K{Ej2$++nxBM zW@I@(+*sBv&?QO%ZEqS&wGx#|ed?&{=g;Qs8A-oZw@i*#+wYYezW$zqKrAhlNcY3T z!gw7wRMEn>E`4#gw~hGqzfD>I=Xv?^Wefq&&^r0>_SF7<_)6=wnfdOw*Y~3231HHS znHjjm*{yf@mal$})%}%c?t}nSk}O3I|07;B7SM--PlzSp@#pRRDVREr&C1T6CX49f zBkeCZF+U%by*1t2dvkEGcvf3nO|tqDspsp7o{I!^gtRGRN`~jryc9mePeuW@q`9dxW{9=3r;Vc{bw<|m^t4#6 z;?)tChI*q&=~on#e;`F^`70!86XvvWY?~D=&>Y*@mGinLT&^>J{{0*1zTd+KVPekc zxiRehE>%ZILo1xR_k46PHb&1mdHb0h6&|QhcgL{bg`_<_bv!)0v|**CMHhJX&ey9x zIZ;r1|H#Zl7D$A)fxED=iAy@E=1(kBsxogg8weNM-#bwgA39{>)!KgnjDeYj zD9GPKg8d!<8Cap|=|uQhfFA^04lqM|fW^SWK7ef_N%8Mlk0Im(?NY^3jLpsbckg)m zHYoe{HXNFglhOD0aS?)b@|Dz8R6w+g|Fk<_gU+g@VZPfA{HG^W`}?3(#RmokhV)Ua zc3%q*kG^{^OBWY8;I&#>S3l07AgPInwD`Y}(_M+l%v=UY=fXw-cywB3=HHm}9*V?C zo+p!&H9vPdJ2i$BFm#j2eM#ew8idSNEiNWDw4G2`*aw{K+}+aR)4v(e;*H06=!}Q3=#h*W4bQrqKJV@XVj*o>Y(k$v7kVB^z@8IAAKo01<>0|8awup>GTv^G2 zLfxXp$C=t|YrStA5Iql!LG}RB7Er%5Xwiq_UF%^ z%fmTh_^JIjtDc7fKvo9k6C(Oltr`yM#u?mumI^{q8j00FDGHxO=(gTX2{@%yx1lhi ziHSoAoG4hDq{Wq$U|H{-t*!R+u})m1>`j*ze~vY8T9Vv%Y0G^;N^n2Qp}*GQgBU9_DxbOY zlE#}fXf=Tr&&jF~$_068eKC+t+t^?<^D3YOof3IF5Z08Cl6HHvu{LN06C!I?&K@5# zP$b$mXvKYIkG_(Z84e2zyP5NQ%n7r!u1U4FI%sL(?(QM8U|noI@vUiTSzN20-LLo6 zSJJMW?dah57YvilIlt`&!8SbH5hnz^K}%aeA}&mL((CGo5dt~m=2@EjoI{>Cbh94n z_uC4t?Xpx-N=iS{#y`DTPQMnM*dtZvG^P1 zq8xbGZV4ivFgkxhiqBvq%FD9_>bjIfo5Gsz+ba#;%UAGYN&(WbHr3c^59 zJl^8CDRZ)`nr(S>zWe;e=cA62Ql&EWq+f0G!9jLUvK~_!7Pvi@j8P!b(9~S$=^?CB zAV!r}P#7JN-8{Yd_3I#3;0Y#;fC&G0CeQV70XaKlej@I8qwjf>{!N0UXIYt5d&#t1 z@c^)EnL?Cc>zF7cFf;}W7fM_iCLfE5;N*Lr(HL(iR6N~r+TVP21*!q`h6Wz6301n* zm#%z6HO7>^8xgeX47nd|^Tx(vvI$WTSn$lXwd6^oJB!Tjvv~B$dKGfxz(|9@_RbF3 zN|()#w(HfCwqjvnLsti;{khI3w*th9Y94Us$IySr^nm*80$Q2=c-bc?XLTg3zeyvS#H5HYFzhjz6G-s zr)RYT{U6b!c=fcr?sXA@wNzBjfZAs1sNw}Km%bPDs8U-$L)OVcN>Nd9;)m@_3WHC8 z0bG)_rm8ABKK_wIh5d*+jn{bA{cc5tO+kLzX!39hBk}Pp*x>g2V<3-0*MlRD?^!=^ z&fbT?31QUl03vA&goR{!>c>Z`0`-kkp_l#>JO|ub+SPl`S_RT%WMm#~&OxJ|JS%f# zWZAe_pk3|~!O+bF)ZmWWzh0Ant?ASU>^|e zM@B_GY!a<$Yow}|-;0Yo)6x#_NoD8ck`N>g1*{8h?Sr+8kDtuVH8DvPMPQ((fBf4c z@DAB?F+qIV?|9iySmDyrceOx`w$ToAt#b|P!0EuLV+*}Hob&0?0&xFwZX62>%kLh_ z0cKCEt*wc?|9EhbGU)5-`uKG&Rtx^wf}w=tXflIYYxyRD3TdD-ZD}zP=VpHP0z2)@v^rYeD2Ks#tUfzH{BcOWw$@K6l zAS$|F(?%ZjQv4;!^SlTxTwUL^mx0vdkDr*DdeeukJ|RLJEv~Dfam4m=1SB31Gyu*8 zv<6@iG;T8}KxkqfB_WKt#@hjdSgEpC;*^x+kbKKW<@|#5BKJ7GM|0!q3vzCMxrGN zDXDj2U^WGNhB15f_Aa)t-fJ%mAOhXtWhUf;=rE)J4~>mEAgW|2tv6rm=yB&Y^jTrR zFq0`HJmH`SktavHzw^Fo>8Yujyr|PSI@#L-N{jGtP%U2!4(@?zR+=PnV$_Eip>#Oc zE+wT&41|V)f{{9?&qPfPp*RN*&xiN#sWEnds(^S9{)P1W_wTJ5#woy140jfmB^Oqt zX1)?4tZ=(8IX{2Ac>d)TzsYgFQ`K;4Jgb1c@QyP9a;O?lDi|~+kV8R4l#!R8-RJ$p zuD4t;3J^_pwyeB7G6I4yoeH?Un$((w$BBuFl9D|jX)T@(f6SMd-YX%D?9tRd*9{bf zbT)g8@8;;ca^k-fay2g=_!Jpwj0zu=io^ZGDy*+oyqE=*a=?Q1o0u?7QeMZC$5udH zEhHqwStEai6%50Iaw+3R@D4t4h#dzB>CNVWs(wN89Je~L%HOx?S$%gYyB(nH@2MFx z=miT}0|yj0d(K48Ss5&O#lm!012#V}FffeqL&Wn*eCa#~MW!r%H#A%-DSZOg0A?dK z>M@hS(khq!Tx^yuqyyAWyf+yNGgp8P&C&bSeebF7K)i#B0>|}{dZ>p*Y=(iQ-tTa&3h>5YK$v!PG zYQSaU|Fesa{~Qw1=Q_{If`TJ0EnsJdPq`EpF~tvJW#tKkh;rpKBco|=-n`ME8xv{u z`?ic?n+s`uWac{={`vD~bahYkp=AfiDYbRyfbyfJrmoW%*&Xj}oc!?@-T%uqVr%0< zMOac4HPeJKuFb>V;QDtmiq}Y+kNo1bOOFZ?NY%B>pW-D=n7ObSebERBg*^jWYAB>7<3>Qy{DOD)~350fhB za>eueNAin{KsA+|oQM@^>a1c9B2(fX4$VSM{`z7=`AeZ6(uJZ{Z(>8=1`&5!p}@nt z*Cytx(Q<62y>h+xw4$+hbR?mpL%Mx}3pr&-vEEdcd3=1#s5&rgTvDYe6pX8!-iHmS z0CR1E*ES3|{bXjW6y-A!13i0Aeu_2Vo+jTs{|@>plB>ux?QLa+z*5bD5ON9|;5XeD z)hRK(o8!mM%R91J$j06gHn1u1bR*Ik%V&`K*P-=NBifzU*JtI{0((i&kuZh58SO-F zon5a^hvEDl^7hl7F2i&3UyF`WGm)3K*-3*Y5Sd}>#w9jpW*g?w=;&zD_?%dDLZTZB zd*SB?hQ$IjLmUcJc;8qTGFC4YCM0{CM7^BRX?OUb&^O>-Y#XbMp$C(q#Hd7cnop>I+?*XC^>?4n3sA z=@*#FsDOP*2>pVxO;(BVKNAzO1H?B(e(c%!WH~>t>5NxiRh{k8_Y3cb@Q4x|M@870 zdoe_p*#0_5;S z82rnjKP9mHc6yIridtHBoOP))4&b8Gxx#m^A8$idFjrE_yvmPvp9n9Fp21iq3yZpL zn|rp*hTp{=5TT-llcNp-=0ZxU?)h)%T1^+1(D7TGXQso0gLGEvnBo1X=q#qT0Zc7j zRaGTbRUy<~o)a56nQ1J{M^kr7eGu+gS);NxnzE@l8NwnWHu~f=>C7S^^t?{Rw9LwZ zguX!RH(Q~J6OwD5AxVz>?j0N6t?bO?BnVMcQ#-iPx>%8gg@s%^JPI^PPd(izvJ`>h z`RfsU4)4T=Tei1N!O_)~=eG7}3OU2CGJ`R1XkZHumjbiM^z_$sSaaP>((phm@D0_; zmBfknu5)^*snrz7=YPUHca5mUm2VnlHf?+B&#u`M;^9plS}O&8AXP{&l1lh(wM)eR zur`?A&BY2n=M*nG1iJhGvstzbi{WnKK=AI*qMUjsi3&HxOBg2bmwK= zu^oEMrm5*%Q)wy@hmtL{G9Wwuq7nTCQE_o~H9d?C41Su` ziHccr5>Hwf@$x*B)GoZKP}3Iau^q$RE8kvO0b1I1Uu4VlE0zxwQnfXw>5!cg`h`rXHQyWvK?Bc0}4HPsNi@^FneROxMYR|4&~`h z?qqjxB3*f?4ugPlL&s~tek~y`e(2ns zo4bh<@)i+sZXbda!XSY1#;tBCG*ce0JxQ1}od&z*s`mEX;7 zG2nHzLMoHt>4q}{B@ZtzWUWJ=Z2XHTDQ38+PW>Bm3^A!fNCL(N=j!635&LzuR?_Gl zci6~C5{8QXbEWOcQSf?InF7`U)n=8D?Mizz!!@qQb)p=Q7dCm^0xtQ6{(6 zyl^?6G%3u_7okX$OJ~KM+1UusJF;>K%SjqE|9*GZGBM$Zh|SRL_#%TQtKD?Cv-T}g zq8s!MweaPz33G1TmgLVBE9-Jf`KSzb+cy!a#;tL;$15R8v~`M}j?%xD=jZu zn{+DI>Z<91RVNd+k!PScZgSs#`BQ0I8hV}mD>ZcktL$cq_lW|;m5Z|tsie#2vq9`x zs9T#tr6>5MySosiQcGqU7kxdc@sRTQXeO3221r01G(-16R~PqUb*WH}8VFTz9wjo|4LEomxwW+gJ?0k|hXZ+iN&Gyp z#-VLBF)M@=jt0Mb?%<$QQleL8lp~t;oPe6nQr+jmByJX3`=gVRLVk3^Wlu=RU^n$? z&T+4xq<6H`@V!4X2{Pgyv(drRFMc-dEZxx$uc2mleRa-P^LhTgB*y6*OkzW~^XJOH zc+wxk{vtScm6+?wf9{)b>rk;iQ)jP!g^Bc82l@7KlBUPCdP$_ERo(vSGR^1lz|PKm z(9nR+XUNLHSb!gjzwtJcCw=UjsOWf{oSboq`}Z<9*$4AJe1M+(-N1X|u(Wi%A=R!w zDvA<3tA0n(Zoy8<94L9R-z5HX+7I#pD-;pNw~ehY)_!o*`@|A!4H zRQx@9QW_q~_OqgL5y^j~b=J|bmX|+d_ABd|b$CmqrQ_XYE#t1J*at`A>sQK@)J!u> zP{o_->t7Y?om-@kk&tjZ&iUV`s;;V1Q=itXw!8IaJ~9#w4eb!I#UC{>0q^=CFZF2i zymDaG#-^dQ_SJ=^3hVdruV~y4GN|oht{g9XdJIaL_|Q|(A}eVUSP19V>!P1fmx3?>Jz8uGrg&zgM&p{ z=PA|0!!wv#FVBVO=+9)u#ZSwOgZK8P&vu@U)IhVOWYiU5WO#o+R=ygvoiXbfthngc zI^8`CgFeu6RzOWqVXY1q75CjoE``wROVyMXZYqs^>Q@c87>3I_~o5?zE-+U=tQc~-*7&C(B^-R2N#J;(4 z^~=kdi&e$UvZBK+ReDB#0D#%`Wn3!cIXnFHgRDS?=gyzc*Jsdd-Y3Z}ufv#tO@pHB z6?N`bFywY|qTH*>Wwk$QJc%*K(RT<$z~%^^xXA z?_ z;$KpD0do4Qi)EcLH@1-y1M#d1pgElEKIP%D#%J#R;wa*MUQMGYNY|8^l0qFVwYDZf zHRTKW7FSme*uGr-#5Aqc-k!DbzMDl1y;e&$w@U$kCVyT63DW;Z;U=2 zfMm$|>OkiElaQmM<_v*ze_rUMnC1<@92{AP!60-&sEC7$ONx)rj2G?^kJa+!%T2Cs z0canNk!DPg$^j)DmWTFDniwiv6jK9(%#lNSA&B#l1E46We-tUcrS(aBGhhtL7+1%c zPW2FB3|SrSGc`<_28xp5ymsXIrY}z!jfFVNVXTv{1_C}->d_N+k`9Qoj_>>RRK?Cd zL!*?2O6~iP4YRgBxHvX!L}(v#6Y9Sil}S;V$&N-Q{lG*FHB8FPV{T=6@E{9ET#M0| z+fp=3i9SBL=W>fs3sHnN{?pZ!VBgVsoe6zBl!B(3FE{;9I!E?Qp)yZFQR8V&k*ksq zX_0e-HK7i#Lad6l&CNsd{r5wUr4%yeuhW~2%DxLUywx*CpK~Q}d0@h(Wne&V@9J5I zCpBa2eJ@vqE?t55EyVRnGCAcF!54@#b2Y*_Dre2&h<*t^()95tfh~=V0)Cp>l+nn6 zExx{u4aPr@SY0bv3HK&b!^qsR1Xn~TRcNIIU;#}8S-IJ_bc_}zI!5#7V-OYE%- zl0=%|fiEw5oPAk^m2nPHvBhvk_tUT+a`G7+&9xDl_oi*Ftwn@{3|bjDGYhRbaC;o~ z@JAlUt!1)k)s3>So#p>UYx|GK!XkT7Ui~jPmn!B?vO)7lH=2jZ}N>01ur@ zbVAsQSOp(&45OfMLcJp<#wd&^h35$!C1p$^Mmu52r{I!y?sSFgMjT`$_*(WvM&jpT zuBBP-u;zY~m&cqgz$Z=}o7}T>=5+}o%#6%*;SBBSt<9aC@BRHo#e=I+ zcTXJ6EmuwTy=VvsMlpI2oDiJ+Lf*E99#;thuHhfIQf0JY>+^p7i9}Ih?*IFjF(t_h zk{4;@ybA!1gm4+AS7TgZ^#A$#nofjM{|amij{_UF1(Vhu8jv z@-L8?pF6xNk|_#$hL3x9kbN2bUQ!VkiPpBr|Boa_3N&xA_we=P9vp;cBOCr)*IVWT zZf~Qr?L<@4)u;`pd_|x8AGy~4^!HFl?$jQ8dt;e=+f*MW>6j0(>_om^9w+4!n;98R zL#{tY*1Sfdq73%kUF*uz6sV7%RVrAfZUYC{WiP1pmj}Q8V|-@jE}v!jH(Wf^3k|38 z3R()=TkU;)GZR%k?lDx-ypnXb>s}fO10d<|twmne|SMYvE)r4)t?h^GMnN)A;TU8u!8Ff$HZhDLk zN0JW5t8LYh`d=TvH~*m;FVil({#ng5US%%9f0 z>GwTZJ9`43lAPYZukQM|8++{x8-6{rxHM^gV@nj2%@R>3yoZ_K-Hk@~9sPrY;vI^6 zZ{@$@WMMpfO}%0oqEzQPk8*dF!_IPJ#b@ZcxbaI_q5tFm5bga#y7xc-{y#nfX`PgL zj9vVXq+{6gw)Wn(KYNC|`_^E-u2^=ppZ(ZX@7UL$*LRV*`ls7@-B<%jROb1mchi5r z)O)+5D|7|7-0V*|wtTJ>R?GE;s%^a+ueynN3Wik0P+J|ieJ)7DLUL)t+9>y!V?J~q zbWM-l;d*B7e=(U5L}eS(zl;-<`?G%(=@UnLbHqhgD{Vw!F|tK`@GnP~LBdDK{kKhZ zQPL^PKfhrX%b_S5tQ$B9!=027$uX_8#rhQ9MqT+lD<+21a>ZC>tGBVbId1r7o%*-M zbDpLeo@Q@*BQJxUWM@B`wNR7f$mI$thajKmB~`(;&CDezOJE8vroa&U87lxYTz zh=Cq`B=D;iKM(dto|+i?`OFmKY8N3w{QZz zMc6b%F|n~6M3EiyK=e%Eb~KWZxO1O_iw~4Ip;Gy3A97LR@!+}K>T_hmMYC!)t8^Yx zQrGIHs}~fNlq62+gwUzxt{k3)Vw>VWuCd|N@%IUn#6>*-zQ$R>`` z{o9BA*Jn4spbDO^+1RKB0w*Ku>xn7PgB4}Uj7Pvn}sSSU` z)z$OE<~hKKRosqj+-`%Ux}l+HYHEs+RSdK(epkbTYFUaAA?T!MRBUW}Z}?CvD_x1X znn(xu7kQroxxP!_ppS6qa$=>t9~0Wi1Hvc@VK?-)d+i;!ujR(twC<4|w6*T-Rk5@CG@A9?yL*?HGNxERA?1L#k8=j8M|zu2c< zt*{+^Yt2qHHgwR#bv<2f8va42D^Z9SDz0m5M2TI8Uv3?TuY*>|>hf%Idis7s;Hp(p zanRrYGtZ(Ix$GI9qhBzT`(fqQHRyn}7!QR89Eu5l{ZfX31r2ou%f0E?>zt|@g_@6x zf36MnnVa`*ZEhBPWbxk-sU2B|3gwR;y}rk!OSQ`x@uQ&H(> zD6v7kcdtU**88Zzyi)ra{ZOtvv+Pah>r4L_)DD{~i{;+zSeoV`3-(mbM#|VgpR3cd zgakawz4J>X46@IfHX8}8Hlw927VP?UF8QCk{F;RX1Z?-0dTjJUK7SspbzWA} zAQ$qVmKO8!{SosBqfGqoWO{#ud*&DPJYs`Gi(}2#5C&>|93m|{CT5ray z)!p5w=o{O7^Y-oAxjFYr?al7wRWTf5V&^`AV@zd$i$p&ZJVn*OUicR)C-=`#u+&pf5eGRPR<{>_blc2@2ojPr@e@- zN9JpT`H)%^Q`0)7V?JuH1PmJ&U#_B}QJ(Ir2vm^*VCH3bE)gbRi%yC^g>n-lZKSJ|}CTfQ=kTNbr@ap8biOIrK3?=|cXw^8}_;piR`x9VF`22G& zB^cv=WJM93OrMD_IC)xFtUPOey}Nqn^}@fs{GU1b&#%U^Z%+DL`a(vUS?!L0PAo3) z1I$X(3-zWQHhGCDPgqnGw)4ZcozxL*v~Eb%qW8@?{XbieOfYhx_U(g&==?ZQJ~aU* zwesgJjev*0y6}AVEV%jXlijy`p$9B=Oq}Wy{d)rUA+6T6=(LNkTyi9I`!6JdAAZ12 zUX#|tygAxm#=&?>!w*|YKTiw9G0JU5aCN6HJy+P;4pz6K7W}(XiRc%{cEv@{C z&CrO5m6esah`^A?`VE>I8ul!c83_qioElQ~*JDGXz|=7{zxEds`v#CqB4S1PjKX-5 z{5tIuk-q6^{l*Z5#1)qeMMZqhoth~-OUWJ#A>{g3CTwHDb(C^15G+htt)bsL90bZ_pI;GQb z(mc~QBei~ZkCahGO)W`QM&|td9C#<%MX+y;xub$K+H~n!;A+uS(c@+`Q8h9ahPk2j(y@YVSknGt`4mXW(T#sBO%M>cXhl4J?!42BLi&#n_OeEw^+psi zS@rsH&E;2ahu>ck4g5T}bSEkm1OM)7eVayX;DkcsyH;QkLE^N(onfByL2!`1(99*xO`n1|B6{-b<L0fKuKpBjUv{gtof+Rj)hHq@0q!1f=B+ZM_UT+Pu=Dl9P5(A6C%Pr4F_GMjMxy( z<3A|9CwS@bfc$A*VaCBz!McHr{v*b!hPqPuuAp4BYXf`qKF>ZDxlgEyp2i}0zShl%OjglBr{a({I6p|<`vt0GIA z$qKj4ao~*!dF~}8-1zfw6ojHG_UN~-M56J81-}Ap;FtN^sJOU7<1tFD1k2e?3-%NU zKg*k=<)}e5xstDIs5NZCF7aMjT-jn%J}%Azoy&;`w&ZUkYnXBTQTJAA!NDO!~4L2 z+JQ@h6}nOE51557Ul0W18DRGU6%9eB1<)90RdOjCG(XKzadq?3Z}9M)-ki>qp(7=o zG4Bf&&6=JjmY45wb)9IOHdvwCSa?o@#K$w**`k2%=2RN{DxKtCcb(>?r_~c8KM0@z z?()?_Cv&ENw~RrPj%GsT1Xp-=jfsq{!_HNV;Lnv63%w~x^x%CEZt)z2{FnXSKhIk) zeSBK=Rh7+Hx%09@q{QXQuTkiKH!jo6l|y`KZ*}I;8iW=tRa0N@?X;(HCSFW{ic6A5 zMBXfUFPz_lMT#8Xkig8y$Y!F-O9V5Zg@S3GO-c7oSeLLPA?@Q^ZKm&PP;nAp&i(7o z6*lHuwl7prs;Ytp%}{}Z{vdj<)jIyZOx{CRXt)OX%F^&}y&UFR!4o4((pYdP2Pa*IB z;M?+kI^Qv%z|pwuk2tyf*#rc9m%0gq4A0KaK$>f9y&j59vyyimzPGohhVsNRNxD^z z$gH0wHYl0B`-34h+Mm00%97dtyo}byLXsSHrFQz%=!4f(SfS7rGB`YpDQabHeQ{Nf z+G;Y5*?esWIfxG20Yzs@V%MU9-OoGJh$0lPyL)?of@RC!tsac3PTX%)aUMlW{k$3d zfxE*oS);9-B+nEpN;Y|J&&xNP_D8u*nWp8efijNi0JSV5HE71U$sAJ|qpjuucB{J3q6YY8Qc#Qeu}Wr~mK6 zY0B5IP=kI4a_pi~rlvU)jU{=@?FFlqlm54EH34gFv?h4j0Ha8+)@f|MR_>b8t8sd9 z9CDE}Gm6&8WWqZL0Z5qqFMi)Z#Gvp%Xu0*TyGk#9-w^#CcyESOz^f2SGRbn{?|)U8 zH{V6fFfT4A1nf=!?z}meuKc^tn|1t$_h+dcGs33EPgQQQoU)N6A2vfG_UMB@^n_OFE$jdpU3&u8P9mHTxC%y2e z`ZfW111+Liqgnlv=jTG<%iLyXju=s!R#gRK#b)&>|Lun=$BChTkkRNa|6k-%{qJA; zLUw_DfSleiQlfEcYr&K3W=}ukU*8)+mYnU}nSEfqBqS)9%lFS*Y(A$`-4tXGl6sc9 z7AdEsV?MJ6VnU6xrKLW*hAC_UQ}hhupY%613?9~Dbc`tNqK%~`vqt?KYv~xy60`kh zB_k8#;{crh%9Ga0leRCn?9rz7RYR^(U#P2m^?+d(6aBC6UWt2oko6iVSUu25Se)9T znEGc%QlahbfW_eXrHC@ls%XrIp2zJT?i#3fUU@ZcaXntPNBxVzwr{@hc_MwxW{dcZ zJ$KXWNznYCA5yQ-mPgbJ$iv$jrnWxZ`;QNW<+OKk*xJgLP9;q*9p1*)x9<}0k7R2a z{R5iUn8tE6(lIhB5x<-{`iA&5_H}!lE5igep8UbyvF6VGsUa{fY-~4!IhI0RUi*A( zMFqyHTE@}Q^v2d!?tsCd4X5P$S!k?%ikz638PuAniH0Le5E%rCE0Tih( zZa%One~3x(nh8@>ifx9OklIMBWm~(XXxa1Pp>uC?w~3j|GEd)m)3Wh3CRTad*x3CU zub0VBgwT+8I;yV(HDRU#G}KPf4HmD@m9Jhk&OKydc}^q0^%^ z6PYsF16mUvzJK7+dJpl=9iOvR7oT+j!zH`!yh>24S;F*bDL8{x<5V9yxHi>49zT5FNMEU z3#x#2WL{2QexRRh9_e$&!r3K;WTjJQ5YWd*L=+-n%-ujRVWXq9Xf4uVbzbraZJQFha3DfpF^i~7O-;?sH4_(a zgB`23&cx2UhaAvfusd(7tv&8{zFD0@bgIISj(#LZz26?Gw4&1FzSmvZCSxsoVaQET z?LRRGLXtYAvb&R$jEoGCx>(DkPf~q-YF5^b%)Y45T4;^9flyjTXl=?tPZPX3KQB%h z4ROc(Jo%jD$+fV7L0?D5#NgnEq9Orm>Z7p=tOiMNKjVRp8y8*yDwD3m^=8=|6&t*n zuCCZl6JX02G+*)MG9)l+#igaG=w6^AuvqqgvmD6nxA=p1SRe7n4^_K2hel|`?Ol}z zVmXKdLFNjU6*mwdkaBiSk4{P9buU(Q0|NIEX8^@Ou6#QG7_lIw}FvAYO6yUD6rTJg!rxHz8$Sy@9{>As-Mjg5|S^T=QAc2poB z2nYxW2^kpAXYrFUQ!go)nm+PVVPgS~!pcp$&b=he_wG4I zf8=}gh=+#mrU_F7y|xJr4>zyaM?g?ec=PzNf><_hYC1l#x1?w9Xfq7x zND>|u%GJAf$DC%r<_r&Wq6E%uZkn2Mlo!ax#l@v%Oh;u*ezu%1()l$s)Wy41W($D z5ZL)reV2Rna=0Dgbhx=uMoWQN1#}fpO&MLBG=l1ei-o1Z=@I>-M}d9zEq>aLj;!el zdA~lAlBUzo8`cn^YP_1YV$nqlDrj-wASk}mI`q6|{Q8M*q%Z{uFOHz$*OPDGB*(^h zAd|g!kd|XX!^^{CH%&4)IvUcr4L|#wnp*e@aM96q0-A?yj|CLeK1e%zdl2r)$asA- zSqlu_eiXY%N1o|p6t?IA!x^73DX&{RnRloS8ZC2jp2^GGZcnr5Ox%^0j)L)7Z8HXo zMObDc{l(?-*?AvSX=J6O(m1+oTLKW;q_MuX9*<5ag3TMlITApD&baSXrx~ zJsqBufQaaKx|6zw1{cTf?Ep7)8iP|5K&*TU3;R)6Sg2Josa|-3iqTR&1SWu4jh7#O z|L!4CxJu`{2GlVMI{MeG=mF_{6Mxw9J_AiuC#EUf+q2pOw}42WdB*>N^Z=p=G;Drw4bU zLj-QssO=*P`)vc-HHtLcgk=STj2}E9!a}%1Nb8sj3nhYrwm=CK64_{NVgh+mbn#6m zE0cxU`wtmGSIv`lfkr&c$Hym4g@sPj3=-AKO0;tX1Z3nLgGMh?eKHyj4&So_OE8gY zZLYxwRUD*}dwSplHfb_aV}$~;t*kQrZA^^1iVC=R-67B9IT^)wa7ina^HtW+fQjWB znI1!d^2?X^3X6)!1Z1c&7Zl%vhT1JUPu>~M5=Uwe*w^eH9~)F!JyLJ7Jl^`bIsh`Z z+`K$<4{z_=cX~B^7&J>Mo*%9~185bHjbdpgpeJ$;X*;mGT0{6tLro1gTp4g0vqg*R zhTsr4n2ih%iv-@nMOWi?3Vii()u%3I^*Hc{P&y&QjerJA$(03R8YEtxpPeri&|RF= z(nxT`{jYdF)tn?N(IO&PSX)m_C<5KCI2-$7uWP6y>Pac$u4z|-exnyOr0F2MfN>9l zez?E?+mTVl82AyOB7Fb;y}@IbMz(8Kh8!$HR+RU`aJ$;ykiL>1s;}WTzPf96Xfuuz z(c|gvdiU0?WuWQ3o8cXShEXt|fD|FZi4BrxO5Q$B4Jy#eBSX z+5^oqwY8p`o0}eaX*@i&#_gK2Il0GMZ7}-LIc_3|iR&>jG9n^KQK|S}*P8cbbOd)< z8b9G=j(Vkc4X$R?v4O`2*_D---$G-xv>Fo?7x~7HzVducIcVmpqgiV?{)?i{~B?%4`0s>hSIZ@p!DXJq5IWm3^0=%Q!krMbQ zd>kAcwl+3L8)HZaJ0M`DqXP@0Z3F~h;-dxyHD6D@myDV}@8t11SOJy}F_+yk8{j~gix=4wRVvJWJnOuGL+tZig;(N|!6=Qh{ z>7PH7=&PuN`3p$NdT;z@scqDIvB~CprUqsoU|Nz@D(g5y41Nk*Gf}OaNVf!=PtUg% z4HZ{wo%1>(iHXUX{o6srib291;Tf~I7(Y8}=zp;*>Ff-~FC$jgwM$TRW@oRu zm^EOjxV&7JkRbCuV<$$~IdL=-enFnD(80)t@B$Xr%*<`*IV@xT_VN9DY@)iSSqRNv zCnzWc?cS9i6%xFE6fMR?J&ow4O`JOKcas+7zl0R_51?gT%kHuF!uR{FLCLJi-O{le zhynQaYj7w%bn#Rb6`46W^qOwG0N{xlTKgyZT2}-F$ofMQq8h#Yqh%_A%Q8^*r>1k+ zBqf9J0o*hYzKoB5YHWlUNS+l15bai$mH=a9B_KjV-)K9&18xTat+OU(W=z_j!KMn_ z&>Xo>N7vt1R^q1iwBw*t(>pmi-9Wf0BI)SZ2~$&h`%^8(TfV;3f&Ds)g=J;R$(Q}$ zrC^k;Jzz7*O`KDE17Wn$ThZ2*wCNCQZGGL^%IfP^HzA)Spb;slsj(-ShCtVBoMhfF zwQx+JikOTPlVT;wXm+OqCl26p>qrU|lswk}M|)25pp+QKDV=L znRVEC@T!qiC134+okWMd-7A&1py-5tRV{7p+&rP)K4ucZ$*bO>$m zuauibKp3Bx=*w(=O@5=M&TnmQuED%du-j0TlHv=7$XnY9x2utXGKvR6Br+33>)CE} zt_q4e54o%oKc@#DKmGUMwD-3ddZYwgz-iFCIhJkI&6ev9;s4_NeO9WufZ$L?C0RB_t;5=tO<>))#F~`SAI3;r1`j z2I`CV^dD4Ki}eiZ>Us&ddZ{VCl)%Nzf1%{;T(MR&BJ7x@Rx&t{#{(t%#lif?O-<7+ zEh1cYlVM?Jx3}X4CMSLRGJdv8Ojnpcs;sP(sm&Gzn@%e>Me+veh%DNaw{KVG*d9SS zr_D5s%{Ej_1vD~0&f#6=<21^En`Yqa3+MKTRWdR=Vy{4=gtNJYS5Q!Z9r|r&M*wu9u(awv=Hg0x;#p4WM&#R3@cbKcI8>F#Dg=1a0-D@) zb#!PRJ+fuFmKRCC<=Wek?~HJB?S0b=6eN0*j}Gs?dRC(#g{4J_FUX}?6ciOT+UY4N zMqMyL?DN7;96f4;HeRNuC)m_{`8j1rzmo@qlvN`yemkH*qhrw~qPcl6w2(54BP8m8 zN37FQH;-vpxEyus>yCohW5k;en3;w6bnFHhwQ*`Z9DyPyYHOPwI}pA$1n*FdKE7)a zEI$Oj;(X3rwz(L3f?G<#q5^IBC5kDVmWzvxiwk4Ci~txC7OY2Dj}*_Rzk0dW#T7u& zmpP(aLvefq?DRxM1)Dve)RpwGIWOfwl~#t(%wFj3w&z_a#eaFx_WWm=2}WQuYaxKT zw#gCh-o?0e^FlI`$kNcz@4&*I1vjy)D1TPJX>$GdePqPKxBwJLiuDOe(xs6XfT6}z z1K|_D2DGprRW^59oDN0`wc1RM9y--bdcp4UaIM7FcGF()b&RX)B%~_mbiRE54ra~{ zwV!%Z<$_|Qa3)zc%;obmK=mR_9m{$fj1j?|rDt&%h`DIwc4bbB+T9Rm7L2?Gzu*Co zhY#e(+QmVV3PD;-L~USse=$aLRx%QtbX)wkVGF$Labes+d2!)$eKMcBcTCUBNJaGl zg;faY{6%%k*IT7K2tdHPhXL#>FmIc{A;U!GrNv>3r8Ai7@7{<_esZpOxxIx4j2EAy zF)Ux-Qz^jwwgzJ)rJ%cA$^`Q4{Os#X6r*I2{V3p*WMX5pvCbDPMHM6U0gTAR#Yny! zE42YIrP5*cCM*n;(H{#6UNs_tEde-QpPYFW&f(n~>mMG@R-%P~k2w-Sm~jhsB#>Y&$deD)M{wJo;QmY`W~K}4mC?ZQ&Q4YRfWQX6-uBe1tvbTJ^@i(fx-0$gFO#< z5`~se&lsGX$9j64CeRQZj<*Ed-AC?XUuAut>gRQ_xGp!9-4*aE^E&)dTB>BjM1j`@ zXUEmW1qG3mok&koGGjoxM}`;IwG$Am!iOxSprC$|dW(!YDl(!7*q2LCfy84i zg#+{{pSphhfDSBZ8D8RmW9a4CqaJZPKK_}wc;9e|0WikyB7SY~^fNTfLcR0;*j1i> z-l>*GF+=+^?ay{IMnA+-!&Y7l40oSMPX1Tj^<0ZGU{oq-ABV zx9aW1vbTnZ!GzC6R(7cJ9xIeNcpzI4CFI8(Ed}fyfQjp=b84Ck8=_M^*2KhweI*aq z%;Y4=eMd%Gi>Yk!du5>);M{^oUK|Eesyj&bdj|&;n1gU3FkUw1hmsR|+6?5PC0)%r z>@{B=At8K$Keo46>HYXoRwbWNK;UwyJHh=XdfxA=OQh)N;BRweD1m8jcXnD{AvRRt z0|Z_*m;1W!T9?OjPYqn+UMMK24Kf3sCNiv!HvY%!uf6bm>W|RrdC#gMdy={m`(&vE z0MS}od&!LdD%(QrTiM&UfBM2gvMqdlTW4D(#VGG5#6BSakTbLmGASRX!ofTa-xOup{!?oXdS z_3~<8PdF9wyAX5O$qmQvgPje;j8_+JxzvKwW8sh{0MFPuFAjP}8v_v$XgM;teY?n@ z!6WPI`g|IU%!1bS!Ao}i1KfAT~Clr^n=#@o}Rr9l^m3|`3}NrJMrMxHe*e` z=Bn7_BABqPWhXl9P4}OFO7V}|G!iCUELYwXLa1!Xcc`#x8ykzRw=@7vBtxxwrl+kB zAorGcBO_d>NxWbO&cVLIuRl<)U5_b(3C5JksH7~Zw?#04EgvctmUD1$JG^aU4eJnX zU4{FBT$$$N_;_mgHBGb_C773kva9hi(j9SSG&BkGJclpV1s`DXj+U~pnrpVhho``~ z?ITEjFfkQ8KF*66F#cQu9ScZ~1_p}Y(}GCqkxCB@N}VP$sspkZpQfS;@EremgUjl=k%b z50;b^qR7Yw4Mjy+SyjFCZ}YqQJyl+~VwB4C@#srFaCq(@#&)i4;elP$@c`0|U9znF z{6~21`yObwFarN<;@-vX=kfCVp!nE?GK+?Z!WTc(J$+Xh$Je#0$>1IBSsfcfWaOvh zeA+Nh&Za0Oq_Ud&rYm{>E=)wviDyds&m8Fq7I0PL((DKaYeb&X$8)lyIvC=%y#D0% zwAN+A|B5}EcKkSoe(Uf{ey6=R{?3yYE(aI-7xs;aZ5T+el)1x*=3@M`XN}%DuqxFM z(CVV%Jidd1e=9Kj<<~Z0xEsU`AC0t0J;O;M*q1>LOy8D#@Kjj1fq^1qygrQi1rHAk z4bsxWmo$>3*nRx2PH@rc9~#U*gvBTr?(b0C(87E%kKSRZR)-V!r!^vez<;48_wAlff}WnOuYiWEY_Lqur+ksF zEqjYG5$Nr_YNP{HmXAJEKEr;z`;Xc5PKm?2@23-CB#YN%+S(^fO!k%7&~5wIZ9!7u z_H~r+d8FlB#5{uElrrt}5~g>0Iu`j@2J(qSonfIr+it38h>%)P_U8uLhNishzCCZI zWb6{^ug@Kg&vIOz?TR8>=xRS`nO4g36#o@l?r-urxzD3kFRQA5AGY|bW))ex&TRK3 zE&KK9O*m{iUw)?Zi+we-@NLN6NeM2RKu~CXymr3vcV-#?D`5NIS#kVVV~+p%?eC6f zL(%svaY|Oghr3CGgLLfaEd2a(MA%`XSxKC>R@y04O!6^tanKk1UG4*1456VHl2JY% z?kf{W#3kqdCR;uc5)^7#_oc-|R-<2p;F2y3E4&Ss!HJiKuk}l~2vB1tLTJH&%&B%` z)qDBs*n@xGy=8fSXl+CI3zUFG-@FI@aoi6^JM(C%js4RLKcVCZ?bo7NYP_}<79s4S z((>|pO$~Ek=^X28B*umM@W=P>U=4P|@|z%JgT}__w=DNvKsDldnnxDZvFR48pG3zv z7%tZR`!|JU13l_PMrP*i^>aw)Eu7YN#0lMXDh}Ph7Hko(qALr+*nv@?K z@S8%fGh{!PdQv~!HvpQoU$ei9OB}msGM9aZN-r&Dc2F1C;045G$% zC$)CLRzYkW6+}wFdXT;q+Cla9#-2h>(^UcN0Jdzag(+$rjh~+%r9(rViQolzvn;I* z6#%qBnCQNEUKecpsCCp>2!O~0v}s7Oc6KJ0xo>Bbm*?o004&g`VCZX6D7@J6{^rb# z$J$`uLd^~+wY4l)jkb*XruH-wv#qR}2uK`B*AHP)&v4`Ub2|M=0NehR{9sz?G!`uN^Vq3iF_52LC- zLeB>~CmFZ*(J6ML%PLk%ZeKc|BvBbgD{^WII{2vTRNDzXxz9BQ9qm14&b*4z?bc8a z2n!F_*1>SjRN-Lvv8}%Ln0x)IyE$GtUoA3n1{Xh(-(2~X;cR#ElZVYXON*8oMcRul zyi<173VHS3$M%Wq7;J=>gF{8zD=VMJ(4!@2C)aG*6Pi{sr5|Y*Jl;b`{O-vW{Z!e; zdfo61CFJ*9!IIbhs@;UGf>G8jBplW&u*{8Rvg%C(dk;<$-a#26MJF)ZSzGJliDcBb znJk^{f|GG|B_)JyYiDO^XXn|?q^GA>^h;C1EaO9|(zXLPY|oE3Cxos#F}vPGcUv&} z@|!t3FWXI2RaPJOL4rSaK0Dr@$MkU`!ybc(+SmDLvebZf4xsa5v zDaSI!CXhU}=y0@*)6SEfKn5aunus+2(et$$+KTOK^BB9J=s2~vcyBQ+F_mwulF5kQ zZqw9g)7JSWrZ+NKsi8)7yYms^>WxP^_4USnCCOdz!h9DS`=O$uB4~NHw(OwIsJQsCgE_RW z+S@}dEF71?M9}|=A12z%D@z9l2iSn|@bW?`{b96{t1H^!cmC(5rf8`A=Lf6%-Q9A? z0VgLXa`Gea81TugNlQzssnPWCp!!KGBP%;n%(1#nPWw35wd56ja%!rqv@{T1!GlHw z^RrQ4M0`9hq6nY+85E@gLeQ>yFZX4~{^^O0fZIk5WH`OOCFOe# z6fyDeh6e_GFHY{7X8kdugjTnu*;&79!B<|Z?4Lh>o}8Kj*Hel|kASjxJ0m8rO~TO7 z5cbZBic!$gl#xN^=EkW3^l2m{SJ%U=tXc552@{tQRZu7{EHvtPV++-ahzQhodyI^X z-bW|cq2h4t;EFrlc>oDcudz+2BK0+YC@;qfpuokA?@4X!>F!3neH(14miEk*XybBn zYQyi<{yII`ad^KyTGrU?|9py96(8Rms=+^gd}?X2%!7XF1Ly$cw440$<42e<1%TSX z>mmO*^$u3(WR2siRN|H|!ci|@-dB?_FqrxIlR`*{To6R)zL478+$2RtG-?exM7-JZ zQzXE2|^0X5i?_CNR=HejMbl=I*XxZk||N{HDB|jhGmsdL6(-NJvN+-nkD~ z4rIKc@(*H;<-T~>bkQ?0L6$Y8lcKz$VsT*sk}0tX2~}lfK>wI7GfquTCS+i+h5~?5 z)p$p5@9cK-6K3X_{(e!YgJ=48g1al2SeU7>k&u$YqQ=0`nTAbAmv1{!1xY+K^qA(s zmKJ?s;dkZbKgPyFqoboEBYV2Kz%X7(O6qN7WMe~v&!tzz+M1QP_-%K0F2D-|sdakV z(&-^t-}36Jp|y2UVIdSJhlhr4BWIrw_tm0xg%2kf@?TcNB8qbDaROvTQ%c;5K19cB#16Nm9F!X|4GbZx441sz8 z96bkmQg%Q^1z@3HzkmNwNT@j^goP+FKR>^$tc)7#9y}r~JsnU9g8s#bt>!RZrKO?M z9YsXs1{lMwt$o^@@CEA=z-u}>-Ype=S@wH&w)p+~31D)Wn0#+`=IK$x$35EhqxfTSF$dSo z3B2vAE3G&)b|PEb#?GOkKd#M7X><@9&5D$M{v4N>Xbn1(^>t%I!?9+619^F-?oS*n zKcS<9iI##AGsJaWZffeT^+*cf>f++$t|c@Z8u+!ev|czr0|w>91UA`kIA4s6h44|K zSPP|3$RdF(03Z`XLqiVFZr{EQVN78WSLcr(ob2pJhlh~HsjJ6EL_7i4Ti72#bE%D8 zQ(0l5sJuKp0)m5h*f06|4jgFTxZ%gl%nbV%sLSQ%O0YNpL<1%T0>b2r3pZg*pd8B= zF}{YW?0nnjTJY9Im}%FC$;rtt6ILU|>2OICa~8TgI%dm}W{OCbmyQBtii(nQZoWcX zQqtVRgJ4M$<}JvGadVHt7=-{;(dk0vu6O}F=8oZpchmn3yBX2k%Hy`n{Zb4L2xq#&Nu-9f!Z@YpaY1u zI{dkWD=R^$25T`G;r(9j02c*N84YMUbMx@rMdb4Ku76fA2)&|^O||?11zJcY-zdNf z6a}BZcMT0BE`D})TLRt}&Q4C?d^cRo0ouo#UN{&SeM>#lP$5-OiGfOgZmu=7=?cc4 zGchp8Qq;6C4>x+dSCp0poOONw4g^k^fK$}hS60r(3&WuwqmZ)}{DD_i-YI=wTVvjo zg%yxt)#~8et?S`$w<^@NE!gn_-i6-XdkyvMO84!pC~_gtGC^h}Q_vTSvFqkdbS)iw zuWP}FbabAZ+ViA*-&Oe$MS6P`V0Z#964t%xX)@S~suexAR8o2lO)(Z0w0wNt&wqPT zIjOrFnV6uUH&N5j;1i!e7Ha-7Gc)u3`&%yuvXe7AdrM2-!!_K>=MNyx{Z&X!m*7+> zn-~DGz})=&j>kn$>Il>d=+3bGHnp)~b)_tG5UIl2M58M~YK115qoX&++fO1Qn+N@S z6Q61_-r=83hT+cbvhroQ@7b?kzXAe8U%q_#Zk&yc0Sa0R3now4*r5K9l-${8b-K3* z0vj06LYFQ$e(E46fsa8hXacpFjmcGW8yi&GaX39-*$96FR2az1u$+GD?7YuN0y7oh zG^PVMgQ{`QRu5TxmRmmkBD+hNxLalDaH_UqT9 zr~AvomB9AVt#fg7aG-enSYKVex7%h)H}fu{h|opp$d4aum*)onG={kiy4{ciQc_d@ zl&w8I>GIy*6!p{t9D zkrP(&%4&Bo+F|A4(JF1I@nDq_5n*Lzt6q8F_1gP9y?aN)z<$N>)AX<1n> zqoNe`_5Gln2+K1gBd1DV${lQM=x`vz3oj}zhHC0MY?`p{S>naT`LS(^f(j2xPs*w~ z;u-1DQgCf#Jt%L=0`EmiO5o({0A9y&(f4K;VJM>Q_-AM(Vh|L(5!LbMC0STr2wv~^ zaq)0-PdA1W6A;vR9fmbDTy&p(DZqvVAaVeZ+2NwEuj38*CQ1~G0$lh0l&$ADjZ&K8 zrjK&GXaxj-34R2DH_)jdbS395%^a@*6!H{oDDm;}XJ&*PR#kq6;j-ZjN3KK?x1gd% zKoC__#DxDC5sZD}%5|T^YnC@O*ocZkbJfsn>y7o{qW69ev_M1*Jf7C}_JoY9jD8GL zsz*7r3^b2#-GZj7<|y*;z5RR0h+Ggr?cFvB56T2Cow~Z4o!xYAdJ{OPh>8Xbp3Aqw zkSH^jw6b1@mB*30DIA{}q5cF`eY#x2qJ@PIFtneTE4=!SNrhEuIY7NOv_KOjmJNX` zoMD3og5v5C}M)102&{$3hxeAjq5KG}t)UGSh_PVB4Ge7<+hVH=MyZ@yFl8ph z#EcIOxz2raw6r9Yq3O_V@=;b$-~{i(_wS9buNnvWdcIcK3c_1*gsOO_Kd?reot-+M zf2i4E)(3iG#Kfpj0_(gEQ5YE3VM|Ze{0$=SLzVAiV}!JwoSegm0Xk5Lmy_G5bIsk6 zdVTv<3%sg?YZ5WcXS56qFPC5luWsHBLU^5?PWtd6NYt`JLUsc0y?joFjfV%Ma$ZCc z`^ z@ijzW1O5H*;bA-TWi;760tPPzDk?tWUL$euhzrGSH<#(hJI4yIfI-!n~R<+6A0D4;l4Uys!Afo`DZ4Wtj) zSYZO<(XVlU{}2YegPFA>id@+a1ELFe7Z*VvsjDQ2cN0RNz$E0iztji4VqXs69F}?= zuAQ79uI+05?C*y-_Govkia<2Ic#8<4jZqqeuHmBT2M?IRLjplW3GBv(3N(NyZ$EuO zXmJ}zxDRbwbsAu}i%Z4|;KCx2$ZRmTw6wN%hIM)O|6=d0qq=O@bx{zcOF%?GxCA>TDqjW&doRHUTe>});NEh7-OGtwm2M$=#Ss~ zKJW9~_jO+pw~2){4u?22f;#m=;=&wZ&>jF02yZ~`kmfNIIM>E9Evn z-?-B2a0FenBBMyPP&<4=Z^mcY8B%k|<0w?XFg92K! zzQ>PCil2fc9@S$G&Pbhltf)9`d0L|HReWH*pC(|R#6k3%3a!LGzp`kXbv@N2DlRUk zpw7k6(8=PE=qWhb13L&=44yIIEkb&W?mI4Egn%n0eh}fkdmW8l_O`ZyR&%=2(&wL* zaydCgpWq#IPU>E|A8Z{L)G+=`I^b!RvqzzvAV^Pue$Y)M2 zOtv4A9d2twMsr$v`ugg1>I-0-1|H1Ns9s&wh`KYOd}>0){WGWui^0O;3RiR!b;S^P z41RvWK|$W*ZJC)(O1Ygsp1HZb|8`IWJ0>L7l$1R7_FkEon1FI~VqA4}RAp;c;mF9y z*w|vc*kd{Cx%|~aJVWn^UJ ze6n+gT@)%=VYd^~!{AeB<@OdLAcBe-SqvO9VPklt+zFJZs0gu6xWm8>k!6S<7UE8`r@Ky&AViqzPe437oL znXI-pD-8`N4^Mkr+frX@P2=5%w6w$&6cBX?R>ZpeKw&E(z>)B9ep<cG7HH8G)G??%VX z-8(o)C2+<<78@UXINz5l_`$Oj2B54DA40;~@87>u5);vznF$DDoSd9CH#dP;E>nX3 z@p$u8kM*&h-lyzrq>h_{XS&7_dL2^It{Ep_e2X?{Wf(vL6SQf-W5LG7)v30jd~ za2W&gva5lL_!^c=**ULBpCXj#gLZ zBYsc$u98m(A2ae+7Y4Hy55Il*KnoQh&{B&-UMkzTM@RpL@~y3n4noH_#)>pbeRTjq zfWB6r5x+&h#Oj*_FpFy)dcY3qyZt^q1K{VnzaMn_wqz29oSYmid8Gv7-%dj5adFCE zJ$g9D4CI^B^Ya@HX=bK%TFY<`a%PQV*CT!~W`tG>3`ISzG@lt5YkYrwFjb8?l85z5 zR`yF~rbyrq*f~xyN&29u^7ZqJj_K0lf$s|l9zYwVq8jdTrNuwpoFHhdh3yWUC(Qu& zIvg_P0whdc{)Sh9h9)B`i;(SSgPgRcbnETy1o=1!hh8n z7y)d_$e3(2G(K>m)8eBWdJy2@6_=N1ig;^3dxlOzm;3FTq_}u96n)Wj&l$r+v?>#Y zurrQt1^5HhmCWn?T89Yo^=uE=EZaBT7%rIwTohTNn2 z(3baeFstL?N;eJ`R^u^MR0hx~;Bd@X?Ahdm@5I5O!bwQy?b~E1X2r#Sk8%8JiUkr> z+D33DbJm6~54~GBj6DFj7_efb_rm2;>6HR}XmkdPo3|2TcwR+ZppT5ahLQP~ysvPV z?hz6K&^|Sq9}jIOtQ`-JCf<7*>M zFcuaQqf%7d`+$avn4s~TI!awb!%OUY-l_rMLWPCel9ImgtA>WF;-K_;uW{ygmn58# zA#rk%48{7NR=vH$!d9nyMi8s>`tEIL6au#Qxz{!~X`^xgJh&Mc`}sk{!vz8S)jYk4 zY2p>e{rje}xk=iiHyiEbGNpa zti|Q$vS$W>t;xy;!(xXp6M%vH^ZfEm);0QHLjhnLmW zCz%6!dUpbF9%P&>{#905I(G*{G!HoBK&0Mbze~7?i4nMS!2|HEqq|%xc206Bh;I!I zk%ds5olk%N)<3bqH0oC2~p9|05f%ZeEdU9Oqt!o zL>liVT^ZV;9#x!#AK=ekWfam64F^Cl9v=08Z!pNGyniF0tJL6@XinVS&j!T_BkNUb zGsjkS&K*(FS=cfL26#u_I}ePGV(&4+x`x7{FZGFcqLr~BY`}O#f|vEzZ}m+~kj3!K z&%hHMI=$j(NbfY#6I(7cF)<+%I$7w5*k^WxTdS#=0{9QK%23!t&6g)_j2P19!9t%V zc_tp3^^(%W*#=01VPP-6e|LfE7_fghC~~JFFIsk;L{2Uh0p(TWf6F9Ii3i1Ud`t|8 z3M|abe)RQS{bEAQS;-tsfZUtvRJ|OCL!!lpy8Q`@7dUmex^%{sRaH5$u_?fY0Yvwul4j4VSn|!_JWBsoGgtP^-hf;>dbL^#u2yf zh|EfLQAHWMr%XKIL}c6aBEMCy4ypAAYXmSefdlgfXUs!KYWe!Bk5FE|ucX8pxVqr_ zf>`+LeL^7_hF_W*V#3$wG!WLJt(^v_5tQI-Yo-DMzxJ046HYzN&A&!P0fOxdK)<;; zbNNYr3z0=s8ybdRQbIzCb64$X+Cu<9H-9au{LR#Z2dpSFQ_Qt}(@d8=Vd4d6Kb}A3 zDpL1E|GQSG5cvXY2Qrk_Ha4_s z93E8pKrkA>_CTPotrNE9n*wzkHO-q-eg*~xa6|@5uz;YTjjb(|1JIA{I@JQi4q|hn zD=Nsb@$o@QADIBL$(Io{32@YoBc|fanzggZJxI| zJ+`RslgSV7D3f|#Hq)bywHdyBy1nw5lPmWeA0J^DZoPls?1y;|($8Z*5W+=PgAAUNn_b~P`?ZATYSxY$#)2=VFHtCj6b;{FA=v__?ePab5OB&4N1zJC0L2)I?Wbac0+tzb;= zhB!9Bd)rU^KJlus)6OGvmF1-+7{x&|f=Iolm&(M?KhfU)qq}=!ykvn(AQt2R;N6Aj z>;pg4x+EYd5?>ShdQcrZjLl#8s002^{$T(4uEL@-I=UR zppuN^;+VF90TM|VM9k5Dece;Q6q=BrYP%l>-w8MOC|60Drw+VV5M1ark7}YUd*Xmd z3ZMuD`RLSiLI(WADrzb!D6IH5YNfJ3eIP4~(Z^EbcDncHPg-Usm98$z6@e`6W5HfO zTj;IPv5u@Fi4SM}C|R$h^t3C?@1t3cS6NE{ECns!XFcL!`q8tq_C)JjZf<aB`OA<*hbr@;N9T|eS6byp`tPdI50fn(7qya34v^Fq0G-kfRJGS z&v*$9=%j$IPh;Tn@oDBuDJcrXy56p?!R~IKr(KBabzx!l($cOrHb3Cj!4%WmTLc$( zn>S{Gmxt$0kR%`W?yZ>iT2OAhR#iP%>>6&<5#fKvGY<$P0`(Mi3{Oyqr*kuKTp&9R zP885NPEQNh*L#eRp$vyM`TIWwxE}cyB23{Xs;aBsn&s3@AR-39fehL9sxV$g3!a73 zzGYIGcKl7?{-=WQBKgbuP^9p>du&0 zSfq8uU8q}LTvUIotQ>1@z8M(R)Cj`l5VBvPUA9ut_yiT}3we31Iua~~Q?P5|WGS<| zIQL4)4Gs6a2T&yJHGwk{V_i2^R~?%Pw2L?m9T^HETW5Mfbz!dD~wPZriZsX={^XNQ3)p|c@I216>$Gum|%b+ z>RHInleQ8t1uB{6&u#ydRy8yzNcxiX14W3>R+^FoVsL>3LQG0Zg@;B?o|f(*u)Mr1 zD}3?}2(*AN!2#OQDo1(+NNY@Vw8Ni+rG*y7p(hXPJudMj$y*TSw=)Kvot)q@Wh4fy zNI)SCQl5bhC_LtUQ90>gfZ^mcKISM0cNQ(x^X%X;nI%+~HO9Rpu*Z!{N5#j_PEXgp z9Rm+|dRlx_qw=-W{ahUlYkE3502-4L6Pp_d$EB_LwCBV=#$DcRZLe?9e~gHT8vEe` zoB*jQWS^z$aiI=ya_T%xNj@wuE{;r1)dF4)Bfpv&MNcp9&ykVlt`1#9e+3VZE5B(D z00=k6k_$9HW3`v(=VKCM0wMuYT>v-$fr3&9AlW7ZJv%$XfEELG;-nAca6RFffUyx2 zBrpU!JJSga#MC`BV*!fy4-WOA_I4(E|IGuK3ob0R!I@8uhX$4BQg`kcFTnD9dy7Iq z0|Ace1`uoDOnvRSM$0`;d3~~LK>6h=IWO--^W{sc&G9?1#<{u6y}W$(|L9E3&O+dx z?-R;m)y?Hz4HMjc1{hyJxj9*RzPPm1QUDW};HOz|S@5!V;-PMY^YiJGM#P;1915HS z(-j_GhFrr>9!W5|Plv_^xPn=OFhF1@J$f4*83`?`p@G2*=aH#>2OC0+%Y!uoD;&Ti z0rcES0ay$Z4Gr>v2{9na5~JgT1fC=p-QZOhp02l&xV3IV#M+AcTbS&YgJxq@nww^lR)* z=B?+S0jvVn?)20Y1g^EUw)XUnDMc_NKYaKMMqnT{=~xgJLIavO#BE$&A_2abl48hh zx+H7F!t!GMBCfTkM|@%s^TouuUOxajSu^NKDJgQ#p1EHN9Kehv#O*nZQGpM&IkQy+ zsYW+7u$7fXGdW3Uc=+7zNwoqS%p5f|NKHDOgl4;97~ln#<1A-39}o}#Z~}3WY8n~~ zt0w(mrPvYRXqU2biBC!j|Ba!cq{l8g+765$2h+r2aVbPp)zxqPRq*jQCul1`dnxm- z@YO+M$I`vqe0o>c=H$Fo!4*H}_7;P7c6ddv-N3r@{Y`NQ$|w+3!iG2}cjGSb zXLAz+-5GMg9d_otH^wXnXjy^h@`#bq?O;{U=_Gl&<`S+bJT6bbkif?WBG?bFE^Btu z8?NQocSQqqJTJp!n5$sxdi}aJQvwyhMkC{aqjWzw_Fx|hTPC7NH__E)cT{I)q=YbC z^O@R2b@nhQew3)ATW)HC-1M|Z>7puWg7;Pz%IKJwey@aLqltu-`Rs85y%y)ZA@Ix{cbi<&lC3PQq0co_##lL z7V6-J2M5EIJi9!;XFHn!S$%K>fSFTEvp95jEX+MV?^&C$5@GJ8to(Ct4}%YP6eg8V z8ljOY85kIY*8-~pKwA8f3``7Rw93NrZtc~euP@tu=9&7i`MEhr0aGno4hcGA%P1mSD)gd;Jq!uvk%-T00!X>giNUb3TWO?Kf{C(RAh?Yc-X4DW2nmTTW3bcxe7PTm z=UzwnB|O$(zeJ5U1rQ#0ky1HfO;>cY~};r@PV&B4V|{Ny7QCTU4%>is}N^yiN= zVNl}G$OyQcsxdHhz;_QIZ0~b?$R4b6+6{)~Eh#w;gC)TEe0;ikt-)e|zxwX{yk&FC zEc@ff<>l_yXkG^>0Cqh|zHM`8R-BXLA}OirbOP}%*|sZvN)c{NbCk{uUQpfOaVDmw z_5yRIBa)dC5Jh+^0=CQ06tpgM;6hCDY%MyH`$H>ZPy`%Jm3EW^w%F z00_|=J5Z7uc6L~2-rvqc((MEM{lVP?%Ey+LS!nE_rU!6wP?-PPLIFoyQu4!@=!0v? zIV&gTxXhv=$20>^BsdP?2av!x-4B3zH#H>$ZZDiP1YQ7=f*DFv6n-%PiY3LxuiS?B zZ99OGl8`_Qv$=c5S?m@K94zQ6uCCX+6*spk1_g4@+1@#L6&U8t7BLVIEVQ;Rj{PD;LGfvy zw}OJxR>DRs2V*_g)T@J!w}pGP9SaL9WHYg;Nd+n&35nUA-CgX+GOC{MROAuq2?^kQ z{fS5p3FM!B6vV^{xwkx(;j}(E;k!to5I);l8-8QU%>}`;hF#HVY1&D$tdxM9!{nr_ z($Q<*Q854?tn|ibQykcd4|QD`+9 z=dEDvbJ25JSde3(2s`>itmNEYBC4c7KOafU}=>f!s;)Pe?2gg-;JFmr}^frH&QwyOsRyl(*f(x$~9oS7+k zQc(YJbCV28rmd|4&p#Y4ayY{D0pv0JTKYCbaaUK~)x!q^13Lo)7axwRAK{PhecMSc z&&@q|l^gNA1tGP%xC5SOfH9dIX`Ce8tiG$TZ8{&qm!iEsw@EJFa`5pLC)}m#EdJ)y z^H(O^+674dh6xG|ITq~UK9bZdHWMXYR<^d&b*?L8I-bv8ya0OF?%p17=3o;{yxwd8 z_WAGav6!JQ>3SD)l=cpW`kc&OLGyb~p#<{<#${{yx=HjU9RtUc@n-_O_6F zOpo##Et+BK4Mk%QX*)YS2A%WIf+qFiBJmt;ZGqaBGib#qu_h=dc#{dUy6SYWy1TlX zS6}Z9#JE7yJ48f1y}haNZ=v_NeT1Ve1mvIkiIRuC(yll`l1Y^f(Hr ztKDf40V!!d%x|}+syR6u+8iYTjBN{vpPELmuNQnOEe&TGE;-hTU{3wD8U*ydcR#+y zy+dd>G3GewgL;gICJ9i~d`rjGri}wDQ2s71F5oIPUg=(=YgXI5>j>Y1Y3tKW00KvW zS9EJY6P%TTL%NMq&mz2`I|FZFb91s3HsZ{{Abw z%$u)@_w*a!PT9_zA6ROTTK(rx=5HisAeQWVw1kSys%&3_T34n|__f&IpDI(OlYaRU zx-^eJL=?J8w=66QZ}ZS4pp%7<0oQ4UZ>c}{``H&HRF8wBqmM*ANJK=+kinBAzFvf< zxoF{kEd`9v!u))R%L58;U*D6Nx*90?0Ql7dil4v#B5fxz)>CnDHw*EtZK%{2yu5(! z0`QM-SXg-iF+T$>@WMnzMP)W=sHkv`j;=_GRlmZ215EV2-T6k5yD;m?%38Qpt@*~{ zhy2ZV|BpG-zr3ZZ1}1)}QJb2`H(wla=Y9F|y}EjD$4UvazOla_+T!P&%4&?F;r5Zcr>=Nv%5Sy1fX4)pbp@sv}%Sq&s%SQnw+0+n^{-@+6qRNP@Xh; z@WFbmaXeRge;wk`1wz!+gd+xg- zdYX$b5wwPYtY@)g|L5J;6Z7m(9$acr9x(Y9AOFU|;pkS-X-jjnfx&E8C^M7e)-C9f z64I{7r=(R>Kr08f4R4~3)xO)Af_YRJDR16wyGZNBPQ~%m-%Cs2vT)=+T(P(J8;&QS zG~MFq-~)S`TAaG;$iSc=pop)5@b!a2WI@3twO}R`6F41^y69@wblg$nXbp5@PtTYC zxvKu7s5n@yhRpON8JBRGGsR`%x)fRU%4A2L$T&4KUiGjayp!?383M3A~Ml&+PHOB}U1)J-my2Wq3b91Ggou$AP4G4Fj4d&t+f%oWfGVcYh zWi&Jrva-L9wnSjCF*;iPRSw%+x(-OrVPRX*bZ&=-hg4KW%hTacpbrFczmHGBmoH~P zPvlC@(NKH$N>MR$v-z1r?o_=y(ES~a+1@{dWb9HP|H5QyY3VMTw(r2E8|oEfT_;Aw z3b2dO(4Ems&w_)4Eq)n7HzdfwAPsz!wh+9kEx@`c>FIw!@&=w2942(a!qeT|oUnkZ zs*vj$kg1H7kuHEI0}c`TC0Kxvc%Hu#m}e8c#&>l^6%m<%YYT0M53h$>olAL8&>cAG zqg0_x+yEZ5gN$a`)5+FWj3(&xV{cNC;s9n@SP8dv&0t+4Ju)tS$arv&(fCDTPXb3ZcCLgk}01+Mve>!|j0K6W4gv;rQ(M>>z1N|R2KX=^3gz0`_b$oK zz*YyT`4LbTA#@We%f1wThke0qP%KQFCvvk%`IN%F6kgk~O&R9@>@S1^KbCEWS_yVr6mJr?@y2idmI4y<)%$ zE6eTSU<9t+jzb=(^ng8jxkJ_c!;FCJ=YK<|wy{|4gY6B6{GtQ^5Ww+aG&jNVu-F|3 zpcilgi$$;2(b5tYID2Qj8~{AkrEYCMV%AnFOF7t}N4| zuID|mk5t-QYoP(l%_GW2Yh^Y{2nvEp?=A#JH!7zlCPGl+kgRkbrRl-w*tyHD(ZPMuV;=nA`nB>)ZSsB@kPf-7`Fmj;PPyPYr_=e8a_S} z;E0S;Bm8mDgqODxIMJo+5t3=buJwh59*Cpq$;sU_Gpv+zXjXs0s14XKGQeU3jcQ5B zHk8TUK2Q*2hqZ$xf;iqc=d!VufC$g)%iG9e@Gg(HXEiGO4xm59L$-H3-UJ@t2rXm} zfoBFWma&_gCOpmn-Ta7s1ZxohTmOInQTH=sGtkP~L6dK0-wDir!u$7^V37cRsi#MU zECy6nxgNpBKj6dn-R%@Mh|vO#hL=T@&*9F%n*@d=vKY9wHC$i4e)%#ZbH1B=2Q10J zjRiK18-`j1y9$rx5kxSHL1mlWoqcgMi3Io%2oBb*OU-9C@87#eK}IHLT2!T!D-ZOK zR6*V?6n=+Ir?(ql-RqyxzJgo9%gc)&^q$l`3SK_@Z!+F{OfmgXsF)$u!l#w^pHw_J z=AKZ3zXLTxz*P7@_?MD5{L8rzruUN6!ouhc7d8yc%w+E~K71Gf{HJfwCj-_C%55!V z)~cbQS95qsxg}*~w^7orZxC4aR8#&C(`WIXB^RPceZqM`w%ZHmhGogEQ)uWVCSujC zW*Sz@PM*Z3H*?HhCt;V8TrD-pScDb9r<89B)4JvI9=#mDA~QVre`x?cKej&e+usF zlkg{tm6gInt|4qPT!#rY4yLOMZRhT5P>{VXs$+^h1M>Z6kZJYB>fa?JlZ>W4zf4U% z9!KpcF1GT?d^6vCyN`%I{v6n;Q5_3v%q@%8RciTl!3!r0>6;h39YB5h4ge;naLaRA zdZSQw>iUA8)U2TK^lqf_({C(mj z`?jw{ZWly8-2@+LBsA&5IRzxKM_@bz1z4$35h^k=v`)RL=i;Vo5yoZCQ+#4FGM%xH z${#--L=x0Z7&I}A7@wMItyj~@A5|~-39oTdxde7G=C~Bm{wuM>_4PuI)Q0b{)jfW!nEeXyJ+pEZ$S#@CcneZNVc~YI8WE%R zTZ;()_A$kOa3LN{P z{k@A4J)t?~c6^v9W7CQBos*nnk+f&I>2owKqykNR79cwU{@-KyQD?if33I)!R_EyR z)eC`CdC$|m*lOERn1PoW_sYt9%<{*02SF^8h^LkR-_g+6Y5l)>lA)e5YY)8-=Nz=w zH(c@{N!g{7z`(?biF5X`%&Z_t0i>Wfk~ewx?ocyke?1>oLm0>;>fLKTgFf$QQ%$bl zJ+PnRWFCefjAScQURn*>3eo|p^L%|vHd;mTU4|dosA~$BD|uXS)Gm>+U*`y1F`O5f;Nk zL_{=4mY~HiRa&yCE>z|F0(1d)ccc1xU@_q=uPVWWW;M(6SZkNmvUU2qy+)B`?#6u( z)&b2OOl1vdbhX2s=9~SbLWn9WH~Lc_l}~QL4KlO;Bt8$u_Ddoo`2hGqEgJFQ(T+{4 zindzm+p$?$**<+@9&`7d5^yVo1o?FSeI!ANegj3q?BQ~V&`I~aT9FysI0l1`N8*fZ zZ0XuNoSQu`G6l{3hlfl8*ISkJnNj_#s=% zy-B{l+;-*Yj6w*0s2Mv5gyde$NH3ibFmRvDBQgqEdHSKMYixt40O}tw!t)*Y-G<5V z0^^hIC<*EHU6`NTc^uQRPkcbCd1&?>H)7wD*zSOBVLo zlfUd#3N?XX6)6J&6%4Ev_ft=O^u|9cwGHP6NJ~js^O1Q!iTrRtUPtChtHw-}{puMW zvbYIcHrHdE`Ypo?C%W(j3#0m}O)EYOOa*40E0hOeL4kn@f-1fGC^2bvS->%PY#sKJ zanYuFclXi6uMP%z!rnwq=>laMUte)Ov-JQ7VG}jqT38!yfq3%kDKm=ez2_2u>G@-C z_=;17FMxYe(rYH`LK2cy(7DCPv_5_uqN#+8iK)=qQG|v?mhlyqSZ%G3?Q)NvKtNt; zsQ{zNo|1y_UrL;jCMs%b)w)f$3Y0gDo?*QWX=~Q*fY`9{@oYFd?UyxAR~FqKdtN>7 zX%xGU)edBBvYTXwx(5Bx5Qqv?9Q+Iz0qp;S=%Y$7iCz`QDHL${N(oanJ}1h@kQEH0 zULBhnZQL=UkhXpWvFK0nW3e-Ju9aZVnd&$b*M&l~)srT?u{zjdPKC|$`?dPnFgPnL z+VEe3DC*uqVB7DOfa^@<{M7A_cV)BjkBa<1qVS1=nlE?Qlq-3)3r5=@!HW>KL5m^_ zTzo={O3jbg9FX+s&kuM)ASOAHx|;XtF32&gZg01@aPXbjINMxml^Ys-aXB|LFx z1dWV*6mJKAtUp`Nc)H&N6y@K)XF$_6{p=YjbPuibR)7tLn^9podpaLLvT{5L z76jl9-F2Z;%g@5%etBk}uhQVRZ~_z0q2cLc`_bJ6Kae)FFbPC~Z8i8*y1S@q&!|9t z99pLPdA(h?W@;&y^Y-qUlD^(|PR+Y_Phb1lZlxV*Vg;((T@ zWLI68*-J)f`WVULWA<-LDe{F=2)m5zA4&u5Qkjtup8P~xqo@U#l&zu-S$H4b6fNE|2?uFPQ8f{%(_vGgc!F zYwzjl|5>P22ayrv5hG^hcIcMMgi<%xAolS1K(tIDhn83O(Dy^8a&3I+XeI>mMuo_5!IJLw8(+(ZxIM?U8F9v_!UX6hEN) z^!iM#;5GE4!`rOYniiFl!o!w$;vOEd!KE$}W22CGZbJ6;9VLEHt3KF{*K8zFY~!P~ zcNxA)mEVptS~L?C^=s2V6beJj1jr`2H?FYoPE6p@_H3o2Lsr?+63-`D4wwsNf(L@C31FLyRnGFS2R^dXe7FX#z44Fl2MLuNaOoJdU@$64^u z3^~%n!~6793fSLxZErjp-q>Ei7cIU6;Ae4euH#5P4N-_Bb(Hq(pC#7lE;qd931lgS z1-`=9OpwuOB5+9Uix(f_s%8TNlBPM)0y=zC&jzU?OVZN2l&J8r;^;%R<7vSfukq4~ zS->TzYeev;d!sHpF&4`8F$v{Llowea<0a*Qjt1>BLqj(dU!?!(WB(olS&~&_MDRaO z%UZGUt`QYY&7N=ndUF2fpUAB{5uxq9`QJrtP&yI+m;E>urtGkAWTz1OXC%01?WTj^ z{+)kZGH=QbvvN?d=iCNs!<#QSqiI|E4UfGX=6`&F;rd;)6FE$vKHPl8fpl=k0&p@o zSRiX0(#BEWlLde5F)n+;9zKBpUlLJu)jRXxYaX@~A~8?(Zxc~Io_pY+`8Jp@U3({?PNN>JLcSG0#h~T_*UG9p`|^RYseg?U5k)KjrZwpTAH)5;;$mp#9>7pv&H@Y zU%c~uL>rG%TU23FWIY7`JE&yiBTuH@e+pW=zBVYhCgX9|HD(OPW00d)*L(+DMjCbZHJ;g$W4i!sj7IVqwVo^Y$Io4 z>F>B0=eLWkdNP;6eJ?lAPQ5g|2yDqTwHq})HbVU1(srE+v z_anByn8gm!&)%$=Rcw@&L6dK)J?ZK9PWzI{ENyDLoDY*zN>iq0!XcEs^4&l3*MndE z8ab?BW=NF}uw`xLC&JZi{OwJQy0ANK!_V+PrKMA)5MaI$O)t~z>)x{swf026iHQlI zc_Wbe*J$v6hOa{q`-~J{gXoLl*P~_}iCdQNuu-l&fiU#*a?{5D5vKm1>FRxJ%T`z8 z#$`c|wRKQ$Zk6+0o8XT!T}%-nYD@Ec;R}3y9U}I14{$;*FmE1Q9C3Lx;eU%%|2t$o zqK@T^ZE`Egqaoe%Cg`S5taHslILp@aDO`+(AG2lq*RIRxspmJj>d^-ZH(&B!fA$Gd ztuVMc^x)e=p8G|}g+y!afS=Dp&-2SWx2Yg&7(n7c6CNF)sM*Qi+28LE{%FFJJUL16N_N`v zul&(RlJc@Z;uHw`R&kV5d#RlkA=%m~Lw+wg#f=XfM@-x%r`&X|x*H}zZR6>A-QF(v zA20YnUcGNCFeNLir7u13qs(+C@V}pdVfme`EGb@_Qf5+e^6)?yWl^9?4o*%7k8B_#LP4QH^ZBAv+KMy$!U;>1-{t2&~%K--svP!0S`X~4=88Kx-+oK~%@zKyH_)nKU1)A7b3Qn^2AM4Qv%=V_V zik|cwJE!^F6Fru4tSkp>1NxZTP0RJ?IlC~&?Uz>kAe)VW0|~GQXrywuNreFUG(v2tQvl#lpVFb=MecvXxU~t!iBhcI;1+XcY zvLb*TwFlS2Mz*WkR&AJAbC|( zG&njAZ$pHepZ-(1o<(m&OL#3n)Nqg>eik2JpCb`^4R!UTHhmatzoAEpmZ1gV9D**F zcC|w*15mmc8W#kdAZR z%(ri9R8$6sF4M7(+UKPy7ys)=D0wG1MP~*qLl84365@pUPk6rwC;nl$vFch3Fw$b8#p{JoJ3DU z!65_&i>GPA+Z>pBKR!GJk0}ITC+82ZA%JD!SbG@e*v26#?=nJTR)k2Y%OMkj({5Yn zAB(qk2cK$dYk^9%jBv7?{A0Rimfq__ax$m&$8UcRJh&mu9(0&3l+uiZ^_NE$pSgaR z)F#Eo-bMgoPX7;e1&ee^)3p*L)Zm0!j}Zuz(e~iipv7<#BkzBrIG72}TGu5X0W3ji z)Ue$0nD?8FIX^sg^Ye3sd2Sb(*Ys#{4T*zF%OA6GE$o_nJxA`%LjRjj{$kuHT;4zB zA}NRX2boAzPZ-02`78oB_SyMn2GK%Sh^{2rS7H~+xz!>-$I z+dXgw>CvOfE8V-9w;(hwtpmtAwsz2i^?)R-ePI`Qc4o0_aG`yWkSe~Lp9}{9+))v# z9C{7eiTTL>0FDNa{!Kpn@X|_u`tkAI1TZL3UltM|_c+mulCj(UolW6U)fF>uH9lE! zS0-B#@{YUXgleX#h@=;njrW~k(Otq#^flf`QxumM5xiRT z*dFqinorndMqYKp5fA-w>zduvHxpXZa)F4B7UQzmAFVLpYn3FyV%0W>m$zLBSCD;` zCg>Qx6Y*3@`c>b10f)`uEa_`x1X3PD77$r8g@Hr>l$C950btIp;nQTb`i92Tm>M=X6qv&HCZ%h>dHs=-pgTQtJh2q{`&P}6Js^;O&VmZ zu&T_S9jYnkhqdXupUk6LTPww}xc=EFYS2^mR?eSK5YgNdoBO(1s-X3X6yJFNI_)RkI+MMb?Va*@OG{|5XMW5_TLu0)2Me#>>dT~#G(zhC9kwcHODUpj-gKWo|CpD@NmlUadu)F*DNljdONK z>>5oLxlt{%LX@HRk)p48AgrYE8Uqe0u%j@pnB3pn8!PM$4GT*Z7JPSPF7O`7)|ja;sN@Nl2q-?8KomLYivsh0pvnig>4TP1==x%t+|v#Hv&yMs zrwNyKoh(BH0CWn>L;$K)R8~4VY8dw z6=X>0Cz4Z#_y7fwQ`#-d(g_98OK>sJRTcHo$SU2F)0;p4wATFH{w>_a8g&>>Z~rRa z2l}Z+<@x4B!(EUdHCT}B=9rnSIwqu~ND4hJahiI68?!U(wPo)+iB7Tq=Hv7}sc~+hRKLt$(@?GESZMUVq@xRf z!7>8aBxH1tc9S`1U}HJWxb3qPje&msyQvb6lp=l1v(IuM^_Xe6&H~p+_wy^6T9Q|U zT(7gUJD77S4n(wCk)nFY2V)k5C)uN2|5Tw13&WdAh#O}${(r4C`|@_1H*dAdh@{JZ@mSi4MF zID&tgDszQ;&8%zD&L5>UP~Sh74ZrmS`~V0Pge*7`wVjP@pFaHDLc29-KBP`1%(CRK8{k9s9iXs5E zHK36G_N`Yd5X<2k5MnX4y7lJ|xrn3f&gn%UTFLN)1cvWF*83#~9bxd)pR2;c4VoUR zzw5YA<4&=EJPl{D7*s1Ni2MnK{%dBUsfGUFa{jm3`DL(gq|g7SKK3bmQap=wP>~>g z7_If9z}45fh4{Z~qyKAT{l7o+|H2h$jj~+~t=kVXJ?mRIsbu+ZHTP>s2k`|CGn(=z zzaC6SjEdL<;?9X5$o{R#xa`p>uEsWbxNg5$&KFD_IO%IrlIi8*rsSSDB=Vy%K8S0; zF|zAKO!Z_WBMkoVg{7fl;JImoku~P9-{aQfjT%EY(aTE`ik-#S?d0Qo4E%guP0w)T zZLFewV#rb!=V(#?{Zn7VVp7n~kP!0kz|1hRSe`lxPdugXesV95sHlRd?|&aG9xn}& zkB^R<1D{{t7tajrL+h|MwzbsI$e-N$$oY55HBy)Nzy4FT!{{<=gD*`l8S#V6c_s%2 z3Zx@)(5RR}vcvo4&9!zx-^K5ce8{TGjksC32nfZ2Png28MSVtPutj@K) zWaNRlN#*1VR5ma1Ot26KqNg36co+1H?pO2O zn_cdF`?{dCG#W=c6f83y5n_DT_>`CDG*+l(S9xQlM~dY~#_M{zmkR=aOipSIFJ^Z3 zo!Neo^O221LZW(B{Gc>U!wzs{tn#V@-wxt|M96`Bo->eYjy<%IY4u2 zZJiyO;CQKa8V|kH@H9tEG9+$E9v)sNrg=!dfiJL|t>;}0AKyA^Z%6SD>g$>idlQ&X zRp?(u^4sj+e)CH`B7gVvqH;#ym4@qI%tRgSKk6@kl7;4jsTimxA>Zl*yvCTjad2?( z#lNXOk34RJ3+H9`lVHzfs5}Y8R>G|D~i90cgfr!`p{2Nodk7p3E)OvHVnq2f~hp1p_;2 zkW35>bK(=kKs5UrmNj?lD4vRhCicJmMq}8z94L&PGMN+R^^ifM3?@cSTxWOl2RFeV zbO6kaAVvzE3KfTp4*~~ZI12g{E{Kp`=vZ@%TA0V2)oa1E8|p~&aK{SnazSJ<~K0?EF{uY zQu6MwBCP%qK~2RUN%pS~X3A0&ng1Q5H*b>V3Vb6$3V3udHBoKLa2aVe^>x}p=Ol_T zHd&L^QAbBdS0b?Gu@=xP96-Y7i-oI!bWLOEHuV(kPSD3SN93OnBnB*93kw`7aF~Xg z_|8QdIE6XYX$wm+hRVvz=dfLp8FD1PX37$L-~Gh;J|inqn^8s;7Gb>iZ;qFmD8c{y zr27&p(saeUnwN}14x7Z-j=RF-e_|9^Z8Qh8#RtphK8JS@yh@^AO|qsDO1nOvWPh5a zm^FBl)Ki{RRL^mC>D}SmoCl5k;l>!7kT{etAh2~ec$m_cIOoo1S4`NHL8AU?kUEUW z^qWkU6bZ|aNz~Jj1B^-;2^&iO$P^uE8>oc3?8+*R%vKx2`ys5U!D8|#ATEyROePQ< z*%CuzWwSXs5u4_AoxqNmD1a(1J!ZmPL1`N_42eeqP4P_6osY&|w zuVh&=`}GAu)8|3fFxy}nGqmO47xC%8Tl_bVLpe98N=)}eDAs5gY43Fw zXuu))*sNUOtdn}y{Y|y!wU|_!p1&R-WMGg0r5!On;d9L7KF%Km%9H^upnC<&p&7th z`R{*Gduwjq^EY|;==@T@WD(d^K-4@K%}z*9=S_Bn>|7p8`P?!J>4H8(HD}9h-u{OM z|Grpm*3JrD99h`Y4J*F0^Yb;zV!0gUa`m>-z1xpe36UCRubWWc(BZE^j|!wcV6y`g zVPCu;@M+d#u)C?AAhwX=O6~6Twj|#|%BHkPXs_2lF*3t4p{#RP!KbFKOBY!@IA9Z!{j=g_S#pD)Ix9-cj#XY|4 zS6!tx@!fx^s9?5u&o^4>^0AW<<6xosmo@wUkE2gi$A)PAOJYjOR8J4HzuszS)pX&^ z477*8jNkAJ`26ef_|MZaC0@)%ydgtK8{~yM?Fs=ckGYMchY^xc2DrR(5V^23Oc7on znUI{^O-7;QXY*Uk5O;Z}EK_vZpLpyLs5vtxHbbU z?tIy@&eoRP6~NH8Xo@a7D^cGJ&N1s83RNORnJoWngor2RdOs!M&;%WGzq?N`rLcX? z>_2}Yu>Vey{o$4D!|Y+rNFF4zLL@) zheqWa`LO@RhgWslmhZL>2M5K}$Yma0dL}&^7J9Kim{)NW(7-dHrm2~fs>Rmr144V$ zfBsjji+l_}$7UI`9UMjZ89uxcY7`S`giE+qwvm$mMHWqwu;}}=MZ@*!m01&iNy+X{ zVq2TNQS}YB0KDvxp`pDCx60XBqeQ|Pjvy8}Jqx`brJ8T+DvzZe7L+d!Vs8)9`QnLd z6FR^1(L@IX-c;x9|RPPfku&81B(Qy17^1i1}ruo<+wl zW&W)FjJf~f0hKS_9xj2@;I4I|ku%|C1;=Y9*{M zk|bke_ie$$k>JCc|Bv5r`CF0al{@g&hA#NE2mgjR@o$d*2Yc@U71g?}X`>iWksv4t zND@gRAUUH*l#JvkIZ4i0BufSXk)$9Xl5++TNs@&k=bRCW9DCy4_nf`Y-nZ`tLh=Ic)F~R6rf8if@q;${EcXLq@RF*T9A_!?nO|?~>S!uQ6r&f={N`Knr6t|{B~Ui zOGfZfn9z;r3*=!J1a3vN>{8SVzAx)_Kh9}Dx;PDS4%1PE+H|;#?N*^;PMqU;dAXDC zy<7$$%bxgNaB{A2xMKucese&)~iRPj&%XW(136G(hp=&U;&bIF{ZVp|(29~~Yh ze5;(Vv)`A!0ir=c4YZkB)T5B^%bRzi!osd7C`5r@J1Nr%%3a~0_uUIlP7eM-{EfiE zP@&5N6%F}x1~4}9@M4baKF|&iy#f0T*MujX4NVru)t=YRnoh#-s5l(AexwGXpg??d zGw>cC$cM%>^YcxCzC1KQeb40Frd8Swf<9C?y*bFXEoFq@f`L;JR2$59qk zZcv~aRb#*Etf6tdgs=e8LRwBvhdf>oA$wzY_XeKCtGevGV9N0b zA?AJEZV)J#e49Bfg*qbEX&EfOz9AAPCZ6-V*yBSkU6f+JBNfohcK0tmZw`A8r!p2z z3Unu`e2`%=mh+c7D`!qEG{!N~!tjtKjv5KY2E#zDpMZB*ZGM&#+)I7<{mZXVd1FFpOwlhI+ z^xL-+i;GU%OT}lU<+AH{h0)pFgx*BGecRRjf!AS;Jy^KfZ1@&sm% z0eXYAsi}xJMUlcOlj|wjYV6$H+;MgvAA23GkKVt4f{s5C^R`SfyASr-nC0EKZ)Pt_ zuA_YE4&R-Ni!^M1ry?Wsa+!F!-vgI`>mev_@_wFt^$Bl{5y2@%9dkd-1|J@n<&AsN zghd!0&U(Tix8{i7*|DdOA-utq_~{xs`B#L=H12p$j}4fXudaRuRI|AF9Ebur z_<(j=nD-o=kWD@laUKOe*nL+96qLXQ0%ikSiMGoK#Me0XLaPU@ zLqaF8Z~`ccn%eM>p4=Nw6MGwxQ1P%@R%8o5cZ=>Vzugip==os5*!V3A4g-wzY!#%Y zOxJVbPVJGh{5bX|Cl^9L3a$iVyxkT!jez{%%EwPm?mAkb%#()XUaz`y`}X8Q^WE^S zD>#k7;16ghxP(%*KlcWc&kEQHzrq9VffFUhp06 zoX<pF>&&rc1+ZH(na4K zt4euNYS_td)d@N*wey~*T^}BU!8i&E-}sq7bcL!vsi>KmhR#&ZtMe&eBctq02l7Zg zA6XtBT<@{_lAdJVkiK%h?)^)Yy2^F;uHN1YC_wMWyn2;_n1G1a`DpSg8M>?tA&VRG^McTGu~Yi4U=&Jd&5!Q&l~{D$IK<~tIXQZx;vxEj0Vrl4L67x06cD-<3?3VFVsHaC zFnNS}mJ$VpNU9b-^gDb(;1RW&s~$U|3n4J$L!Kvs6+_)uu{ot<;IQ_Pz;Qv?_&r0ndc2@YI= z-U1&A3!jNLJA!$Z*7%8|@_AQli!`Vzl$Gf%bOCjyLp|pqinzPGp(BdtmxWAULLA(y zpsqtSht~rG4NxpEUJT4}Jdn%i<(b|^BB4Is#2TN&?4k}0z8fAWz)56`y(MT5Cadg9 zS;}md@3mxQTL$v$pjo(Hs|)q=0f;yJeA*ci=Lv!V9dt*@ol+Wu)!-ay%>BNc;Hal0 z*L=Q0#YVl-zPfDhvC80+qu|pZcO#P}mV!)qlT^6?hmgAGGMTKnR~wFS%Y0E$%G|iu zy)efBbn$>8m(+a3XpZ*&edh5GbuY^+E3th>Nh4cG+_p}Eod?r`?S0bb&h-&P#K;Ip zrUCT%E5iCc#DK%g{D#P@u8ikkMB326a2&eY%h>(kS_*whfq~Zo1V00~?fA?C`W7)? zQ+<7caLWF{!Mny;x@yhze!~6}a`HJ0{0VRayLSUoR#5?(tOK~*E}6(mb(qCU5MzR?We%-tol~H6Vg&?_g)V z$k@%y%uPrr6>y5&)9?$yKvsj5uD^RsMgWcW5RdN zfS|OX&<3DRRP?#NNj{}Cl1@!dl3}4oh!R*^ zo1;Eo;JTpucH_%)ls%nPCuI6QfEeX68oNbO7Ku)NlJf{I@t>CS)4e!=!_gFUg_!wL zTM|F8wmLTspzWu1_O0qmK=4I99Ytz>_$|z?GJhJPOxL}*HSXHOxy#D^>>Nt32?89n zK|918*M73u>IMYOFYGmO+ZO^pYX6*g+tba zU*=9^(zky6cruaquftz#wqaOlUizeWTLy>Xa%N?b%7W~1m~WbTlF5W^&yCibx@w_9{c#CsW#Ni zj1eDZKe#jlNKZ_x5>BS$?S7=j;pDwne2^j~MSF#b309P8e0VrMjkO2PVpbboVCK1I z<;P3Gu}OF=hl27FMNIIqyrZpX^B%NhJSS#zMtemHDpyAbXmSGnXt-4*H4p-^&_3b; zHXACQE32z`bp9OfN4UP)=$C+3l@ENwhm6|=)i{qIxm8=yL5{wm_^yRT4b75qra-r< z7Q-A8Ozf&QH-iEL`1l%=51bzc2tq;c;zb{k(8T9Vv7oERM8gUq;v{EgzJ~H%zQkjr z;jvfUqg1&&L@OJ}>8r}(fmzkncSy)J)Z={wu=ze0DAREzbPo)mxO)VK@m)R;C?@sr zC{n#1V=D4N2I~SO>A+V7?Mm!RQZ%nR|6q+u_hS*1mvH3<@1V|(5L4@l*{~K09wML{ zPFi!~UcD&Pos|^_A{S6Ze4zfWlTUtkKDKkbyW4ZUs)IEmD%oWTCf zul_^NBHF7U68@0RU8v*WPxNkDqdCpyhsMTLW&y|AjP{8 zAd%h!W~AlztMBl}d9~ElljUjg=+(o*!;KY@^qLaE{%`%(JLWeWFJr94G2JUtV?Iwp zvVK>jW*Qm1u48Iy3jGB#%`RK@uP!28*jy5!4WS`D$H2#j;gAD3Ece|}1qi9JE?8Mx+ge*gj`rJ?#O7onSqaKW2w^pe ze3C!L$Ezp*5(R{5f(inBQ4q`9IFvzOtF3HgBr4zgO20K4gM?2a6QN$~4l7spE!h_mZQx$V z`NR*SuJ)!TFe{!tJN&8589JY5(9Ru6>GSPd)?mSGPjfR`!Yw1S+cD-KEymY1mD=0;&J!GU%rCMHQ<7;1ZX{ifb)6O# z?nhzLaN5f|I@*78hr7hy))q)J@S@l72{>(FT> z7++6~?>kx%1@1Nd)URoAv&F<*-h5|E#`?9EAEUYN0>+&4K+kvOtJSJ?=So<9hUWK`6Pu*@e2-Z|O_(iw=d?{HWebthkh5B)9A)HnVUM_jGl zk=oNPNDQP&Cz)8Y$)2?UH#5Go0uY09!|R2YFJFH7@~B!fCN_3E>GVkNb4nc}I{Wkl zw`cn)D?U1H)H~r6JG*OsTiRGaiy~GDQ@TpupZGMD26xlEyz|@OV3cr*cxteqFctM{ zxag)9FdLw}B2~}H7VaU7aR~GW8Cq7h3J@hV*k6#MebrN?j#@3d>X|Goq8uw>zLUY~ zl3>LV4_F&wdO6;AHs$Kon*E4J`3@F80&voin~AQBxR0@(G2RN6*f}yREuOWtU1-zZ zJFSw*fMn2sb-6&Q9JW*SlN8y(l|94ax#w<%iLsZuSfko2S z$0i-;4Ni&IuK5adANbWwNv8M2N?ePTI5|`VQ6#=E4eo36a$%Co_nBhJBU{?I4cghC z8ygP}eeNsjxkFq<^g(rg_QsGOHXo>%H?B8)sNWvCrUryxx3Mc_F*8M9RPx~lS5adavSfNk@7?%|Eh zXVoVoGG}qYEGzDX#gS=~XyO*)~x1y*OAioYGf!XTI=qT1t1^&!>Xs+lTnJovSfyA1pixYtbVJK47_f zqiE)lI7ZP-l|VERdObyiGeFVsLYXi9Qe@58H4Y96k!RG`ZW~{!&l?&dV2hK~+hWDK zke{#J-|O$p!|_{^FkVTv<>5uz3_!a9Uv7Qlju`c?Lj@sJ4s^A^$YLc37NwxrOq5Yl zN|C4KB%+TU=^ycE)?@P19R?tamX`R;V+Yn>`4CO$!tEJ*3?<>_`uf(^z+Aav2)xS# zyLY3h;XPeAzt8-h`e`~dKDzUhCtfnjh)h%n7XYUtB}L!SK~E5@nA^YYX%vrkUXCj_*C$nc4E(+aYBmqU|^^|hwfx}&&n z$NMj`t^GSQLDTvwYe-i@Uz-Jv%@~da+LBDF7;D9BG={=V@Mm!Nu z&vU{L{9|l|u|BCr1qQ#P0|b+$+NhDEVHT0m5Vyl(9o7`Uik5q8N%+q z{&ec|@DlQvDYLJ%q)LyuJJ6Nx%$=WqVSr)y4f}CrbH%}FwItWN4Tj&9MZXiI%h)_m zEQvu!e6b0_BtQ^6*q4_xxwz21v81KTRC|{Wy0eMtJ#q4 z39}>7#*U)D;8bFwc@0WqTr9I;whE2~TO4TBA>?U|xh$JukcoIG@Bu8KyuixS_4e7* zr76J*=~kdhde7!XbmA`)=g^7qbL&tcwH)0tvY%kqT@+YbTMJtKYoXDA`x(;=vc+TZh+0 zIf(67NW{!mqfjsJsAWeZGIj6W2tan~RuH6RYX9w*p|=uB;A0A2Y3=JTTI-)gL({X} zl6=iiqroEMo~Z`xqqPqJWK%EDyHZOy6R9w&Zwf?>bl4d|H_Cz5)he4X)S8F8|GD zDDk8tvKo*Qa&l|{-~H($ySFoJG46_#3~UfUQz>UUsO!O&?19uIa91+Kvnvkzk@J~w z5W&oMVf$cW0_%11-oN{9;Xi`=Z2_DtWL*w6*Dmt%Zyu3S0|_lFYX)8H#fz26dOuLD zK;jYF<)O)>&4AfZRMXW8*j&g49a*3w0Q1BG6e*yua6V zo_l}a2{Z!0Z3lWZ5Qg>f(+Ua-ii+Oos|cV8$pW`VtIYBP!sG!p^@NA5qqjgzQBkmy z(`6WckO}}3fzeU3?&L100OZyTL6eCMyo`5PB$dbBc0cVJVMiP!)lMHdJNpVuR_nFM zrEU&_7z5c^3G0EY;i7U{TC?)-tQ_xpx6@3e<*#4KVUcFbbw|s$#q)2r+jx=F%gcDT zZ{NIgM*}P<`A>t_i>xgH{8mbpXO_vRBY#$rNl>5k~Y;(b2Fo z4B%nfeWk>1nZ)Bz@({?|hx?L;6JGp~`#jkl=mYKx$j88=#C)_u5)JUNa+yks3JMxk zjfbL^xwvsb|N=qd3HzC1%S>Ib9f-3x@y77dOAnKc4OqwvP{L~NkE_) zSOz56vzp&VFBu*gCE5CjC4uobTgTg2qDpjZFs$&>ehZ8x{#xTsC?x^%&Fu7X85)=} zD{7iAU&zei+g(hr^m_FQnw3KN6KQF=z?7NL;etL;8P0pY)E`vRa@(G$djcsY@318I z15O&6LAVAQ5xE*mfHfQd1nk$x?BG-}NBNR0bZy*uIXeVnct0AN__NhYiFuvhq-j8B z9yk!4dEKFP8_~OMw$Pu%g-D5uBm1>TNWH=Ms`~Wg5Zb-L9E#>XH?)7;z{ht4RK$re z(8X@tz71iX8c5>%-7x`5f{L2;4Et;vLgAq#o#9C(ORuhO-}vmFy^|)-6<#awIkR){ zR1(@Zz+FLsHdQ#q*xVe*_ZlTHVg)|D<#k~bk_D|(d%FUtygC{g(IaC@J$}-7x5eVT zee>o`67Uy}oLoFFT(|%nHeo?@3<@kX>en~+4i3a9aG=km9L8c2jOWRY5}7B`RUCZQ z;Q=nJRAe91)0=AUf|DA&_@aS;vcTF4Vc)nB-U3DIiP>2pw8gcxscZjE+Z}Y`H5O^K zFJ9o0?D58m)?cd@L|dlLqZ@{HnX>$*OL%z0y^DadUL7v=^Y+f8Q`6veB=?C^n&T+4 z+0{Ws^#YSJNM_cJ8uW{hze~IMx@ClaZ0t33hN+c0`v}B*sC|Q_ldn9WEpeq4BV)|P z>sf<4vrFf_@3KU8#>J|IgIV$+e4pU6HcV33*}lE)%&X<~H>a0p%WdvR8|0iM^qQ={ z5YLcjLQm-@+&evV(8&{!eUqCzUTm6e-$VX$cbDI0E=Xdo=EdNT-7y#NJ@Ul5fyFrN z&d|MR3mSiB1BqHoZJDoa?^rX7ixDQpHw5l*ZifE&@dGmPKZDuX+;;|vT@1<|qeaCX zI!KWZR-p?$M1Rs#Bu}eA?OHSxw?jukR4Utlm%&$?<(>GoTXgan2K{}SldbhwxVS5e zG`XKRxJSlsQC|L=ZN8R`6O1>XWyqhY1^M_QDJ8F7yQWslH`|+`(_|crt*A3~Uv5$G zT^bIK)(7LqP)2Ui1MrQ>JD4!KStMoa zhcdVkE*6%b2YhbM+P3ICJlvxuK1%%rXp)Dq5+-&*>h9^rt6d+wAm1_L@NIaQo5?!0 z+Xw)G)257^f4AwHSi`vBJ1`OfvmSPd!53_JH*W$Wg#Bpy@GGN))BYes&0glCN8mfZ zGO`~tTx#~L8|+)a{$RVew;w+ZstuMM@uY{VdO%f%&&GcJ#1;tqFW6Q`D@*h9!#&=b z6_=E(4eyqMbq*{xLE{=9e`e|lOm!yop3%|c{dq0r>=NPPQ2rA=7LN>na!jpeV+DL0xw1FzDKSTXLk#`W@s}?s zT9pj6Q6?~#f$$cGQdC`I6c%hd}QYnPUB9 zM3=XHKXg)gH_s;C3IzYf7zUmjM(?2Q6qCG|Xzx&3tD4LH>xB%>+*;@2khoh9Vq9pV zo)<{|e_T0qDpUz!25)Q+;@4v+jwXMnb@`t^=Jfpu2A=gvea@Y# z60?SLL@|lgT-Gm&Y;7-y)O^edbppSC?WSV2Uir{rCFh$aS{G`E8J){ zem7I+mAgK&2(5Qj9;YHircH;LSYMx8LNB*w)n4o$_#=k*6Lfuyxs~3AguIqYXHKZ0 zAo{v5!yy*YYsZ^#^26MN4Ih0P{m*Mg!@}?$6Q5-K4ue9DuoDF|Z7w$z+zexjN zT>)Jn>YskYGyb};)Vnmvo^O%1l4Kw4G}M#|a||@vE8f|$E}QfrvNBcR0ekK~1i%(P zYGC|fH~z8WHM|^#BS771ZDGNHVXmnX4FJH63x7Crza2#+O<0e4sYptbN?)*796JH; z+V0^7yeP$SZSk~MNfkh?kVquxVe9Mb8+7((S}+w9j*q3Sch~Sh{B`WU-X7ObXvqH{ zrj@5tBtt%gSg$PiQA}{PQ2tVC1iwVlx9Fi`He!4!goc)&$}U4en?i0Ac?A@ zxkfDd$Ex&pg>O% z#PVQ70Mup)%Dd!nX-Lwt>d0?dSXh9L8uE?9uL4Xr0x+)M!G*O6C1uTUapwK-xA$*} z8+N#IGh#8J>pF2h0MD0lb^7`EmlS?~yUiy=5($MjG&BH%prV3@)8oXYc3g`-CX|Si z3tIVsjf)K)6d;4-bLC)SW#wdN2POFeRJ}g@?B#5tbaP7@uRT>`ip@%*HN{W!N5{ap z?dt>-_{J?0p>QJ>Ymnhz#x!VZ)XC_rpPfbT$>iT$Ln#AtJcB z?|SS(6ZM_^M_(T$xy$ZO)kttjSsA#@aEP=+d=E)%&qp%-Jnm7*T9$s*7prqCAZ3E9U*@EC2p?ke&DD71{@QWY{fl3%A26PSK`PqeIrleDvU6 zWQ%wGWPbkJrWCMEOOvB19nLmZW!wuu(#9qv+>|A#6_<^t{g)m7^|Bo<;qhtjv{e+# z)z_e7YQ*zdt&pKZzOrqiMab}~R4RnlTU{lqjy%Kxf@i^ud=`SsVr0)rJc+K=dhA#C z@Xz%Ro1Px(BzuIRv9X7K7;Xr}wo0{Kwu8~aL|a>s|JyYEVS7?68H5u34Fv@T^*wM$ z5*LzXkwiLk(?%5wn=>;qT26fNJivNYvaw+SMheU8SoMrYCljXgWG#QcIi*v~=MqCT zeR*X|QX;<8thHnoI(32r&ZikmNRLB#K`&pq%63s?epW}NZ+n>^>b0U2OV%0tN8b^d zN`&l3U|m7Xf3h8b^H4#daB!vAl+X^l-0iU6k;i^(Ask#@xYB>UyFD4|<72XU!+`)> zhuxxLCq*T3DQy=}o$@B`sM9awmNc!}JJ{Otxa_pCwD&IsQ#aC7eObrE7tWT;;P8<= za<4TeFg4BX)u4|_{=_hTgnG*9`RI}0k466Y^KhwqAx(;U!tIAZPyvNEtBG&C44 zNoFK^HHn4p_nhNGJsCbmoh6#@lcG6GG>Y_#_tNDu9IJ`v(cWK4GlmZI#x699%Po(s z!-)R*ZE!K-8STxgF$~F``14Mfrf{t~kxgppE;MzB5WpY9y;7i9+c=kU9qRQ(ty`BB7{eksp0x$NuYF~UTl zzeg&Vmvf~>TN=Z~dLXhsk!WWokIL`tp}`FoYh0n&q@>}}Tn3^st&A+-7hu;Eo;KGO zj_-AhO&hPTtaNQRRU}d_++8pw*dqJGDd{z{BGY2**zqGGv4!rkSCVtJroz2q)AruA zbzPOdp7i?-I^87?&@b25Suzs+_AOqKm53re>Ym~9`j7yb7BxrHuj8E^^4;f)Po5Ro zAJ6zdpa1{SPjSDd&9kZVzqkLt9RXxG6=yKTy!6hR0lOLL)i2Zox1K9wrFwsg`vl~; zU@uYmRP7_?SjB9XK=Ta$eCrxS+i0@r?tt9Cglm5c-Tq7NBOf=5Eh_Onji4|-l6$(3 zb`}sBk{RMxB!AkJ1ay_IqJsYT?*66U9-p^$&RkZgfpEyUExJ_!&EntwgQ{_$#7rX> z`3RmeU8HF-#P$sziEQ0(5@o&Fyg376ZmzacE zIeKT_662q@psDx*I)}>2`VWg0Y@N2%#~Vg`%g)y(S&}+;58a-w*E7!KLtsWf=3EWk z@76rTnwlX_X_@9HKYu<*vRlno%sf2IZPg#OBWv8{Ib)d#eg3?;?m>VCHWOo$5>t0D zW+X5<_d~NkFSqODQ@{S&$rhUgZ&@|ClIH;rYidrK+2MVQ zoyseh(W&2}zZT=u`c;3jz*41*zS8pV@m~MX;C7@7bXe@HkY3crN2{lf?iRLwId$BL zf4&brr@-ot_t!(k`jLtGaH5DO{|)W>FFXeOku%?TY-7pSiu?SVN=E0T;qwk`Z9}@2 z_BHOcC57wG;B#h*NYQjoJFdDcRvU)wN4p;u*sy1sp~|8Nj|x824Y(8_5#=qga9FDx zH*mF2nE!dKKw#BUa+Il3PA9vHL=mF#vQ;j~S>WHWR(a}TQ+j%*Mt^mU`|6>+YgYO0 zXjd`6sp>^R;=#q-P4t`20Rt z7?@z(c{9@0w|Zt$Ni?_#~< zDas2U{KDy(1(y8t&Oz^RvPa>lxiWpsw8z;CF<*f&f2@0CJe)$T;`0$t+-WDXh0&UY zD7@((Bp3g(iu*5_O8*mowEt!N`pT%5M9<;vrj2yTNg2jFlrA>BzT2oxZ$Q&;pFx&+gE}SO_a~B@~yx@aBi;-1V_m41b-vt%R=X@bXX4w4OJR@favO~ z|NOaLI_X4B#gQQ@GP2NYI8?LB5nBMPlhfJ_++bnobIn7ZURyobinS4eucZ5zJBPK6 z2oQxsZUrPwac}ox{0Cn2egCeN0R@`VC-OiRGG3G}wK&Z$c=YcCg@s2HRK3T?4j_*f z{I(7TAhirYWY&48Mi&hN?~5fuP$hIfSTs~M>jhg(aG7`GOWN#yq?T=b$xAj{F*NkF zXOReP6(s8hV5QnTFtE_uTjUR2;-FLZhoWRNEYLO=AAwUZkkJGMQ@X*-T}oOS%qnT( z{_=6hE1Y>$016tMdotbBFzfsEZ>uLwbzZgc@$o^y8q1dQf&TTfJqW}-azZu=Z$G_5w6(%+8FJ;2g_nEwOz7Jz0iVl`y5-8M1yluebzAx3 zv&;936bYgEm4{f`Y}HEt_Ss4BC!K1cYB;jC13TPi{^aM{S8VJ^R;6$8$=LH$<9v2%6gBLRY=g4Z#?6fBoS)+!>+&kV!?NbVCH4KgMd^RdtvL8 zdwjGzaMj2IycV?hPwyf0=NnX-$WZ6 z&&82YQc$b_YiX#srUV@x+8SaqW}|QqUVaG(^9D>>ex}8KFaWe|WzE zZwHE}P<)jTymXl)C{)_N845-~+(ej|nO>8~y^fAfJ&t_me6(lv(_&FDf!|}NFT1v{ z??ia;?@}yI&mxc{_G`+;8Pw<#dw7Jj>|v&#)JIc89$LL?hu)Ec9mKY?+eQ;y-{oYDZIBz;*N{n)(Y&f!wWltp z;z)*cK#^u5CM`LLLjx=0XkuDbq5)}8H_oZwC$Qk%HA zjhjSAoagvu>RjOEzuq}{zVQ;)AVoL+gZTd+3xWT>^XmwVT%U2(AJ^0!;#%hjIc@hJ zwU#yL53f*At^0t3^>ksX&?7W zB-{uWY+-sFeJ$o~o7W>;it~b4j5p5VdKDOrL_D{_iF}ADOCNbla_ge2$Gm9#JZC7T z@Kn2W()|B=!sjmu-2W&;^ncwGTni&~^9A7yV|A{|(z1Ank8WbiU|+fO^;&>QQP5zS z6||}<+xggDsZ~{NIsx)2E>6gH zjog}pC#~`7cU9{NcLa;*4d9)2N5{9xNpM4HRa^M-_W3R7?b!2`L#$;P*6`_zYostk@A%4 z>gl}=9P(u2k|LH&&0GspQ+}sS3t%;$q>@9g4z$KJft4dVIuVzxqmGV%U_qhQuA?th zx5wOemFWBVp+DqUTqx0l?{QDjj~{O2I!wI9x*}47g5RJA1?-1M)-+GAhJz1mBJpl- z@0){nCwFOR7Ne9(K8K%zA9=31LvEUJU0oe8XCP)2Fk_l19(e~jg)a_fl}#eZ*N7m7!{he zbe;+s8Y+Rh^Hp0F^xk)JapkbFX%-EZxbA7^JNvGT9rpmt1^6I8#Q7ahkA;-LN(Y3O zSl9_tF$u>Ns`mj909QC{?39gReSNKW64DAv{ct65-5CT3Uq1N_ywVRvTaocZeh1%l z%*PYU+^hL53DBiMkb6m0#&&C0S0`DBf`^Ch?%nFVpZ$RPq>s6O@7{h&=toDT;?M*naTbzgsg8f2${&DrLd(T-> zMN%?m%<(Q2#Y{_!Sgt<=(FwdRQi43holPXC#>RY>kU3u;R;mDVD2PM4y7FdbVy<1i zDg?$cTf3OJc&CpA<2w%W^17e}?AEPY<)hWmiV$-R?<9ZA`^%#J?xjynMl3+Tncmz) z#k9x)P8I0rxjn{c$nhB16y%Adq}9~MRhHjqop4F1ia;QVD( zgXopq*mw2xy-N;9-(g+q5)Y)q?ATO`nFmd1fd38Vce%=^Q zd{tE`0GVXFEfC&qDDywJOzuw}k9GK%+Hc2?+_gq*)jc5&}U#MsL*qzQ}H{6Dy#tTie}C>wO3I_R1n6 zq;JiAn=XII#8lyN8WVV`S65e9Sh$oD+L0!ikz2i!a&)BSTzy(>1)g<@#10eU!a_nC zH6zJuXVXpVo6|gp%ej(?RzzRMH%o#)nnnur-1)8-lX$S>F3lixfXB1}?XH}TC(XLSCsy>3_R z2$k{&B z>g(_COgbe^kZQ7W;PWVvDI4kEO*b{}G)l=Y28cB8v1Y0q0C8U=3H9fCxNXkNY)r31 zr-wdMY(s<3;^OWw0|h=EE`4Zlu+Ql+3)C9%=-b{r)w(CPsmOhNY*F+O$Gv;4+-Bd? z^MoS=xnJn!wy0LR=4~Ni{db$@vRDVO-cq_h$pGG8XDF1W;CypU$AlW@wxA=VS?ggvh*+sXmhDOiy0Zr&z>3XB&94YAv$AXVlab3 zzt65mN7wjI?{%ll9UV0d57&BIz~n9{$h8RK%vDs8&8PQbTnbCsw|`FBbL{0Zal8dJ zIqcQsL=t7l^yK6u;KZpsG^nyrwo6pAe{NNQ$K8Wl{0Z?q5C}qVYWB`^2M2an8el1H zZZa{385g@}_LF#{MiRjmAH&q*ly7c!-0B4>rIQ2lVmz!4l0#GONt%L4U8*LjkOU%b zPJ8Q>nSqx4Uk`Mg>QK#Zw@x=@n-miy{@T;Tn`gtp#aTlVa8L@TB{`XQUN4(aa#C{o zJ&#EF4F3*}eE!hq@W-Bq|5xvGZZ+>GRJ#NlF9p@3oRn<6!lr&gbE}I+X4?1dqf0kX zsjavYUcHQIz%;lm%8#}nBl0=GYcg3_LqK`z#yMF*JblNED}q(uyg#$}U*T=T`r=DI zF%*JJE4Q$yZ#>z6qEOIst3GjlyPk91)8rK_N=Xv&n$KCkBqF{1f9{(h8>ycNLzqg` z`}d^M(qz>(^j;r2^$6ZOcra*d|M2(!x!iBj6&xE-dwP^Ao(i-5g9qrXs*7x4s52;> zk1+o9tpj(ad3M~#M=V=0+B_^Gg2`vg(~*&pAk2q6 z*TUGLFlDQRxcKUlGue#*<-Uj*s`b^?R7}smd()KUepuGqCJIjbPR{I-(80~b^ds(F zVuesgxy@`;RE&WP2VD8Z#Nu{WTKbGw)aiE@x&>k-6lG){C87T7&YtbMgfNDmri7@g zYn3vOR;C-+t<6lgcT7UegaUQ*RKO+VhhA@y75~6;`xDf^>!|J8PqdK;6MFekS;B zbIzc+e)9e4h4~-L+de-0CM*O3{-fqf8S=))8CztpFaJ)qeD8?TfJ#mLXanUR50%jn zTb2#p)!Uc~h2sY~7I1n1%t9xBfsT;(;0ptMR#NXI)dP|{QPda#oq3BtfsvtzI@*(E=LkcSTnZN{pF4odyANa1nk>ZG!eJG zE5M%XC&5=6^suGFt9Et{(R3;|AS0*9%*t8}Jj(6u?|?PwkBRK)=r}rRSwDkpTP*h# zWo50*cP2c+_cf-ue?L2`>LbD)NI?mF$IslVBe1|A)`VpTM}UAp9*khfPWYsb=OiyyyF>;gT2-w! zu$5w?#TWNNa>mwcq|!kvy$44?Dv>AQ?b|XF1@M9;EK@gs{Ftm>0(lAeNd(7;gy`sT zaF&KVX22^}+^i4JuU|B!R(?`PaJ5e+&-d)1YL7YsO#Vrg6P(2Et*xz}`&AJUKVapM zfBJ|g5wXNG<=Z(wZsSuwiHke4KC+MC4l6Y7iJ@!lLyX>DCnNO+Smf?b@?Xc{KZfSZ z!>M!Ww{Ov-6Q4rbR5Gb7p#5fm;Me)u)@m4sa0R=JF;k&wJ^fU z!J;$Vh9T*ixg_h1_`Eko=x)`z^MYY(vWp-oR!}sS1W@iakY~JtX@**m+Wh+GHqqK7 zqL&|pkIq%$DTYDG`F7^WFA|8+bkW$(oRXI=9b8V!Yc(jW1{>_L;90Y;RtgoI(C4#o zr%wAl2Rg2w=MY}RMru|qUVZcm#XAh%n z6zi_eCvj{6R)x+I^(%SmD_47;#hB|GJDq5*b>x~?%%=ahmlG$&|5wLge(q^U_TJYM z3s7&vf~?fSaA*~Bm}Acw%YugVHd`V?m$pfunl$azU+A(sR^h^qC)5pwz?K|AB$u`E z`CRwRX`{?p+<7?nS>1`CA&}y5m~C+bwV-2sth>8= zW=1b%189fy5Vt?Z;&J>bRjv-EyrX9}BMOU_+yb@G?teqCOwpjSc|GIAv!;uHuRN!Na$dq=e*2EusmyqCw zoGSzaS7F&VogR+v?!+WjzBjK*uaC4qQNt>|=Qdoy- zjp2~ zzRc=0ZiRCCT$I$?Tb0e^&n>hD*aXrMz0I$;JGIp^B3J z;nAE1uHF!vzA=pa^lBZ;DUO^AyHLQ$xc`PLrl3a0+3o(WuF4_ffX-1gXsjH8`CB*moJv%!Q zGq%HL(hoXYTc_91fU&Irb`}1&=+*aTB3r*r>1A#oh2Kre^Mj%fdcAVC;@Wh#GF@~> zhg2vP&kOtQB?L_T?Qt?~=i-(I)pc7NdOGrZJg1F+^Xvh81J5#e zaF>IE0{8WcHI%^1d5-_i7vhf%V4m&O$y4}B8-Fbrue9#DUj7HLn=0t_e^^s6>^A_K zm^a_69+5s0+}{@myc#B3T)WW=NS$*#C_)n~xoTlr*=Ljfk#hb?cQKaH(K+P&>COFU zxo3u%h}t~m4s2O!TqgV=&0Ka@vZH|`8EO_rM*P^c$iw4)yNV_)7qdgSLX$Wzq>t3E z;eU|%1l~S<$dPk@XS;G{OoAk}vjz!JL6vK(C+eXY+wfwKVNhcuumi2|Qj9IujV#tl z$y1pC3Rj-3b{}LU{zgFNf@1GOe1d>xJriErPr{jqcrJwN%7B&M^!KRyQfuc*1=D+Y z4_CfBA(=vnd55|zUvXn72{rVMsHZB^xlae*c~LJyCk0nk#SD42;jpKv5N32{=9(8O z(~aC2|5)a@-6Nelv0(tLX}C=H_7P9z{C=5eUac1w3%4G>yQ?dhtVhg{c!#I*P`!4| z!h}noh3(+@M1**MKae43`;ZFy&Igr@R8=J~{O%rcl4r;ttW|n&Ip+20F=5L(AB=qc zI{yN$)ZvlPA`%%{&lm&sPwLk1?A|Ww1Gh1F=H8bG?SURYF_zqX}+U(2blTOWSko@fi&|*PC zOzb`tpasl~l-%6V!{07?%?=6P-rr=XZCBqh%n|)&3$$PBU_HQ)-jmS}o?F{oqtnAB z3i#;0@Hb;KS1uLyYn{4z)E4K^SGer`D@RjPz2pSQLIljL=wCcy3LmATwSrlWSqDUFq7QJ}>{CQuN zicUVqB~FGa8M>HOhZV<2?)Na$$x!!pS?U8Kysj!dRDAF!gUZ zRuvT$-MsI9Jn46N!0t!5UnRwjE7-g{Zx!jHiTKB`I4NW4Sm!V+%`|FwzRn|sk}3YO z{M;vLuAA~CnVj;3Iw zN~BoSxPwAMwaW{8r&saOnSm@rOQ~tTxx(rj-URhkF|L+64R7~B#K(P(mT1$vt8VBu0 z)mT7fHQ8oVA|FJ2@eNn7W7~P7qPPbeLo~H^JGeb~zz6+sU8ylEjQ+s`7<)KZef0I? z;4;xBm34>D^<&!H^N+eXW9Ram?KS}N);3lc5n%_e*nlL&M=vQVQdAI9lD&`nS~8A} z@91ZzfAjQ4Z!Zy0)Ym6n{1tQPl#4$z!ZH&Jt+&4)6iyxnRb~cn)@E8PX26Te+1VL# z%nT_hyLpZTK7fdz#$6hI5I~`CV)A2_U>4(7nqWUCtp51!n~xtwA;sJeQsIs@Hn7r@ zGk)E=jc9A-6a)))i<6Bx$kB?Y%H{UA<``9Sl7~~1k=3o*pR(%$zyvxo5)uP`9U<%5 zi)UAe`1RYIzg$*eX0s@L8BcP-`lnP!=+6WqSnK|_Bai9-GD!YUCocXs{ zte&*}ru-{ui~etfow>R>y3q~a_&3csT3JmLktWV)p7%_&TATRZIwn4Eetb_Smf*Bm zlzH4R!D@FOdTWwg=MGmM{3&zt=dk<#)t?}%b8-0b@%z{F`z*)Jef=XEafWTj?e`do9O5j@9E+4G?9kT|oV z;&ZCdZnub`^7Q2Ag3Vd+m@S|v=>;E()5p~Q6xc_0@>9LmaX+CXzk2;TtZBuhqzVSJ z^7D_t+Twn0FL((QN{?h895@KcZaMM@egt!L=Nw{=pB1gMI?Mk$jsJ0G-=S_qXu4z@ zw7)~F*Pbf%y*C?vnvzT|E?#QN;sQv>I%Jh?sxC~JkMJ9y2IVQuE!a^=CL|Z%k4OlkaqoRYikQU^3AiTkp^m!6HS^G(x=YolgY>pgLpdS&!?pWU;H zrasbX_|1UTEtsZ|v#+J2L!q78xaE4e+_w#mvnE*o#}632bmhw+$Q)nvRY_N;NfQD# zA|ppfTRz2BgoS_~E}V~fMMWbfWR_MC$CIM1ek#=EAX#NMJ5y1S7GN)xFPxEFUsF`1 z^1>0Cc^pbFV|Vv6s4SS{H^BcIy6!E{D{V6~Gt=dp(b2&lU5p`bZf~wr_=!R6>gMK_ zn0RY>x}$p&7vj2G%EZAzfbuUjZZQ3cvT`_*{>#l#)8^w*s>4J6ip}W~fX>3RyB$s| zWJo9|j&|{$oSQhmeXFIf&jFwF;|o*iAD|ge{V%7({|uY_W~ZCogEe4ojZ3R`>?R4rcd(deD!@^-Vbm97Q=-+OShGu$s8@5 z1n{)~PTJi*XNbG>(u-Ib!@}ySnjnxoTF)nDW_Fd5eAlQ``bQouG&vwp3hmUe)w`y*+i_mz@m=Y>k(PIP`GFi?e^x{}21#A+aD1 zQ+Oxq6E8){jt+e`jjw(s(QQL`XBoD$E#8YiBEUvM4A*vsr?Zo-AMA}HB48n|2(SwX zFo}p54QDe>OkCyIN-piYZ)`?=?Nb75S*o-2bmsDmzDus*vGz!(+~A3qd+AWGBQNi3p6F$Ne2T-vfBTTeP}5-_MtffSMl9OrHE%s5 z7~(=hK1eSnuyuk@CPecHXruh^z`VI0ZP)6d=yH4HRf^6ImHg3L?~ymzgZ!J$H4?Bm z2&G&lA(9Rh-jYWnFI)S1JQ^x1f0>bk4t2y`TUPd~Gq$kzYcLbX!p0^dB&@1h`>ZdB zaZkB-89hD9G=FHk(j2%{i&4Sh3twbx^YV6XUsde_P4tgZIhZd9Q7A-6b2B=kWaZ~9 zvM&J#tO&IH-WNywQ6>oslYro9p0}iVCgpfgMy`dS!0b)*pCR*drGq@%LzjG+8bo z`s>z0=OFZUNr|_&Z` z2VmW*HAu`E1SS0>g!~}md7tM-EUpb@bwK~bDc03v!WGr^Fp;Ibz1_&j2*{qFW9sQ& zCVUmXD1D_|-e<73wt0v%eaCD=n#$9A3t@-+exg3!2|=Vtl@e$ElE#H-|WgH|#JI+mHqk z1+$1x7PHUo^vTL(qlh~$;^{bV3$xs_~vr%c(yitO8*?FB`4=kU*=C{EUklAgIf*|2?6Z^ZcBWo&b{9M?WbvHdM07P z>H4_JuU|O@J&e7s+I!+Q-8u`3F3ub*U0p}7yv86>7Zm(~cV}Tttx`xB>ZQzn%YX)> zj@fq|#E@Cptmk>QHw>EDANs^QQ|BkW@h?I5Sn|iRs7N~J7Xa2Pi8lR#oksh`>KvwA z<4_!Ljxm<%UWz1Nwdj?Vm6XWKOSyP^3$f#$AFTBENG?EjkSv3*`}sj4gY1tVKhi}! z5_(Mf%dGWTiEvPnfBjNcCdBG+zq#s4P9{CokQBm2KFG-?!|9))uk*IGTIPe1N5u7$yM_F_}6mN$+@czdYSTP3w zyDa_~J=5dFs( zsTD8ZRfJ&dpa;}xYggaTwJa&I`NN!Dw-|}R^a7K*QAHEEHyf=E&m<-d1qrd@sW9xaE6KXWYGe?9TM7q2GpZ+2>>ZK!^me$0Yxt}5) z1R|p#mFMT*b!j4gk3&_OpWkONR4!Vmc9NB5z{$-GLz+h%95N4lksyQ@EVM2z=n57I zkU}MS9zV9Vvy*v%4DP>VWE-@~#2bDQFLHr&hW++RrUJauz#yoqx;iVe^)4nB*7S6K zLi`i)2goFRKmDFjhjtqM-bWl78_QQ>0z{%+kA@Bn9|kO4sLj5XkhS+ z7RxcH+ZqoI#j&2^*qaqBNGE{Xed3C^@gM5eGaLvNe33g+%8s{z@B&-O(J%H;{gEII z%`BymGbgLH=n20?EJlM9?%e(vSX%?2^m`v&M>h=_>FN<7`o`Hqz_RPg$~YSC1O;uA zbN@h}e#;N;$f>Cm!zEGSSrS+ftdX6U_g)C~tNlDw`p=w;A@Z6C5AQDgIW}3u%I+?x zc)w`OZbI5I#x$~gs(=Gz5v+~sqjM#Txb0BL%gg_Mj0WEi{>SR-yB=RF3_C73TI^+N zXAo&)1mJIc$pC=s{JdY%&4)9A9qZuWzzZCfUcO}6AV;wpE8Rai5wAt{`$;4(kM(=M z{F}kh6Ok#PoB^*I9Slo=D&uTr4?H)~zt(&W|LOU%w;CAYgK)+XC?X`ZaN>l*U7q*D zjv+u{`}eCM`1Gll=>-ucahbl*)wNMpe*AVz|1NVp86ja(eEc6US-w!iBXBxik>8<; zv-&7ThaVV#;cswI5I2eQ-Qas&Q5kASh~78ngv7+eNQi@r_ZLhDwYU=DC?oRewncMg`DmKFI6y^8XF!KbU>oCB#Wr=xmE{q z=la%`R-@}5U;wNRX8al%!N+r;V`73`AWl3B?B5b)>E6G$h2eblSI*ih9`kbPwGFP0 z4jk|;hWfHUncMRSNETU~kN0028fJ;(8hp{Izgp_)zJo!8`9KK9_^iwuM*8|xZ>5m! zU0fWTE{Wq`0LE4C%0^V5GboyoU0UiN^GXy(vLz+=@5jGPL>0rWGU^Nib0tX2fF*44 ztLXs+1vOf4Utd)CV)wEm28I(3P89Op_WSZQI5=+RtD*RzJPZt|PZ+IXBLax7ri$VZ zScOt$XsD@u&Q4|3M$NEVAIS{H>0{Rk2@q_iIM~~RYgymeXn1?fOoYd85;8hfUkM0= zmiA=bR0?o4BpdxBIs-z%(kZltFRhbH#P?}YLjze4-YjYy{{5uV-v{IjRfAs$;mN(>*;V>YCPS}F zb@1-HtRD_CMv)rR#~cN{w}tuN+ARA9J|QJS(A{VAh)V7V|LvFliluvgp`qnb@HVdl zfqKT~&6~e1-o;SM!CJSlxQ8MJmk(J?{?y&Qmd^I}UvqO!!Q;w2zZ+nbHp75yWF`T3 zNMiJdp4M&GOg?4h0sa9S5%nspu;}Qdl$2U{Qz0Ela`2wEgoH7ekEt=Uv9pU2Y2c!; zX)Ztp4!G`v{NiV+u5fu~CL|hoo}$C&gu5>;E>4XG6|{wwm6Mf~wu8fSw^NpLPD$F~ zzCP7`yiXz?6%Z1Ej|!FR%Flg??w=nYsk-i5`45(X6(2co@4{T0JufdAir7PGl8JGw z??020lQqF$S?T*D)jaFjmg=I7bLhC6n!T-UZ0rN~Wke`jO<#rt*k13ftTZ^SVmtR( zJs_%qy7tMVN6*z0N%0(%UcSVzLHU<6+8vXpprEjaiqfCH&2RhzcqlHNahDE|_Zkr) z&qL-i^7;9!S0!AFbiz7NOkuhYcB23|z$CS^lOA?Kpdlgoe=RJmudDl9rYKGu)82jp zdlx-pzKHLQS6Ae=t!*5krrrkFxoNfDY=UhX?DX)CKo|x^b1EXM2Ip;Y*(gNK{`~pV z*&+FCv#fP)-`=@6Ik`Um&zmErZWzA({HaEV|HKPTUqea?%zp-P57sw@pYZZNVPo?i zpb!-m706RiPdp#=y&*8p?@PD?erl`B%WV2Ba)v2y3mSZ-c}}A3)mSG0=smQ&cxdmY8-0Nr+MOmX`L0sqU%c&)AMfF7fWCBG_)~)) z3M)H1Y*t?92c`}Vp|Zd4i4E1xf@fcizK@TdkIxM(;ns7rhi~0QfB*j7-q9f)Ns*k8 zz>FW-a$)(P;Vz_IUMweOfX$li^b1Ns$0dJcLmo1bUy!nObxkZNAlKc~b06)U^~o6s z6Mv=(BHNtm89<7;JcPGz7=O zVm&6ND_{Pw-g&(@g@@D>1r;^*iRaG2G7Bz>smWA}{X9j(>U~_acd)Gho4vE0eHUIC zK$qBN}7TeHUZQa)j(;P zSr?dEk|X*l^W8BInH}D|dUZ85rNhCYXrck<)b!L8Je3%E#X*j46BXHRv(I-6)i!op z1s>+;8#db06jdD|qKM&#nn2MvKOa1#XGqQ^=``Pd2b>;_6|h-%|GBNC2=~3d#_|-rd5ogSPq4K?Y%!08aDw^ST zS!8`PfglFX=zs=&@vZZpXzl@)MLM9&{&+~t_-&f7q@`K;tG zN!!!g3**~=t0nW(hYFY)tZi%k(|rzuU68BYAmdyu9wOA2QSPoqhU5mY4T%m?*GgbQD-Q%R|9_)cA!1MEIe zrFwGVgkA>LYtT|3wREd(eDkJ}po@QTc|ivvG#59w+FEninhRQPmhlC%|Jv@x<4=yUdUyREZN?PgNlVpGSU zAyG`b*yXhveXaKG-Y-7BT?2u?s;iKPv$nG*g8$uQU$e*8cN)(ipCH9zv ze1F$N2rn(V8EvjofrhA-mc&rhHN1Q~o10JuHD5={t>nW@p*EV_+|nK zHB@8fW&I-BmjTY~abdMNd3mp)u!k$+&~K4k#t1)h7HE3G9RCRCQ_V^A#f2E^J6XDw z)k9n{gXP})h=@16bor&F>5{ad_2=+{I}vXBeX-5o1U`VbH~v<|-3R5TJe|(;-b(7w zOi4?#;)lLt%J>g%gMg3_+4O9gH_dZ~wU29wE3lM0jT|g3p|!ib)os5=%1Y8-Q!_I?ZEcDCUtl8( zT%Y1%!=RzIHp(aD)_HjhYcjIRWGFt~O7ik0{{C&5tKQ+~7YfE)q)-K6-5ZBix9D`( zUF?5usQyQ9HKXBf(2XlEL61p#P(z#~O9za#BKPU}Nq0NQKYaD-&wDKWhhnxnJE~>6 z;m~mcg}=#_&Fo;QN4BOmVKjQo>N2denTJeXJ4J!6WuFiz&A@}|GeI4`mdV1*q+pi6%Qz!N% zvg;O=mMQ>H6c|V&8);H$FTkJ3x=$sDug3)(Dp2{m_I~VPwuz}qh2yQoU73v#ecAE6 z*)yo6<=01v_cJKvb-~aGY;eUWgI)?~{E$g2K*9d_vBj2#HXvhQERi$JXLI2?R+=&7 zx{HvZ|4K`%!FE~;3rl|K!3zkk0>eq=&+1RgYio@w#|hE@baWs;f3E)hpzX`IZw5?` zC(z+Q=$s;+jjS0b3G-nV>=|FShByAOz>9PrKs$pA4RP^>clSpg(}3FB5;mal+2_&@WD zAzI=P6zl}^e7KC@4w^qdIeTbnXdKQD=0KgnQdiXpH~nkagWew|T)sEwU=jW2RC0ZD z^Y);xR5?f5uuDU;t?L8j6D_(8$=EbP;%G|~ldV<$a9O(8o+XY}9db%aRIwqrSoKmJ z$vmdOHb@EV{@T?!t<&UQ4oZM*NpfKkFHw~QFcTmpZENL44Qw%J`(}q#IPb5M9{+~~ z_E{Kr(wqyzZGhMZh?0Q^vRO8^J$Xv5(}Eg>gY|$(oSNvAjD&=GVK4;mA?%KToHLbPf=t@12&bl>u1 z?XCgmT6wuT0e)Ru+slsj_DQf80RW~0r&O~ttRuA1l}(y9CRL) zFQ%cP0fTt1Cd2y#XPL*!^q<7hd{w93aebvix<7HFeB{(ZepLH z>z1sZ-c6_b0_+ZpaHjqc20#*y^3NZ0RlvEQeUPwIx`j+1XZ7aTbv9Nz({PSZ(TW00BwS+`M zSVoUYBy_3YL+1ZJW+nP5_jhYQDCoK~=YFj6VU5kCw^vilJSb5oT5l0h#2~d0S_7F# z$?u)IkbC(TUNse!xxJ=>f^cZ385JnP;dy&sj>5WLU0uaM2{7)8w40%5pPv%&I6xu7 z2)=@kWYh8f80>v(XHS40GSv|OnF(d2%4YJE+w9D-KDDlHGa(@do5F9_|0P4*_STk6 zRE^|}KRFb|<^$H)jFHl+lU3^}A3l5lL*IHGfXbdKDk}1MilF@SJBJ)wxVbF@NB>dS zA>0toX|OKVZr?r0;M3LhhR`oUbhRrgWD_pZsIKBAI!sGAR(Z&(%gdDoRUr_5ZGAmd zGR^K@g$i_y;hlC-DcMR)@M=O@I&%ygwAm68x=dSV#)`gBp~GedP^nsluq+51dOiXPWo%b=Uqr9^rYuZfU%wR;Kh?((9O6(&;fF4{OydNDSbY8X z9Vsa4Y*&AAR|XegUS{{ zO3I>eP+`LIW-g(E>e6fO+fAJSHa>fZ*nU4(u1bBc6r7IW;yy8vcOdavH3#}*eqP>3 zGDE{}c%VCY{~mR@QNV@y;9$8AUIYNsAT7*vgn6Kt1ze(v(V}G~LnXuH@g^|J#XnuEmu@yKzdD{1Yb3#97t)pUy80Z)s2KVK z4HWKBWlvh`W49dO5EM%gp-#ZTQ3kT#A3sDh zL_BB(xqYtOeSKTszZZtCESB5Hhv4@{IW*pftAk+c|K|_?_hF8K@1ZfTtu{M?)3Wz# z-~!(V2fMhs!sHC%`ECjFe|5flhf-TxJKgYV^Jefiak;AU(9p^0&`%Y)v(g!!gUCbJUPvvp76G?Y=G11;bSsM*mogd zQM&`7yT4Y)SK%txc$W!jx~j zmtp5f)NMNJt2`C?$FYk~Z92O;&j@x6b`r&s%XoVIyD(p6Wb>u#)?dw6ujp6wqd$MP z0KEk?r34ZAq2VcDuIkYfiz8{g_FPd>mH8Fez-K>33XQn-mHd7SupuyZ;2Z!&2$XB4 zJfFT_F?CPX?=CNyWC-l%^q3r+oM={C<^~5(8E^tRE-52(pU4)^&TBg7b#YuAaRy9> zii@>lKQ}cUgN0pJq<kzC2;rk1B1+dv&jaROMqoNhmj%DB%pw)q+>ps?s=ga8Kzr!SQr`Ej)3|^gizW5Fa7I@ zvUFXGTAN9b0H>r}TG-f>tUU+4Csb~w9Kt}1bgHcXvNZ%ZIxS8`T6!W|Dm;?%dS`Fm z?mJ#{HH-zTs&If_l|Qx{M`tnnv^hAqt5TeW^(s4WC6DAdTdHh!(`)?Fd=m7$DIB^* zOpnG>Vq-;IHa=Eci8_>R0LFoaiP_zM%}Q^oXJ+<((~~qv9K>Ol9x-$l9q+Fi8s0iw zh|zJ_dF$w;UQ)f`A#>ZA+HPqIRvjOwB9AzI@v=|S7=_FD$A|RvRu+~FH@h$x%!G#4 z+s_BQ`R`_S9-7@TbTH-gP_ASB~z`J;4BVQI^JOF{y>?uySEsqXUj zc3OOOL(`Qyv7=s`v$Hc8aWK*~ElMkZ4UpC5HOvskR5RrmQn*Yv+5+#U-JGuli3&F@ z=PEIsY(28IDF2+BtIaz4*jPkW_117#_}i!MlNQFbX9YBfEFPX4uWHPC93(%L$k%&iBbEuDb*$9#MnOI1$R)|la)=|V0egS)Afl^6&J zkWGw&G=H)!eAS+Zd;ge@b^*eyfE%dq>pd}hd({?L8ZBfLnd}NMDiormq{&ueS{Shu z2nZ^w`d3E;-LE92q_(%Lq2T+fAtx=(fPg@O4c%v}?exUn9vW!9GSZZ+#wI|)hF0)Q zK)n=YKuljoMuy+|@Ar(3-Q3Sj?k8KMw{&|^zVF_>zv+NP0C>L<5Hz&4q1mDmbo|h7 zCL<#n5$S`D;8$8Y5YHlNJ6^G!q5ib1vorX8fSRP*$Fo1`T^u?Bt!}$MXX`gL_5$Bp zWf^(yU|<~fJRhB+lL2_+a3un*M@$x5+z~f6Fgo>?AeQ^`d#hzUY5WTtTU+p_LPiZ# zkoN}ncn(Gxfa(Hg_F-GZ!;6ABW^gb}5CoBtujl46Oiez+*Tp4v{iP86A|k5m>jhB* z*;$HZWo7+d>!KhTUY^)!X?>Do;C}K%b?r~1V{Q*r!y%H{Wo3%4uAm}EtYUn-7QGou zzrmv=BPoeu;s}Hqm|sGvC?&avh1Du0Bl>`xe6rCE41Oqy!uOAl?_qeJt!7kOi9;~r zXo)rtZz7DQAxmp%New$Vu+5;UdGP65!u7ei%4$w_2Do<||1HlM9~W$B5b8^`a&tSClzzIimgH)TjeP<%MZLi|@+thnBkK=q?Pg;V5@wn` zYu~+-1b(iZ9BZvCLU0E>W=(ZII}9BjpmtD@?|Ef2EG;Y`su(PE&f4IW&dK(Hi2(5No2#pNf$nS{ZO-sH ztNi=00|A5s?`55@|61GGp}c>88P+-?!r4ag;-5c%z^z9|D}18D6nuMzL0PZ%yX>oc z%$F};K-L)>D-It@M@OWpAE@7E#>T2jN_ECvd<8c_TISbp?*hLF0U<2>Wo&G0=ID6+ zFUSP@7ZdlX^z$#7bdmGwa%Bw*C1vG8nA0K54^r$dx`My;0=oKJCn|xVfP_V1oVmv`Y2c3y((~a zmV#yF9P{B@En!K#6Zv%IF^E%@gaWxczQpfP#Puaxd7c#B+MQdZFu36!BCEiiwhn;@ZUR3 z6drla?LP+Kl7N7PmUdxfB_Tc@^o`0)nO(u`G6)Ech|eX()Zl&o{{1glh}G34mGzE- zIUFzqkdUo5S_l31LMX_|FZa8OL9g3CICy(F7`fQhih1uI=q9-j(M$;mxiqEK)IQu| zfw>orI|(|vPWRfHhWlAgNJuca<5E5Ki;IUFQnC$BA{y%Iw_BQ+Rlxym2BT%Q{G6QM z48Fn!KbYPLW8^&$?g1h`Z;xP`u^JDRM3Z614`L1#u%!hmYDYUItWHV+dxM*+bGSZW zsz&$F26vQK>(;_fh#mxHA1~$P2q$>$U7vpSswYapf|S8`?`O0dj>4Dws_mxg0CfY6 zW4W;m2uJUsG&MIr2oi_y^jtxqu(T8rCHxr@4z>T?=x@lfbBJ_%-)`;a{Kscs0>%c1 z|KFzZ$D*RGm6eC>L5C9)TChF2xMaq3OxD_E9Zyx5>Qg-R(vXnIfs{9scYvsiNJt>R zdE$1qmn9Lb0~H!rv+>zX%x!xo*ipNUc6T$;(^uEkEgh}Lfo|l=Dqv)M95PCI1O+u! zRWZmjsYKijyu3tU?@)DG#}W0y&|ayl6HtHsy6J5^I2^AnE@B~kyFA^!ym$-!C>XhR z{g6J-RX`?-z(z;s;nq%$iP6;2afGxPo5>o-vDq~UgYkUpGd(#8;#n)phLNtW;8v7! zm~4Bg{tAWxJ{CD26!HCDX*t7dRK88twk^#3{Iyy05FFD5tOBg&0npcjtq25Nb8%I` z6cnnt57LU{O7PABrt2)!oR{ZnV1U3p)v-ttF`Ax{QEL{ly#7l+Fc`t$*fQL%^*XPx z@DWfyU}?3rjoAxOw31Nj=wJ&8*(xXw{_O5{cARK|t%RLd3k-{g*4Ew_8R5tET&?F* zTUZPw>4_P}z+M~_B=zD2Gi4NHBKlq&75$L=gSi#4~KkgTHcQk4dkK*93j*cS`J>6$HLP8qo_!PZ47I<-a7x-xfYUA+Y#Pn3a z7KVj2_o*c-3vopm+-$(NL{@Py`r}7*%qCg}RQ53w6BAg;poKaIAr_oH8NS$~LqiA% ze&R6z;5>EwUIN-01_EJ-<%xVS3AX`g2vB)CtbAZ}Cq#hr5{K&P=c1z6ePT8K%Y^CXtCB(TWZ0;}^p^3}Kr2;R9yN?TxmTRq@i&Z{Wz;wKg-c zyhKDWm~L<(=0L5gsbQecjRqf7v9YfjLkMEepRYst@P=pQPcaWDdNxM~qi;iFVhn+i z5zXHR!MnV?iFl!z|5g&*13_@|hh0s?0nugFZEA0LmUQ&Q^hbIT(JA)$E7?zw-} zWnk2FvS#$Zl%t5Ou6|`}>*L}AjCo!@J|Y#dz1ur*J6}mlzuh-_Wh-sq=*T77Iy5sA z=}Y;wwzhv@Kq}`k5@|m1{=J_IcU1LpV#A<8cXy`%!-SVFUaVxCyQi-M%dp;!Lv63p zxXbmXCrbP)62G;^?zVSL)_g786Sz#cXff-pt#NL6>!hUU|HIQ#13E6NL};kefS%TJ z<02+D4^3hGN5XR-D-#x$KJbEs?dJO2-29neYevTGZfh$vl=_XX+cV8g&ljQ99T>O^ z8y-Y>^4ZNSt*;Ai57bTPl-Xqh9@o&2&}Q&4QJsW5#d^Gg6u}R~$fa7QKx}%RQ(aqK z{g~v##>NEbSbSbf#s$7{#FfX+?h)e=yw(0h0WT&jpd0nMU@CUlNMQA|5_#Sy*&uQ$Ck3&FDTqc>Tk>VZ~dGAw4FMQ&#>r)(Am!Sg|5O4eo$@4`NM+H*b=xQs@lL z%ufChqj}S!qfy2`z=7p`IxR(k-Dgq(%^qAZb=e0no$BrmN#2EW%!!`96JBs&nj#AbuLa z^Kz5Wi<|3#=+T1O+Fc-hK7L&O)uIF1Nhr`M{8l|3gMh46F-2Tk`^Jj7Bi~$8dR{kgx)cQk^#| zKLdl7jEpcpe^f@i8#w`i99s$OOv|992L^lV^~w7l6H80>;-aF_KY#pP$dEP_BEde} zZT6Z|01cZ5c*+EE@%QdM2Szn00D^HEC9(v_$Y*t1eIimQ|5o>fN?YBoq}XNs*;!ip z3~o`4moaebI5=V(8YU)dBUoO4>F(_v8Pmrja?OxqV0rXN44w4Jlj)=apAPKp?~gZmumrYs z4-D|}@s0e}NdVVWU0s)z59;3DPt^T2W0THwUcEYo{BlwEq57(-tqI<}bvUR19+RcR zS0|-cf6ezw*DK0PNlYxamyf?zr`mwkRm_YBe;1*o(~!3`cL zLfJ|PLE;W>ZdQ<-zO!sqr3D9~$!Fsrsp(6p7i_1$WUzV4aW?Jr; z8(^XWPo9j#JxDGA;w0iee&pffd+M@rG?3PKCg^U{;97$91rN+YcF)b962s{RBZ)s_ zW59zJy-nhLszN`v+8h6kMIGsUb|oMLEk@g)iA(dxpFjWD9o5xfnAK26(d4*nX-M<8 z|6hG78p*>s#KFb}0<-WCcNB{Ruois!R1aGH1^YT!#$W+Lun`9QV#xRou)~S!(rYm`;h9_8=EHDZ(JCF z%?S$jyii!_clY-nLqfU&5ik@$K9}34&KI&05`nN7i;B2XQE3GKN4J02`rHwLtVG^^ zlTfc7d?3E%F>G)9iZ_mN4^K_?-nyZ~p`Dgw@GnYpW221^2SASgem3y!fWARpRkauz zu;Suid5jfY0Xj01WhvUwlOu%PnPzo0HF$ZZA-EoHA6V322VYW%qF@KBYHC(Hua9(w zzgk`@0JovVMb*>2dE`NSXxX4z#tY2`;^mur?N2bFUJr)UsBV$G-B?P&bkzY^f4xn~BsxjkykQhIu}lYB~o$Ou5=j)rT- z?Rmt^JW***oXn~U3GlkQ+(PJcQLJc4dIBEEpB`r>nhsRqykJWFQ^9TSarCzZGkvB4bvfM%)2(GCf_dj&0AKqN)}9 zeDLQ+RbENS`Mdr?0MAW8h< zf`X#LWHM|{9^UE~FM18lORlcG>~{YtLX@c9SR|Wr&3Dl*j;BXNazSwAJpP)qP}S`0 z_&Bd%PkB`p%n1;yY;cb40p9P2!$GqjBOrv_Vz=ww*jdXe_%uY z{vBG@fsWvLIO#eSg@u7jT;amP(eNDRgw$zgf90%fY;={C1$lT-5T1bhgL;}2}4|A zSsC!58JthzGF2WeEc{X{1N(={A41x#GlqazB>lNOPg}JY=pUXucb6~Z?{&NuLOXiL%&^9Xf;>8WQ z!Z|1!!#mO9xxp!213Uf&7CJfwRYpNc2|x$Y{Ag}buHUDx3xL=Hr$v@TDeOv+o$h}| zJ|*YxuMXP}U?|X80*n0pd+DpV_V)SA%s(Ft;)d6AP}&JOE(F{ooXLc5#eHJh({EDA2XSkrLHr8e$ifl z!RZq-W+ZX@c8{vGjT)&DV z6C}W_97ql~{FJbDYO=mIU;T(74_5Z#;zr`)*@f%9etsAn`gt(r{)s1flc=9fO7Xr~pSoE_n^@ui_(4hjsEP*Z~k zWMj0z`Xcb)0G&p(p_NX6VrNQlcWH@`EaGH2vCGo3$lUux&;$h50I=<~`r}jGUd?yd z-_$+|jf%p-K#reDWcL;o5<<1Hp5LD%iHVB~+B+Y4or64S@l+jE$+IO(HQ#m1^Y zIc)pZzLT~t@P`4XQh_3gb;ms*grNs%)!AF-^>%mrS)6oLApZlypp>{1p(g66{BDVw z?(Tmca|5@iJ!0MohmS;;%@xLZ$l!zqG!;khy*PH`&?Q$O1|j-=TzkVYc1D`m!=9I! zN`5fJNe32sz>FDXr87?QEW%&&ZuoH#HfBJ-8VtdEx6|M#=Jhd+c z1tc}Bg98II4K6Q@j2vZU(M&X3d~cun9MmKHd9F=vV`PLhgDsOY?3A?mlV-^5c2IQI z?=XA#4Ncb(uN7<8574_uKC=LeHGIDmt;*3K=U zfnsZY|1l}xo#1q@s*PDD%fs_~a$;qo@V>aVwx{`OhJ8qh=A^jnKTo^+_v=ss@0H|! zjE~RG$vIyYjW{^y1cdUIr=);7xu%5GVkne_Q5%MIGZVW%u;04&wi z#AGf7Xk5KTFC>h6fT&nCsjH^8w6RfP)QR4m3A?#mIEK4aWSaqCiEvzIK3&;(s}!;X zSi-%?*YNtX5?ykTGAJla?oQqF|A2oFB>>1Bw_$K_bixUAMdH`n-24Q9jq&kuJw5Y| z4yt?7cR&LO+Ho4=rOO};|vIvOzT^u28 zO-(QX=6GoQN$*sj7O)(s;Vw_9pjP>!RlV_(bgom*R@RB<%b-XL1vIlN$%C zz}W><5WoT5-kv*z|Ejv?z}b7qUc2f|R&w%sTOhjavL@RkZP3pp!Ku_lj00La#%`_egd`&hEwkd&0KqM`zmlE;q~OTIkg zqK0zp(WA$Q{6wT5?t$2ko*wHQYY-*}Z6;jz2??nakFGECUz2105Qu-#Hg7LJaQzh% zD*_h{1?rYk)ry7pSmb$W>4*$*FtPC4DN#{JL z+b3XbDJm-qq)qDok@*ht6~MMkf)4*N$l|<`<`X0?Zs7gVk4>CtI3T(dZaK z;z7ZpQ_Y^l=t1p^`z95bY8?_15{IjOi}o5kWZO$sfpQGKD-nnY(Q$Dgz**k%LWsIs zvVu+Z)OlBL&6-D}jwh=OqMfYyE&+#tvm>w#yme29bI`J0gN_NGm^d*3m3RtP08nRf z8*3`G2=Mj|W|};v{_2}hU^D)90;x9`7JOC*;(r@}0q5psc->+mj~P3+cQOi1OjS#5;8KcLwP?q(f|a=!b$^dB_Nf$xcLfR z@7XB|`x3NO0Q!Oo#7Q6(=pSGO1K`;+wW%Q`QFeA|O-&HaISEj#Nj+oe+ZyjUl!Rvi z-JKIK5MX$fGYkYnn7u8;Uy`cm-!@cNZ~rcggLyHGf@WrR#w*`+zjB00M^}{Zy-ga3 zFN6{0hur3-fgj($LmSUPPY;XQkdve|z!~(RFVxhWBgaT-L#PjY*}KoK${u8F*3bDO zQ;N6?1Wya5^hbucJMW~rDJq`MG~YE-L}}R)Bxd(oTyz4p6KQxS86XbWH>6teH&=%d z9IYa*3*XgIkXlMhA#;z@hk+9ADPZ!z&WQc^@#vQ#|57}1OC}i=eO#{2_F+K$ zD}S&q%f*98DUstAeDj^>#SxZrncqQA1q&K%&FgONO8`k0z`_h$LdFk3DNPk#B_KTy z=`n!-8E9@`T8EYk!)jsQoAzXGeE`ph1H}Lp@x9#E-`nZ$=_#+Qd?_0Onyj>rrE8e9 z=PRUP;`n|u;ZkPW1<&7KJa<#-1ip_SNCCg zva#t7WiG^#P*MuI?KCAOf(GP2iGVQR?en#uBGw~-d5wpsCq3PF5KBO?@V9SP;+H_i zBZZ9*G{9z@KPD%%4iC^nBw@y1QR(#h%aG?DwKbf=!5y97zoR$s+w)KOMn(Dh9IjxY z1|n)kLhCqSD2R&i%-#Ln=g&*co>|lm8L2Qv3M3>1-&c@^jFsML@i@Fx*H4>cB$kF7 zCEKkFT~Fp?Dr|L4&GWN;j;pxJz#fx}i}X{N6v-l-u0z#zbv2+U$GO_eEz#S@0%JyI zmi*L}zCIQxSE;Xi%#Dl!)_1AqfD2mP35ef6m&Yf_pqL4M_wM5S+_295oQqAw%Ti2V zM+Zh+Z)Gnhrl#6WxLBB(1t`*m*agnasi?|8_nA4o26IBN#X3CPf0k3N-*h$&gGewE zfO`xV2W#V;@%GVFlSkj+;26jT5CmdkTE9_p07(&45}bR?gp>SyeC&dxYV2Z8zoEni zYDmz929T83f8`r?MrO=u6mx&_qHf9F6W~h-Ya(BRv4g2(P03bdil?? zf%L^&o>xQRo6Ij#go(u^Bmj^BR=usCC^J(S6rGY1YoZ1+K*cku+{j-VJm_O40wV`Y z51O0rEv4^bd;~M!#>hWginsTSYZTEC2I%U8aMmz=&q%ht^pV#}{u3$a*LAr=yL<8mwBnkuv?*7i9RXC@lpsHmKjCt!&hK0V|+<3 z-mj4GtqRpzUJiK_)oLhEJHf8!C94KT+7KVdyeq(v=#%ueVoQ}m)-!mvLkBYZVpvz0b zgZ~f>mB~fRPmVZzQ8NRRoLs@w+9!Mwoe0F~n^MRFPB4hY6JXCV&r})wR3p*DJl|5i&su=@}7G+77^k z&pTLbV2tV1%pbzbDN}3gk+2O$OjED6%pnfsy1cETQ*Ci`;q5N(ZqikXFX+g`tzTg` zoYTzk{8*SG@o@FQzf5xsk-jKN4)y8Q`C0ndafhi@(#mpYUW_&>xknKZq0JL^TSs3> z|v9RgP+F)AV$CLl5uGa`D1z# z5;Bs_%dUBOg_FEq52XcVG75$RrG$LHN6CZdOK}}TS-lKpNw4#?^gHuT1yI*?M|2$RatBh-1t^_UWrEkXK zC(E~ajjfXw9k2$5uNELKn1~t7ToIhyM`9%Ui&M;X>nmP9d67)fl+_|&{vr9MP zG*j|mV`-78nJY9=6%98tb>bwmezRh6reRe~)=D5uAW0k%n{Rnmwiqqu6Tzh#yS)r* zAz?pcL)yXa%;7S4=ux+3Ri7n>ala4yRMgU6w@Ry=^&iVq#W^I?dUG~YW56AhlBRll zX{vZF=-vG2K@of}(+-X-jt?%j9>mp7=(MU4Qzu=ka4wK!j&XS%xRRRI5|yZSH|Z;$ zb=ynpNS|VpZd-4oiXr3H1jpe~%+!gC(Be^lA8kzB(qyHoF5bf6*t2*0(TgxGJt3*0 zS(t38LfUB~Iicayi9(rC~ORdV(@>&J^z6 zVEgEpJf5`Mc@HQ>#nnyysfo-R4RvUlEXPDzukHQQ!1mL`ikZI9jlr}$I+1%V)#K^9 z{idbu)X~_YNLx-D2d7TWBb|ddYxwS^omdD}1THVeDMs>fY@6+-z`^H^E}PC6$v6Bj zCeyO^g&bXH;(cy-txVVFJHM~Ki-D3s;^6$#%8hg?9zsR}odb`YGToYOe$$63j=OKU z>&qNiAI*?|Fzy&LY7^`t*AGJs|}4FeHBH>mXlF<->IQI(C* zPXSH+T7%7q;ur}L;Z!{@O|$tExzI8q^lVtXdFkY`Q#CFvGam%{W-7YlTs1y*czgES zDYt~OEc=)|M(3DSIhVU<%;>arl^-nev%J>wdht{`3w#3n#Kg;p@m}_Is)7neee9ao zL>r`E*=oxYLs_44`pSsH(nd=V6ch}sA8Q1PUckZ8vzM+3pM9oOxJW)eCeYA2^;cQ6 zX5!aq+`Q|lprpU`Y;Op#R0sF=y!h@#A$4s+A#ru4mzKu0fO3b6Z@HD$q{4^u-5$;S z!HBIk5e!=YOBfh2hl1Yd=DDUb73GJH(V@>vYZoPC`WyS=57oI7{f7onG3dQr9Nr4| ztTZ)w(lS>>)B5&auEZlEaNQ1lmZOwvDlbrP+fW?WqUNF<@qnJDujbg>P&OWazPyqo z?^lMEJn??o(hnuD`>lQNRZ8q?1PqHw;7ZQv8w=)ad6wJuZ;ouG=ko-p?{v+rjh2qn zoM{*cNqK0B9btS$16d$^_ovc3oKayqUxX)GXm`l)&Z3CI#`j#R>+OPQe0N(quaA3< zF4)pogYl}xj39LkJ{Q_6h2uvlXzhjxeQ2^1lMC`1QXYa*K^!g4D-FVUUbT6H%MQ&m zP2{vebF{|?z1z-laVZnq5r`2iFV|#QXk z>s%0$wFCXectrUqrCNe>O&{~yJ^QEV_o_XWGNGXjP#O2?wGwTz;YL~b_R#vtg^@v{ zu(puT-47{XQtxI(_UE4Vo6Z^a${utE`4o~Z9Xpt7YOL?sm( zCJna>CBYmo~q2UGb zkywsW_5}^4&)J<6?VBx6Pp^17pkCA_rDi9OnWtR{xlMM<(>kUhG|#(0jCM`easr_P zc-l}vIpl0!@`vAp&7iNkT5(<|L4|AVLpxW=Zym!uuS$Idi$5CrG#b>9AzruB&kJ+? zzic~+N)q4`+`jF!VrA+Ug=(+G!03DH9`S-31D_Q-)zd5PO47Gnm=qzPy&O7p2TS~G z#^ssP2f`9=!c|Vc0gF>$u!;OY7I`hy7)#3E-R&=c`nOMJ5-r_bMz|$Qfa69?dK_HU z*oU*A99GA~=jjnUV(p}|hm%Bz-g4TxG_sL1knd1HDB(6ZT}{LOV;()n2KB%a1^l%5 zz2m;m=nJ#a?ZIsXnO0;XhmW;hHlhgw`vS0>P?V2Y0$Sq9wP1$5Yx^?7 z)_}rzsYMZW&KAv;V_Cfx4dfaMqzbpBGMGcMQFSR}+3#~;Cn>*>a(OlRXRUO9^275y zat!tqGBfEqHHRgVWnkGmgXB;4Aj(LK!od)Y<&G~oXm~TQh7P&-%BOu<%zgRR%uYE* zVZb0VTu!~AYZ>zMFe6(I-MXQDamEofo(2wenZ*#8N2ShAojbaO0eOZ< zzWp2aPke@J7nI+RG9rY8j|{vwk4#SrZmBNm%18`9WtT!R$%|#@t!zH#;q-Qy6S!>62obWxZ3wTGSCppM-iIHBILV4tkJ;s$@U4$Q7&qp z7gsJBr7$Na7rE@xF)H?*+-98#jRl4Yq`pJ2tuu^o77qLD&!ronXk#GC+B0n$$&N#?LeedJ+H6g=vXZpuGFJ;1SAS} z1E@2N;+4uX)+pT^j3dkBK{x#YL5_EL|1zb#fPyR^A2si3N6;3?m@uu#b|rGmqfN`B z@uqkl$#cal$Gk1Cw`^$t zpudp#yoDVA8qXJYMsm#c-!&&uZRgPHW(1vA_3v3F3o((FaTONi`Xqw}hJ_xtWv^I5 zuN23Jxv8+A!z%3Y={9!b*<8+fH@xmqYUx~DDHB3vlEbzG|^X`*H!Ih z5B(Jr7lrta^N!PS6An7-&E5xxn`G<4cBuAKbtWX=;SbaR!k39e5F=wcVt!Zy+TbwP zFdoOEvoD^`-!AEbDr2IDNoRiOVq!wtUFFehl)+-1JIL|O%OFw|r1Wvz{N>HDDN1&t z3_+U0?ntJs6WI+-3%iQqIPqh@M_!aHOw8AD-CDG9W5y<+2HJ>geECQ|cYUcXBUcL* zGO_V89KquK4rbuHU!S^%kM0*#-&wOYd(_($E8Gb2`@=zky# zMS_X5OZ^OMVCi($I;c(h!f?ar*6H-b#4bFrh~uu*!Hx2-`f*=d~~1NA`j*L?l&R?5QUcetTx` z0z~nGBP_RacAJS=csD!j;HCpBv1L&;gAOGcGkC&e@H>P9A%Iy>og++zP%I3W+l`N3 zC`-T8%5pok%#($|{dVx0FQa<4fdij_VN-OX2+GODT()q#O z?!xRet$yXb`*nOyVufsH32_@cq8JNAQ89qBG)s&!^ooEhx!5+GJ5K_w;nsVriyO|h zSS5A7Tq~`bO|_-8C{Uwgc50~f*Awq6QnFDdx!Q`1_aa&6hB0|F6M!VV%d zuXp79&I(1vMO3S(I(5v1sp)_-x&gm)QXh2VaY2sc6asX>5NLEyaM#$io=q||XGHq- z2JOr7Pw}gfVc7I38ayTvlX9=Bx%%3b-@lR96D`Uh6)H8jps4f3wEU~(8Lx59Sfc+| zee#>z%%@xdWXy@J8WnZzMvPoqPU#W;E2wn!>bi+vY^ZufVKeTH53CK7>kc^HrQh@E zLQE;lCDWucos@F=pOQ%u*?$p?CR47ZGtkT|`KV$X_tHv3SINqp-Mm-nuu4iQMnEv; z%wVR9kR02W4CRU7J5rQykKo_)OxqEDC9+HT@bz#sm42h!$4oDU~ zwXcxDcFzKKI$**5kUGbO53-t*dvkI6CCgVx;YX`brRT+-PXaRsUDdi{(V+=fr>9z- ziU_PwS7(PvST$>~*m~@GvE_oowNI-wW2#|{vP99W71ra@N!(3sDbs1>2@$Px^4l^x z-6G8btKc@7kWo$^!(wW+dERy0N81Fr^xc~EJ}a)@C^FBqlAb3ty7ip|S>IMuN$S0p z(_;IIZZEFoKjX-Q7v;l&LD|7bHg`=aV@zkthnjB*2HYm2_(G9Y;GqD?hH5~ zbE&7*+?j)ihu*R5%$IVO)AQ*x&6{ogH1&49`NeykQf(9`XYC{`;;(}8N-L)=0foUO z$U5#DU3M$;(^r+LvyvhF^tW8aq^VhkZVg7B9E;N~`p(8KJB>E7+$q=ex>VhhhsacfU6S*6C;>xp7I2jBvnRpL`! zyo$Ui&F@AP_pIfO%#D8>=dTF0mztQcD8;p&*RCV5HtHnXk1(L(?7<-oPswZs;wx4T()QD80Pp-v^;bxPGs zcW(}uw{$(-SJ&|xI_Pjjt*s-oZ_RfGv2ipuu2vT>6`yM*;HfPjUVTbao-&bR{i{UeiTa_*o4YwafAiSRJ0q?W8nL*Y1XX13zH@wjac)&Tk|)}s&gT0XgYucohmI%R zFYB&zN$6g^b(~|f(yS%_m;@KtP7dpV8M0e8IAVdr#HN&Rz~RMM=RJ~}ZQ0e|J#J?G zBw;}4r>N>`lxS4?{SB1IgQLipsHhGGakg14pWFBsnQ}&N#*Uj%)(~?9+X|J=$Y2j| zlLp8~h0UEfzIfTlZm1J5#HT5zde+Qp#94d_iQ2#lxl(InAwR zj$pWQnSX6KeYMoUD#EG$qPmJVIYkN$wOa5qv$!~wcxX4-BG;I8pw9b}D|L;0?<{BISkI~- zu37%A;(N7ljwPsz4+!RrUy*5(n-2cF^dt&{h)yu&0EMQPI16Bd=@NhZyQ3lsMW92mDF_SBwACmN$4 ziL^Kl>A7ache`sRSgVRMv=R3#%v6OMac0H|R2p$myHb+bXH$<#iDW%nD97zWw?k?w z?RnDQ9vGWQo2(D^I;b9eKt8#lu0#B(wj0^WVy1e1Z>9RHlstYFk6Ts5`)tpG^pNg% zeKPRpbQS$CBxe3asr-Mc!q)%)+l+Vyx$9q;?_hB}2fCxfiZf}LGe;_@60cqm`F!Mi zr$>;6v-q9})wiNePbRe+weqXccC694(X2mKBU_JJC=;5Y(?cA^MPhUf1L53AO5E7P z5e3@44Cyx+YpqrDj7BEC0U?zq*Szdr1G@0yZpYpCZk`>F;AzS}|6{Q*?60InSj3D+ zF>E&SHceK-by9W@+t9OB7iA7ank@7Fm84vXao6w;qHFWgTCW~Q6Xk+iUQA*^Oz$KB z>Bvamf+2R&1?YbfiUGoS6iZR<*ccdA-(42A9Q@k#51sJ*Ryb1WG;<_et{fi!i$=G% zy~=ky1Ol~GUl@ozBF|u>7X7j$hcIxj27;6&N`)s^T89LGQO1J8@WNv@PoX0^X&2tN z!uo))16|^_4SNhvzJF69->@MO%@Pmc3q%X=ZRK+XGJ1Lp`NP>k?7w9E{#iRuTyOP9 z6O#@(;*I#1C6vMAW!b;TW>N--O6T!aDC5|;oT`vEq9g0StyGI?|9XtTlZ48t(9~RX zx#zJ5sGBRRy}WiNQa5>lXU*u*Q3VhRaCFikB5vl(%QbO!su|cgK0Vh2ZshMl7{}w-H;RsxbG>Z4P8)RaEXF4bQMp{Y}4lh+< zNnv4=%P47!`|3 zsZ&9)HG`X`y?#_P1Kt==%n)_}1OLPo)0T#YD|nq4=$}INN9R)9%r-@dnUb%4+Mf6e zMx_?x;#N-Yg@5|g*Te&)*}PSXs;4cPnVFZ1UY7tbt|G^ez!T(q+xpB5uW)P%4HkRQ z=3?SrKm*RUMSf96$-l02cxd-qr-$)6#-yYGvhGD;dyTnbK|3Qi6BFuA*%M#*WnwX5 zrbNrjh-a}3HFb4>RhT`}MUhuqTUuV8(bOcBqtN0RDkR+BFYR_V21eb0K7F7e8wG{v zT$?zO48%6tHwG_d^*bpH1t&-MAG=c6Il2>pvu$dsG9`L{e^~i3UfM^mrcUx+znCPMj&)mn1$Ie;?AaLV8Xn520I404PqP8C4{`E!Gt&bly7zmB!-1D zB0HD}@4j@AMTuEhIQa`MO-#@aq}`h6efO^OZG*z*dH4Ud_+jD;gKdb9k0qPV2NW~H zfrlk$>OfPIdroxi>|VM2WAf2dD46XC{OjzzPAx61Yy~Qy=VlI&BBhg}$hPqsn*3fj z7j_~dt8K}m5dk-M0=oriOG{D9%f#U;pC-Ho2!Ax{Hk6@k)jSXT2JYte`aFpHH^p7C zrZv^G{oI^5>hP5dDU-er=+S+`)E}_@f-ktXYwBK#wI#?UP&I6S@fU2Yz8)&kezGTM zOHqy6_%a*TpETe-d!o2?W>CHTdgkHVX1=+PkNdv@2^M04bQIMW>&|yaq=6KizGtMO z^08X`tzluhKo*du7vP`ap+(Qm?=^Jqb2LSIO=>}bvb`ws_dhT(Y2oC#F||Ktzsw0< z8AC$4OH03>sOZz8OX$9#uLmJ;X(4LGlog8MN#SCFf zHU$df+XCXGsBhlztG5)R9)|3jWA&`Lu1L$dy4GZ|QsGf^ zV||qDIV~O%E&V+Q<6(6sB{#PhA7x6~VhlIuT=$X;k~5?(racvJf7O;E@Q+=ti`~xz zd2YP(Wb;O;5@aoB<6+X7I60q3Xzn=y8nBJCv#j#<9IxWI=N<9bc>b^7eyttWfaA!z zZSmWVV>|7BmX(4rhw3XCf(xd2*7(7Dn_1<5e4SPDr{mLgrD5f1Fr`LgVfaD{3(G&K zQ?ByL{)4^q@DD+&1r7*ZR2F5=p2qbEhtCBeei|o(;{a4&WQ>?d& zlwQX7=9rBk_zQY}{>WdACYX|*&KbVq@@R<=&(GHu1?kHx4p^8a!jug-m{kO3i1n)8 zEXM5qp*cc3!_S$S1?~GFcb}I|fIjxm*~RTY%vNi94DtK1D)}pkj;@{wb|w6j21_v| z${RI@d2};4L3E#9{PW6zE^*faeswOQ|3mDFl#k*~WeyV+$rbnaofAry&$W5Qc>>DY z>Zgj^%{PyA*4%4fU8FtkqiCS)Wk3+(dxf+rFrePWiO09y&_f{}O{!hFRuOzil1>N% zA>5!@&5ms-DcT`NCKZo%NKG;scVx_og^7gXjI_su0B+f=r*7#%F!8E4`2G$IqMTlp zSfw97fPnwLd&ueWLRZ&0xgTo77U_S_S{e}HshNnqe4GRDi&Si2N6L_{9lde+D~nN&PUV}%2$9c4upIf3Hbb{a-4 z_xxde?8x{s+xcxSXw1rM?dV zwnnf3SlA4!4bF3!J`{y&!j6yYf(rn}Q^KZ&1@7`=7~^yfHUL&T7} zi8x6ES0nMFh5p|7FG>RnI?jZYa$OiGkX^7}Z;IXg?Ao#aN15mUx2l@2QTD5$yxiCz zI|K;VZRSZraXbHhc>Zf`##ge9|DuQaZ~OW$bBs`_u^v`Xz73{y;)&H%{qm;T;Ey%Zp+g+An z(2I1?mr`SI(t@n{&pF$*>kNgBqzS>IjeNxGr?a=o> zKbzlrDlA#9JY8Lrat$5X@F7x)H5xmo4bMg7<8!t@{B}%0<){0}i6)M4ARj|6o*h02 z6u9;a2U{U{wbNQ~KKkhXzn?8%SlpZyC(N_e88V`3igriQX*ZXX^Sah8);N)i1b~2v ziC?P9qmzs8a#-gmT()y2U?P9WwPaIuZw>t4J&J#HFXmtj99(m@EZV0ikFrn@=Z$M1 z`w;!!?fAz*pbs)ui^J4wgay$jW2Xd*MD+dkpfuE6`w{`txourwJ1^e;k}Yze8^<5J z6u-G~`1|XdCFSbBf3!MPgD>)=2<}%W<Obn(oVA)R%9c{tJWxfz}et=m-s8K%)A@Ap6fwbzC$c~$o3g}>H+R=8|q?H zQaF+S-UE7B6iE^s@f>uJuJavX=^d9jbw==*(^NfF1MErfhaFB;1 zfb?4#=zGp7$iYpY9Fdl^pGzlkqR5ULvAlBI)_Hyx=GA0{Q;X z4zE^ck&EXBV*5jVl*JJN@{jZU*8e-OOejiIY~8XD_vU=;RnUmY_)!gw&CbM%>9x&b zXzS%RwQAf(+}>WGLXY)1rSx<+=dp}TJA+oO@$CKHp2rtX4w#Macqz;j8=LO6CKuMv zp7qC~fc)!-sy(o2nHfirzX7D%S$wLTgY#zttbX=qOwO%~l{B-*GusHO|J(nVn0n!oGR*kSN2h^OFz z0Mfrr1F{bx9LzrXOR@rZ2Lcuxxpi6u4mfqCGEgg1OJ(-;S{Cp)$O0=5&3GP!!F)V? zz(Vlu8`SyS+wTc2_NccWyiupH%z;#CWc0Cw6n!eVi~HIba_r zN%1N*kCC&4b!P+^KE>>jT^4k~>&(zX>>2;~+rlciXZ!(#K)tIC#r3*ew*>aN7IGOW z!}t0wm(pBagAubA#bVFO)JhmMieWhcTVH2^6|em}JtLVH90N8`K5Wzbae_m*5#^tf zw;s>{XIl0lt$jKnS}afB`U}y0v4UT$qeDumjf3a|$X`zcTwUrIm=cJs2@!$saF9j| z%Od58Hn#F6nY2#XoEn<}>NPui%A`_(+pErug)5<#0GmO<8;0KN{@uleh(Wnp=_H_t z0xUpeF=VpX?W}STDN%|X89AfvqbMw#f9C3HPM*wd3|Cy8>3cPr2D=q53~X|sMEv8& z`%j;wUOspfMm4v^QZ=ri`F>#Cw)v)9G&3`(+XxWe4li%^_tUtYlkD*F&ZIJcHUuha zENn(-Xdl39zvNK>s_YrVWi>TUd86VTu*}$@>Xq&wza?^V4IXg*c|t~qn7I5XSo(?s z?|E~3`%_YJ^wgeX_s5T}{$yPqyX6lZ2G8xLZY_WShq<{d9^cIqjJKbk!Y4PnUk1<3 z;l&m9_x1v{cO`(+$jnT(sJ`k;R5Ynf>@cvJJ=+GteM=kzMit=91&VMX9mI)!Au~8s zbO}3qd(u|k0xR9tyYzSItYet^0RpHEOU2LORpq?XvoY!K#;;D_%!ll9b61N-+*P-< zq|NY?DFBy;>v^O}6k{WINq^DdG+rAf>`;7e9d>L4rO>j3gxyr(fGE*RrQ<6gxFYy#89Bn z%g(kSBc=;EbfnJx>^Co+A%P$@-W{TL*I_hRiyW~D|gx_Y@ zhH{&(cm2BSP56DAK4SpSIa>(56W8vz?i~RU%lYEH<-WBIm;F$?a~h@6G~}>s)FSCw z!uoLtYnGPtj7Z)nc&ed^PEIGidItu`B#vy|d*c((P-6#qj>kk_c%b6Z$cl?Mcr+GN zR+3Pe2es=1!Ynm?scovX6lQiV9U=lknT8dh9$#Kg+TkUL@qp94E}n>u_e_ZYsRxXX z5vSGS?(Zt~1(%(V-`N^lkdl-XD3mA2q;POD=mA&Xf&$6g+gmVRtgha%*6TvDJ*vf9 zQBSQ}0{ir-ToHGPHm-_qj}a4~9cU+X6c!a#RzN0C(6oYRL&|Yp@WnySQIL(hT}uhkiW6EjYZ{Q<6%atLq1D1x1(Z2CTPUJ2 zz_oGQIRlP3M1CnUJiNC&-Egg!{Y4z%fc}Bc>-s^f|BC@*R+iz>aVZ-stAC*A*qG8Y ztHpRyEKE!Q`T}G7uG$(i+vWjyeCef=J6b|t4azZ|K4BEhFWGndQB+*4Q-2h+z5Noe zGe?1*Et$8<9pILfRaL_jTfXQG0ezYs+bLX}ZGhIs!zl#Boopu`ft8?ctY_>><%vNo zhKC}7(}Z5G?8_u`TSJ&RXd>$LEjG+279k^Hg#p}He9jvEu+C>HYoqEZff-%23=9I4 z=-a2z=c--^?Es(}8Tm2vJ#60S7HW`iLFn=EahyaB7;Yp)0m_y4Lm7jTl0lyi(s;ch zyR&h^064Ed{RKcvIow=KYSGCSgpQhVf%LD}LJE5gkDR{Yz;$#4jg|+SF*Kx?C>4wX z9Kr-MBD;-TU4s{0ccjbJEE%u?_g6`248X1UZcmP%xy(=ME)pg5;v)r?mX-=Wd%gF{ zfy-mEB$bHh2nhP-p+&rh1wI%vwFeKvx#M~`0^6VAyaXb%8dg}2(En7k51(GH z&FPjn2msCpo%H-9c4*5XwIsb^>Ld8J)k{EF*l%YRS(+5p0Go|BBwAdvScT2)#~C34 zw8y%X!7X5(I*5t}UT=k#br@W3Wfer zW;s(k=?i`|W4@9;!JCrMj(btd3h~vOGE(8dn!9y~a#im&aR+?)JgmM*H)P6pVIu zChKH{Ih}m~Hv^!*)-xws2Fr$acJP6MKy%!!TQVn4m&bmcMsU*~D-CG;0gS$`yWLc~ zP?__=EIj5{zraAiUrX8L;+f{d_Kh>D2NsWG(X=li+SvD?I_@Ov%okD>f?9vKNDF#@!b3f>3Gg~Piov2R*yT||)r(XjFy=$QcPH<>@(4C5UNkhoz?gl=dQr62iz zSf{N$6CRF~H~JitErMp`vmJ#mV;5j{Is!cbr^bFuw#%!lZ=JF{hP?H_xehc8ic~<% zrf~^9V^dWX1wc@BmB3}E$~-dvrcdC^nI17{S>X>J>1X?O!o0+c5a*=aVc5^#hO1;SLyfB&+Q+k8*xq#Q)jxuQ z>TaUOtc`Sn$>l#!i9+ReW^

Fb5t5R0vravm@tnaN}Pnc3CP-$UoueMrPO%8-wh8Xs}*0*jx8NtMYQ%g=x2HM08 z0BlI)u%nU_5itm;TYVRnSdK?nm+&IsQ0S~Akslg+Hr9^HrxTwc?zFL zVO5nd`7x+T8i&n{%GCgMDMKceZ*60P$j@fxET+ra9rR}Gsb?(|wP&vcLcn!A7%i*JA6hX^LXCbbHj{ED~hF4^il<(X0ruNPlCJ|e-c63s3!b~P;(sy^~zI;h8+4o=g#m@Db_@q9z)``XU zDKJ}tEb1+2v9q(GN}>R?pH`bb`{%7~;*Vq;93Nh1)vp`3=*9>+y`Z8lx|nR0LEB;~ zh<)A8#a+E$%eP(d&#VtA_*ImSE4JD2&^~$!ey}Nx$Hk}H zNWB;np}pmnjRdsddX0A+uJnhuQc+(GOwR$*Dp{OI{>IS8-NNfC@3T=lNcyk z-Q3)~<yJ7>z^0NJ`mR0>;4I=t;L$1 z6RX>+JuD_i%pFRY`MhG4BArrP>cADu0Dafy1!)fJSxc4kdbZ@#hp0%b&q9z9u;=~k zYpvLl-IiVOX7{pQm@sU5+rG2iPqjr6Bz6g9;p#T8oa4M^97c3$*Swj|a1xSrHrDyU zY%`=b=ho2UtD>#l?sl*TG%#YsctDd0pt@U^q2!`;^$xYAuMPGe+q!K;tQ%^^i|vjDFSBYR5_aU z7l5$R`_XRFH%R}kq54<~GsMIBn0hFS)aGIOrh^go$47)HW=}D0JqcJ-Skz&zu8GPxvW0Z6Y&p1gMhdFuFzv^w>d?{C^S}Lp=Kb!# zmP6Em^(%uE4JOb$OSMMTpwh!$-=eBf`ve7L*n(()O^zA_vN6BNgNMft0lK)f)N8Ch z^twWh5&#Z?k7Wk94A{q4OQ=spREk83_TE9N)8*@vG~coRoJM`w6)7-vd5D=(8#o1n6!bjFv7KbtL&ePhc7s#OFfQ! z2{h=C;0NZRdmhJ5!ICMFB`G{DtpzUJ4P7LUInc?@?;F(6+XsK{RQY_%N&tXo$igy> zVc+y*#>Xi%Wr|#kHtEjK&nu=g9JmZCxX1yM9<&t|H2FyYRGTfCRi+0P0h&KE;7{gT zfP8}@t((!A<<^ghGdDcw;QOir7oY+Hb+m#9n}J=`LtT~C)g2z(O8*iu{xgC+B^`S8 zB;H7_U34SQ%EksC8#_`WsAfP3!Qq7g1GYjzABdw+vTAn{sK<#ddi56z-kUXxd3G5| zOrC*M45=psI?t6)dHqcbiVywt)vT<>cc)wI*Do|^RE|pI#$<-xeqj*KW1hBDdGjVj zV%%x4xh%t_cS1iDoiX(mmrz-O8zr1#uJWInV9aW$w?Sx3%MNV-xo1DIc%B!EPu4V2G9kO z4*4Wa#a2{ZzGXw2pvu=r1l-@e?FNHe87Xj+E3U<_pa*`K~7giJ&epwEHE8Q89=t$GRl;DIfEVPWXu zp42~l$LYa{d~S)kiZ+&_gekEpTXOZ@L^8X`j3`|{hx$;rhm z?m$jgx0lY?sYSgOrik6TDL9SS8@x_^Y=axmCC2rUKsyDA($d8v#0L+)KSh5e@(~u@ rn^^8~u)s6Q-!_=y1TJwmIv=Q3`Kt&gC_96@dLS+$BU~b==kvb+4 + + + + + + + + + + Single batch + + + + + Presets + + + + + Several batches + + + + + Tools + + + + + Preferences + + + + + About + + + + + + + + + + + + + + + + Tools + + + + + + + Small things to do with files you already have. Every tool here is on the command line too, as tfg tool. + + + + + + + + + + + + + + + + + + + + + + The question + + + + + + + + + + + + + + Tool + + + + + + + + + + + + + archive-scan - Is this archive safe to unpack? + + + + + + + + + + + + + + + Reads a ZIP or TAR archive and everything in it without unpacking anything, and says whether unpacking it could write + outside its folder, overwrite a file or fill the disk. + + + + + + + + + + + + + + + + + + + + + + + + + What it works on + + + + + + + + + + + + + + + + Archive + + + + + + + + + + + + + + + testdata/archive-sample.zip + + + + + + + + Choose... + + + + + + + + + + + Unpacked limit + + + + + + + + + + + + + + + not set + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Result + + + + + + + + + + + + + + + Archive: zip + + + + + + + Entries: 3 + + + + + + + Size: 335 B + + + + + + + Unpacked: 13 B + + + + + + + Entries that would be written outside the folder: ../escape.txt + + + + + + + Entries that land on the same file as another on Windows or macOS: README.TXT = Readme.txt + + + + + + + Not safe to unpack: the lines above say why. + + + + + + + + + Copy all + + + + + + + + + + + + + + + + + + + + + + + Run + + + + + Open folder + + + + + + + + + + + + + + + + + + + Donate + + + + + GitHub + + + + + + + + + + + + + + + + diff --git a/internal/guard/testdata/screens/tools-refused.png b/internal/guard/testdata/screens/tools-refused.png index 4eb9e09c2ae31f247732578f3781b617a6f96081..ad929e126afa3ea339862f4071000b763addccc2 100644 GIT binary patch delta 64439 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 delta 64312 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 diff --git a/internal/guard/testdata/screens/tools-refused.xml b/internal/guard/testdata/screens/tools-refused.xml index 24c79931..51f5c801 100644 --- a/internal/guard/testdata/screens/tools-refused.xml +++ b/internal/guard/testdata/screens/tools-refused.xml @@ -105,7 +105,7 @@ - checksum - Is this file the one it claims to be? + archive-scan - Is this archive safe to unpack? @@ -120,8 +120,8 @@ - Works out the checksum of a file, and compares it with one you were given - from a download page, a release note or - a colleague. + Reads a ZIP or TAR archive and everything in it without unpacking anything, and says whether unpacking it could write + outside its folder, overwrite a file or fill the disk. @@ -130,10 +130,10 @@ - - - - + + + + @@ -156,14 +156,14 @@ - - + + - File - + Archive + @@ -205,11 +205,11 @@ - - + + - Algorithm - + Unpacked limit + @@ -223,7 +223,7 @@ - default: sha256 + not set @@ -234,37 +234,13 @@ - - - - - - - Expected - - - - + + + + - - - - - - - - not set - - - - - - - - - - + @@ -272,7 +248,7 @@ - + diff --git a/internal/guard/testdata/screens/tools.png b/internal/guard/testdata/screens/tools.png index 2c51fcfcd993c8a254bf29b7d7587e79b518d3cc..d3274b8fecacd06f427b9b0bd7a76509f40bbd71 100644 GIT binary patch delta 56030 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 Pg%TH)5y=tO^7wxM;J?2& delta 56667 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 - checksum - Is this file the one it claims to be? + archive-scan - Is this archive safe to unpack? @@ -120,8 +120,8 @@ - Works out the checksum of a file, and compares it with one you were given - from a download page, a release note or - a colleague. + Reads a ZIP or TAR archive and everything in it without unpacking anything, and says whether unpacking it could write + outside its folder, overwrite a file or fill the disk. @@ -130,10 +130,10 @@ - - - - + + + + @@ -156,14 +156,14 @@ - - + + - File - + Archive + @@ -196,11 +196,11 @@ - - + + - Algorithm - + Unpacked limit + @@ -214,7 +214,7 @@ - default: sha256 + not set @@ -225,37 +225,13 @@ - - - - - - - Expected - - - - + + + + - - - - - - - - not set - - - - - - - - - - + @@ -263,7 +239,7 @@ - + diff --git a/internal/guard/tools_unix_test.go b/internal/guard/tools_unix_test.go index 0b10e1c3..f32fe65a 100644 --- a/internal/guard/tools_unix_test.go +++ b/internal/guard/tools_unix_test.go @@ -11,10 +11,9 @@ import ( "time" "github.com/donislawdev/TestingFilesGenerator/internal/tool" - "github.com/donislawdev/TestingFilesGenerator/internal/tool/checksum" ) -// TestAToolNeverWaitsOnAPipe names a pipe as the file to work a checksum out of. +// TestAToolNeverWaitsOnAPipe names a pipe as the file every tool reads. // Opening one for reading waits until something writes to it, which may be // never - so the open must not wait, and what was opened has to be refused // before a byte of it is read. An open that waits hangs here until the @@ -22,29 +21,46 @@ import ( // of nothing instead of the refusal. // // Since 2026-09-30 this is asked of the open file rather than of the name -// (checksum.openRegular), which is what closed the moment between the two -// looks that a review of #157 found - so this one guard holds both halves. +// (tool.OpenRegular), which is what closed the moment between the two looks +// that a review of #157 found - so this one guard holds both halves. +// +// Every tool that reads a file, walked from the registry since 2026-10-19, +// when a second one arrived: a tool added tomorrow is held the day it is. func TestAToolNeverWaitsOnAPipe(t *testing.T) { pipe := filepath.Join(t.TempDir(), "pipe") if err := syscall.Mkfifo(pipe, 0o600); err != nil { t.Fatalf("making a pipe to name: %v", err) } - d, err := tool.Get(checksum.ID) - if err != nil { - t.Fatal(err) + asked := 0 + for _, d := range tool.All() { + if len(d.Inputs) == 0 || d.Inputs[0].Kind != tool.File { + continue + } + asked++ + refusesThePipe(t, d, pipe) + } + // checksum, checksum-check and archive-scan read a file. Fewer is a walk + // that stopped reaching the tools it is for. + if asked < 3 { + t.Fatalf("%d tool(s) reading a file were asked about a pipe, and at least three read one", asked) } +} + +// refusesThePipe holds one tool to turning a pipe away without waiting on it. +func refusesThePipe(t *testing.T, d tool.Descriptor, pipe string) { + t.Helper() answered := make(chan error, 1) go func() { - _, err := d.Start(context.Background(), tool.Request{Inputs: map[string]string{checksum.InputFile: pipe}}, nil) + _, err := d.Start(context.Background(), tool.Request{Inputs: map[string]string{d.Inputs[0].Name: pipe}}, nil) answered <- err }() select { case err := <-answered: - var notAFile *checksum.NotAFileError + var notAFile *tool.NotRegularError if !errors.As(err, ¬AFile) { - t.Errorf("a pipe was named and the answer was %v, not the refusal saying it is not a file", err) + t.Errorf("a pipe was named to %s and the answer was %v, not the refusal saying it is not a file", d.ID, err) } case <-time.After(10 * time.Second): - t.Fatal("a pipe was named and the tool is still waiting on it after ten seconds - it opened the pipe") + t.Fatalf("a pipe was named to %s and it is still waiting on it after ten seconds - it opened the pipe", d.ID) } } From c0c658e0af40be6f97fe0835d16b507ca427a16b Mon Sep 17 00:00:00 2001 From: DonislawDev Date: Mon, 19 Oct 2026 22:44:13 +0200 Subject: [PATCH 7/7] tool: archive-scan after review - git archive headers, group folders, one read buffer - A PAX global header is not an entry. git archive writes one holding the commit at the front of every TAR, which made every such archive unsafe. One that sets a name, a link or a size for the entries after it is still reported, since this tool does not follow it. - The bits that run a program as its owner say, on a folder, whose its new files are. A folder a group shares is no longer reported. - Contents are read into one buffer for the whole scan, and deflated ZIP entries through one decoder. 20 000 small entries allocated 2.2 GB, now 21 MB. - The tool, its input and its refusal name the same formats: ZIP, TAR, TAR.GZ or gzip. - An unused function went. Co-Authored-By: Claude Opus 5.5 --- internal/guard/archivescan_test.go | 23 ++++++++ internal/guard/archivescanbuild_test.go | 9 ++- internal/guard/mutation/entries.py | 51 ++++++++++++++++- .../testdata/screens/tools-archive-result.png | Bin 127582 -> 128955 bytes .../testdata/screens/tools-archive-result.xml | 4 +- .../guard/testdata/screens/tools-refused.png | Bin 106130 -> 107502 bytes .../guard/testdata/screens/tools-refused.xml | 4 +- internal/guard/testdata/screens/tools.png | Bin 97984 -> 99369 bytes internal/guard/testdata/screens/tools.xml | 4 +- internal/gui/text/locale/registry/en.json | 8 +-- internal/gui/text/locale/registry/pl.json | 4 +- internal/gui/text/locale/said/en.json | 13 +++-- internal/gui/text/locale/said/pl.json | 5 +- internal/tool/archivescan/archivescan.go | 4 +- internal/tool/archivescan/findings.go | 13 +---- internal/tool/archivescan/refusals.go | 4 +- internal/tool/archivescan/tar.go | 53 +++++++++++++++--- internal/tool/archivescan/zip.go | 19 ++++++- 18 files changed, 173 insertions(+), 45 deletions(-) diff --git a/internal/guard/archivescan_test.go b/internal/guard/archivescan_test.go index 1b86e5ec..abe27cf3 100644 --- a/internal/guard/archivescan_test.go +++ b/internal/guard/archivescan_test.go @@ -1,6 +1,7 @@ package guard import ( + "archive/tar" "archive/zip" "bytes" "context" @@ -67,6 +68,9 @@ type trap struct { // kind is what the archive has to be read as, where that is the point: // a gzip of zeros begins as an empty TAR would, and is not one. kind string + // entries is how many entries the archive has to be counted as holding, + // where that is the point: a header for the entries after it is not one. + entries int } // traps is an archive for each kind of trap, and the clean ones beside them. @@ -119,6 +123,22 @@ func traps(t *testing.T) []trap { tarPart{name: "suid", body: "x", mode: 0o4755}), names: map[string][]string{"links": {"lnk", "hard"}, "special": {"fifo", "dev", "suid"}}}, {what: "a clean TAR", file: "clean.tar", data: tarOf(t, false, tarPart{name: "x.txt", body: "abc"}), safe: true}, + // git archive puts the commit in a header for every entry after it, and + // GitHub's source archives are made by it. + {what: "a TAR as git archive writes it", file: "git.tar", safe: true, entries: 1, + data: tarOf(t, false, tarPart{name: "pax_global_header", typ: tar.TypeXGlobalHeader, records: map[string]string{"comment": strings.Repeat("ab12", 10)}}, + tarPart{name: "a.txt", body: "abc"})}, + {what: "a header giving every entry after it a name", file: "global.tar", found: []string{"special"}, + data: tarOf(t, false, tarPart{name: "pax_global_header", typ: tar.TypeXGlobalHeader, records: map[string]string{"comment": "x", "path": "../up.txt"}}, + tarPart{name: "a.txt", body: "abc"})}, + // The bits that make a program run as its owner say, on a folder, whose + // the files made in it are - a folder a group shares carries one. + {what: "a TAR of a folder a group shares", file: "group.tar", safe: true, + data: tarOf(t, false, tarPart{name: "shared/", typ: tar.TypeDir, mode: 0o2775}, tarPart{name: "shared/a.txt", body: "abc"})}, + {what: "a ZIP of a folder a group shares", file: "group.zip", safe: true, + data: zipOf(t, zipPart{name: "shared/", mode: os.ModeDir | os.ModeSetgid | 0o775}, zipPart{name: "shared/a.txt", body: "abc"})}, + {what: "a ZIP entry that runs as its owner", file: "suid.zip", found: []string{"special"}, + data: zipOf(t, zipPart{name: "run", body: "x", mode: os.ModeSetuid | 0o755}), names: map[string][]string{"special": {"run"}}}, {what: "an empty TAR", file: "empty.tar", data: make([]byte, 1024), safe: true, kind: "tar"}, {what: "a gzip of one file", file: "one.gz", data: gzipOf(t, []byte("hello\n")), safe: true, kind: "gzip"}, {what: "a gzip of zeros built to explode", file: "bomb.gz", found: []string{"bomb", "stopped"}, data: zerosMembers(t, nil), kind: "gzip"}, @@ -160,6 +180,9 @@ func TestTheArchiveScanFindsEveryTrapItNames(t *testing.T) { if c.kind != "" && report.Kind != c.kind { t.Errorf("%s (%s): read as %s, and it is %s", c.what, c.file, report.Kind, c.kind) } + if c.entries != 0 && report.Entries != c.entries { + t.Errorf("%s (%s): counted %d entries, and it holds %d", c.what, c.file, report.Entries, c.entries) + } if report.Safe != c.safe || (r.Concluded == "safe") != c.safe { t.Errorf("%s (%s): safe is %v in the report and the conclusion is %q, and it is %v", c.what, c.file, report.Safe, r.Concluded, c.safe) } diff --git a/internal/guard/archivescanbuild_test.go b/internal/guard/archivescanbuild_test.go index 72a24222..0da1c9bb 100644 --- a/internal/guard/archivescanbuild_test.go +++ b/internal/guard/archivescanbuild_test.go @@ -93,6 +93,9 @@ type tarPart struct { link string body string mode int64 + // records are the PAX values a header carries - for a global one, the + // values it gives every entry after it. + records map[string]string } // tarOf is a TAR holding these entries, through gzip when asked. @@ -101,13 +104,17 @@ func tarOf(t *testing.T, gzipped bool, parts ...tarPart) []byte { var buf bytes.Buffer tw := tar.NewWriter(&buf) for _, p := range parts { - h := &tar.Header{Name: p.name, Typeflag: p.typ, Linkname: p.link, Size: int64(len(p.body)), Mode: 0o644} + h := &tar.Header{Name: p.name, Typeflag: p.typ, Linkname: p.link, Size: int64(len(p.body)), Mode: 0o644, PAXRecords: p.records} if p.mode != 0 { h.Mode = p.mode } if p.typ == 0 { h.Typeflag = tar.TypeReg } + if p.typ == tar.TypeXGlobalHeader { + // archive/tar writes a global header of its name and values alone. + h = &tar.Header{Name: p.name, Typeflag: p.typ, PAXRecords: p.records} + } if err := tw.WriteHeader(h); err != nil { t.Fatal(err) } diff --git a/internal/guard/mutation/entries.py b/internal/guard/mutation/entries.py index 1073998c..4ec7e9f3 100644 --- a/internal/guard/mutation/entries.py +++ b/internal/guard/mutation/entries.py @@ -15133,7 +15133,7 @@ ( "archive-scan misses a TAR entry that runs with its owner's rights", "internal/tool/archivescan/tar.go", - "\tif h.Mode&(modeSetUser|modeSetGroup) != 0 {\n", + "\tif h.Typeflag != tar.TypeDir && h.Mode&(modeSetUser|modeSetGroup) != 0 {\n", "\tif false && h.Mode&(modeSetUser|modeSetGroup) != 0 {\n", "TestTheArchiveScanFindsEveryTrapItNames", ), @@ -15186,4 +15186,53 @@ "\tcase p.Kind == format.PropertyText:\n", "TestEveryScreenStillDrawsItsStoredPicture", ), + ( + "archive-scan counts the header git archive writes for every entry after it as an entry of an unknown type", + "internal/tool/archivescan/tar.go", + "\t\tif h.Typeflag == tar.TypeXGlobalHeader {\n", + "\t\tif false && h.Typeflag == tar.TypeXGlobalHeader {\n", + "TestTheArchiveScanFindsEveryTrapItNames", + ), + ( + "archive-scan passes over a header that gives every entry after it a name", + "internal/tool/archivescan/tar.go", + "\t\tif !globalHarmless[key] && (first == \"\" || key < first) {\n", + "\t\tif false && (first == \"\" || key < first) {\n", + "TestTheArchiveScanFindsEveryTrapItNames", + ), + ( + "archive-scan takes the commit git archive writes for something that changes the entries", + "internal/tool/archivescan/tar.go", + "\t\"comment\": true, ", + "\t\"comment\": false, ", + "TestTheArchiveScanFindsEveryTrapItNames", + ), + ( + "archive-scan says a TAR folder a group shares runs with its owner's rights", + "internal/tool/archivescan/tar.go", + "\tif h.Typeflag != tar.TypeDir && h.Mode&(modeSetUser|modeSetGroup) != 0 {\n", + "\tif h.Mode&(modeSetUser|modeSetGroup) != 0 {\n", + "TestTheArchiveScanFindsEveryTrapItNames", + ), + ( + "archive-scan says a ZIP folder a group shares runs with its owner's rights", + "internal/tool/archivescan/tar.go", + "\tif mode&0xF000 != modeFolder && mode&(modeSetUser|modeSetGroup) != 0 {\n", + "\tif mode&(modeSetUser|modeSetGroup) != 0 {\n", + "TestTheArchiveScanFindsEveryTrapItNames", + ), + ( + "archive-scan misses a ZIP entry that runs with its owner's rights", + "internal/tool/archivescan/tar.go", + "\tif mode&0xF000 != modeFolder && mode&(modeSetUser|modeSetGroup) != 0 {\n", + "\tif false && mode&(modeSetUser|modeSetGroup) != 0 {\n", + "TestTheArchiveScanFindsEveryTrapItNames", + ), + ( + "archive-scan reads every deflated ZIP entry after the first from where the first one ended", + "internal/tool/archivescan/zip.go", + "\t_ = z.inflate.(flate.Resetter).Reset(src, nil)\n", + "\t_ = src\n", + "TestTheArchiveScanFindsEveryTrapItNames", + ), ] diff --git a/internal/guard/testdata/screens/tools-archive-result.png b/internal/guard/testdata/screens/tools-archive-result.png index 3f27f10d8d64bb85aadd0f6d22f8742fd1b9131e..d81278fe8aa38205a4babb66e507d81a38bf213e 100644 GIT binary patch delta 82889 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

=CtmN|)5C^@1m0fw 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 B+3^4X delta 81509 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
{->*8Z&h;or?CE?EnVC~vyL4+u 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 - Reads a ZIP or TAR archive and everything in it without unpacking anything, and says whether unpacking it could write - outside its folder, overwrite a file or fill the disk. + Reads a ZIP, TAR, TAR.GZ or gzip file and everything in it without unpacking anything, and says whether unpacking it + could write outside its folder, overwrite a file or fill the disk. diff --git a/internal/guard/testdata/screens/tools-refused.png b/internal/guard/testdata/screens/tools-refused.png index ad929e126afa3ea339862f4071000b763addccc2..705590a16212fc174621f02bd23bc9ad680dbd43 100644 GIT binary patch delta 59343 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�itg?I6;VN@M5J3vxarxBgt1| z)zA5M^gh$xB~s3s3?UO1;NAwuM1)M>v!>DSbIAgQ1k*VLf4ZwrtclYJ9owhp_iw%2 z>c50m>Ql$f9&)Xj^HTmp<`19pWG{+^(s*!T-e*9C z-@RO2D46=3nt-?=oBE*n7WVJ5$=yq*kwooZUGo*V)jEGSA;i7&lN#^Omi)%t0^BEg zXRf~o2Y%X`AI8b?YUx0}g9=^Rc*vsOX4f#owBsnP_u9axU0jZW9W>sbce(dxnr=tD zy|wt_61YbF#>VG@j;b7;SVQ;3rH@j}R~bl$;p@k>YG;TbeGj$thlIJns10RfDJf zPt%C6%ueu3YbW58&gU<<7XILHIXP8sbWAL8bta7^k#j7q_dA{2B4DZ5=tVQ)n5oPp>*XpO_H6j;Kd5UMWGXw{NvE%ZpW|HBn)H z#yi~@iM@@k9=+J3J1IDHs;F_)O*;PtRri2A@mk36NniMcik8OsC(TP-g+7a@fNJD; ze7-!oJ3=dVG9^3yV4?Ok2m^{w?$$oeH71s!wszHPYfLQq$;|Oetjg@5bcgw%Ko1-3 z3H^R@2a>#2a`-VbpVts%`D0Sb0Fel6!Zunvb9ZmuD9=M@vOVxgwHI01 zJyOQPvR_{Ev+_Qx>UG?&I`BA{Z!_%@!NU?OaqZn1ezd7m3wlK;|B@rqWtIf2X1Aac zbt)V`@%L2PvB^Rig`-5t6T_BS0p6Xj5fL{#E3JbMt~Y;&+;2-sP~Tt9oj<>@vVVf? zAVW`gyp*d;vu-FRGs~wItCjs95`{ksJ{IP*!?F>=4aH_F4ZX`wc_~W_>sd2Jt9KcYaaQw=X#qIYgDJJkvDt0 z^Ca=!U6jxp6*jcLt3*(Df%T585#p}q$3i*j>hV)5czVLWKJs_UurmMkbYe#i#E2C0 z%0mMGBkjR3DW7z|A3xIYL%|_ezdy?sdzFgQnm-}MQDj$JdYNY^hJYBDlRI(EZP|XG zpZu{}0;r$h<43))#}}7+A%#!++M!g(N>D&g>LJrbhUO(FgKD0RuqPMZl#HZ2L4DIY z$PQG>_{y1nWqtq7$YpCzR!c56#391$+4V!IwA-?CW_LX2azp1z_Vg-lGIHP&2IDuI zze}2plyA6`_L-AHB1vq@BJ@?fBIXy#keBG{62T^;LAf6}SxtD_^fzP|p1cT(?P|lX%WJR$@H zo8#p$_u`tSlf<$?#tz1ef7o0V&FH+w{i}bOm9%xqNqPfkI?$Bx z8@j}sux`?Wqp#yy2Wdq*xWx)Dkf2tqnIlGs;DX0e%GkI}80c&4XBV4fL@7ta>t_qD zDP9XkDb?*4zYxZZD$)57+L$Ew=CC8MbKbk2GP*;sS?FJLl&RYtM_1do*TQ06tyz)b z?(1?^?pftB^QSo0YUk?Xi)%n+r7-fv`R1=klSMDXPlsBr-;4z1oXmZWZT`+;m?69L z?`e;p9v#L(X)k!2@w<)R=@;bNQ=qKxicTB^wy2PildgkbY~_O&f6U!qPJUhm?xr}V z(T!(BmWyOGLa2yj;U5yjL0>rKLwU^nQEg^rxc9c_8Yx|DqByju*CDb;(sNIu3Py&{~X10R?w4q zUHp(64LQFh6tVRyNzbU~s3s-z?b`wWM%(=S@~zwdwWq)K*K)rnvEKFd%N6~D!&*x& zq6bf(qRFtmh;x&{`=}ceik-kL_>R~{y4W~ER`2>n{_>aI#Y(5fDn3P9WxBq)6Wt8A z?D8BuGuOQCXn)9W&-60+qIs|2nMV={QgByG`>~Z}u?+c*GP0jP&JoAxo|8|lrjo~L zDgnJGMu$Nv$hgW)MtLHR@Dv_KZMvx6d?2OCo3Ju4u)`1?S=co9`9CfqTMSkUT{?N1 z`LVKey7?6i4J8@P_b|8iV_9NyL6GrzP|(66f((z3w@m$AF?JrUI+&%jC?3do!^kLD zmTqHtdEvToUA&O%j|9HQY=k?YsSD`VqwNdKLw4mpz`qjlSd&#y;4!)awFRFCUxtKa z583uFm-(SJp<`0s`~BJLGOl7gw+_S3oaesupaaN2Nv6Hw2xEhyjCkIT_?l6`kwv`XS0j?ABs`WMhn!D0w%!Rotg(e+&(@?w-}aGdFCiyC zy7Ka294ax8oX{!^kCUY<5RY)<`;bRtfW2%ht98GIbYSRB!SlbLvVSx%RAJYlT`bwX zxdtibvB}Az?kkTPI4cmli5mB<8K!`PpLQcrHz+8&H?Me22NS`ooyzX1Ls3$mTFxQM zZM+*dBHvX(h1m_sSk{**Laq#mg?V~%Bi%}O?j!>E?dS`p-^qF<|kcOs7H~)u)e17iAutHq!VX{9+$uI34_w{kUNl!5{t`S|_39#zhKz8F2C_V=mZSg))ET8NDj%OK>E}LIS)!oNK*AsR{D_DP!Vu;_jOhc zkcmMBI6hvdN3MuM`23`Ds;u#J+x6b(GF-7k0K;1KlJ7zqRqCa@+?vDX>=Q{zNkCpkh^Mfzinz|oka=FRfFe1FhFgqi z8Ts$EM`pm840@9qa4aO`9T*Z4(l7XX;9Xx|U%p=D##m)#O-;h}zd)IKj`c(RCgM{A zlamc*ZQ(#kLHf$ZzQs6$Mm&g&&;(iY4yF2)#G$fo1GeIHZ#d*C4O9t25$QSLz#tqT zuh1J39DErAW2(+Ox-k+mSRuI*;5@*~-YTC8jEmDk#8=h+s&%@cf@$q?{y|CE*EexT z<4kwmKF5s~34Wwu;C7k_!ZN)4{JD?h5vZaYABU8F&`ehgmgIu6#8>G-l93@HwfgLy zDX$?jTHv7XvpQxx52GL?+;ebjLUMNa#jDq@t*o!VenpB&hlk1Z3jgo~LzeC)Xf#ye zgq(;$@!kDo`?M>mUd{n?x(pjbNkNd$NZA(tPLUx^bkD>Yaq z$rXRnHmn87xNZWA%7v;+{D*P)lAknLgoEywj7SV&I6CDBI#^OwNePACX3y7rT&(@} zTV&uh?O6YPoy-pN@2h)pRCmybkzK_ekV}k_r*ACf$W-g#3^R26h1#47etJ#%A>3{P z4rO;0L#a7Af1e)haK|sgnVa<8tcSW$NmdGr>U5_caHugskkx%F4RB(=V!s-hb#A$loO)V{=I&-fEd@ znIPnJbflEPdxw_RboT4pQmfFUY>VeQa&m>TnKx|`l;wSbvo3?)yJab0={Mu8kd*1k z_V_n%e(ka?_QcrzENW_N6YIN0LQ)Od)_{n!3W2(agSC;Hlnt_w)KQk5yOQ2*IacMI z0b(DRmw-44g~UYHCZNbNF@aRTUOq-X6Xbn6Iyyi=?fV;#6~nzIGJR$o6X|OG5?!`{ zfL9NYJ1amY?6xe`tyg158U@Ncc9$Y&+ai7o&#bPJ-7NiL%^MpNv(5LP5A`9R5D2hP z`IiZUtju-w3T;+Ea7_8_U?XQ~oLK6b9@C*5=SI};p?}_AJ8G=;T+gwFMh|5q#Nr_i=rA{wq{$y9yCR;7M;qs>mtQeC zY1n{pGW7AX5r$Gp+X`L9N^0$9*IOg1nJisH_(@z!o}Yf*PTl0=-eU4`9GGP=wD8K zbEkI_lG;FxqP+er>+!A5;x0>d=dBUf#em(dt?9|b5ulH8E*Y2;{NMLL#S~iTe~#cn z2IkkHbG%twSraYayMw^r`SUm&eD*&Lod2?TlDKSL&RYv8cFM4WoXL9(^q)O#?_LqS zsrK-JcLl@_~a z@L&7-dul_@>GExRZP_N(Xn-Y{bN!@&wbSp(zjyT4hLG`G5T2U+5q-T{m{@s`?0~nK|e2F`!TRH7K#4H{O7MJ73!YyLxR;kcb$~^ z<}tm(LJ+PG0Ch$2GtLwygD|u6D&79!0+tRq2Do57n|p zzvmA8H#^ZV$o(?W6TL6+LFpG}uq22Hl$Y}*c8mJ%y8%?lwm;OErTrbjJz{Mznr zD9DlR`Gh=wE@ckVgOm{}N}^Ll+eu;*!~Ojx#9u+?ZEa1Fey(_I9h8*;E zHq6ULj+2+`1EO4o!?pGG$+C1(bn%K=gLw;l9-soTyu5rh1ku*l|9yht4~%hMYy^YW9H($rE16SM9D9X!QSsYvfaSBhHdzkdTLM{yiRLY_V1z)u75K@pLXs;a7r{U3E-*@57|VT1%U z78R*BJW?B!r-e$zJey3QylK{GvAn{(lA?p^X8MA9T9Y7DykWD)O@@u2q(c59nvW@huA zFS2YLDm|y%|8tX*brECfII3>j-F3Sk_}K6CxyjOV8V*B|LN@}Yn6jLl#W;3@Z|2;U zj;J=j>ZO|VUrh*9hE0hZm+KBJ5BVN!Xz-sZDl6+(A-^j_iO>l{>EjhA8ynS$BC}N* zuU|o5?8Sw-aAzIXp9B0nEV;b4#vd`wIq?0vnwC}Xe2L|>@#vWF`u_1FW*b7Bua>1C zqX5>MT25J^;Y-u5FT&#v5m~pc2S3yK*}Co#CqMf2D~5aCP%cyKfdK0BW_a7|jmVf7 zs_u&j>>ng%XD22nen+Wt?$OUo?DClL{T#7;h=ct8baiaeHgWRK|!*ZA$Cp$OS63tlrReF_v z0s2_*?f>y2cuP;(8*+o;jQ*I43Xfotq^@6|_yg4k%QiL|r7{Y!1Ltj7waltXJBPFj zzPj+m<`wI|{`1tyZC0(Dk=DC=3zli6rFt5xNEhj6oL8oMN6L2g_R<+Fmam0`x;jjh zaa>*AMK>prFU)Z=0=KKHLul941r)VXQ-uTSCKiPsGT9Ma)1&pXLcK<;8h4WGCk&_h zeuc>xJ;-3W%N6nT2lkzHCi@DK)-&R@yvWq%FH{%Tq3VG7rsTf8CZL znhT4fxygx>91G*`AK9AN7#%ql9U~`=9`yrhk9)dF~3!pLtgev0J5 zGI;ptNC}=c)6}q-IymZX=W+>4DwXM3-qjq=J7s_Yh)a)Mi>7W~;C37Qt%p>I>uZJm zs!uX5jBmWkt9x1Y_rtiTh=pXrBVB*A$9G#Q?fBQ$-+9GN1yaDvr7WE;we>bgLYtrQ z9K5IpLq>TxcyY1W!P9E-r;tZ@ve|$A2rF^@Rx-Z6ffJIoI_j6Ty539K-CHv$DcHTZ za~6;~aKedoqz&Jc$gzHMd@?|Y5|@Lc%`Yp@;r#b+Hu2R_5Wqb+FpBG}S(Oai{QH$T zx!)R5;HMWwM7fjXh{Gd!>La63KXYp)SqVW2%+D_R=qJb(f0w_r=TG%T1(d2ms9O9p zcRiKyOD@1*wL8M+MV;q3O}qRbOU+tv=buwW{?}OvOTrCLnpzu9!@j_Ub^oEk981Uf z31M&yfu;|Y&g3r%oXQzbG<&q@_cYfL@;A{WK3Q{{8|E7RI}>Fi)n*fAPX(Ve^E$Vi ze8(ghzNGQ$_?+Vh!@VF3KaaqC`TVZ$G*2daIQE}w)ScUK( zS!!?CxR9HF4rTde5?%F?kj-aN@&l*wW@p^C z|K3R2nP@(;x6pZxS5WxZi-oQU4KDM_WPq;q+Yk$#SPLE0LGCKEQuc)SU;7G%eQ~jk zmRS#qrYnW=|F!kk#_{*T^r@c#Q_x>-Q2nvVb|rg;Vyt*~t>D5>Y8duDNBJyV#Xh?V z9&NefjL3(dkZdZKfFf56E~P0)^0rhX^*7I^BVG)=8ca(?pL>AUtEL-(rrp&Uursrz-FUj;WTrK$?2qeVWfTg2eGpWXseOJZw4( z$C{MlYp!oX?P@^ddM~=6n763NKRZ+EI742vI^;BY&U%Q7X@x{X_jsYs`_2l>)nLh| z_du6aRn+UXMfpOaVwS4)=x(4o%3L`|UJycrKVi|N3>ug~kddh`?f8$%|iE zuOI9y+B`p-`W`r}29iT${BD(x}LwzMI$%ps^Qk;~LAocQADG_rcd=Z{LRg zG!;mGB?ywCOk|){ORLP)8{c(l?eTdui-kfDq?A+7k6Uks zztCpwWQ(0&VTlL0Y^~?iV73a_&e&J#U$E+yeFW;I#~r9@qo;4RE%$J90|NZQd^|{% z=;=0qiUm9%ln;jBN;K1}^grv$5D|@4K~R!Z&&xA}Gc@Qn?ZL*x>hcz}|9r!<=P$}C zDC@lksZiJB56R@^Un$7H8md&7$pr{)-q2lg3rp9Okt9aiX{W=VTmp~Z>!5d&TK~9L zdL@Cc@6%IDY~DXlo%KF`e^n?biRhY8u@{d}p4ZJyVb9})#0b!Mt~{|;Rt_K3nHUlDM~0wxw9>b zFwS*}ZwR;0wZXDjuHups4?2AS5x3(P=Gp>3odYjvtEsbtgNN54xE-j%!_V6-!J_;) zVizkf4%##3+`vy36gsjq{(j-G z77c(fdwK%K_G%C$Tb~^?WTqPK#&x=j1DHoc<8>l2F>#$IH3w^aSBR+Srr3HVuOkmg zkk!}M@A&{WN<^$yfjhp-oEyMnnkPFexfE1W^fB^{-a9?5tc_zH}mci7lQ70}hoeG4jLH;x_zbTk}Y^ zcl2RTO@ce$s_l=VPkB08rGLHSUr(e|7BB#Ak#>8#@~I#iDH^i#XzsMTC;kbadnO76 z+9~vQ-*9vZ*&b_06*)f4;bzLSyB4H$sklNz$IhL=MtJ?B*{v0|@*PKaU15*AvuLvz*-Q*m3HuK1gxh5L(<$>h+&;1-+zy zEYafq*Z%+bhy3{xvG>9u{F;_VLmB<8rA1p#?rOwY6-d0tT0YBsAT13SLS$Nt=6!Af-S7AKLQ-Q?Yvov8qYAmJHNKJ7MSOevMte(H8nL24V088dn@9ZDdNoN=z&H% zOloRs5K;MRh6(`pHFST*;x})aX=w1BV%)vr2m63j}2X+cI4#bkm zOG{hLIy=Y4#>U67YZdR2>o+G-3Do0S!%qEsYWg3jn*1LYGWj{ zoNqn;1AT5z&eqO#0Dm{%ym#Hj72=!6M2fC*bZU~4r{7{&eh1BGrlmQb9zsyS69}Zz zGBTGjLO@-x?qow4&iNrdDmYzD10R1TCMK?!-p8v7pj9(meaMsjO_iOU>*FP@;_U2A zEiHm#Vua%8e^fsDdWjw?DIsUshS#U3ZoG}jk)pNn@gY??l-u6hyTg9oGdh}ZkD6CN zKw&`D&Fv9DIUOCT7F-Ac9dP3YoY>vDj>FHNFGw=+xu-&B9UdN@pRXh*w>(<@xVy`6 zV`T*(Y!(16+}{4MzmL;VZ|hjMrR(nghj{{sY=T?2;uS6Z{19M_sUxT-s!VT%p3pNe z0En zxh&n4%gE)Dk$yu%LpuB%_#z84xA1;Z5fRO9Y)pdBaApRAk&~mNuZER#A>0b8?Etyt zCWff2ZcTc+q>PNNnc3j??*x*vT3VZX!v{{)7Lk!-z&G97bz@`g8XLU}Ap2)lfgYQa zN_6%zE~^K5z=0y@Lg^d}9C9tAnM%!3EuZBFL+q zTwLZ{I{p0ph40=idN{YTf=@{~+1K}k@2w&o{vAOXfX@F>`Nd7 zWMpSUh7Py5ctqSCoNL$K78MnZkL$0Mlai6$j_xotq#Q0pUe~MB(`U}C;&BTIM1+k8 zEcQ?Y^-b10VqQ9Zask!ej@a{(u20tQ1Mgl$0Yrw6>7~+`y1KiS6vJk(8h4;6;Ap!9 z2r1w|hoN7y>#T_7yY;~TqQpu9(8KL5Ex%4X)ztb<2An`3RY3A1bWwhOb&ZXU1qFsB z1L*nM#m~AeU90PQdV2g%_D!bRA-w{^oAHV=m=M)pAFm!n+L!2Yvfs#OrU*JKN=u*m z8)#_>FfNvrl&A#+G^D4Sf)0OnHiqH#oJ-FlfBmBFy4?x)W9v3VrXrIh68Vpqn3&{= z@9&IPruhI(#pz}em~FK=wx*)0}L5Zi*5T=|~b zh>0LctL?ua3IeSb+Ss8)5fhK5U;&F8M?Ko`cL;*wD+fAXaW?1jGY}P>o zOnYd^cOZTbGmWM|M-Yy7W|oBU1u&>?7FDzocj(}bjo+r6Q&A~alydA zVAW%87FuX$XYJUSJTy8A5r?VQVTO=*(n4soJ{m(#Mg~fJNYi}mmCKhuWMm_^F~c1Ng;4j^IzNAl`nrb|vUVdr1%~x2UGcavZ{IqMA1*=%P;AyHz|S9Wdg$z0 zN^A!ZncCV+)}S+>XTVHeRgl>RC3o@Z@AH$*Vr|3L)+s)I{`Ha4#P0A|gRrwhzo(6j zsj;yPGAXObk78)ax5b|JeSKZX#1fj9T~Oe>zZL@75^xlLVyKpvv&zb*5mNXs=}3Z> zLAV-j93v4-z$4(0w^zBZ?$5TV#2#u;PSza>=sW0uIiRmU4nsTlxV+p*W`2J6v=c9% z7PKyX;7nBenwkCtZp`TS@2BgP-h_k;$Yx!1@Wf*?v*>qK&ELO&D0-9e@uSyFi?f}7 zXn44XvNBFguFH;P1GGm!Kk}489v4qf6@{_FPoI)f5q0U{gyiJ>{QO|Nfge9c%52mn zCH;T}@O9C~<^*o~>hXc??Q8tPAn`00g$DA~te}Mp0rLm`{>_oML*R|Y$oWL6m8Z1y z(Q7gRpyfh%n6K_$4kx)GR;xL;w}*%FzVeMCL>m)mO*PeW$q!+00i3xo3_-p3k`+=2{{Ate6WrJ+F1eIniPO{7WlW_C z{nYjA*LSuZ97bjkFsfW;zY5H-O1+Szp%U}ERI0VKyj)#X1tauqH2!kx#zw(lwkw__ z$de;S0H*DJ-Z>8~*u#CI_nQwHjoXf;gzbu$|JfqN$I;OZ(CLDKc$$ElI83k7p|(oU z?A+b0=B(JP?S|x7MX;S?k!5}2ZXf=+Yo(~pPGKYdc%+Zl^WNH8?wNJ;!LG~|D}B`p$hIXEN) z?h;5PFwN}k>H_d3;B{X}DX_=zYUz;l0uEC`;>P38t&mEGjUxtFcRpTTh|EHo*(Aiw z{ex7Ejj2;P1YM+bF9l1!3=bc#71$edYy@kDot@p#&P<1yjV=G_(-1Gk+|~*L+Q`GP zDaw@Oa#i5aT7tE?4_kmgYQE{>}Yqi zoa2V%(NWTMq8{ix3>y4edwMn|k@^ab#?#Oiqv9VeE${A8TieXzabVr^0YDHciOQdX4YN{3I5~E7W@l&7eqi3E| z{t<1naxz+x5M3-S9URItauN&%U()5vkU}6fUZ`1R#7LJaPhX+8Z zkdRhBN1N)zWW;~P5vgV8%6tV0XOLJT6r?J5^&qdX0SwQ=oSY`dTOrVn;$mI6TrI4u zKs}rYQXDBo@yYyPdas;(m#sSMFt4xxMiT-egou=Mba>cz*BY`~zx8rJ`sv`%P!o@@ zOmgyp_^Ik?5uEYdTe_k{c(OA^YmJ#r-wSJ?=uaWgqPhMdq~FVgh>PoRoM zJZ(JKHc_jNg^kU{k=#m3?DgVC_?*{g7${-Vb60rt_RFm7?BFjqm^Daf%uP%>rdi)= zYkF8M%U=Z%&DjYPZW40kv_SNoj0kq1oS2PKzUi1-vEAAYm&ur4T;QWc35{dmiB}{d0xJAfBzA9XW-+xrIfr zYG`b%rL*%()|~-0_SX#O%tnTW)%JQV(06)^7%C}I@F$m7RHUS&Sjq>{fkYxVAD<4E z5GD;}M4PdoEOp3M2V-i(>2@ddCMv078ft1$d*4g;-tIp9b6bFs3T8U;IxGy(0$cis zKIpqwRN&ku4^oA$uB$67IM`c<1ot+%pHnPXd>GsV7#IsysRr;Zi%Uv;w#}2|Gfi=# zc@x~_RLmHqK2lHJMHy#JdT?+pyOJ2hp+#Ux~8JKNh|93?MZZ2I}L3fx9D zH4EJWxN{2&Fr|P1zZqNe>=tO~OVd6A_qi6L6(Us2uA%wk;VItPULjKJcXW;N#IS>s z@U|bbhPM+QKjo9x7{;?`KfNyeYx61Uu1AY$U(ktHuqZ(x`r$WvNGVB(;B7x8C*8?&|K1~aIdv@{7bGj;IHB_|`v85w3u zO4t=xFC}SIl$5^3(!7oc_5aL7z`cOJuU}MNZu9u@&dwOzteq)urD#crm(0ZN?bpFG zPeO&jv*P~D79u2R9pM%dhAG=Tq$?+qhLcK;j$97jzK%>xzq-0#PPi};T&AbD(80E{ zwA|hiI;0RUXlM{qSHCI3fW$zgES(}gb(td4Iv$Oh1bt?nMZ1|@j89BVIqgL%I8|fk z<|e>F|MclOay*#rd(c2b!ef5%DRo}m)29IvXc&5hCE6AiB3GKBMRvEhe{5)w80f43 zHY6WkIk@P=RaIPFLwm()@ky!;6cpedI}u7c?7zn#KIo5`hIDkub#=QG(*?dMfKkNO zR@cbLNJGQk(Q)(FXFF@_q<5dcj`18RD!-bbF1FNR*3+wnYucSCz~PG)EE%8VmnDDm zW_0M+9iG=kbgw)%6h)Bpq|nftk+LxDF~{EXFZ^Jh#KF4QOz6Otx4ax&>F(lk?Q!NJ zH)C`MX!9Q zs^b{p)5YB|HTA)>(~G8Nvk=S!Tcr44hS7Ee5o>fhM6D(JKDy~S`h+K%#DzxxQZ(w`& z?$JqE&PMrBGE_FR##Bzq_!id7YDV9vjxf@Tx)lcH4ZSBS3zE=rIW5E=95kTElef>^ zW5D1RdeiY#5y#wRLy{q+)s#YnNd;&mRZcX~HT@u~;~5t#p8=GC`A#u4lKbHm75iJ%JYmGC*(dg=KCuhsHLlB*~wI~8p@3mPJjvB;{kJ(>Z?$-~(#Dr7AuzTcKlnemICBv$jg zps&d-U^{^q>~>sdj=Xc_yXm7NGR$W`8&MbPV+GdN6RzH5pvIImxD8f=EFFHn=Ge%H zP3Z`z@UE z#~-h#o3EKeN67llNPWjMZ)nA>CLA}eGgE|zX(>Fw^k0pPI{IJjZc(CRPW5)et5^J> z$P(kN2*FpguVL}r7TnLM)6&v%aui^M`6zLRAzGT&8?$XoZ*nFME@vAcH=~de>)oaP zUeSZKmY3Xw*Q+hCJ+)b5!IQ`}QAtWl3LfeY14}meTlO?-3icr1xGPcBFpPM$nk2NId9 zAUXcaOKk?8wB{vOK>+!91)7^Mri8xVG6Xyi4G9 z2CeYI;Z(7S@yUXYcJ1lS%?RrDFp|OfZS=F$=Qib|$|)l8NlA(Z$pZZ6oGx?CYBpFJ zc08C6i)ao(a2IzB$dnY5cx}Hk9hW&<(2X?yijO>7}ykE=6KsIU!ot}Kn zqqfPoy}R3gB}bf&5fz!TKE2d$X2)OSwUtNwd`Iuo&3aH?@=nlsChh)%C3=C6g@pp7 zuRCMU;ydTlnU23)ckTQp4a{~{OBQJj3?Rkz(Rd=*-jl4~j;MPki zpL!(4mYEX|f`%8LqDp%i)cLKsv?fq=-$v>7; z9QwA24|y@v--#EhX+=CYPLKD<)YaqO&^^@D^f_`_{E=VKgT_jjS9kgux{aYB+ZArl z_Oi0FPr5NAWWp=?m6Ks%NSJwo|6T-Cdti|fDjJ+8bT8~IqPBK=#d+pw-QD+UJ#JZ9 zSVYnlTd8d2sJ~A2*OWx%IO^&l$G@8)cd+xrfOSScBxv5E5|_zT!wcG8&d#1&BpO}! z$R3Q3-U-mw*4EI-l+XOW?3SOuST_m70%X?NLWjCpUpY{}hfIL=?t2ihV)$jWs`yvr z15*~}IcTJidrp5w#9E#}5GoDdT>f>Ppx>dax%u35vp@m0o~|z3?Hoo8VRSEFT@wlk zM7BE&b4lE6mW@hFOFcH(EsM3mVeagV>Rt4$94pbycWgY{fcWK)0t0o!hQ^N{KO1wJ zo0}73A%T14P%;r8p9lCY6})e`x$?!@@1kdyV=K(sdSIycKarP>l2uV*VIDo5jbLLX zd_2{_jn$l+%Zw>m?X@-YnrsI$@{^Up=_*7US(KamjPB*zx6+CH_9nK*4mc}%S)_7$ z`LU%|$jZ{v`;}pg>CaEm?f7+dmPePM%R#cPHC9$?rKu7S62jWI>O+m`uKn}Himkif z={v}?Ut3Fpe0lt!lJpts)XheZ{7q&3^78L(Cp~9dpCCted1J%UB@v7T$j3kylPl$- z4tEFZySv$-o2|C*Z_iTFQ&W$tVM%sq*;{?y)ipHxRa6e#-RbhQk>*yuh>!9(f0FXz zLbu*xFA_}sc7EOhz)^-Qxu)hk3WW5fX4NIT+UQ1J5TWsrJF2Jt(sw(mD5i8-r-twMLuPkF$@2$8_ z9^yK^sdF_!avb#~+Gr*11`&Ih;!d(m=ok|-;9rFchvekGqroF3{bpGTQM7vYQYqTB z4)c9)gGtBL;g68w_GlxRgz@X8XVe#;HX1rEA#wsfyC{dBMFAV*M2-PL;j5N`Cz_T0 z)-@jMGP4{tztPiD9tF+{^86}7ehE?%5J1vxUCK9ZuNP91iQOK1wh_aA2vj5+-_z2H z(`ukaAmZCO@8RL$vrfv_n3va?7r$4CZ(7{$;OWJu<{Du!BSh|zdP0UrZR{g(8fj0IcRKM6;TJ`pxwzB;j`czSs7vxh~b%F0A_iSNt1!W1iD2k z!K-g|b&cTbd?ED(8dc);H-7k}q|Z#M5Uu+>=JQgof%>Z%?GBE3vVOKMxjt8yV?5 zElD=Sd(;%vJT3L$LFNb68n6Dr6{3qXlvm|lK5DwazCPQdbyRcEVeE*KU7SItLIGg* z?c1x}UEVa+pTpUp3E}9u_EV0-4=++alSQimO2FzKYZVXEUZ|>7z0A4$R~gAE<&!^l zWJ^YFZh6Y`js6#fnwg>W@#(;p!qB0SksAaAVd-{0P*;3_jxybJ(7bsi{X$q&*kNta z&yQ}m{ZWkSf%3&}q_5M;I71!uKE%5;47pcGR53nn0Xszz_4pc1*CKB11V062%pv!B zINl8MZh3vmv+WQ{YX0vPnMuNv)L>in8Rp$wRyM8A9JlonjlWXW7flQ;`j-yItt3I0@T6iZj6cc5m@TLIzCq5j z#FY=7(IU~JorbR}CsobqyL|0Ao8!IFibfu?t(#>}myg9JD~VYx>b313nOobTKslO+2Bc1sWtMDW|@wWt$ z^%D*ueIJKnXXC+Qr<>4~eyEr&&cV*U?MK+_@H~mmX8%MlFHbJkLOQa|?9bV+nb*zt zO-vk{-8x)aS~ZVqo$ZYE^q~COizo~lR@RD&-&jbgFCK z!f6vG|JMfc?=9gZ=7#1w5CNo@D=ER3e>3P%S^CMG?%P z-N(}HLo3)uE3E(5#?p#iXoE?q&ZIT3{2TQ=gMe5#whzMJHF}<4|NKAJak-zYq|r?} z^hge~%a=WL_!LVqnhz(AH7Z7Q^%J@u`=&xo`6;L<0#MsFzmH}M{YWEd{#n5F*EZp8 z#!vQZ4Z_wAVy`f6t93?M$PX^v5pT>M3m=K>a_eIHE@VYF&h~o3Ot=DLT2$PVRT)3AZ14+-t7Msv^ zJORqjuQ8lv(Z;1Nhz*66>@JxoRE zTX||2iR*+@V}9Yv*jG#B^^)WwNuPWFkEIK=lP(zgI;}6z_vaq(g>t9#arhP>r>-;+ zp60GEld_rziwr8~yj)jTZ^dc9qK%`)d`1mxJL?sCs~-6t6i0VBiSiuFL)L&&bBfdl ztyqlPo2n%_`8*#&s$&1o)MWhNY+T0l^k0q&_RFCNq=d0wJp`a=K-(*>FM> z(H8yYz0+Na3-49w2#Fj;e0GiI)cTfV!P9D3?GmpzE~A^kARw?A%Fz>b^-_FbQQDiq zamnx}9QX=qWdyimV#Vt>|NakwO`eAJoAem;R`O9h$W?Ccq@=C62YExF2l3T`>Q<<9 zb@j2RZwh#M5Xe%gvY3hi*H6A4)g2b!)c>ojD}jb;|KnpxvL<@;Y*}KShM5;(5IrJW zqq1a~>^l`hNVr*2Ny3C=%aSFsN7)L`I+kk0vy4e&EXj<0FzEm5-}|5czxSWtoO{ll zbMCq4-Z^vU`}ux9i|Gzv$RbF!UaLUB%VhS0$WBo;?aahPzx6L8p!W!{!Fp)3$~iju z+r(6RMGfM(&v-o${f|H%J*x14WQxW!VY^))inQ+o)*#4ED(oTzA;d!Pa~TBU5=^&#!Ex#^XFO;fHQ2N0Ija3fk@!Jy@>oOE2Xpw+n2@) zDTjsAfTZ4EBg^<%uOo;IpRZFjx3fFGH9%z7zX0yByxCq+b2BeUIVmO4LcUhz3=a)) z-i`t|DLAmU!meHdrs@kXsdyv7$=>s98L&=YYEZY=HDHMZYG`;Xm5_4KeM6KWNq8fMa9+CXYjZL zsX>jVg{c!06HK}T0Tutz+wJjb2L~Of9cBCs$DrkaK0$eT!hT7tgLR1H)>Y!4O*cw} zI_`^LWI?Q0J$WwxE>z$J=8;l_YVgH6kry6%j)xRmd?_oNn?;vcJRh0GTRi;W2vGh=7B)4B2 z@)2$k;%4XfB=$^*WYWLxQ94Zg@f4|~yE43J@0Sh07Ue@CC8!awl`odC!ya}CW0-f28rZ{!Q;{%7e9r^x!K_M$|(${e%_p( zDm!b0x59`HKF7ha%G&u21`8ezGG`~H&z`ra4UNhcgNaB;aB;A`?|r)$kz#y6u&nd# z<9`2|Z52ZGz+_=-LjWu>)BMZ;6o236DQRiJ?9ho7JMGX89Cfq*3lWa~dAXSI1@ou4 zIiMNjdI<%4w1eKvRSNDJnLcnSrhBTu)nftBliHj=;SKYg-&U6y{@L@;v+S3rR08+< z_Rh+RxmD>&fU}D|dC`I$bdUJX-r-?8FZ{fU7!0bkzS>Pa0l1JVDsw@NfQ>DaWXKz< z+elIp;_7)G(#e$iZRM4ec8=N1X+*-_i?%%YgJTIO)Qr8#-s0`KyPw^BNjZ<26++b` z3}@VA-H*JQ6%zKX#G)kvDLR~c(S4)P!LL27*LTB2oeE z5ML87qHB2c?zWy?hEc`He%APr1tT*vq{5S(7CJw7I|_`hLHPFhk|BWuqYdjxsi`y9 z>c}y=nIB9)X;tC0AGo)ik!FEzxe->JSB;-}zt8J4yz}96hmE-SrlEA0?EB1c*(BQR z9p$=HgCt$N!Y_}$N)ZJG#=V|&QLgeGvG_K(@=;S`V}*0~TSzA&`*;s^fC5)l(HO&ei!b8}y+=8SY$3T|M65NG zts6hvrJQN)mIk^HAx)7my_r`BxxC&$WZ~CV@PcE9l1Q|>jX@f@aPa>VqSbQV)0ZL0 zbvyF3;|Fhz$kQS`300;_W=mU5JOSg9ENm|B2CbrpT|>^IFm_a_a*^vK=0tSh*>N8q ze)`M-{nEXqbanK{%>m`QSguHH3ASNu(vmJ&6(d4sgHCGP%<4=?Vmxx2=otNF-)h_)QMfGN!d2Nd@Xx`hU=B$s3&s^w= zG#kW_{Mr^(BJQ+nS55h;`Ty2C<@e_iK1Rvi<*sr!k#7%u)UioCga#~anMZy{?*#r= zJ{UWz3o<}M+*93Cy{65t5R$lO!(rJPdyulAvCIcUjP5@7jR<;+*0OM@+LT8wdm2rI z{`1ivot{a@_uR8e?skLu0f%xyP^GynT~KhPnu9g z(<-c3?Z?7@=_f(lwy8pD(ccTb-~$pZQ;cEJ@0{`BL>7XkL=pUdn**ikM^mde-VG9s!Y&Z215b#r z5h@=b0WOD>=GP+z*1iUr;R{~cS5O?13))}&HGQ91y10`6asF6VO@4vFB|f1H%T(=_ zNo-U6!2J~ba#lRuHB6pzDd0qlw`F7aA>HokXE$+t%h_Ts@mtJCPMVVZvlOQ=DWi+Z z8gN!P1|a`kc#n?1YSv)V_^y0in+nW^N62D+uNIjNWq6px4W ztY1j!f&v+U`EotWl;2yj?qxo@ICA|uX&Ur~-VUAYf4<;sJP(;p_qo^9?Kaqxh4j0* zfqHwMOR8){?F#d;Fmwh(?wXw?xd#*l1SSl;M{As&ofFH-|FI)T&pg=X9#B92GMr2$ z&1W{q4;BehoPb)te%wDyN8;fPUKk7|b*`qNdAF8Kx3}N8!65ETO_^kaR_m9&y#Slx za7lCj&_N$?(r><1oNhK9B01R-(9QPOLg=l*`wjMrX@orZzz)#5FI{^;QRmT%CnL2w zvD+w&@%;L_T?^UD9v-jTF&JaS#-YZ3AlkB~-SBQ-4z4vN@iMe$Vs#jQ9JsKDIhAqU$hURaLa!m=5P4^Rc16OV$IamvG_)y zFP}i#6&f=f_N; z1YvF1fvJ;zhVS%>cu8=gC*L!!uC6*&ZLE4NUmd#(&AT-%?~kr+JZlsc5)wxuvQ<=6 zVt=vNnMX-)?4MrviY9%~ekY!#CSYq}@t#XuMqXaGzV_dr^7R-WBMDv{+FzZW?mM$6 zmaQToAt4hJkGCxMUEGEAJWg{dB0DzU#ONh5v5bUC^vupuS=K(rp=Dub-(EkrHZfT^ zt?G(xQi_hHt8`w*wS4zUiP2pM(X+|GuxI=BP1U6ISYOB#9sN}0+rd(A%ICZK%HLvr z8xR+lST6A-Ui);FZ{#E-RN>>nIjgI~ql)ZqyYcz?a`C1uzNaQ;W|B_ssqb`tZ~d*2 zBF(bkO4ce9Sy^AF4d=*KVG0WkWz(;hBemyos``*a=q)mXrm@}iNIP#U4~dDT!$d>H zqx6)y8PY-b5oJ%|OZ`<|YAX4bZN)RHN=IXZ^P{x7x;hh)i+tUhrM1z#TX>ECRe)ISv z0Re$#eEDSL&mZ23OW85CLYtxYm|2LKVF193mC=7*(9h^npXBjBcs|(^X zA`E{KlbY&%b>Xqas;oNfCmAO4;DN^yYmQQ9V(+75-=c!ku| z(XS5=_#dgha;sP$`tq{Oyq`EMiPPMdIwt1*giW=>oJK--8^?zxC8LT-DX9*-(xx~MH{pwKj_ddHGT{wx<4VFW(Sq%jl^+whQ7;&$)(~5+`1+L$8G7wJ zwmn?5P7mIw=gKzL>xL0DOiWC!uIoJZSM4TG%UE8%c^~$pyu6~kJciY(FO^@Xf`?pS zM3z+1>GG_6ZLOa_oJG%Os(7v&=Hu#0T9nY%&d$=#&ZCD_S68=SQ1gXZ`sZS$Z3n)+ z{r%(3Nztn={O*XT9>jvhN65_CdD(9AXL-eO|8TBi%>1V~gx{1cfq9QvOs#o7N_pec zs8z0l{PIUm-#48cv02o|rKXF@r(v%&5MoTU&fnHUqodruIZn>Y-$y6rbnTd#^D6Bz z=%TsuMu(=a2!m4@b26VT?+b@AFVyB+Sz8B)9eo+T_E>OAYD0`Dr24wQ*Za~wpdsvE zP;hziB52gAWHPdS(@j-5|Dj<07t3UuK+2SY!|@UxI}a`r+3K1ah7YO8`1x8TW7+n# zd9+2_{u1&6ta@&ZJHWw+B&Tgx?@x28ftXtUG!+HDD+=yYK(o0lDdVO z-*#@Do%$S?Wq2TzR|Z>z&dXK1Q_g+osppCp%U-?JF4d%Ig)egRE}ySjnVIGE_Oha* zn;7q(oVe@irp3eeVO?9-bKf52L^jadG$1#01^Wo<4o5uBN7> zc#W#8tjvnAhMV`NtKQD>>)1a%u@Qc=Q5hAb?ByjT-+Q2lPfYxKc-ZIS1j{rl(!$Cr zK0bbFZqD~wB*1f(>&K5DQ-A;R*o;%r(`&tYg`OTA*!IHE(2$#(TTwA`Z*MO>o#M?K z9t{nRTeohxx*ld_&E@1g3YC-UYu@eY|Khe|1Cd1KeqxSQlEykuC}@w zBm9N!cro>pCyw3m1u%Xu<5`&4*n$u>H#ZG)^8}=@Fru{dDH+-1Pg|WkckaA+@xl<} zE^MHhnv{TmI)DF*<^H%Dx9!KQtYoC5$z4>XWo3&C3;B6@G4b&~OG>u3wx&yrQ<9P% zFf&`r$S@iG{L|6bH@Dru$<97AG$gLCpOJxd?Jah%t&^FlJSBhl5IP()b5|-M6Vo@_ z$)8AkT-+Vp=!TJ|CcS6RGD}N;O-zJDMMZ^&_jY&dDk&*ROMeUxudA)~zVs|xTeFgs zM0a!Jy?1Z4y86%bw51a*MgQ{Zs-d-YL4N+o@87>iN6|4qogZy>b$8!N6O)iIIX|+s zw6uh^kes~cenFt6m86&vY93(<|0pFTHICSRDlD|Ku~Acc)@tgww0<)y8yjgQ%yE?gt^;)OxZr%#{!%gTmZTi<18(~62VynoL@ z8vgCuw~~^QM+CRw9jR$)MEC9?B1j=xi#e=X8JUpKP;4a`Vodz9DQ02HSXlDmVTp;CzI-uVTU%peWBc_> zc64;q;T1YMdR-k-mtVl!_3IZ87uV6@VOLjIbqygJ+DTwwU{X?&C~{?ES6`B!FD@?+ zZ!ul`6<1!)?c+0ippAm!%g)YjZOzQjUzL;dg2N#;mI#Ui$%CYei#N~k)n2`lFJO5G zHSK)c`YMW|`_=c%cw#!0KO!Zg^~WIXw9j*g$?kcSy!Ql-V?jC6E#G&KL_%Os_w z%-!8dmNcP)RaaN@@r}bujR+5KDF|rFw6)3Cef`?S)pfvvEA!Lt&Q89*{n5!TAwdWr z)}MBNY3S(Gw6$}x%U-;CbvT@B#8JrnSVWcLecb!^(vFT#Y{H&!jT|2xJ>}veAt6zF zrOQNv(1^D<{I`|M%X@$Qg5IpErZ&6W(cRr`ZfZKL>CDH^kA=qTsm6c4T&b2l6&6m&*nOCh2T5n$eZoOHiu5H0Z?4KEewfD}{*0$Vjdn=Ms zl%9cMea$LE#D{>T8x<8-OUK^xT7;H~$zxM{{-I!}st}r3U!MZ3QAtTj=z`PJ2!*(~ zxLSdMrIM0?s;a7m1*4##m%*$Dos+tok%@6*Q4%hCL8&CuK9n62k6z^32GQl6P!N2+W9ruggl(DL+DyB06-%V{oXtp#Z4q`tE zHt#SM-D(*cDm^-iINs*`5Z-`{AbknXHCZr(=8|C1^SP`vF89A0931rb7x(k?%lz~7 zDRXUI-NJ$i=hLSc7#N93UHw+4dy80DSg@=`FI|Xy)yc`pr>7|>MNBl*)HbG8&24OO z82`Ww$;o|y*N~E~B`1?|oVIp#-DM$%k`?(-P+M8~E+u8r=g%(4>JU0t@^5Fal>rno zvXq{lp4L`6TH2O0!OO3qN$o%<0N)!KeR}t9{B(c$S-GjH#_MVqM+XNgHa0zV^}ZgP zzppc}(8NS9ipPHaTDv?y$j`TdDo064iRqu5lCrtE>F(jdl>6}>hpz75KiW>tC+FKv z4#hCxJv|q*E6B zTu7_9CgEhcwYi6frMfz-*tm*gt_gd1Hy`=wWLsMsD{C(+3lDVl@(Q<$gW)Iq{947e zmF`cZ#l)UGc~bT5+v3jLa~K$C_ahnHcc1_~L7qIp^mpJ(&C2qNj8xRq^L2FGg?7!t z!lTlkj6q144JCv)te~*a(%O0*_!PlyOXApA-=~}6Bg4a^gM-SdI+E#WQPQwOvZzbz zv-0y0EFyvu+40{sIXK>mT<`bu^7HXcBXwb9 zBqWudhoQB#7d>Zjp1 zT<3Fs1b966^Jf6Glzhb*e=3(p{xTl(4nu31`Ji`a;Zs{l-!Ye8B6U6Acdt(BOV*q1Kc(%v4Qew99iXG%x^ zg^`(o?dDBk=pvDnVSD?xG0}JdQ|+Ofgau_}XFpe0e`9Ai-IrG1-rg=Q?mu!a-vY~` z#8}G8dL7!3BVT>kefAqQCx8N&avl^cEPRIb&1tR>(1}ln5R_XEKUy1IV2G6X1aKB6 z8|Dw5S~JAS(J_dMk(ydYTzv21lr#3J1wT5`s~BB<{jr&uhR>f_n3*S=n$n*o<}BDw z*G{yw2=nra3JP|2nCC&Cd;cEu@bD1}E0 zif23$9sOr?)b(Ghqow5oS%!|+_1?+~3Ov-*CE3}=*H?8Tg1yZ@ZAIXo9336Ix)6L! zG-qe04s{KU28TIs4GlL52|Db+YR^M#X6ALE{1gqX0LTwjIwvL`Fn00q{6_QFv9hv~ zliR3v&DoKDhaS)bmwn-yNCt(Ck(n9sTY`nWx``fi<6T~6 zW9~gNOg}!?wb+mlN5CJ3hI8?(DV7wZ1R+8$E19WNq2uFjvFgMcN+(YXkGKA+>gXh- zrdt2|@z7NO1)PC&S6c z64-P}DJf^Brksv8EO++J6L>R35p^A%6dN%q>cfKrO)af&>NxR9oOrKh%*At9lAG9ZcN1(OV9(&~0kwNxa<6K-x9z^{yq<3D>l zMn?nBg#TX>#ydDlWoGtBPfrgG_1|Kf?evDOme%N>Kh2$;(p2~gseCBXOi+D=ea; zC^$ZZ6RMQ&{!+h(hezW9%ww_V;o8Xw+S;zxz|at&+oRoypCsaGg0iDN3jTR6_eX|MET&s9i(Oq z8upz#;h#QD`{Qzoh@?kF@jrQz1?ahD7s!y`D|R%o3i}z9UpLUimX^ru|DFYE*H~sM zea)7NRFs#m^SaMKOEq^mO_?W_6{aL`oYQn_Pu7l)NVj z3JQQ>XYEtNKwXoR4D9N{QtC&NpywSNxGc}ku54}saFvmjRe7cR0QdndZEt61V#;}- z=6NJzNlI}06CzaA$lUQdCJxVn<>mAZPmfNSzo;(yebC9ZiD zMcZs^X%@4UoYak_c{!KNPlT-8={y_&NlK;9&Mc3z*t!)7iJwn3aqfNoa*UCCN-M@al zxWvE=YlBOFDk|C@`Nqk0oBfwWhxh7`>8!4yk&$+t_WVSdxx0`ru-L1s8d0Ce7@wPN z;cX4Rh6Q0~hg{)_ZroZnF*gqm3=9nk@f&Z;%4$;0?ffOBYqy^7SY<7|!dz z*&9E8cwvll=MZ*DV^^1{sj0`w&Rq^sfVaZlCuGQB=qb>=z4^#nArdrbV&A@5LWN*f z?_5|~ii#BLgjtS}rjunz7#LAwXJviD#kH`oaIim#72Sbz=MJmR&kvqu?3z_7r@bk~ ztrB}b^wrgI52k_m1>CyX*qQ>HgY-;RPmhh3mXn94y{&DrFRiBW9uplM2_+@oN=FD1 zB4fa>r=s$!k;B^Wwr73SDFzF%AP*0QXMJd>td&)AY3b0;4yMKZUzQKvs>xw3xIYHq zrKh*G2B-k*sHy?SqYZtmW}L27|BR`R%nxWl==G{IP;RKM1pjfv@% zipsx#|5B5Zu$oy231i&d-8VKi*z}NE=@P6@#~Y`HY)=dgKY#ghv*SMq^tZ+hSP&Um z*R=baH*Z86bTf@3!^45XG0@ZB!Nb$9a-!$lzv=MwrL3%#r6mk%k#@PP`kTNMGL%}= zU%!5VMDTUy*-y`n$%=%GjO$>^qkf$_5PFsuqf&ffHFn4M-e(sl!D&ZEM*#+rv~GUR z$r1M0v-r(j7WMIC@tXn}50ADfkH$ZLJRKZ%cIId^`#_zr;4%YoW@iVqilHH5NxaEQ z$NBN`m8|C|jjjRDpzgMQyOldQF|m8<90RJx`+{y|d#Up6Xjg5`pUs-Wf`IzO+ z?Vfm;>q4DH=;tjVarSJ4XVgS}_#7NL$RO0aCxrPRB z?VFzd{+Vjmeb@;@!^8XgA?WB5$=GsoawdqmxoV=>KX;*w_;__&Th_x_mg2Iq)ARG0 zhU?6%EXVYg;U2WC8n-THels&-U|EwD+rC$?WsJ>qs?`prs&0>b#Zi%!{hpO2^8Oc8 zkki|weSovx1qMdPbQ$u%joI4T1_cFCQxEre(Gi?(Ob|BKLgA}&TC@Un><}5U-8~OiWB^S=k$30-ey3S5;B1(GwNoV`FhvOz_dlD=M10Ctw&oPT9AGs6a%3>Wp@q zot8ELIy@Z#mWeMRK7Mg|d6tNuo{S6@DShsb9}?o?%>V?W>0dI2i|AG)3Ejy&Mhy-E zK`e#WPfeeghL+YDIb5^UdBg(n#mC17AnyojsfUW3Tt0MBo};vqlEJY1)Uj<}e-CDN zFfDiE;@~tMQ%7ZXb;&@h%v|W%;DlRw^X8|!kiNBb3P4d2gXNl@wha4B|$?PoyOtjtw5w@WK<$AutrAIDt`X_{xu(F>OK(> zpV!gUXkG$vQdmH~zD>OMbvWiffxPG7@G&m#!fSDH@kaM;7_DD9^6?}%LE1ZiKbP)x zXTP9{`tadHW{sJNNi#;+!2!9LP@?I<^9!jFlOPVNc9i6vg)n8YPK|3le)RT~S2Y>45cqtD`t@WB^ReL7m zjtq%Yh-50)|90r@9Ts*t-7}4eK?v3Ep#y^m-rnb4-PoXu$^muZ9ef1_7HhIx5WU12|XU@4oMtT*~!&7EB0bbFN$6*V_E*Vo^lk)f}oDUC*|tf6r{LL?()9*+OO zA5abs&cf15*)wC1;ACY(VaXdCXM<$ir|^{bDNxJ~b7n$9L{(2uBueuJFCh!1s4vKa zF$oD^Pdv*SFf_ayjQcS2WZ_j=Y3b};Y|*cMeSIMzSUVi|h!$>Rzu&pw0jbx`M=tG7 zPD*J_jhBfDn$Rr|kJEquj82>gEM--k&i4BHBJ6Ri1DDBn(m(y7+MA0=OHZHMQkY#> z*jQZ!{H2Vjs1Ohm>XxDv<>#Z3>Ox@!6jA)J;63UZ?=#R52M3hgoM{{F-`O8A0(Ov9 zA%2>R>z@hKyn)>AZxF{w{!I4w_f}La3JG~)!Ht97+$=sr z&p`M;CCG(-`8qFp|DWW4-G~|!8@qa7Qcymo&8UQqK<3%o3{T<-epL;P;Ad0{=|a@B zv}tK+f5*pTV`9o&n38Dynhd1rhI%w{6Mqejk5`(8^#c&H@5_<*4kVq$vx`s}Q%e)aWT{dtU%vz#@UxVu|Ym1dY@P@+jk0C4^p>)TJ+ z*NRTj72`aNRNEz_RM+@{of26y;MO)W}V&CpO8N-c8z z7VK(hGmY5w?u}vEEb)eBk*Ie?W+c0)qs)9#C!TSluy4GjK&{tSS3f#fMF_!Wf&TfQ zBKZ~TW=sB`J|YE$zLFA0F)_badFm*IfBX{*$*}{|wNMiCU(){mt*)n+4$=}J^VL;L z0f9gJONEK2h>cBtR21ml@4y(av0*7c$!j6Di)zEf4opr=O!erh9ZhEfsdVGdqK1+Z zXxy;Pin6lAypZ+{D+7+i33<+b{2;28zBI44wl9DFXkT3kYH4Z$fB+*R$j|R;y3Q*! zR0L=*m?TzKCPDWcZhgtgfdxcNOuV|ju3PiwVP!yb3oXd}2Zx8Xb;6E(Q@tq_G_>ZY z{0s~XWo6E4YH9+4f=4$y(UkJ=sMu8fELT!oV4^nS8R$qu$gXbG*$NaYc2XEq?h$S=95gTOM_+BGY{P z^n2ygCs#f>0Rh6`iTV3C2j0GadU_fcO9bN#cPsXFj>fOe=m`nY)CxWtD2IaqR#$Uk z+%ELNg$q4J3(&{kuI|AI0Yo)5F_D#(B_&G%DZb3Sp@llYg3Hs$2t-D4U7xs^nA@1k zZ)qt(7`uy!Mz0xPi-tNHb*jai8`<2`%pcS%yPM{e^cR0uZb zwzOmhrQ5zUwToKCBJrV2;bO!2;g>&Ta zk>qeDkc#a}(opZG%>zvPair4mIfz%l2frDT3_lt@J8MsJMD_OOLqo+{`Wg`tK`Rv@ zz&Cz6YI{cKAv+V2FmFDkh1qDcNwv^(HFN7fy&AT@GF))G; z(^gm0#AB1qF;&$wRt^phe*EAf2>D^&Z>OO#2BIln`3uX`ePd`5qJiKk* zn0bVkhv#mH1mB%q)R^|#p@9K4P0fRauHiO)5q=q-InXL^&`i<9@PvdR9?g)Hq5Yrs zqM#7*_pfk$z3&J)#_)%xpr98Z@1vojfO$7jSyg3il~Xr?f)Wh<8TX-pCV11Bp)=6^ zTSi7=qoa+~iIYsT9NdV1vK zwV)Qh2pnBU3MAmM?ytYP5`p5Ur$>P;C63`P zY0=o!R07WI$BzjXT-u4)d_0$mSRoRj@82KnINW+e>U#JJ#F4o<#OE6S)vH%LJU?L# zcp{I%a}h-fIe5~SgQx1eK*4a{Dy?j2P?UH_-Va$LK4&Q^QVB^(NRp6{kx}DgQc$F4 z_zEm7Ey)U>*tT{sfCvTsw4+sy>|G4tlt| z!$4&w1us7bcwJt8Z=eH^$Q<(S7AHMe9`5erV{U>lyO?Rn*})TXdw`oYX1%0P?Z%~| z5)x+q{;jhfQvex^j=<8ieD!ocS6|2R5j{O9lF3O)%?(83QjUCjvtpm(FYmRs*S8ow zK|#3{7aI%RAT5>rn^Zj>-~xB|&coD{!}8+dk7;ST5bt3`__eesdwO|)kBl^Tbr_%o zDf;?e1^#^sO5*xhO2O-IIPK+mdACV!gJvNtEDRC|$W#E1K)!7X|2!e$r4 zwPkK;nH{=ISSTAveZ9T(*4)rrVEBmd-5dPOg`_eAi2wQXCsi5-h^y=kQ)p4)#>Qc! zRCn*rfqV_bj4H6PH-)#Je;U*bSiyg%rV^8q+FDzCddE~FSL-p&J7Z$?Y z-NlNDiMhPI2|{FQstLE{qO2(^tNhwUd}~jS_{89C`H6GGe$affr?HY#Q{@mD8J|mm z1Mp?SykCL?3(=~L>CK|t+}wOX#tsg4%@m{`A|hsYPpTBzX=ucCbjU0^-GyelVi@2G zOY!#88xIKyL0jPgvqwi~e#N4{si~J$|R|TK`aWXIRTD;uccfw3}j*gm*N+3wn(sJ1paE|O3h$SGE13Jeu zQ`H>chOsj+PNVT-EU^88tq|Ffya7dLVy5&ENkeiXtoFS@_jtJggnJ=S% z{P^GMaEH8nFO_~X&EW7bP>7cP29u@d^>0`!zkJyo%npX<%vH>QNZs+!(CS7tN60BW zGJx>gc*uS?yC`zP@wfDLXLmx8ipo%-K3+swDOZs;a|!b)I*A&Knpsz6+|4c#k;@-V1VTZ}j)?G!dWQ z;9tQkOqAt9UT&-qeOQV4=1um@!A_s^rG5;a`yCONu)TThk7)3xKv?|JlrxlNecpD z&&vGb;^F>2l2&tYv6wK)tnpY%0!V*gwDjk#Ef1oQq@j@!@1-6s28Ir}e-LbYUlOE4 z-phSA6c)LJ#5lN7pa%v7boDwe_v!Li-J6@UZ*H04c=DvY+{Y2~?EwZzV$V|0oer&v zb8spq!-3W86QlP-uyKoG50i^=c0W&*DQM}drt?D_NOmWs)&U_$u$ zi3J5=7#f;z(+YSh-=qe)R8f)l>C=nd`Cw3zE9_%bsQ}ahWWKmMFGF^AIPmb?_(Yxb z^{=C7rJ!BW&`iVp7@05gIsPL$R2Z)GI@Sa4dUsxG=}nLaWN^YO?2S{?9#+`yLr{zi zSM5Bx)_qsy`Ey|b0Rj_|ce|^qyMU-KF5RGc3VEOCNVb`OyyKr!TUxsIyI?YwITP&A zu&}TO?^7B+AuI$&g`eZpMuutcjvtX4ODqp zY<@q^!!lfhgMv^|Q2|r7w9EkM1FR1!0$h9OUl7Odo z-z?il3TD;W(GmRS{tL_N;Ah!`?m_^-&QpHM&=G`m%%7i~)e~!+-EV~aTvOBZ^z@So zd2?RR?tjmfG&O0huBV)g2IlA^d=!~1Jmo*uQgeYQY!u;b(0x^f#?f&0{os) z!7Cx+aKHX2#lXPet?jb6cO`=&1v1k+3zq>CaHfcXkZ``Wbz$re5e7y;`aCp$Y^SXe*D2U2|qR9OQ9{ONnQhy?|8K-QzocvvP&{XP

Gp@HDyP}T$eTBB0tacF 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 - Reads a ZIP or TAR archive and everything in it without unpacking anything, and says whether unpacking it could write - outside its folder, overwrite a file or fill the disk. + Reads a ZIP, TAR, TAR.GZ or gzip file and everything in it without unpacking anything, and says whether unpacking it + could write outside its folder, overwrite a file or fill the disk. diff --git a/internal/guard/testdata/screens/tools.png b/internal/guard/testdata/screens/tools.png index d3274b8fecacd06f427b9b0bd7a76509f40bbd71..2b6bd46e682ac6c21e88c82e1ea4c0b8c839e45d 100644 GIT binary patch delta 50651 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

    e00TqkE*_Zq|Jh0zW3f%c!Qf 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 delta 49144 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 D;t7m# diff --git a/internal/guard/testdata/screens/tools.xml b/internal/guard/testdata/screens/tools.xml index b10da6ad..2687311e 100644 --- a/internal/guard/testdata/screens/tools.xml +++ b/internal/guard/testdata/screens/tools.xml @@ -120,8 +120,8 @@ - Reads a ZIP or TAR archive and everything in it without unpacking anything, and says whether unpacking it could write - outside its folder, overwrite a file or fill the disk. + Reads a ZIP, TAR, TAR.GZ or gzip file and everything in it without unpacking anything, and says whether unpacking it + could write outside its folder, overwrite a file or fill the disk. diff --git a/internal/gui/text/locale/registry/en.json b/internal/gui/text/locale/registry/en.json index 7aa79170..9547f5f0 100644 --- a/internal/gui/text/locale/registry/en.json +++ b/internal/gui/text/locale/registry/en.json @@ -2141,8 +2141,8 @@ }, "Input.archive-scan.archive": { "description": "The sentence under the archive box of the archive-scan tool.", - "hash": "sha256-c362fd635273", - "other": "The archive to look into: ZIP (DOCX, XLSX and JAR are ZIP inside), TAR or TAR.GZ. It is only read." + "hash": "sha256-4ad898a798a7", + "other": "The archive to look into: ZIP (DOCX, XLSX and JAR are ZIP inside), TAR, TAR.GZ or gzip. It is only read." }, "Input.checksum-check.checksum_file": { "description": "The sentence under the checksum_file box of the checksum-check tool.", @@ -2881,8 +2881,8 @@ }, "Tool.archive-scan.Detail": { "description": "One sentence under the question of the archive-scan tool, saying what it does.", - "hash": "sha256-eb1cf4210b4a", - "other": "Reads a ZIP or TAR archive and everything in it without unpacking anything, and says whether unpacking it could write outside its folder, overwrite a file or fill the disk." + "hash": "sha256-526e67a2b432", + "other": "Reads a ZIP, TAR, TAR.GZ or gzip file and everything in it without unpacking anything, and says whether unpacking it could write outside its folder, overwrite a file or fill the disk." }, "Tool.archive-scan.Note.bomb": { "description": "A line of the result of the archive-scan tool, ending in a colon - what follows it is a list of names or one number.", diff --git a/internal/gui/text/locale/registry/pl.json b/internal/gui/text/locale/registry/pl.json index 3540a848..eb8f02c7 100644 --- a/internal/gui/text/locale/registry/pl.json +++ b/internal/gui/text/locale/registry/pl.json @@ -427,7 +427,7 @@ "Group.format/html.Pictures in the page": { "hash": "sha256-af608b8ed33a", "other": "Obrazki w stronie" }, "Group.format/pdf.Document properties": { "hash": "sha256-7115a778ab47", "other": "Właściwości dokumentu" }, "Group.format/rtf.Pictures in the document": { "hash": "sha256-1652b4354ef8", "other": "Obrazki w dokumencie" }, - "Input.archive-scan.archive": { "hash": "sha256-c362fd635273", "other": "Archiwum do sprawdzenia: ZIP (DOCX, XLSX i JAR to w środku ZIP), TAR albo TAR.GZ. Jest tylko czytane." }, + "Input.archive-scan.archive": { "hash": "sha256-4ad898a798a7", "other": "Archiwum do sprawdzenia: ZIP (DOCX, XLSX i JAR to w środku ZIP), TAR, TAR.GZ albo gzip. Jest tylko czytane." }, "Input.checksum-check.checksum_file": { "hash": "sha256-90d7baf0d228", "other": "Plik sum kontrolnych. Ścieżki w nim są czytane z folderu, w którym leży, i nic nie jest zapisywane." }, "Input.checksum-write.folder": { "hash": "sha256-3040f185111b", "other": "Folder do spisania. Każdy plik w nim jest czytany, a plik sum kontrolnych jest zapisywany do niego." }, "Input.checksum.file": { "hash": "sha256-a87fb4cce79e", "other": "Plik, którego sumy kontrolne mają zostać policzone. Jest tylko czytany." }, @@ -575,7 +575,7 @@ "Title.upload-validation": { "hash": "sha256-ba4463cda83e", "other": "Walidacja uploadu" }, "Tool.archive-scan.Conclusion.safe": { "hash": "sha256-e08326f1d03f", "other": "Można bezpiecznie rozpakować: nie ma w nim żadnej z pułapek, których szuka to narzędzie." }, "Tool.archive-scan.Conclusion.unsafe": { "hash": "sha256-39cb8195e90a", "other": "Nie można bezpiecznie rozpakować: powody są w liniach powyżej." }, - "Tool.archive-scan.Detail": { "hash": "sha256-eb1cf4210b4a", "other": "Czyta archiwum ZIP albo TAR i wszystko, co w nim jest, niczego nie rozpakowując, i mówi, czy rozpakowanie może zapisać coś poza jego folderem, nadpisać plik albo zapełnić dysk." }, + "Tool.archive-scan.Detail": { "hash": "sha256-526e67a2b432", "other": "Czyta plik ZIP, TAR, TAR.GZ albo gzip i wszystko, co w nim jest, niczego nie rozpakowując, i mówi, czy rozpakowanie może zapisać coś poza jego folderem, nadpisać plik albo zapełnić dysk." }, "Tool.archive-scan.Note.bomb": { "hash": "sha256-ad7c0631bd1c", "other": "Rozpakowuje się do wielokrotności własnego rozmiaru, jak archiwum zbudowane, żeby eksplodować:" }, "Tool.archive-scan.Note.collides": { "hash": "sha256-d5cea6f318c4", "other": "Wpisy, które na Windows albo macOS trafiają do tego samego pliku co inny:" }, "Tool.archive-scan.Note.damaged": { "hash": "sha256-6faaa2b49d18", "other": "Uszkodzone, więc programy rozpakowujące mogą różnie odczytać, co zawiera:" }, diff --git a/internal/gui/text/locale/said/en.json b/internal/gui/text/locale/said/en.json index 19371199..8721d2e4 100644 --- a/internal/gui/text/locale/said/en.json +++ b/internal/gui/text/locale/said/en.json @@ -104,6 +104,11 @@ "hash": "sha256-13b3c18bff10", "other": "{{.Name}}: {{.Why}}" }, + "archivescan.Global": { + "description": "Said by internal/tool/archivescan - a refusal under the box it is about or at the foot of the form, or a note after a run. Carries {{.Key}}, written the way the program writes them - keep each spelled exactly that way.", + "hash": "sha256-2464a8a64571", + "other": "a header sets {{.Key}} for every entry after it, which this tool does not follow" + }, "archivescan.GzipHeader": { "description": "Said by internal/tool/archivescan - a refusal under the box it is about or at the foot of the form, or a note after a run.", "hash": "sha256-7a245481ab58", @@ -121,8 +126,8 @@ }, "archivescan.IsNotAnArchive": { "description": "Said by internal/tool/archivescan - a refusal under the box it is about or at the foot of the form, or a note after a run. Carries {{.Path}}, written the way the program writes them - keep each spelled exactly that way.", - "hash": "sha256-852351e5de82", - "other": "{{.Path}} is not a ZIP, TAR or gzip archive" + "hash": "sha256-4ab90d477d74", + "other": "{{.Path}} is not a ZIP, TAR, TAR.GZ or gzip file" }, "archivescan.ItDoesNotBegin": { "description": "Said by internal/tool/archivescan - a refusal under the box it is about or at the foot of the form, or a note after a run.", @@ -166,8 +171,8 @@ }, "archivescan.NameAZipOrTar": { "description": "Said by internal/tool/archivescan - a refusal under the box it is about or at the foot of the form, or a note after a run.", - "hash": "sha256-6b8df2e3f117", - "other": "name a ZIP, TAR or TAR.GZ file" + "hash": "sha256-17713db18b11", + "other": "name a ZIP, TAR, TAR.GZ or gzip file" }, "archivescan.NameOneArchive": { "description": "Said by internal/tool/archivescan - a refusal under the box it is about or at the foot of the form, or a note after a run.", diff --git a/internal/gui/text/locale/said/pl.json b/internal/gui/text/locale/said/pl.json index 44e7a9c2..01fc9836 100644 --- a/internal/gui/text/locale/said/pl.json +++ b/internal/gui/text/locale/said/pl.json @@ -20,10 +20,11 @@ "archivescan.Encrypted": { "hash": "sha256-f93c3b3dbeb0", "other": "jest zaszyfrowany" }, "archivescan.EndsEarly": { "hash": "sha256-d7126b8d60eb", "other": "jego zawartość kończy się przed rozmiarem podanym w spisie" }, "archivescan.EntryWhy": { "hash": "sha256-13b3c18bff10", "other": "{{.Name}}: {{.Why}}" }, + "archivescan.Global": { "hash": "sha256-2464a8a64571", "other": "nagłówek ustawia {{.Key}} każdemu następnemu wpisowi, czego to narzędzie nie uwzględnia" }, "archivescan.GzipHeader": { "hash": "sha256-7a245481ab58", "other": "jego nagłówek gzip jest uszkodzony" }, "archivescan.IsADirectory": { "hash": "sha256-99f387f3e133", "other": "{{.Path}} to katalog, a to narzędzie sprawdza jedno archiwum" }, "archivescan.IsNotAFile": { "hash": "sha256-28957d41213f", "other": "{{.Path}} nie jest plikiem, tylko urządzeniem, potokiem albo gniazdem" }, - "archivescan.IsNotAnArchive": { "hash": "sha256-852351e5de82", "other": "{{.Path}} nie jest archiwum ZIP, TAR ani gzip" }, + "archivescan.IsNotAnArchive": { "hash": "sha256-4ab90d477d74", "other": "{{.Path}} nie jest plikiem ZIP, TAR, TAR.GZ ani gzip" }, "archivescan.ItDoesNotBegin": { "hash": "sha256-fc6fa1f8683f", "other": "nie zaczyna się tak jak żadne z nich, a o tym, czym jest plik, nie decyduje jego nazwa" }, "archivescan.ItsOwnFormat": { "hash": "sha256-13b59184ca3a", "other": "jego spis zawartości jest zapisany we własnym formacie" }, "archivescan.Link": { "hash": "sha256-f259a6b86f03", "other": "{{.Name}} -> {{.Target}}" }, @@ -32,7 +33,7 @@ "archivescan.ListHoldsOther": { "hash": "sha256-294d9d38d2bf", "other": "jego spis zawartości zawiera coś, co nie jest wpisem" }, "archivescan.Method": { "hash": "sha256-909cb4c9c048", "other": "jest spakowany metodą {{.Method}}, której to narzędzie nie czyta" }, "archivescan.Name": { "hash": "sha256-1a0545a47535", "other": "{{.Name}}" }, - "archivescan.NameAZipOrTar": { "hash": "sha256-6b8df2e3f117", "other": "wskaż plik ZIP, TAR albo TAR.GZ" }, + "archivescan.NameAZipOrTar": { "hash": "sha256-17713db18b11", "other": "wskaż plik ZIP, TAR, TAR.GZ albo gzip" }, "archivescan.NameOneArchive": { "hash": "sha256-b3119045be6e", "other": "wskaż jeden plik archiwum" }, "archivescan.NoEnd": { "hash": "sha256-638b1e0460e7", "other": "brakuje rekordu na jego końcu, który mówi, gdzie jest spis zawartości" }, "archivescan.NotReadYet": { "hash": "sha256-bfe67470dde3", "other": "{{.Path}} to archiwum {{.Kind}}, którego to narzędzie jeszcze nie czyta" }, diff --git a/internal/tool/archivescan/archivescan.go b/internal/tool/archivescan/archivescan.go index c20016fa..78b1c3a4 100644 --- a/internal/tool/archivescan/archivescan.go +++ b/internal/tool/archivescan/archivescan.go @@ -65,11 +65,11 @@ func init() { tool.Register(tool.Descriptor{ ID: ID, Question: "Is this archive safe to unpack?", - Detail: "Reads a ZIP or TAR archive and everything in it without unpacking anything, " + + Detail: "Reads a ZIP, TAR, TAR.GZ or gzip file and everything in it without unpacking anything, " + "and says whether unpacking it could write outside its folder, overwrite a file or fill the disk.", Inputs: []tool.Input{{ Name: InputArchive, Kind: tool.File, - Detail: "The archive to look into: ZIP (DOCX, XLSX and JAR are ZIP inside), TAR or TAR.GZ. It is only read.", + Detail: "The archive to look into: ZIP (DOCX, XLSX and JAR are ZIP inside), TAR, TAR.GZ or gzip. It is only read.", }}, Settings: []format.Property{{ Name: SettingLimit, Kind: format.PropertySize, diff --git a/internal/tool/archivescan/findings.go b/internal/tool/archivescan/findings.go index 9b2db70b..1a42d59b 100644 --- a/internal/tool/archivescan/findings.go +++ b/internal/tool/archivescan/findings.go @@ -72,16 +72,6 @@ func declaredNotes() []tool.Note { return out } -// harmless says whether a note leaves an archive safe to unpack. -func harmless(id string) bool { - for _, d := range declared { - if d.ID == id { - return d.harmless - } - } - return false -} - // found is one thing a scan found: the entry it is about, as data, and the // words for it when the entry alone does not say it. type found struct { @@ -122,12 +112,15 @@ type scan struct { exploded bool found map[string][]found + // buf is what every entry's contents are read into, one for the scan. + buf []byte } func newScan(ctx context.Context, path string, size, limit int64, progress tool.Progress) *scan { return &scan{ ctx: ctx, path: path, size: size, limit: limit, progress: progress, names: newBook(), nameRoom: MostNameBytes, found: map[string][]found{}, + buf: make([]byte, 64<<10), } } diff --git a/internal/tool/archivescan/refusals.go b/internal/tool/archivescan/refusals.go index fcf9e2bc..bb5c9024 100644 --- a/internal/tool/archivescan/refusals.go +++ b/internal/tool/archivescan/refusals.go @@ -55,7 +55,7 @@ type NotAnArchiveError struct { func (e *NotAnArchiveError) AboutSetting() string { return InputArchive } func (e *NotAnArchiveError) what() core.Said { - return core.Says("archivescan.IsNotAnArchive", "%s is not a ZIP, TAR or gzip archive", core.A("Path", e.Path)) + return core.Says("archivescan.IsNotAnArchive", "%s is not a ZIP, TAR, TAR.GZ or gzip file", core.A("Path", e.Path)) } func (e *NotAnArchiveError) why() core.Said { @@ -63,7 +63,7 @@ func (e *NotAnArchiveError) why() core.Said { } func (e *NotAnArchiveError) instead() core.Said { - return core.Says("archivescan.NameAZipOrTar", "name a ZIP, TAR or TAR.GZ file") + return core.Says("archivescan.NameAZipOrTar", "name a ZIP, TAR, TAR.GZ or gzip file") } func (e *NotAnArchiveError) Error() string { return e.Said().String() } diff --git a/internal/tool/archivescan/tar.go b/internal/tool/archivescan/tar.go index 44da23c9..0f97deee 100644 --- a/internal/tool/archivescan/tar.go +++ b/internal/tool/archivescan/tar.go @@ -74,7 +74,7 @@ func (st stream) gzipped(in io.Reader, head []byte) error { } // What follows the end of the TAR, which a TAR program never reads and // gunzip writes all the same. - _, _, err := drain(st.ctx, in, ^uint64(0), nil, nil) + _, _, err := drain(st.ctx, st.buf, in, ^uint64(0), nil, nil) return st.ended(err, "") } @@ -82,7 +82,7 @@ func (st stream) gzipped(in io.Reader, head []byte) error { // names what it unpacks after the archive, not after the name inside. func (st stream) one(in io.Reader) error { st.scan.entries = 1 - _, head, err := drain(st.ctx, in, ^uint64(0), nil, st.unpacking) + _, head, err := drain(st.ctx, st.buf, in, ^uint64(0), nil, st.unpacking) if err := st.ended(err, ""); err != nil || st.stopped { return err } @@ -100,6 +100,10 @@ func (st stream) walk(r io.Reader) error { if err != nil || h == nil { return err } + if h.Typeflag == tar.TypeXGlobalHeader { + st.global(h) + continue + } if !st.entry(h.Name, h.Typeflag == tar.TypeDir) { return nil } @@ -107,7 +111,7 @@ func (st stream) walk(r io.Reader) error { if h.Size <= 0 { continue } - _, head, err := drain(st.ctx, tr, uint64(h.Size), nil, st.unpacking) + _, head, err := drain(st.ctx, st.buf, tr, uint64(h.Size), nil, st.unpacking) if err := st.ended(err, h.Name); err != nil { return err } @@ -154,11 +158,38 @@ func (st stream) kindOf(h *tar.Header) { st.special(h.Name, core.Says("archivescan.Type", "it is an entry of type %q, which most programs do not unpack", core.A("Type", string(h.Typeflag)))) return } - if h.Mode&(modeSetUser|modeSetGroup) != 0 { + if h.Typeflag != tar.TypeDir && h.Mode&(modeSetUser|modeSetGroup) != 0 { st.special(h.Name, core.Says("archivescan.Rights", "it runs with the rights of its owner")) } } +// global looks at a PAX global header, which is not an entry: it gives values +// to every entry after it, and git archive writes one at the front of every +// TAR to hold the commit, as a comment. One setting anything that changes what +// an entry is - its name, its link, its size - changes entries in a way this +// tool does not follow, and is noted. Not under its name: archive/tar hands +// the header back named by the path it sets. +func (st stream) global(h *tar.Header) { + first := "" + for key := range h.PAXRecords { + if !globalHarmless[key] && (first == "" || key < first) { + first = key + } + } + if first != "" { + st.noteSaid(noteSpecial, "", core.Says("archivescan.Global", "a header sets %s for every entry after it, which this tool does not follow", + core.A("Key", core.Shown(first)))) + } +} + +// globalHarmless are the values a PAX global header may give the entries +// after it and leave what they are alone: words, times and owners. +var globalHarmless = map[string]bool{ + "comment": true, "charset": true, "hdrcharset": true, + "atime": true, "mtime": true, "ctime": true, + "uid": true, "gid": true, "uname": true, "gname": true, +} + // unpacking is told every piece of contents read from a stream, and says // whether to go on: not once what it unpacks to is an archive built to explode. // Contents and not only a gzip layer, because a sparse entry in a bare TAR @@ -233,12 +264,16 @@ func failedToRead(err error) bool { } // The mode bits that make a program run with the rights of its owner or its -// group, in the octal a Unix mode is written in. +// group, in the octal a Unix mode is written in. On a folder they say whose +// the files made in it are, and run nothing. const ( modeSetUser = 0o4000 modeSetGroup = 0o2000 ) +// modeFolder is the type a Unix mode gives a folder. +const modeFolder = 0x4000 + // kindOfMode is what a Unix mode says an entry is besides a file or a folder: // a link, or the words for something else. Nothing for a plain file or folder. func kindOfMode(mode uint32) (core.Said, bool) { @@ -252,7 +287,7 @@ func kindOfMode(mode uint32) (core.Said, bool) { case 0xC000: return core.Says("archivescan.Socket", "it is a socket"), false } - if mode&(modeSetUser|modeSetGroup) != 0 { + if mode&0xF000 != modeFolder && mode&(modeSetUser|modeSetGroup) != 0 { return core.Says("archivescan.Rights", "it runs with the rights of its owner"), false } return core.Said{}, false @@ -274,9 +309,9 @@ const keepHead = 4096 // drain reads r through sum, when there is one, until it ends or one byte past // most - an entry holding more than it was said to is found without reading // the rest of it - and hands back how much it read and the first bytes. After -// every piece it asks more, when there is one, whether to go on. -func drain(ctx context.Context, r io.Reader, most uint64, sum io.Writer, more func(int) bool) (uint64, string, error) { - buf := make([]byte, 64<<10) +// every piece it asks more, when there is one, whether to go on. It reads +// into buf, one for the whole scan: an archive can hold a million entries. +func drain(ctx context.Context, buf []byte, r io.Reader, most uint64, sum io.Writer, more func(int) bool) (uint64, string, error) { var got uint64 var head []byte for { diff --git a/internal/tool/archivescan/zip.go b/internal/tool/archivescan/zip.go index 064aee30..51a722a9 100644 --- a/internal/tool/archivescan/zip.go +++ b/internal/tool/archivescan/zip.go @@ -36,6 +36,9 @@ type zipScan struct { // open is an archive whose contents are read: not one already found // built to explode, which is what reading them would do. open bool + // inflate unpacks every deflated entry, one for the archive: a new one + // holds tens of kilobytes, and an archive can hold a million entries. + inflate io.ReadCloser } // zip reads a ZIP archive. @@ -224,10 +227,10 @@ func (z *zipScan) read(e zipEntry, at uint64) (string, error) { } var src io.Reader = &counting{r: io.NewSectionReader(z.r, int64(at), int64(e.packed)), s: z.scan} if e.method == methodDeflated { - src = flate.NewReader(src) + src = z.inflated(src) } sum := crc32.NewIEEE() - got, head, err := drain(z.ctx, src, e.unpacked, sum, nil) + got, head, err := drain(z.ctx, z.buf, src, e.unpacked, sum, nil) var corrupt flate.CorruptInputError switch { case z.ctx.Err() != nil: @@ -244,6 +247,18 @@ func (z *zipScan) read(e zipEntry, at uint64) (string, error) { return head, nil } +// inflated is what deflated contents unpack to, through the archive's one +// reader of deflate. Its Reset starts it over on new contents and keeps its +// buffers, and never fails (compress/flate). +func (z *zipScan) inflated(src io.Reader) io.Reader { + if z.inflate == nil { + z.inflate = flate.NewReader(src) + return z.inflate + } + _ = z.inflate.(flate.Resetter).Reset(src, nil) + return z.inflate +} + // each reads the list of contents one record at a time and hands each to see, // until the list ends or see says to stop. A list that ends in the middle of a // record, or holds something that is not one, is noted as damage on the first